From d1b0aa63c45e8678736a1f83b29febaafd8e7728 Mon Sep 17 00:00:00 2001 From: Mark Tolmacs Date: Wed, 19 Mar 2025 20:23:54 +0100 Subject: [PATCH] Fix unknown original element for drag --- packages/excalidraw/components/App.tsx | 15 ++++++++++----- packages/excalidraw/element/duplicate.ts | 22 ++++++++++++++-------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/packages/excalidraw/components/App.tsx b/packages/excalidraw/components/App.tsx index f471b3fdb..f48b736ed 100644 --- a/packages/excalidraw/components/App.tsx +++ b/packages/excalidraw/components/App.tsx @@ -8441,11 +8441,16 @@ class App extends React.Component { selectedElements.map((el) => [el.id, el]), ), overrides: (el) => { - const origEl = pointerDownState.originalElements.get(el.id)!; - return { - x: origEl.x, - y: origEl.y, - }; + const origEl = pointerDownState.originalElements.get(el.id); + + if (origEl) { + return { + x: origEl.x, + y: origEl.y, + }; + } + + return {}; }, reverseOrder: true, }); diff --git a/packages/excalidraw/element/duplicate.ts b/packages/excalidraw/element/duplicate.ts index 7fc7befa1..58b00b6a6 100644 --- a/packages/excalidraw/element/duplicate.ts +++ b/packages/excalidraw/element/duplicate.ts @@ -183,7 +183,7 @@ export const duplicateElements = ( }; // Helper to position cloned elements in the Z-order the product needs it - const insertAfterIndex = ( + const insertBeforeOrAfterIndex = ( index: number, elements: ExcalidrawElement | null | ExcalidrawElement[], ) => { @@ -249,7 +249,7 @@ export const duplicateElements = ( return el.groupIds?.includes(groupId); }); - insertAfterIndex(targetIndex, copyElements(groupElements)); + insertBeforeOrAfterIndex(targetIndex, copyElements(groupElements)); continue; } @@ -269,7 +269,10 @@ export const duplicateElements = ( return el.frameId === frameId || el.id === frameId; }); - insertAfterIndex(targetIndex, copyElements([...frameChildren, element])); + insertBeforeOrAfterIndex( + targetIndex, + copyElements([...frameChildren, element]), + ); continue; } @@ -287,12 +290,12 @@ export const duplicateElements = ( }); if (boundTextElement) { - insertAfterIndex( + insertBeforeOrAfterIndex( targetIndex + (!!opts?.reverseOrder ? -1 : 0), copyElements([element, boundTextElement]), ); } else { - insertAfterIndex(targetIndex, copyElements(element)); + insertBeforeOrAfterIndex(targetIndex, copyElements(element)); } continue; @@ -306,9 +309,12 @@ export const duplicateElements = ( }); if (container) { - insertAfterIndex(targetIndex, copyElements([container, element])); + insertBeforeOrAfterIndex( + targetIndex, + copyElements([container, element]), + ); } else { - insertAfterIndex(targetIndex, copyElements(element)); + insertBeforeOrAfterIndex(targetIndex, copyElements(element)); } continue; @@ -317,7 +323,7 @@ export const duplicateElements = ( // default duplication (regular elements) // ------------------------------------------------------------------------- - insertAfterIndex( + insertBeforeOrAfterIndex( findLastIndex(elementsWithClones, (el) => el.id === element.id), copyElements(element), );