feat: edgeless dnd (#9988)

### Changed
- Support edgelss dnd
- Simplify the drag-handle state
This commit is contained in:
doouding
2025-02-12 12:37:06 +00:00
parent 8129434a2e
commit f89fcf82f8
22 changed files with 1041 additions and 350 deletions

View File

@@ -51,6 +51,8 @@ export class BaseBlockTransformer<Props extends object = object> {
);
}
constructor(public readonly transformerConfigs: Map<string, unknown>) {}
fromSnapshot({
json,
}: FromSnapshotPayload): Promise<SnapshotNode<Props>> | SnapshotNode<Props> {

View File

@@ -82,7 +82,8 @@ type TransformerMiddlewareOptions = {
assetsManager: AssetsManager;
slots: TransformerSlots;
docCRUD: DocCRUD;
adapterConfigs: Map<string, string>;
adapterConfigs: Map<string, unknown>;
transformerConfigs: Map<string, unknown>;
};
export type TransformerMiddleware = (

View File

@@ -56,6 +56,8 @@ const BATCH_SIZE = 100;
export class Transformer {
private readonly _adapterConfigs = new Map<string, string>();
private readonly _transformerConfigs = new Map<string, unknown>();
private readonly _assetsManager: AssetsManager;
private readonly _schema: Schema;
@@ -72,6 +74,11 @@ export class Transformer {
blockToSnapshot = (model: DraftModel): BlockSnapshot | undefined => {
try {
const snapshot = this._blockToSnapshot(model);
if (!snapshot) {
return;
}
BlockSnapshotSchema.parse(snapshot);
return snapshot;
@@ -354,24 +361,28 @@ export class Transformer {
docCRUD: this._docCRUD,
assetsManager: this._assetsManager,
adapterConfigs: this._adapterConfigs,
transformerConfigs: this._transformerConfigs,
});
});
}
private _blockToSnapshot(model: DraftModel): BlockSnapshot {
private _blockToSnapshot(model: DraftModel): BlockSnapshot | null {
this._slots.beforeExport.emit({
type: 'block',
model,
});
const schema = this._getSchema(model.flavour);
const transformer = this._getTransformer(schema);
const snapshotLeaf = transformer.toSnapshot({
model,
assets: this._assetsManager,
});
const children = model.children.map(child => {
return this._blockToSnapshot(child);
});
const children = model.children
.map(child => {
return this._blockToSnapshot(child);
})
.filter(Boolean) as BlockSnapshot[];
const snapshot: BlockSnapshot = {
type: 'block',
...snapshotLeaf,
@@ -489,7 +500,10 @@ export class Transformer {
}
private _getTransformer(schema: BlockSchemaType) {
return schema.transformer?.() ?? new BaseBlockTransformer();
return (
schema.transformer?.(this._transformerConfigs) ??
new BaseBlockTransformer(this._transformerConfigs)
);
}
private async _insertBlockTree(