From d55b1cb9b7a960b0b230ae6819b0fbaff9fa32a9 Mon Sep 17 00:00:00 2001 From: Ayobami Date: Sun, 6 Jul 2025 21:16:59 +0100 Subject: [PATCH] Fix: copy and past to add support for multiple selected objects --- src/components/DockBuilder/DockBuilder.jsx | 49 +++++++++++++--------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/src/components/DockBuilder/DockBuilder.jsx b/src/components/DockBuilder/DockBuilder.jsx index 9ec5772..1a0f62f 100644 --- a/src/components/DockBuilder/DockBuilder.jsx +++ b/src/components/DockBuilder/DockBuilder.jsx @@ -699,33 +699,42 @@ export const DockBuilder = () => { const CopySelection = () => { const activeObject = editorMemo.getActiveObject(); if (activeObject) { - activeObject.clone(function (cloned) { + activeObject.clone( + function (cloned) { + clipboard = cloned; + }, // Ensure dockData is copied - if (activeObject.dockData) { - cloned.dockData = { ...activeObject.dockData }; - } - clipboard = cloned; - }); + ["dockData"] + ); } }; const PasteSelection = () => { if (clipboard) { - clipboard.clone(function (clonedObj) { + clipboard.clone( + function (clonedObj) { + // Offset the pasted object so it's visible + clonedObj.set({ + left: clonedObj.left + 20, + top: clonedObj.top + 20, + evented: true, + }); + // Add support for multiple selected objects + if (clonedObj.type === "activeSelection") { + clonedObj.canvas = editorMemo; + clonedObj.forEachObject(function (obj) { + editorMemo.add(obj); + }); + clonedObj.setCoords(); + } else { + editorMemo.add(clonedObj); + } + editorMemo.setActiveObject(clonedObj); + editorMemo.requestRenderAll(); + }, // Ensure dockData is copied - if (clipboard.dockData) { - clonedObj.dockData = { ...clipboard.dockData }; - } - // Offset the pasted object so it's visible - clonedObj.set({ - left: (clonedObj.left || 0) + 20, - top: (clonedObj.top || 0) + 20, - evented: true, - }); - editorMemo.add(clonedObj); - editorMemo.setActiveObject(clonedObj); - editorMemo.requestRenderAll(); - }); + ["dockData"] + ); } };