From 771baed70e6172520cd74e6bd780cce05db30e55 Mon Sep 17 00:00:00 2001 From: 1ilit <1ilit@proton.me> Date: Sat, 25 Oct 2025 02:03:45 +0400 Subject: [PATCH] Fix retaining full table data after undo/redo --- src/components/EditorHeader/ControlPanel.jsx | 6 +- src/context/DiagramContext.jsx | 62 ++++++++++---------- 2 files changed, 33 insertions(+), 35 deletions(-) diff --git a/src/components/EditorHeader/ControlPanel.jsx b/src/components/EditorHeader/ControlPanel.jsx index 5a34c8ad..02d95fdd 100644 --- a/src/components/EditorHeader/ControlPanel.jsx +++ b/src/components/EditorHeader/ControlPanel.jsx @@ -157,7 +157,7 @@ export default function ControlPanel({ if (a.action === Action.ADD) { if (a.element === ObjectType.TABLE) { - deleteTable(a.id, false); + deleteTable(a.data.table.id, false); } else if (a.element === ObjectType.AREA) { deleteArea(areas[areas.length - 1].id, false); } else if (a.element === ObjectType.NOTE) { @@ -191,7 +191,7 @@ export default function ControlPanel({ } else if (a.action === Action.DELETE) { if (a.element === ObjectType.TABLE) { a.data.relationship.forEach((x) => addRelationship(x, false)); - addTable(a.data.table, false); + addTable(a.data, false); } else if (a.element === ObjectType.RELATIONSHIP) { addRelationship(a.data, false); } else if (a.element === ObjectType.NOTE) { @@ -326,7 +326,7 @@ export default function ControlPanel({ if (a.action === Action.ADD) { if (a.element === ObjectType.TABLE) { - addTable(null, false, a.id); + addTable(a.data, false); } else if (a.element === ObjectType.AREA) { addArea(null, false); } else if (a.element === ObjectType.NOTE) { diff --git a/src/context/DiagramContext.jsx b/src/context/DiagramContext.jsx index 804dcc9b..da4c1b4b 100644 --- a/src/context/DiagramContext.jsx +++ b/src/context/DiagramContext.jsx @@ -16,48 +16,46 @@ export default function DiagramContextProvider({ children }) { const { setUndoStack, setRedoStack } = useUndoRedo(); const { selectedElement, setSelectedElement } = useSelect(); - const addTable = (data, addToHistory = true, idToUse = null) => { - const id = idToUse || nanoid(); + const addTable = (data, addToHistory = true) => { + const id = nanoid(); + const newTable = { + id, + name: `table_${id}`, + x: transform.pan.x, + y: transform.pan.y, + locked: false, + fields: [ + { + name: "id", + type: database === DB.GENERIC ? "INT" : "INTEGER", + default: "", + check: "", + primary: true, + unique: true, + notNull: true, + increment: true, + comment: "", + id: nanoid(), + }, + ], + comment: "", + indices: [], + color: defaultBlue, + }; if (data) { setTables((prev) => { const temp = prev.slice(); - temp.splice(data.index, 0, data); + temp.splice(data.index, 0, data.table); return temp; }); } else { - setTables((prev) => [ - ...prev, - { - id, - name: `table_${id}`, - x: transform.pan.x, - y: transform.pan.y, - locked: false, - fields: [ - { - name: "id", - type: database === DB.GENERIC ? "INT" : "INTEGER", - default: "", - check: "", - primary: true, - unique: true, - notNull: true, - increment: true, - comment: "", - id: nanoid(), - }, - ], - comment: "", - indices: [], - color: defaultBlue, - }, - ]); + setTables((prev) => [...prev, newTable]); } if (addToHistory) { setUndoStack((prev) => [ ...prev, { - id: data ? data.id : id, + data: data || { table: newTable, index: tables.length - 1 }, action: Action.ADD, element: ObjectType.TABLE, message: t("add_table"), @@ -185,7 +183,7 @@ export default function DiagramContextProvider({ children }) { element: ObjectType.RELATIONSHIP, data: { relationship: data, - index: prevUndo.length + index: prevUndo.length, }, message: t("add_relationship"), },