feat(editor): replace slot with rxjs subject (#10768)

This commit is contained in:
Mirone
2025-03-12 11:29:24 +09:00
committed by GitHub
parent 19f978d9aa
commit cd63e0ed8b
302 changed files with 1405 additions and 1251 deletions

View File

@@ -31,6 +31,7 @@
"@types/mdast": "^4.0.4",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
"rxjs": "^7.8.1",
"zod": "^3.23.8"
},
"exports": {

View File

@@ -1,5 +1,5 @@
import type { PropertyMetaConfig } from '@blocksuite/data-view';
import type { Disposable } from '@blocksuite/global/slot';
import type { DisposableMember } from '@blocksuite/global/disposable';
import type { Block, BlockModel } from '@blocksuite/store';
type PropertyMeta<
@@ -14,7 +14,7 @@ type PropertyMeta<
setColumnData?: (block: T, data: ColumnData) => void;
get: (block: T) => Value;
set?: (block: T, value: Value) => void;
updated: (block: T, callback: () => void) => Disposable;
updated: (block: T, callback: () => void) => DisposableMember;
};
export type BlockMeta<T extends BlockModel = BlockModel> = {
selector: (block: Block) => boolean;

View File

@@ -39,7 +39,7 @@ todoMeta.addProperty({
block.checked = value ?? false;
},
updated: (block, callback) => {
return block.propsUpdated.on(({ key }) => {
return block.propsUpdated.subscribe(({ key }) => {
if (key === 'checked') {
callback();
}
@@ -53,7 +53,7 @@ todoMeta.addProperty({
metaConfig: propertyPresets.textPropertyConfig,
get: block => block.doc.meta?.title ?? '',
updated: (block, callback) => {
return block.doc.workspace.slots.docListUpdated.on(() => {
return block.doc.workspace.slots.docListUpdated.subscribe(() => {
callback();
});
},

View File

@@ -11,8 +11,8 @@ import type { EditorHost } from '@blocksuite/block-std';
import { DataSourceBase, type PropertyMetaConfig } from '@blocksuite/data-view';
import { propertyPresets } from '@blocksuite/data-view/property-presets';
import { BlockSuiteError } from '@blocksuite/global/exceptions';
import { Slot } from '@blocksuite/global/slot';
import type { Block, Store } from '@blocksuite/store';
import { Subject } from 'rxjs';
import type { BlockMeta } from './block-meta/base.js';
import { blockMetaMap } from './block-meta/index.js';
@@ -37,7 +37,7 @@ export class BlockQueryDataSource extends DataSourceBase {
docDisposeMap = new Map<string, () => void>();
slots = {
update: new Slot(),
update: new Subject(),
};
private get blocks() {
@@ -83,13 +83,13 @@ export class BlockQueryDataSource extends DataSourceBase {
this.workspace.docs.forEach(doc => {
this.listenToDoc(doc.getStore());
});
this.workspace.slots.docCreated.on(id => {
this.workspace.slots.docCreated.subscribe(id => {
const doc = this.workspace.getDoc(id);
if (doc) {
this.listenToDoc(doc);
}
});
this.workspace.slots.docRemoved.on(id => {
this.workspace.slots.docRemoved.subscribe(id => {
this.docDisposeMap.get(id)?.();
});
}
@@ -149,7 +149,7 @@ export class BlockQueryDataSource extends DataSourceBase {
listenToDoc(doc: Store) {
this.docDisposeMap.set(
doc.id,
doc.slots.blockUpdated.on(v => {
doc.slots.blockUpdated.subscribe(v => {
if (v.type === 'add') {
const blockById = doc.getBlock(v.id);
if (blockById && this.meta.selector(blockById)) {
@@ -158,8 +158,8 @@ export class BlockQueryDataSource extends DataSourceBase {
} else if (v.type === 'delete') {
this.blockMap.delete(v.id);
}
this.slots.update.emit();
}).dispose
this.slots.update.next(undefined);
}).unsubscribe
);
}