fix: database cross doc dragging (#10126)

This commit is contained in:
doouding
2025-02-13 02:53:06 +00:00
parent 5be4d677da
commit 81ead5cd35

View File

@@ -1,3 +1,5 @@
import { DatabaseBlockModel } from '@blocksuite/affine-model';
import { matchModels } from '@blocksuite/affine-shared/utils';
import type { BlockStdScope } from '@blocksuite/block-std';
import type { TransformerMiddleware } from '@blocksuite/store';
@@ -5,12 +7,38 @@ export const newIdCrossDoc =
(std: BlockStdScope): TransformerMiddleware =>
({ slots }) => {
let samePage = false;
const oldToNewIdMap = new Map<string, string>();
slots.beforeImport.on(payload => {
if (payload.type === 'slice') {
samePage = payload.snapshot.pageId === std.store.id;
}
if (payload.type === 'block' && !samePage) {
payload.snapshot.id = std.workspace.idGenerator();
const newId = std.workspace.idGenerator();
oldToNewIdMap.set(payload.snapshot.id, newId);
payload.snapshot.id = newId;
}
});
slots.afterImport.on(payload => {
if (
!samePage &&
payload.type === 'block' &&
matchModels(payload.model, [DatabaseBlockModel])
) {
const originalCells = payload.model.cells;
const newCells = {
...originalCells,
};
Object.keys(originalCells).forEach(cellId => {
if (oldToNewIdMap.has(cellId)) {
newCells[oldToNewIdMap.get(cellId)!] = originalCells[cellId];
}
});
payload.model.cells$.value = newCells;
}
});
};