mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-04 08:38:34 +00:00
fix(core): some dnd perf issues (#9661)
1. page list item are bound two draggables. adding `draggable` prop to WorkbenchLink to mitigate the issue. 2. DndService may not resolve datatransfer when dragging.
This commit is contained in:
@@ -87,10 +87,16 @@ export const useDraggable = <D extends DNDData = DNDData>(
|
||||
}, [...deps, context.toExternalData]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!dragRef.current) {
|
||||
if (
|
||||
!dragRef.current ||
|
||||
(typeof options.canDrag === 'boolean' && !options.canDrag)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const element = dragRef.current;
|
||||
const dragHandle = dragHandleRef.current;
|
||||
|
||||
const windowEvent = {
|
||||
dragleave: () => {
|
||||
setDraggingPosition(state =>
|
||||
@@ -104,11 +110,11 @@ export const useDraggable = <D extends DNDData = DNDData>(
|
||||
},
|
||||
};
|
||||
|
||||
dragRef.current.dataset.affineDraggable = 'true';
|
||||
element.dataset.affineDraggable = 'true';
|
||||
|
||||
const cleanupDraggable = draggable({
|
||||
element: dragRef.current,
|
||||
dragHandle: dragHandleRef.current ?? undefined,
|
||||
element,
|
||||
dragHandle: dragHandle ?? undefined,
|
||||
canDrag: draggableGet(options.canDrag),
|
||||
getInitialData: draggableGet(options.data),
|
||||
getInitialDataForExternal: draggableGet(options.toExternalData),
|
||||
@@ -130,8 +136,8 @@ export const useDraggable = <D extends DNDData = DNDData>(
|
||||
if (enableDropTarget.current) {
|
||||
setDropTarget([]);
|
||||
}
|
||||
if (dragRef.current) {
|
||||
dragRef.current.dataset['dragging'] = 'true';
|
||||
if (element) {
|
||||
element.dataset['dragging'] = 'true';
|
||||
}
|
||||
options.onDragStart?.(args);
|
||||
},
|
||||
@@ -153,8 +159,8 @@ export const useDraggable = <D extends DNDData = DNDData>(
|
||||
if (enableDropTarget.current) {
|
||||
setDropTarget([]);
|
||||
}
|
||||
if (dragRef.current) {
|
||||
delete dragRef.current.dataset['dragging'];
|
||||
if (element) {
|
||||
delete element.dataset['dragging'];
|
||||
}
|
||||
options.onDrop?.(args);
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user