From b10d18bff17426409940e5f68742555daf69544f Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Tue, 23 Apr 2024 19:40:50 +0400 Subject: [PATCH] Add `block:category:update` event --- src/abstract/ModuleCategories.ts | 20 ++++++++++++++++++++ src/block_manager/index.ts | 5 ++++- src/block_manager/types.ts | 7 +++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/abstract/ModuleCategories.ts b/src/abstract/ModuleCategories.ts index ce9e269f0..4aace304f 100644 --- a/src/abstract/ModuleCategories.ts +++ b/src/abstract/ModuleCategories.ts @@ -1,9 +1,29 @@ import { isArray, isString } from 'underscore'; import { AddOptions, Collection } from '../common'; import { normalizeKey } from '../utils/mixins'; +import EditorModel from '../editor/model/Editor'; import Category, { CategoryProperties } from './ModuleCategory'; +type CategoryCollectionParams = ConstructorParameters>; + +interface CategoryOptions { + events?: { update?: string }; + em?: EditorModel; +} + export default class Categories extends Collection { + constructor(models?: CategoryCollectionParams[0], opts: CategoryOptions = {}) { + super(models, opts); + const { events, em } = opts; + const evUpdate = events?.update; + if (em) { + evUpdate && + this.on('change', (category, options) => + em.trigger(evUpdate, { category, changes: category.changedAttributes(), options }) + ); + } + } + /** @ts-ignore */ add(model: (CategoryProperties | Category)[] | CategoryProperties | Category, opts?: AddOptions) { const models = isArray(model) ? model : [model]; diff --git a/src/block_manager/index.ts b/src/block_manager/index.ts index 6f2ba10bd..48a8f82ac 100644 --- a/src/block_manager/index.ts +++ b/src/block_manager/index.ts @@ -66,7 +66,10 @@ export default class BlockManager extends ItemManagerModule this.blocksVisible.add(model)); diff --git a/src/block_manager/types.ts b/src/block_manager/types.ts index 74d73f495..13f74cdef 100644 --- a/src/block_manager/types.ts +++ b/src/block_manager/types.ts @@ -54,6 +54,13 @@ export enum BlocksEvents { */ dragEnd = 'block:drag:stop', + /** + * @event `block:category:update` Block category updated. + * @example + * editor.on('block:category:update', ({ category, changes }) => { ... }); + */ + categoryUpdate = 'block:category:update', + /** * @event `block:custom` Event to use in case of [custom Block Manager UI](https://grapesjs.com/docs/modules/Blocks.html#customization). * @example