From b02ad92fca41e2fbfb206fa47598c751a682e5e1 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Mon, 9 Sep 2024 17:19:28 +0900 Subject: [PATCH] =?UTF-8?q?redo=20undo=EC=8B=9C=20=EB=B6=80=EB=AA=A8?= =?UTF-8?q?=EA=B0=80=20=EC=9E=88=EB=8A=94=20object=EC=9D=B8=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EB=B6=80=EB=AA=A8=EA=B9=8C=EC=A7=80=20pop,=20add?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useCanvas.js | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/hooks/useCanvas.js b/src/hooks/useCanvas.js index 2d99be3b..e6ae4dbf 100644 --- a/src/hooks/useCanvas.js +++ b/src/hooks/useCanvas.js @@ -138,12 +138,24 @@ export function useCanvas(id) { if (canvas) { if (canvas?._objects.length > 0) { const poppedObject = canvas?._objects.pop() + const group = [] + group.push(poppedObject) + + if (poppedObject.parent || poppedObject.parentId) { + canvas + ?.getObjects() + .filter((obj) => obj.parent === poppedObject.parent || obj.parentId === poppedObject.parentId || obj === poppedObject.parent) + .forEach((obj) => { + group.push(obj) + canvas?.remove(obj) + }) + } setHistory((prev) => { if (prev === undefined) { - return poppedObject ? [poppedObject] : [] + return poppedObject ? [group] : [] } - return poppedObject ? [...prev, poppedObject] : prev + return poppedObject ? [...prev, group] : prev }) canvas?.renderAll() } @@ -154,7 +166,13 @@ export function useCanvas(id) { if (canvas && history) { if (history.length > 0) { setIsLocked(true) - canvas?.add(history[history.length - 1]) + if (Array.isArray(history[history.length - 1])) { + history[history.length - 1].forEach((obj) => { + canvas?.add(obj) + }) + } else { + canvas?.add(history[history.length - 1]) + } const newHistory = history.slice(0, -1) setHistory(newHistory) }