From 2cfcc94a5dbc08e92d678f3fed286a1bb83e8df5 Mon Sep 17 00:00:00 2001 From: 1ilit Date: Tue, 19 Sep 2023 15:49:41 +0300 Subject: [PATCH] shtuff --- src/components/control_panel.jsx | 87 ++++++++++++++++++++++---------- src/pages/editor.jsx | 61 ++++++++++++---------- 2 files changed, 94 insertions(+), 54 deletions(-) diff --git a/src/components/control_panel.jsx b/src/components/control_panel.jsx index 88d4f0b..c99f011 100644 --- a/src/components/control_panel.jsx +++ b/src/components/control_panel.jsx @@ -42,6 +42,7 @@ import { NoteContext, SettingsContext, TableContext, + UndoRedoContext, } from "../pages/editor"; import { AddTable, AddArea, AddNote } from "./custom_icons"; import { defaultTableTheme, defaultNoteTheme } from "../data/data"; @@ -79,6 +80,8 @@ export default function ControlPanel(props) { useContext(TableContext); const { notes, setNotes } = useContext(NoteContext); const { areas, setAreas } = useContext(AreaContext); + const { undoStack, redoStack, setUndoStack, setRedoStack } = + useContext(UndoRedoContext); const menu = { File: { @@ -414,6 +417,60 @@ export default function ControlPanel(props) { setNotes(data.notes); }; + const addTable = () =>{ + setTables((prev) => [ + ...prev, + { + id: prev.length, + name: `table_${prev.length}`, + x: 0, + y: 0, + fields: [ + { + name: "id", + type: "UUID", + default: "", + check: "", + primary: true, + unique: true, + notNull: true, + increment: true, + comment: "", + }, + ], + comment: "", + indices: [], + color: defaultTableTheme, + }, + ]); + setUndoStack((prev)=>[...prev, { + action: "add", + element: "table", + }]) + } + + const undo = () =>{ + if(undoStack.length===0) return; + const a = undoStack.pop(); + if(a.action==="add"){ + if(a.element==="table"){ + setTables(prev=>prev.filter(e=>e.id!==prev.length-1).map((e, i)=>({...e, id: i}))) + } + } + setRedoStack(prev=>[...prev, a]) + } + + const redo = () =>{ + if(redoStack.length===0) return; + const a = redoStack.pop(); + if(a.action==="add"){ + if(a.element==="table"){ + addTable(); + } + } + setUndoStack(prev=>[...prev, a]) + } + return (
{layout.header && header()} @@ -486,12 +543,14 @@ export default function ControlPanel(props) { @@ -499,33 +558,7 @@ export default function ControlPanel(props) { diff --git a/src/pages/editor.jsx b/src/pages/editor.jsx index 7b54922..40d045c 100644 --- a/src/pages/editor.jsx +++ b/src/pages/editor.jsx @@ -13,6 +13,7 @@ export const AreaContext = createContext(); export const TabContext = createContext(); export const NoteContext = createContext(); export const SettingsContext = createContext(); +export const UndoRedoContext = createContext(); export default function Editor(props) { const [code, setCode] = useState(""); @@ -42,6 +43,8 @@ export default function Editor(props) { zoom: 1, showGrid: true, }); + const [undoStack, setUndoStack] = useState([]); + const [redoStack, setRedoStack] = useState([]); const dragHandler = (e) => { if (!resize) return; @@ -62,39 +65,43 @@ export default function Editor(props) { -
- -
setResize(false)} - onMouseMove={dragHandler} - > - - {layout.sidebar && ( - +
+ +
setResize(false)} + onMouseMove={dragHandler} + > + + {layout.sidebar && ( + + )} + - )} - - - {layout.services && } + + {layout.services && } +
-
+