From 12546d02c4e64c71bf3122d8427f7fa8a058ccfa Mon Sep 17 00:00:00 2001 From: Ayobami Date: Sun, 6 Jul 2025 21:06:47 +0100 Subject: [PATCH] Fix: undo and redo state management --- src/components/DockBuilder/DockBuilder.jsx | 45 +++++++++++++++------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/components/DockBuilder/DockBuilder.jsx b/src/components/DockBuilder/DockBuilder.jsx index ad6146f..9ec5772 100644 --- a/src/components/DockBuilder/DockBuilder.jsx +++ b/src/components/DockBuilder/DockBuilder.jsx @@ -609,26 +609,45 @@ export const DockBuilder = () => { const onUndoClick = useCallback(() => { const undoResult = stack.undo(); - if (undoResult && undoResult.currentState) { - editorMemo.loadFromJSON(undoResult.currentState, () => { - editorMemo.renderAll(); + if (undoResult.currentCount === -1) { + return 0; + } + if (undoResult.currentCount === 0) { + editorMemo.getObjects().forEach((obj) => { + if (obj !== editorMemo.backgroundImage) { + if (obj.type == "image") { + editorMemo.remove(obj).renderAll(); + } + } + const data = editorMemo.toJSON(["dockData"]); + localStorage.setItem("dock", JSON.stringify(data)); }); + } else if (undoResult.currentCount > 0) { + const json = JSON.parse(undoResult.currentState); + editorMemo.loadFromJSON( + json, + () => { + editorMemo.renderAll(); + }, + (obj) => {} + ); } }, [editorMemo]); const onRedoClick = useCallback(() => { const redoResult = stack.redo(); - if (redoResult && redoResult.currentState) { - // currentState is an array, get the first element - const state = Array.isArray(redoResult.currentState) - ? redoResult.currentState[0] - : redoResult.currentState; - if (state) { - editorMemo.loadFromJSON(state, () => { - editorMemo.renderAll(); - }); - } + if (!redoResult.currentState) { + return 0; } + + localStorage.setItem("dock", redoResult.currentState); + editorMemo.loadFromJSON( + JSON.parse(redoResult.currentState), + () => { + editorMemo.renderAll(); + }, + (o) => {} + ); }, [editorMemo]); const onPrintScreen = useCallback(() => {