From 407f00bbd5287869ed0cf453ddeb8a4aec245b3a Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Sat, 11 Jan 2020 19:35:06 -0800 Subject: [PATCH] Fix alt-duplicate (#326) We need to unselect all the previous elements and select all the new ones. Also made sure that the shape is regenerated when the element is duplicated --- src/element/newElement.ts | 1 + src/index.tsx | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/element/newElement.ts b/src/element/newElement.ts index 4ab6c081..a347d1fd 100644 --- a/src/element/newElement.ts +++ b/src/element/newElement.ts @@ -37,6 +37,7 @@ export function newElement( export function duplicateElement(element: ReturnType) { const copy = { ...element }; + delete copy.shape; copy.id = nanoid(); copy.seed = randomSeed(); return copy; diff --git a/src/index.tsx b/src/index.tsx index 41cc9e8a..c4ef84ff 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -520,20 +520,20 @@ export class App extends React.Component<{}, AppState> { elementIsAddedToSelection = true; } - // No matter what, we select it // We duplicate the selected element if alt is pressed on Mouse down if (e.altKey) { elements = [ - ...elements, - ...elements.reduce((duplicates, element) => { - if (element.isSelected) { - duplicates = duplicates.concat( - duplicateElement(element) - ); - element.isSelected = false; - } - return duplicates; - }, [] as typeof elements) + ...elements.map(element => ({ + ...element, + isSelected: false + })), + ...elements + .filter(element => element.isSelected) + .map(element => { + const newElement = duplicateElement(element); + newElement.isSelected = true; + return newElement; + }) ]; } }