Merge pull request #2657 from wbkd/refactor/node-drag

Refactor Nodes: only trigger drag event when change happened
This commit is contained in:
Moritz Klack
2022-12-08 18:27:29 +01:00
committed by GitHub
2 changed files with 16 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
---
'@reactflow/core': patch
---
Only trigger drag event when change happened

View File

@@ -108,6 +108,9 @@ function useDrag({
x: pointerPos.xSnapped,
y: pointerPos.ySnapped,
};
let hasChange = false;
dragItems.current = dragItems.current.map((n) => {
const nextPosition = { x: pointerPos.x - n.distance.x, y: pointerPos.y - n.distance.y };
@@ -118,12 +121,20 @@ function useDrag({
const updatedPos = calcNextPosition(n, nextPosition, nodeInternals, nodeExtent, nodeOrigin);
// we want to make sure that we only fire a change event when there is a changes
hasChange =
hasChange || n.position.x !== updatedPos.position.x || n.position.y !== updatedPos.position.y;
n.position = updatedPos.position;
n.positionAbsolute = updatedPos.positionAbsolute;
return n;
});
if (!hasChange) {
return;
}
const onDrag = nodeId ? onNodeDrag : wrapSelectionDragFunc(onSelectionDrag);
updateNodePositions(dragItems.current, true, true);