diff --git a/packages/element/src/dragElements.ts b/packages/element/src/dragElements.ts index 796685d8f8..0270f00c5b 100644 --- a/packages/element/src/dragElements.ts +++ b/packages/element/src/dragElements.ts @@ -21,7 +21,7 @@ import { getPerfectElementSize } from "./sizeHelpers"; import { getBoundTextElement } from "./textElement"; import { getMinTextElementWidth } from "./textMeasurements"; import { - isArrowElement, + isArrowElement as isBindingElement, isElbowArrow, isFrameLikeElement, isImageElement, @@ -108,19 +108,7 @@ export const dragSelectedElements = ( ); elementsToUpdate.forEach((element) => { - const isArrow = !isArrowElement(element); - const isStartBoundElementSelected = - isArrow || - (element.startBinding - ? elementsToUpdateIds.has(element.startBinding.elementId) - : false); - const isEndBoundElementSelected = - isArrow || - (element.endBinding - ? elementsToUpdateIds.has(element.endBinding.elementId) - : false); - - if (!isArrowElement(element)) { + if (!isBindingElement(element)) { updateElementCoords(pointerDownState, element, scene, adjustedOffset); // skip arrow labels since we calculate its position during render @@ -143,7 +131,6 @@ export const dragSelectedElements = ( // NOTE: Add a little initial drag to the arrow dragging when the arrow // is the single element being dragged to avoid accidentally unbinding // the arrow when the user just wants to select it. - elementsToUpdate.size > 1 || Math.max(Math.abs(adjustedOffset.x), Math.abs(adjustedOffset.y)) > DRAGGING_THRESHOLD || @@ -151,9 +138,12 @@ export const dragSelectedElements = ( ) { updateElementCoords(pointerDownState, element, scene, adjustedOffset); - const shouldUnbindStart = - element.startBinding && !isStartBoundElementSelected; - const shouldUnbindEnd = element.endBinding && !isEndBoundElementSelected; + const shouldUnbindStart = element.startBinding + ? !elementsToUpdateIds.has(element.startBinding.elementId) + : true; + const shouldUnbindEnd = element.endBinding + ? !elementsToUpdateIds.has(element.endBinding.elementId) + : true; if (shouldUnbindStart || shouldUnbindEnd) { // NOTE: Moving the bound arrow should unbind it, otherwise we would // have weird situations, like 0 lenght arrow when the user moves