Ver Fonte

CMD + D to Duplicate Selection (#982)

* cmd+d to duplicate selection

* use duplicateElement instead

* use duplicateElement instead

* Update actionDuplicateSelection.ts

* select the new duplicated element

* add locale

* use event.key instead of event.code

Co-authored-by: David Luzar <luzar.david@gmail.com>
Faustino Kialungila há 5 anos atrás
pai
commit
ae9b64a623
3 ficheiros alterados com 32 adições e 1 exclusões
  1. 29 0
      src/actions/actionDuplicateSelection.ts
  2. 1 0
      src/actions/index.ts
  3. 2 1
      src/locales/en.json

+ 29 - 0
src/actions/actionDuplicateSelection.ts

@@ -0,0 +1,29 @@
+import { KEYS } from "../keys";
+import { register } from "./register";
+import { ExcalidrawElement } from "../element/types";
+import { duplicateElement } from "../element";
+
+export const actionDuplicateSelection = register({
+  name: "duplicateSelection",
+  perform: (elements, appState) => {
+    return {
+      appState,
+      elements: elements.reduce(
+        (acc: Array<ExcalidrawElement>, element: ExcalidrawElement) => {
+          if (appState.selectedElementIds[element.id]) {
+            const newElement = duplicateElement(element);
+            newElement.x = newElement.x + 10;
+            newElement.y = newElement.y + 10;
+            appState.selectedElementIds[newElement.id] = true;
+            delete appState.selectedElementIds[element.id];
+            return acc.concat([element, newElement]);
+          }
+          return acc.concat(element);
+        },
+        [],
+      ),
+    };
+  },
+  contextItemLabel: "labels.duplicateSelection",
+  keyTest: event => event[KEYS.CTRL_OR_CMD] && event.key === "d",
+});

+ 1 - 0
src/actions/index.ts

@@ -6,6 +6,7 @@ export {
   actionSendToBack,
 } from "./actionZindex";
 export { actionSelectAll } from "./actionSelectAll";
+export { actionDuplicateSelection } from "./actionDuplicateSelection";
 export {
   actionChangeStrokeColor,
   actionChangeBackgroundColor,

+ 2 - 1
src/locales/en.json

@@ -43,7 +43,8 @@
     "drawingCanvas": "Drawing Canvas",
     "layers": "Layers",
     "language": "Language",
-    "createRoom": "Share a live-collaboration session"
+    "createRoom": "Share a live-collaboration session",
+    "duplicateSelection": "Duplicate selected elements"
   },
   "buttons": {
     "clearReset": "Reset the canvas",