Ver código fonte

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
Christopher Chedeau 5 anos atrás
pai
commit
407f00bbd5
2 arquivos alterados com 12 adições e 11 exclusões
  1. 1 0
      src/element/newElement.ts
  2. 11 11
      src/index.tsx

+ 1 - 0
src/element/newElement.ts

@@ -37,6 +37,7 @@ export function newElement(
 
 export function duplicateElement(element: ReturnType<typeof newElement>) {
   const copy = { ...element };
+  delete copy.shape;
   copy.id = nanoid();
   copy.seed = randomSeed();
   return copy;

+ 11 - 11
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;
+                        })
                     ];
                   }
                 }