From 6b2d1009a297e7b507754d25296ddbb40a73a9f7 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 13 Aug 2025 20:56:19 +0200 Subject: [PATCH] chore(xydrag): cleanup --- packages/system/src/xydrag/XYDrag.ts | 28 +++++++++++------------ packages/system/src/xydrag/utils.ts | 34 +++++++++++----------------- 2 files changed, 27 insertions(+), 35 deletions(-) diff --git a/packages/system/src/xydrag/XYDrag.ts b/packages/system/src/xydrag/XYDrag.ts index 38b8c090..232fd574 100644 --- a/packages/system/src/xydrag/XYDrag.ts +++ b/packages/system/src/xydrag/XYDrag.ts @@ -134,16 +134,16 @@ export function XYDrag voi let hasChange = false; const isMultiDrag = dragItems.size > 1; - const nodesBox = - isMultiDrag && nodeExtent ? rectToBox(getInternalNodesBounds(dragItems)) : { x: 0, y: 0, x2: 0, y2: 0 }; - const snapOffset = calculateSnapOffset({ - isMultiDrag, - dragItems, - snapToGrid, - snapGrid, - x, - y, - }); + const nodesBox = isMultiDrag && nodeExtent ? rectToBox(getInternalNodesBounds(dragItems)) : null; + const multiDragSnapOffset = + isMultiDrag && snapToGrid + ? calculateSnapOffset({ + dragItems, + snapGrid, + x, + y, + }) + : null; for (const [id, dragItem] of dragItems) { /* @@ -156,17 +156,17 @@ export function XYDrag voi let nextPosition = { x: x - dragItem.distance.x, y: y - dragItem.distance.y }; if (snapToGrid) { - nextPosition = isMultiDrag + nextPosition = multiDragSnapOffset ? { - x: nextPosition.x + snapOffset.x, - y: nextPosition.y + snapOffset.y, + x: nextPosition.x + multiDragSnapOffset.x, + y: nextPosition.y + multiDragSnapOffset.y, } : snapPosition(nextPosition, snapGrid); } let adjustedNodeExtent: CoordinateExtent | null = null; - if (isMultiDrag && nodeExtent && !dragItem.extent) { + if (isMultiDrag && nodeExtent && !dragItem.extent && nodesBox) { const { positionAbsolute } = dragItem.internals; const x1 = positionAbsolute.x - nodesBox.x + nodeExtent[0][0]; const x2 = positionAbsolute.x + dragItem.measured.width - nodesBox.x2 + nodeExtent[1][0]; diff --git a/packages/system/src/xydrag/utils.ts b/packages/system/src/xydrag/utils.ts index 61733dbc..a62d7735 100644 --- a/packages/system/src/xydrag/utils.ts +++ b/packages/system/src/xydrag/utils.ts @@ -128,38 +128,30 @@ export function getEventHandlerParams({ * This function calculates the snap offset based on the first node in the selection. */ export function calculateSnapOffset({ - isMultiDrag, dragItems, - snapToGrid, snapGrid, x, y, }: { - isMultiDrag: boolean; dragItems: Map; - snapToGrid: boolean; snapGrid: SnapGrid; x: number; y: number; }) { - let snapOffset: XYPosition = { x: 0, y: 0 }; + const refDragItem = dragItems.values().next().value; - if (snapToGrid && isMultiDrag) { - const refDragItem = dragItems.values().next().value; - - if (refDragItem) { - const refPos = { - x: x - refDragItem.distance.x, - y: y - refDragItem.distance.y, - }; - const refPosSnapped = snapPosition(refPos, snapGrid); - - snapOffset = { - x: refPosSnapped.x - refPos.x, - y: refPosSnapped.y - refPos.y, - }; - } + if (!refDragItem) { + return null; } - return snapOffset; + const refPos = { + x: x - refDragItem.distance.x, + y: y - refDragItem.distance.y, + }; + const refPosSnapped = snapPosition(refPos, snapGrid); + + return { + x: refPosSnapped.x - refPos.x, + y: refPosSnapped.y - refPos.y, + }; }