From bfb9e8addbec25247d1b6964f0a2c16a80b74c20 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Fri, 24 Oct 2025 12:44:26 +0400 Subject: [PATCH] Move modal events --- packages/core/src/modal_dialog/index.ts | 25 ++++++++++++----------- packages/core/src/modal_dialog/types.ts | 27 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 packages/core/src/modal_dialog/types.ts diff --git a/packages/core/src/modal_dialog/index.ts b/packages/core/src/modal_dialog/index.ts index 36670c5c8..aad40aee7 100644 --- a/packages/core/src/modal_dialog/index.ts +++ b/packages/core/src/modal_dialog/index.ts @@ -14,10 +14,7 @@ * const modal = editor.Modal; * ``` * - * ## Available Events - * * `modal:open` - Modal is opened - * * `modal:close` - Modal is closed - * * `modal` - Event triggered on any change related to the modal. An object containing all the available data about the triggered event is passed as an argument to the callback. + * {REPLACE_EVENTS} * * ## Methods * * [open](#open) @@ -35,18 +32,20 @@ import { debounce, isFunction, isString } from 'underscore'; import { Module } from '../abstract'; -import EditorView from '../editor/view/EditorView'; +import { EventHandler } from '../common'; import EditorModel from '../editor/model/Editor'; +import EditorView from '../editor/view/EditorView'; import { createText } from '../utils/dom'; import defConfig, { ModalConfig } from './config/config'; import ModalM from './model/Modal'; +import { ModalEvents } from './types'; import ModalView from './view/ModalView'; -import { EventHandler } from '../common'; -export type ModalEvent = 'modal:open' | 'modal:close' | 'modal'; +export type ModalEvent = `${ModalEvents}`; export default class ModalModule extends Module { modal?: ModalView; + events = ModalEvents; /** * Initialize module. Automatically called with a new instance of the editor @@ -55,10 +54,10 @@ export default class ModalModule extends Module { */ constructor(em: EditorModel) { super(em, 'Modal', defConfig()); - + const { events } = this; this.model = new ModalM(this); this.model.on('change:open', (m: ModalM, enable: boolean) => { - em.trigger(`modal:${enable ? 'open' : 'close'}`); + em.trigger(enable ? events.open : events.close); }); this.model.on( 'change', @@ -67,7 +66,7 @@ export default class ModalModule extends Module { const { custom } = this.config; //@ts-ignore isFunction(custom) && custom(data); - em.trigger('modal', data); + em.trigger(events.all, data); }, 0), ); @@ -142,7 +141,8 @@ export default class ModalModule extends Module { * }); */ onceClose(clb: EventHandler) { - this.em.once('modal:close', clb); + const { em, events } = this; + em.once(events.close, clb); return this; } @@ -157,7 +157,8 @@ export default class ModalModule extends Module { * }); */ onceOpen(clb: EventHandler) { - this.em.once('modal:open', clb); + const { em, events } = this; + em.once(events.open, clb); return this; } diff --git a/packages/core/src/modal_dialog/types.ts b/packages/core/src/modal_dialog/types.ts new file mode 100644 index 000000000..eda97a0e9 --- /dev/null +++ b/packages/core/src/modal_dialog/types.ts @@ -0,0 +1,27 @@ +/**{START_EVENTS}*/ +export enum ModalEvents { + /** + * @event `modal:open` Modal is opened + * @example + * editor.on('modal:open', () => { ... }); + */ + open = 'modal:open', + + /** + * @event `modal:close` Modal is closed + * @example + * editor.on('modal:close', () => { ... }); + */ + close = 'modal:close', + + /** + * @event `modal` Event triggered on any change related to the modal. An object containing all the available data about the triggered event is passed as an argument to the callback. + * @example + * editor.on('modal', ({ open, title, content, ... }) => { ... }); + */ + all = 'modal', +} +/**{END_EVENTS}*/ + +// need this to avoid the TS documentation generator to break +export default ModalEvents;