From 8d10b40b724ee678836e48827dbc490377948248 Mon Sep 17 00:00:00 2001 From: Saul-Mirone Date: Thu, 6 Mar 2025 13:31:09 +0000 Subject: [PATCH] feat(editor): add loaded and disposed hook for store extension (#10669) --- .../store/src/extension/selection/selection-extension.ts | 5 +---- .../framework/store/src/extension/store-extension.ts | 4 ++++ blocksuite/framework/store/src/model/store/store.ts | 8 +++++++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/blocksuite/framework/store/src/extension/selection/selection-extension.ts b/blocksuite/framework/store/src/extension/selection/selection-extension.ts index 874d9e9822..8f584e0f56 100644 --- a/blocksuite/framework/store/src/extension/selection/selection-extension.ts +++ b/blocksuite/framework/store/src/extension/selection/selection-extension.ts @@ -2,7 +2,6 @@ import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions'; import { Slot } from '@blocksuite/global/slot'; import { computed, signal } from '@preact/signals-core'; -import type { Store } from '../../model'; import { nanoid } from '../../utils/id-generator'; import type { StackItem } from '../../yjs'; import { StoreExtension } from '../store-extension'; @@ -47,9 +46,7 @@ export class StoreSelectionExtension extends StoreExtension { remoteChanged: new Slot>(), }; - constructor(store: Store) { - super(store); - + override loaded() { this.store.provider.getAll(SelectionIdentifier).forEach(ctor => { [ctor].flat().forEach(ctor => { this._selectionConstructors[ctor.type] = ctor; diff --git a/blocksuite/framework/store/src/extension/store-extension.ts b/blocksuite/framework/store/src/extension/store-extension.ts index 7b0b04139a..77b4676576 100644 --- a/blocksuite/framework/store/src/extension/store-extension.ts +++ b/blocksuite/framework/store/src/extension/store-extension.ts @@ -17,6 +17,10 @@ export class StoreExtension extends Extension { super(); } + loaded() {} + + disposed() {} + static readonly [storeExtensionSymbol] = true; static override setup(di: Container) { diff --git a/blocksuite/framework/store/src/model/store/store.ts b/blocksuite/framework/store/src/model/store/store.ts index 77fc72e606..2b2a081f28 100644 --- a/blocksuite/framework/store/src/model/store/store.ts +++ b/blocksuite/framework/store/src/model/store/store.ts @@ -594,6 +594,10 @@ export class Store { } dispose() { + this._provider.getAll(StoreExtensionIdentifier).forEach(ext => { + ext.disposed(); + }); + this._disposeBlockUpdated.dispose(); this.slots.ready.dispose(); this.slots.blockUpdated.dispose(); @@ -699,7 +703,9 @@ export class Store { load(initFn?: () => void) { this._doc.load(initFn); - this._provider.getAll(StoreExtensionIdentifier); + this._provider.getAll(StoreExtensionIdentifier).forEach(ext => { + ext.loaded(); + }); this.slots.ready.emit(); return this; }