diff --git a/packages/element/src/align.ts b/packages/element/src/align.ts index 3068aee8d1..17ebc3a97c 100644 --- a/packages/element/src/align.ts +++ b/packages/element/src/align.ts @@ -43,6 +43,7 @@ export const alignElements = ( // update bound elements updateBoundElements(element, scene, { simultaneouslyUpdated: group, + indirectArrowUpdate: true, }); return updatedEle; }); diff --git a/packages/element/src/binding.ts b/packages/element/src/binding.ts index afc67d7afd..d3c4003288 100644 --- a/packages/element/src/binding.ts +++ b/packages/element/src/binding.ts @@ -1081,6 +1081,7 @@ export const updateBoundElements = ( options?: { simultaneouslyUpdated?: readonly ExcalidrawElement[]; changedElements?: Map; + indirectArrowUpdate?: boolean; }, ) => { if (!isBindableElement(changedElement)) { @@ -1100,7 +1101,7 @@ export const updateBoundElements = ( }); } - boundElementsVisitor(elementsMap, changedElement, (element) => { + const visitor = (element: ExcalidrawElement | undefined) => { if (!isArrowElement(element) || element.isDeleted) { return; } @@ -1172,7 +1173,14 @@ export const updateBoundElements = ( if (boundText && !boundText.isDeleted) { handleBindTextResize(element, scene, false); } - }); + }; + + boundElementsVisitor(elementsMap, changedElement, visitor); + + if (options?.indirectArrowUpdate) { + boundElementsVisitor(elementsMap, changedElement, visitor); + boundElementsVisitor(elementsMap, changedElement, visitor); + } }; const updateArrowBindings = ( diff --git a/packages/excalidraw/components/App.tsx b/packages/excalidraw/components/App.tsx index 88871adde2..d3b12720ca 100644 --- a/packages/excalidraw/components/App.tsx +++ b/packages/excalidraw/components/App.tsx @@ -9595,7 +9595,9 @@ class App extends React.Component { isBindableElement(element) && element.boundElements?.some((other) => other.type === "arrow") ) { - updateBoundElements(element, this.scene); + updateBoundElements(element, this.scene, { + indirectArrowUpdate: true, + }); } });