feat(editor): add loaded and disposed hook for store extension (#10669)
This commit is contained in:
@@ -2,7 +2,6 @@ import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions';
|
|||||||
import { Slot } from '@blocksuite/global/slot';
|
import { Slot } from '@blocksuite/global/slot';
|
||||||
import { computed, signal } from '@preact/signals-core';
|
import { computed, signal } from '@preact/signals-core';
|
||||||
|
|
||||||
import type { Store } from '../../model';
|
|
||||||
import { nanoid } from '../../utils/id-generator';
|
import { nanoid } from '../../utils/id-generator';
|
||||||
import type { StackItem } from '../../yjs';
|
import type { StackItem } from '../../yjs';
|
||||||
import { StoreExtension } from '../store-extension';
|
import { StoreExtension } from '../store-extension';
|
||||||
@@ -47,9 +46,7 @@ export class StoreSelectionExtension extends StoreExtension {
|
|||||||
remoteChanged: new Slot<Map<number, BaseSelection[]>>(),
|
remoteChanged: new Slot<Map<number, BaseSelection[]>>(),
|
||||||
};
|
};
|
||||||
|
|
||||||
constructor(store: Store) {
|
override loaded() {
|
||||||
super(store);
|
|
||||||
|
|
||||||
this.store.provider.getAll(SelectionIdentifier).forEach(ctor => {
|
this.store.provider.getAll(SelectionIdentifier).forEach(ctor => {
|
||||||
[ctor].flat().forEach(ctor => {
|
[ctor].flat().forEach(ctor => {
|
||||||
this._selectionConstructors[ctor.type] = ctor;
|
this._selectionConstructors[ctor.type] = ctor;
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ export class StoreExtension extends Extension {
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loaded() {}
|
||||||
|
|
||||||
|
disposed() {}
|
||||||
|
|
||||||
static readonly [storeExtensionSymbol] = true;
|
static readonly [storeExtensionSymbol] = true;
|
||||||
|
|
||||||
static override setup(di: Container) {
|
static override setup(di: Container) {
|
||||||
|
|||||||
@@ -594,6 +594,10 @@ export class Store {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dispose() {
|
dispose() {
|
||||||
|
this._provider.getAll(StoreExtensionIdentifier).forEach(ext => {
|
||||||
|
ext.disposed();
|
||||||
|
});
|
||||||
|
|
||||||
this._disposeBlockUpdated.dispose();
|
this._disposeBlockUpdated.dispose();
|
||||||
this.slots.ready.dispose();
|
this.slots.ready.dispose();
|
||||||
this.slots.blockUpdated.dispose();
|
this.slots.blockUpdated.dispose();
|
||||||
@@ -699,7 +703,9 @@ export class Store {
|
|||||||
|
|
||||||
load(initFn?: () => void) {
|
load(initFn?: () => void) {
|
||||||
this._doc.load(initFn);
|
this._doc.load(initFn);
|
||||||
this._provider.getAll(StoreExtensionIdentifier);
|
this._provider.getAll(StoreExtensionIdentifier).forEach(ext => {
|
||||||
|
ext.loaded();
|
||||||
|
});
|
||||||
this.slots.ready.emit();
|
this.slots.ready.emit();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user