feat(core): dnd support external types (#9033)

fix AF-1847

two issues:
1. original `dropTargetForExternal` only works if dragging target is from another window context. patched the library to bypass this issue
2. `dataTransfer`'s content is only available on `drop` event. This means we cannot have `canDrop` checks for external elements (like blocksuite links).
This commit is contained in:
pengx17
2024-12-06 13:45:29 +00:00
committed by Peng Xiao
parent 6b14e1cf10
commit fafacdb265
17 changed files with 285 additions and 44 deletions

View File

@@ -316,7 +316,7 @@ __metadata:
"@affine/electron-api": "workspace:*"
"@affine/graphql": "workspace:*"
"@affine/i18n": "workspace:*"
"@atlaskit/pragmatic-drag-and-drop": "npm:^1.2.1"
"@atlaskit/pragmatic-drag-and-drop": "patch:@atlaskit/pragmatic-drag-and-drop@npm%3A1.4.0#~/.yarn/patches/@atlaskit-pragmatic-drag-and-drop-npm-1.4.0-75c45f52d3.patch"
"@atlaskit/pragmatic-drag-and-drop-hitbox": "npm:^1.0.3"
"@blocksuite/affine": "npm:0.18.4"
"@blocksuite/icons": "npm:2.1.75"
@@ -1209,7 +1209,7 @@ __metadata:
languageName: node
linkType: hard
"@atlaskit/pragmatic-drag-and-drop@npm:^1.1.0, @atlaskit/pragmatic-drag-and-drop@npm:^1.2.1":
"@atlaskit/pragmatic-drag-and-drop@npm:1.4.0":
version: 1.4.0
resolution: "@atlaskit/pragmatic-drag-and-drop@npm:1.4.0"
dependencies:
@@ -1220,6 +1220,17 @@ __metadata:
languageName: node
linkType: hard
"@atlaskit/pragmatic-drag-and-drop@patch:@atlaskit/pragmatic-drag-and-drop@npm%3A1.4.0#~/.yarn/patches/@atlaskit-pragmatic-drag-and-drop-npm-1.4.0-75c45f52d3.patch":
version: 1.4.0
resolution: "@atlaskit/pragmatic-drag-and-drop@patch:@atlaskit/pragmatic-drag-and-drop@npm%3A1.4.0#~/.yarn/patches/@atlaskit-pragmatic-drag-and-drop-npm-1.4.0-75c45f52d3.patch::version=1.4.0&hash=9e529b"
dependencies:
"@babel/runtime": "npm:^7.0.0"
bind-event-listener: "npm:^3.0.0"
raf-schd: "npm:^4.0.3"
checksum: 10/4376cd2dfe2771081b601ce33d79ec2d2f412739bfa096b6f7bc098cca73659e2ae84ef69f4632f03708b814ed920794fbf9e1826c92c042d397597098de1f6b
languageName: node
linkType: hard
"@aws-crypto/crc32@npm:5.2.0":
version: 5.2.0
resolution: "@aws-crypto/crc32@npm:5.2.0"