refactor(nodes): only trigger drag event when change happened

This commit is contained in:
moklick
2022-12-08 13:44:25 +01:00
parent 7c51a61f10
commit b34ccd19e9
+11
View File
@@ -108,6 +108,9 @@ function useDrag({
x: pointerPos.xSnapped, x: pointerPos.xSnapped,
y: pointerPos.ySnapped, y: pointerPos.ySnapped,
}; };
let hasChange = false;
dragItems.current = dragItems.current.map((n) => { dragItems.current = dragItems.current.map((n) => {
const nextPosition = { x: pointerPos.x - n.distance.x, y: pointerPos.y - n.distance.y }; 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); 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.position = updatedPos.position;
n.positionAbsolute = updatedPos.positionAbsolute; n.positionAbsolute = updatedPos.positionAbsolute;
return n; return n;
}); });
if (!hasChange) {
return;
}
const onDrag = nodeId ? onNodeDrag : wrapSelectionDragFunc(onSelectionDrag); const onDrag = nodeId ? onNodeDrag : wrapSelectionDragFunc(onSelectionDrag);
updateNodePositions(dragItems.current, true, true); updateNodePositions(dragItems.current, true, true);