From a19e7c10a3064b3da6611b7ebd06cbe4c93f308e Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Thu, 11 Dec 2025 01:27:49 +0400 Subject: [PATCH] Add block events callbacks --- packages/core/src/block_manager/index.ts | 4 ++-- packages/core/src/block_manager/types.ts | 24 ++++++++++++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/packages/core/src/block_manager/index.ts b/packages/core/src/block_manager/index.ts index 9f942acba..a777dc7cd 100644 --- a/packages/core/src/block_manager/index.ts +++ b/packages/core/src/block_manager/index.ts @@ -36,7 +36,7 @@ import Block, { BlockProperties } from './model/Block'; import Blocks from './model/Blocks'; import Categories from '../abstract/ModuleCategories'; import Category, { getItemsByCategory } from '../abstract/ModuleCategory'; -import { BlocksByCategory, BlocksEvents } from './types'; +import { BlocksByCategory, BlocksCustomData, BlocksEvents } from './types'; import BlocksView from './view/BlocksView'; export type BlockEvent = `${BlocksEvents}`; @@ -90,7 +90,7 @@ export default class BlockManager extends ItemManagerModule {} +export interface BlocksCustomData { + bm: BlockManager; + blocks: Block[]; + container: HTMLElement | undefined; + dragStart: (block: Block, ev?: Event) => void; + drag: (ev: Event) => void; + dragStop: (cancel?: boolean) => void; +} + +export type BlockEvent = `${BlocksEvents}`; + /**{START_EVENTS}*/ export enum BlocksEvents { /** @@ -81,7 +94,14 @@ export enum BlocksEvents { export interface BlocksEventCallback { [BlocksEvents.add]: [Block, AddOptions]; [BlocksEvents.remove]: [Block, RemoveOptions]; + [BlocksEvents.removeBefore]: [Block, () => void, RemoveOptions]; [BlocksEvents.update]: [Block, AddOptions]; + [BlocksEvents.dragStart]: [Block, DragEvent?]; + [BlocksEvents.drag]: [Block, DragEvent?]; + [BlocksEvents.dragEnd]: [Component | undefined, Block]; + [BlocksEvents.categoryUpdate]: [{ category: Category; changes: Partial; options: AddOptions }]; + [BlocksEvents.custom]: [BlocksCustomData]; + [BlocksEvents.all]: [{ event: BlockEvent; model?: Model; options: ObjectAny }]; } // need this to avoid the TS documentation generator to break