From b1f0eba2883109db77df209864b337980e42e66e Mon Sep 17 00:00:00 2001 From: "Xc@centOs" Date: Fri, 8 Dec 2023 11:58:56 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=E4=BA=86dataSubscribe?= =?UTF-8?q?=E7=9A=84=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- es/checkers/index.d.ts | 2 +- .../config/style/platform/index.d.ts | 2 +- es/components/config/upsert/index.d.ts | 2 +- es/components/extraFile/commit/index.d.ts | 6 ++-- es/components/session/list/index.d.ts | 1 + es/components/session/list/index.js | 30 ++++++++++------ es/components/sessionMessage/list/index.js | 14 ++------ es/components/wechatLogin/qrCode/index.d.ts | 2 +- es/triggers/index.d.ts | 2 +- es/triggers/session.d.ts | 1 + es/triggers/session.js | 18 ++++++++++ es/triggers/sessionMessage.js | 17 ++++++++- lib/data/area.js | 2 +- lib/features/weiXinJsSdk.js | 2 +- lib/triggers/session.d.ts | 1 + lib/triggers/session.js | 20 +++++++++++ lib/triggers/sessionMessage.js | 17 ++++++++- src/components/session/list/index.ts | 32 +++++++++++------ src/components/sessionMessage/list/index.ts | 18 ++-------- src/data/area.ts | 2 +- src/features/weiXinJsSdk.ts | 2 +- src/triggers/session.ts | 36 +++++++++++++++++++ src/triggers/sessionMessage.ts | 21 ++++++++++- 23 files changed, 187 insertions(+), 63 deletions(-) create mode 100644 es/triggers/session.d.ts create mode 100644 es/triggers/session.js create mode 100644 lib/triggers/session.d.ts create mode 100644 lib/triggers/session.js create mode 100644 src/triggers/session.ts diff --git a/es/checkers/index.d.ts b/es/checkers/index.d.ts index 46b6c8266..1c141fe16 100644 --- a/es/checkers/index.d.ts +++ b/es/checkers/index.d.ts @@ -1,2 +1,2 @@ -declare const checkers: (import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker)[]; +declare const checkers: (import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker | import("oak-domain").Checker)[]; export default checkers; diff --git a/es/components/config/style/platform/index.d.ts b/es/components/config/style/platform/index.d.ts index bd3579c54..0017a6f93 100644 --- a/es/components/config/style/platform/index.d.ts +++ b/es/components/config/style/platform/index.d.ts @@ -1,7 +1,7 @@ import { Style } from '../../../../types/Style'; declare const _default: (props: import("oak-frontend-base").ReactComponentProps) => import("react").ReactElement>; diff --git a/es/components/config/upsert/index.d.ts b/es/components/config/upsert/index.d.ts index 6a8e95a3d..26655e31f 100644 --- a/es/components/config/upsert/index.d.ts +++ b/es/components/config/upsert/index.d.ts @@ -1,7 +1,7 @@ import { Config } from '../../../types/Config'; declare const _default: (props: import("oak-frontend-base").ReactComponentProps) => import("react").ReactElement>; diff --git a/es/components/extraFile/commit/index.d.ts b/es/components/extraFile/commit/index.d.ts index 31ef8a2fb..6ae0fa0ba 100644 --- a/es/components/extraFile/commit/index.d.ts +++ b/es/components/extraFile/commit/index.d.ts @@ -12,9 +12,9 @@ declare const _default: & import("react").ButtonHTMLAttributes, "id" | "onMouseUp" | "onMouseDown" | "onTouchStart" | "onTouchEnd"> & { + } & Pick & import("react").ButtonHTMLAttributes, "id" | "onMouseDown" | "onMouseUp" | "onTouchStart" | "onTouchEnd"> & { className?: string | undefined; style?: (import("react").CSSProperties & Partial>) | undefined; tabIndex?: number | undefined; diff --git a/es/components/session/list/index.d.ts b/es/components/session/list/index.d.ts index 54cdda60b..34abdc829 100644 --- a/es/components/session/list/index.d.ts +++ b/es/components/session/list/index.d.ts @@ -3,6 +3,7 @@ import { RowWithActions } from 'oak-frontend-base'; declare const _default: (props: import("oak-frontend-base").ReactComponentProps[]) => any[]; entityProjection: any; sessionId: string; diff --git a/es/components/session/list/index.js b/es/components/session/list/index.js index d7cd867fe..690781f28 100644 --- a/es/components/session/list/index.js +++ b/es/components/session/list/index.js @@ -1,4 +1,5 @@ import { DATA_SUBSCRIBER_KEYS } from '../../../config/constants'; +import assert from 'assert'; export default OakComponent({ entity: 'session', projection() { @@ -108,18 +109,26 @@ export default OakComponent({ } }, async ready() { - const { entityFilter } = this.props; - const userId = this.features.token.getUserId(); - await this.subData([ - { - entity: 'session', - filter: entityFilter ? { ...entityFilter } : { userId }, - id: `${DATA_SUBSCRIBER_KEYS.sessionList}`, - }, - ]); + const { entityFilter, entityFilterSubStr } = this.props; + if (entityFilter) { + assert(entityFilterSubStr); + this.subDataEvents([entityFilterSubStr]); + } + else { + const userId = this.features.token.getUserId(); + this.subDataEvents([`${DATA_SUBSCRIBER_KEYS.sessionList}-u-${userId}`]); + } }, detached() { - this.unSubData([`${DATA_SUBSCRIBER_KEYS.sessionList}`]); + const { entityFilter, entityFilterSubStr } = this.props; + if (entityFilter) { + assert(entityFilterSubStr); + this.unsubDataEvents([entityFilterSubStr]); + } + else { + const userId = this.features.token.getUserId(); + this.unsubDataEvents([`${DATA_SUBSCRIBER_KEYS.sessionList}-u-${userId}`]); + } }, }, data: { @@ -129,6 +138,7 @@ export default OakComponent({ properties: { entity: '', entityFilter: null, + entityFilterSubStr: '', entityDisplay: (data) => [], entityProjection: null, sessionId: '', diff --git a/es/components/sessionMessage/list/index.js b/es/components/sessionMessage/list/index.js index 0733538fb..30eb05a3f 100644 --- a/es/components/sessionMessage/list/index.js +++ b/es/components/sessionMessage/list/index.js @@ -48,23 +48,13 @@ export default OakComponent({ lifetimes: { async ready() { const { sessionId } = this.props; - this.subData([ - { - entity: 'sessionMessage', - filter: { - sessionId: sessionId, - }, - id: `${DATA_SUBSCRIBER_KEYS.sessionMessageList}-${sessionId}`, - }, - ], async () => { - await this.pageScroll('comment'); - }); + this.subDataEvents([`${DATA_SUBSCRIBER_KEYS.sessionMessageList}-${sessionId}`]); this.createItem(); this.getSessionInfo(); }, detached() { const { sessionId } = this.props; - this.unSubData([ + this.unsubDataEvents([ `${DATA_SUBSCRIBER_KEYS.sessionMessageList}-${sessionId}`, ]); }, diff --git a/es/components/wechatLogin/qrCode/index.d.ts b/es/components/wechatLogin/qrCode/index.d.ts index 8a45a21cf..69727bd4d 100644 --- a/es/components/wechatLogin/qrCode/index.d.ts +++ b/es/components/wechatLogin/qrCode/index.d.ts @@ -1,6 +1,6 @@ import { EntityDict } from '../../../oak-app-domain'; declare const _default: (props: import("oak-frontend-base").ReactComponentProps) => import("react").ReactElement>; export default _default; diff --git a/es/triggers/index.d.ts b/es/triggers/index.d.ts index 6fb3c0b29..0770eae70 100644 --- a/es/triggers/index.d.ts +++ b/es/triggers/index.d.ts @@ -1,2 +1,2 @@ -declare const _default: (import("oak-domain").Trigger | import("oak-domain").Trigger | import("oak-domain").Trigger | import("oak-domain").Trigger | import("oak-domain").Trigger | import("oak-domain").Trigger> | import("oak-domain").Trigger | import("oak-domain").Trigger | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger>)[]; +declare const _default: (import("oak-domain").Trigger> | import("oak-domain").Trigger | import("oak-domain").Trigger | import("oak-domain").Trigger | import("oak-domain").Trigger | import("oak-domain").Trigger | import("oak-domain").Trigger | import("oak-domain").Trigger> | import("oak-domain").Trigger | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger> | import("oak-domain").Trigger>)[]; export default _default; diff --git a/es/triggers/session.d.ts b/es/triggers/session.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/es/triggers/session.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/es/triggers/session.js b/es/triggers/session.js new file mode 100644 index 000000000..494bd1530 --- /dev/null +++ b/es/triggers/session.js @@ -0,0 +1,18 @@ +import { DATA_SUBSCRIBER_KEYS } from '../config/constants'; +import { assert } from 'oak-domain/lib/utils/assert'; +const triggers = [ + { + name: '当创建session时,通知订阅了sessionList变化的事件', + entity: 'session', + action: 'create', + when: 'before', + fn: async ({ operation }, context) => { + const { data, id } = operation; + assert(!(data instanceof Array)); + const { userId } = data; + assert(userId); + context.saveOperationToEvent(id, `${DATA_SUBSCRIBER_KEYS.sessionList}-u-${userId}`); + return 1; + } + } +]; diff --git a/es/triggers/sessionMessage.js b/es/triggers/sessionMessage.js index 8f25ea9fe..c80da8a26 100644 --- a/es/triggers/sessionMessage.js +++ b/es/triggers/sessionMessage.js @@ -2,9 +2,24 @@ import { generateNewIdAsync } from 'oak-domain/lib/utils/uuid'; import { assert } from 'oak-domain/lib/utils/assert'; import { WechatSDK, } from 'oak-external-sdk'; import { extraFileProjection } from '../types/Projection'; +import { DATA_SUBSCRIBER_KEYS } from '../config/constants'; const triggers = [ { - name: '当sessionMessage创建时时,使其相关session更新lmts', + name: '当sessionMessage创建时,发送消息到相应事件上', + entity: 'sessionMessage', + action: 'create', + when: 'before', + fn: async ({ operation }, context) => { + const { data, id } = operation; + assert(!(data instanceof Array)); + const { sessionId } = data; + assert(sessionId); + context.saveOperationToEvent(id, `${DATA_SUBSCRIBER_KEYS.sessionMessageList}-${sessionId}`); + return 1; + }, + }, + { + name: '当sessionMessage创建时,使其相关session更新lmts', entity: 'sessionMessage', action: 'create', when: 'after', diff --git a/lib/data/area.js b/lib/data/area.js index d7637b69b..5ef085768 100644 --- a/lib/data/area.js +++ b/lib/data/area.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); -console.log('走不到这里'); +console.log('走不到这里[data/area]'); const area_dev_1 = tslib_1.__importDefault(require("./area.dev")); exports.default = area_dev_1.default; diff --git a/lib/features/weiXinJsSdk.js b/lib/features/weiXinJsSdk.js index 45261f590..3bce0d006 100644 --- a/lib/features/weiXinJsSdk.js +++ b/lib/features/weiXinJsSdk.js @@ -1,5 +1,5 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); -console.warn('不应该跑到这里'); +console.warn('不应该跑到这里[features/weiXinJsSdk]'); tslib_1.__exportStar(require("./weiXinJsSdk.web"), exports); diff --git a/lib/triggers/session.d.ts b/lib/triggers/session.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/lib/triggers/session.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/lib/triggers/session.js b/lib/triggers/session.js new file mode 100644 index 000000000..d8d5c406e --- /dev/null +++ b/lib/triggers/session.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const constants_1 = require("../config/constants"); +const assert_1 = require("oak-domain/lib/utils/assert"); +const triggers = [ + { + name: '当创建session时,通知订阅了sessionList变化的事件', + entity: 'session', + action: 'create', + when: 'before', + fn: async ({ operation }, context) => { + const { data, id } = operation; + (0, assert_1.assert)(!(data instanceof Array)); + const { userId } = data; + (0, assert_1.assert)(userId); + context.saveOperationToEvent(id, `${constants_1.DATA_SUBSCRIBER_KEYS.sessionList}-u-${userId}`); + return 1; + } + } +]; diff --git a/lib/triggers/sessionMessage.js b/lib/triggers/sessionMessage.js index 34ed4deb7..8b0d20a28 100644 --- a/lib/triggers/sessionMessage.js +++ b/lib/triggers/sessionMessage.js @@ -4,9 +4,24 @@ const uuid_1 = require("oak-domain/lib/utils/uuid"); const assert_1 = require("oak-domain/lib/utils/assert"); const oak_external_sdk_1 = require("oak-external-sdk"); const Projection_1 = require("../types/Projection"); +const constants_1 = require("../config/constants"); const triggers = [ { - name: '当sessionMessage创建时时,使其相关session更新lmts', + name: '当sessionMessage创建时,发送消息到相应事件上', + entity: 'sessionMessage', + action: 'create', + when: 'before', + fn: async ({ operation }, context) => { + const { data, id } = operation; + (0, assert_1.assert)(!(data instanceof Array)); + const { sessionId } = data; + (0, assert_1.assert)(sessionId); + context.saveOperationToEvent(id, `${constants_1.DATA_SUBSCRIBER_KEYS.sessionMessageList}-${sessionId}`); + return 1; + }, + }, + { + name: '当sessionMessage创建时,使其相关session更新lmts', entity: 'sessionMessage', action: 'create', when: 'after', diff --git a/src/components/session/list/index.ts b/src/components/session/list/index.ts index bbfa57e3c..a96e9f2e8 100644 --- a/src/components/session/list/index.ts +++ b/src/components/session/list/index.ts @@ -1,6 +1,7 @@ import { DATA_SUBSCRIBER_KEYS } from '../../../config/constants'; import { EntityDict } from '../../../oak-app-domain'; import { RowWithActions } from 'oak-frontend-base'; +import assert from 'assert'; export default OakComponent({ entity: 'session', @@ -121,18 +122,28 @@ export default OakComponent({ } }, async ready() { - const { entityFilter } = this.props; - const userId = this.features.token.getUserId(); - await this.subData([ - { - entity: 'session', - filter: entityFilter ? { ...entityFilter } : { userId }, - id: `${DATA_SUBSCRIBER_KEYS.sessionList}`, - }, - ]); + const { entityFilter, entityFilterSubStr } = this.props; + + if (entityFilter) { + assert (entityFilterSubStr); + this.subDataEvents([entityFilterSubStr]); + } + else { + const userId = this.features.token.getUserId(); + this.subDataEvents([`${DATA_SUBSCRIBER_KEYS.sessionList}-u-${userId}`]); + } }, detached() { - this.unSubData([`${DATA_SUBSCRIBER_KEYS.sessionList}`]); + const { entityFilter, entityFilterSubStr } = this.props; + + if (entityFilter) { + assert (entityFilterSubStr); + this.unsubDataEvents([entityFilterSubStr]); + } + else { + const userId = this.features.token.getUserId(); + this.unsubDataEvents([`${DATA_SUBSCRIBER_KEYS.sessionList}-u-${userId}`]); + } }, }, data: { @@ -142,6 +153,7 @@ export default OakComponent({ properties: { entity: '' as string, // entity端,指示相应的entity entityFilter: null as any, // entity端,指示相应的entity查询条件 + entityFilterSubStr: '', entityDisplay: ( data: | EntityDict['session']['Schema'][] diff --git a/src/components/sessionMessage/list/index.ts b/src/components/sessionMessage/list/index.ts index a113b5932..5aefb1210 100644 --- a/src/components/sessionMessage/list/index.ts +++ b/src/components/sessionMessage/list/index.ts @@ -52,27 +52,13 @@ export default OakComponent({ async ready() { const { sessionId } = this.props; - this.subData( - [ - { - entity: 'sessionMessage', - filter: { - sessionId: sessionId, - }, - id: `${DATA_SUBSCRIBER_KEYS.sessionMessageList}-${sessionId}`, - }, - ], - async () => { - await this.pageScroll('comment'); - } - ); - + this.subDataEvents([`${DATA_SUBSCRIBER_KEYS.sessionMessageList}-${sessionId}`]); this.createItem(); this.getSessionInfo(); }, detached() { const { sessionId } = this.props; - this.unSubData([ + this.unsubDataEvents([ `${DATA_SUBSCRIBER_KEYS.sessionMessageList}-${sessionId}`, ]); }, diff --git a/src/data/area.ts b/src/data/area.ts index 19642b13e..9340da132 100644 --- a/src/data/area.ts +++ b/src/data/area.ts @@ -1,3 +1,3 @@ -console.log('走不到这里'); +console.log('走不到这里[data/area]'); import area from './area.dev' export default area; \ No newline at end of file diff --git a/src/features/weiXinJsSdk.ts b/src/features/weiXinJsSdk.ts index 6859a21a2..d13240a01 100644 --- a/src/features/weiXinJsSdk.ts +++ b/src/features/weiXinJsSdk.ts @@ -1,3 +1,3 @@ -console.warn('不应该跑到这里'); +console.warn('不应该跑到这里[features/weiXinJsSdk]'); export * from './weiXinJsSdk.web'; \ No newline at end of file diff --git a/src/triggers/session.ts b/src/triggers/session.ts new file mode 100644 index 000000000..88f838724 --- /dev/null +++ b/src/triggers/session.ts @@ -0,0 +1,36 @@ +import { generateNewIdAsync } from 'oak-domain/lib/utils/uuid'; +import { CreateTrigger, Trigger } from 'oak-domain/lib/types/Trigger'; +import { RuntimeCxt } from '../types/RuntimeCxt'; +import { EntityDict } from '../oak-app-domain/EntityDict'; +import { BackendRuntimeContext } from '../context/BackendRuntimeContext'; +import { DATA_SUBSCRIBER_KEYS } from '../config/constants'; +import { CreateOperationData as CreateSessionMessageData } from '../oak-app-domain/SessionMessage/Schema'; +import { assert } from 'oak-domain/lib/utils/assert'; +import { WechatMpConfig, WechatPublicConfig } from '../entities/Application'; +import { + WechatSDK, + WechatMpInstance, + WechatPublicInstance, +} from 'oak-external-sdk'; +import { extraFileProjection } from '../types/Projection' + +const triggers: Trigger< + EntityDict, + 'session', + BackendRuntimeContext +>[] = [ + { + name: '当创建session时,通知订阅了sessionList变化的事件', + entity: 'session', + action: 'create', + when: 'before', + fn: async ({ operation }, context) => { + const { data, id } = operation; + assert(!(data instanceof Array)); + const { userId } = data; + assert(userId); + context.saveOperationToEvent(id, `${DATA_SUBSCRIBER_KEYS.sessionList}-u-${userId}`); + return 1; + } + } as CreateTrigger> +] \ No newline at end of file diff --git a/src/triggers/sessionMessage.ts b/src/triggers/sessionMessage.ts index 5e522fb27..288259bc0 100644 --- a/src/triggers/sessionMessage.ts +++ b/src/triggers/sessionMessage.ts @@ -12,6 +12,7 @@ import { WechatPublicInstance, } from 'oak-external-sdk'; import { extraFileProjection } from '../types/Projection' +import { DATA_SUBSCRIBER_KEYS } from '../config/constants'; const triggers: Trigger< EntityDict, @@ -19,7 +20,25 @@ const triggers: Trigger< BackendRuntimeContext >[] = [ { - name: '当sessionMessage创建时时,使其相关session更新lmts', + name: '当sessionMessage创建时,发送消息到相应事件上', + entity: 'sessionMessage', + action: 'create', + when: 'before', + fn: async ({ operation }, context) => { + const { data, id } = operation; + assert(!(data instanceof Array)); + const { sessionId } = data; + assert(sessionId); + context.saveOperationToEvent(id, `${DATA_SUBSCRIBER_KEYS.sessionMessageList}-${sessionId}`); + return 1; + }, + } as CreateTrigger< + EntityDict, + 'sessionMessage', + BackendRuntimeContext + >, + { + name: '当sessionMessage创建时,使其相关session更新lmts', entity: 'sessionMessage', action: 'create', when: 'after',