From f7c1f1e716c855c3e8725cb5acd4ea124a841713 Mon Sep 17 00:00:00 2001 From: liujuping Date: Wed, 16 Aug 2023 11:34:56 +0800 Subject: [PATCH] feat(event): add event.prependListener api --- docs/docs/api/event.md | 13 +++++++++++++ packages/editor-core/src/event-bus.ts | 8 ++++++++ packages/shell/src/api/event.ts | 14 ++++++++++++++ packages/types/src/shell/api/event.ts | 7 +++++++ 4 files changed, 42 insertions(+) diff --git a/docs/docs/api/event.md b/docs/docs/api/event.md index 9e2bdf641..0919b41fd 100644 --- a/docs/docs/api/event.md +++ b/docs/docs/api/event.md @@ -25,6 +25,19 @@ on(event: string, listener: (...args: any[]) => void): IPublicTypeDisposable; ``` 相关类型:[IPublicTypeDisposable](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/disposable.ts) +### prependListener +监听事件,会在其他回调函数之前执行 + +```typescript +/** + * 监听事件,会在其他回调函数之前执行 + * @param event 事件名称 + * @param listener 事件回调 + */ +prependListener(event: string, listener: (...args: any[]) => void): IPublicTypeDisposable; +``` +相关类型:[IPublicTypeDisposable](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/disposable.ts) + ### off 取消监听事件 diff --git a/packages/editor-core/src/event-bus.ts b/packages/editor-core/src/event-bus.ts index 95f26f77e..ae9d28905 100644 --- a/packages/editor-core/src/event-bus.ts +++ b/packages/editor-core/src/event-bus.ts @@ -55,6 +55,14 @@ export class EventBus implements IEventBus { }; } + prependListener(event: string, listener: (...args: any[]) => void): () => void { + this.eventEmitter.prependListener(event, listener); + this.getLogger().debug(`${this.getMsgPrefix('prependListener')} ${event}`); + return () => { + this.off(event, listener); + }; + } + /** * 取消监听事件 * @param event 事件名称 diff --git a/packages/shell/src/api/event.ts b/packages/shell/src/api/event.ts index 0fb41966e..f2adca98c 100644 --- a/packages/shell/src/api/event.ts +++ b/packages/shell/src/api/event.ts @@ -36,6 +36,20 @@ export class Event implements IPublicApiEvent { } } + /** + * 监听事件,会在其他回调函数之前执行 + * @param event 事件名称 + * @param listener 事件回调 + */ + prependListener(event: string, listener: (...args: any[]) => void): IPublicTypeDisposable { + if (isPluginEventName(event)) { + return this[eventBusSymbol].prependListener(event, listener); + } else { + logger.warn(`fail to prependListener event ${event}, event should have a prefix like 'somePrefix:eventName'`); + return () => {}; + } + } + /** * 取消监听事件 * @param event 事件名称 diff --git a/packages/types/src/shell/api/event.ts b/packages/types/src/shell/api/event.ts index 02b8bc5b3..5b8c59e13 100644 --- a/packages/types/src/shell/api/event.ts +++ b/packages/types/src/shell/api/event.ts @@ -10,6 +10,13 @@ export interface IPublicApiEvent { */ on(event: string, listener: (...args: any[]) => void): IPublicTypeDisposable; + /** + * 监听事件,会在其他回调函数之前执行 + * add monitor to a event + * @param event 事件名称 + * @param listener 事件回调 + */ + prependListener(event: string, listener: (...args: any[]) => void): IPublicTypeDisposable; /** * 取消监听事件