diff --git a/packages/blocks/src/root-block/widgets/drag-handle/middleware/copy-embed-doc.ts b/packages/blocks/src/root-block/widgets/drag-handle/middleware/copy-embed-doc.ts deleted file mode 100644 index 0a7e596b0b4e..000000000000 --- a/packages/blocks/src/root-block/widgets/drag-handle/middleware/copy-embed-doc.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { JobMiddleware } from '@blocksuite/store'; - -export const copyEmbedDoc: JobMiddleware = ({ slots, collection }) => { - slots.beforeImport.on(payload => { - if ( - payload.type === 'block' && - ['affine:embed-linked-doc', 'affine:embed-synced-doc'].includes( - payload.snapshot.flavour - ) - ) { - payload.snapshot.id = collection.idGenerator(); - } - }); -}; diff --git a/packages/blocks/src/root-block/widgets/drag-handle/middleware/new-id-cross-doc.ts b/packages/blocks/src/root-block/widgets/drag-handle/middleware/new-id-cross-doc.ts new file mode 100644 index 000000000000..bbb92fa1741b --- /dev/null +++ b/packages/blocks/src/root-block/widgets/drag-handle/middleware/new-id-cross-doc.ts @@ -0,0 +1,16 @@ +import type { BlockStdScope } from '@blocksuite/block-std'; +import type { JobMiddleware } from '@blocksuite/store'; + +export const newIdCrossDoc = + (std: BlockStdScope): JobMiddleware => + ({ slots, collection }) => { + let samePage = false; + slots.beforeImport.on(payload => { + if (payload.type === 'slice') { + samePage = payload.snapshot.pageId === std.doc.id; + } + if (payload.type === 'block' && !samePage) { + payload.snapshot.id = collection.idGenerator(); + } + }); + }; diff --git a/packages/blocks/src/root-block/widgets/drag-handle/watchers/drag-event-watcher.ts b/packages/blocks/src/root-block/widgets/drag-handle/watchers/drag-event-watcher.ts index 75e61b65ef76..8c7d78636834 100644 --- a/packages/blocks/src/root-block/widgets/drag-handle/watchers/drag-event-watcher.ts +++ b/packages/blocks/src/root-block/widgets/drag-handle/watchers/drag-event-watcher.ts @@ -36,7 +36,7 @@ import { import { addNoteAtPoint } from '../../../edgeless/utils/common.js'; import { DropIndicator } from '../components/drop-indicator.js'; import { AFFINE_DRAG_HANDLE_WIDGET } from '../consts.js'; -import { copyEmbedDoc } from '../middleware/copy-embed-doc.js'; +import { newIdCrossDoc } from '../middleware/new-id-cross-doc.js'; import { surfaceRefToEmbed } from '../middleware/surface-ref-to-embed.js'; import { containBlock, includeTextSelection } from '../utils.js'; @@ -114,6 +114,7 @@ export class DragEventWatcher { private _dropHandler = (context: UIEventStateContext) => { this._onDrop(context); + this._std.selection.setGroup('gfx', []); this.widget.clearRaf(); this.widget.hide(true); }; @@ -437,7 +438,7 @@ export class DragEventWatcher { const std = this._std; return new Job({ collection: std.collection, - middlewares: [copyEmbedDoc, surfaceRefToEmbed(std)], + middlewares: [newIdCrossDoc(std), surfaceRefToEmbed(std)], }); } diff --git a/tests/linked-page.spec.ts b/tests/linked-page.spec.ts index 96d56f68f796..bcfa9ca1e421 100644 --- a/tests/linked-page.spec.ts +++ b/tests/linked-page.spec.ts @@ -837,7 +837,7 @@ test('linked doc can be dragged from note to surface top level block', async ({ await dragBlockToPoint(page, '9', { x: 200, y: 200 }); await waitNextFrame(page); - await assertParentBlockFlavour(page, '10', 'affine:surface'); + await assertParentBlockFlavour(page, '9', 'affine:surface'); }); // Aliases