diff --git a/src/components/control_panel.jsx b/src/components/control_panel.jsx index 83a6d25..33dd2b1 100644 --- a/src/components/control_panel.jsx +++ b/src/components/control_panel.jsx @@ -186,19 +186,11 @@ export default function ControlPanel(props) { }) ); } else if (a.component === "field_add") { - setTables((prev) => - prev.map((t, i) => { - if (t.id === a.tid) { - return { - ...t, - fields: t.fields - .filter((e) => e.id !== tables[a.tid].fields.length - 1) - .map((t, i) => ({ ...t, id: i })), - }; - } - return t; - }) - ); + updateTable(a.tid, { + fields: tables[a.tid].fields + .filter((e) => e.id !== tables[a.tid].fields.length - 1) + .map((t, i) => ({ ...t, id: i })), + }); } else if (a.component === "comment") { updateTable(a.tid, a.undo, false); } else if (a.component === "index_add") { diff --git a/src/components/table.jsx b/src/components/table.jsx index 148db62..af386d0 100644 --- a/src/components/table.jsx +++ b/src/components/table.jsx @@ -4,6 +4,8 @@ import { tableThemes, defaultTableTheme, Tab, + Action, + ObjectType, } from "../data/data"; import { IconEdit, @@ -17,6 +19,8 @@ import { import { Popconfirm, Select, + Input, + TextArea, Card, Form, Checkbox, @@ -33,51 +37,26 @@ import { SettingsContext, TabContext, TableContext, + UndoRedoContext, } from "../pages/editor"; export default function Table(props) { const [isHovered, setIsHovered] = useState(false); + const [indexActiveKey, setIndexActiveKey] = useState(""); const [hoveredField, setHoveredField] = useState(-1); const [visible, setVisible] = useState(false); const { layout } = useContext(LayoutContext); - const { setTables, deleteTable } = useContext(TableContext); + const { setTables, deleteTable, updateTable, updateField } = + useContext(TableContext); const { tab, setTab } = useContext(TabContext); const { settings } = useContext(SettingsContext); const height = props.tableData.fields.length * 36 + 50 + 3; - const updatedField = (tid, fid, updatedValues) => { - setTables((prev) => - prev.map((table, i) => { - if (tid === i) { - return { - ...table, - fields: table.fields.map((field, j) => - fid === j ? { ...field, ...updatedValues } : field - ), - }; - } - return table; - }) - ); - }; - - const updateTable = (tid, updatedValues) => { - setTables((prev) => - prev.map((table, i) => { - if (tid === i) { - return { - ...table, - ...updatedValues, - }; - } - return table; - }) - ); - }; - + const { setUndoStack, setRedoStack } = useContext(UndoRedoContext); + const [editField, setEditField] = useState({}); return ( - + <> Default :{" "} {e.default === "" ? "Not set" : e.default}

-

- Comment :{" "} - {e.comment === "" ? "Not comment" : e.comment} -

} position="right" @@ -260,178 +235,335 @@ export default function Table(props) {
setVisible((prev) => !prev)} style={{ paddingBottom: "16px" }} > -
updateTable(props.tableData.id, value.values)} - > - +
Name:
+ + updateTable(props.tableData.id, { name: value }) + } + onFocus={(e) => setEditField({ name: e.target.value })} + onBlur={(e) => { + if (e.target.value === editField.name) return; + setUndoStack((prev) => [ + ...prev, + { + action: Action.EDIT, + element: ObjectType.TABLE, + component: "self", + tid: props.tableData.id, + undo: editField, + redo: { name: e.target.value }, + }, + ]); + setRedoStack([]); + }} /> - +
{props.tableData.fields.map((f, j) => ( -
- updatedField(props.tableData.id, j, value.values) - } - initValues={f} - > - - - - - - { - return { - label: value, - value: value, - }; - })} - filter - placeholder="Type" - > - - + + + updateField(props.tableData.id, j, { name: value }) + } + onFocus={(e) => setEditField({ name: e.target.value })} + onBlur={(e) => { + if (e.target.value === editField.name) return; + setUndoStack((prev) => [ + ...prev, + { + action: Action.EDIT, + element: ObjectType.TABLE, + component: "field", + tid: props.tableData.id, + fid: j, + undo: editField, + redo: { name: e.target.value }, + }, + ]); + setRedoStack([]); + }} + /> + + + + + + - - - - updatedField(props.tableData.id, j, value.values) - } - > - - -
- - - updatedField(props.tableData.id, j, { + ? + + + + + + + +
Default value
+ + updateField(props.tableData.id, j, { default: value }) + } + onFocus={(e) => + setEditField({ default: e.target.value }) + } + onBlur={(e) => { + if (e.target.value === editField.default) return; + setUndoStack((prev) => [ + ...prev, + { + action: Action.EDIT, + element: ObjectType.TABLE, + component: "field", + tid: props.tableData.id, + fid: j, + undo: editField, + redo: { default: e.target.value }, + }, + ]); + setRedoStack([]); + }} + /> +
Check Expression
+ + updateField(props.tableData.id, j, { check: value }) + } + onFocus={(e) => setEditField({ check: e.target.value })} + onBlur={(e) => { + if (e.target.value === editField.check) return; + setUndoStack((prev) => [ + ...prev, + { + action: Action.EDIT, + element: ObjectType.TABLE, + component: "field", + tid: props.tableData.id, + fid: j, + undo: editField, + redo: { check: e.target.value }, + }, + ]); + setRedoStack([]); + }} + /> +
+
Unique
+ { + setUndoStack((prev) => [ + ...prev, + { + action: Action.EDIT, + element: ObjectType.TABLE, + component: "field", + tid: props.tableData.id, + fid: j, + undo: { + [checkedValues.target.value]: + !checkedValues.target.checked, + }, + redo: { [checkedValues.target.value]: checkedValues.target.checked, - }) - } - > -
-
- - - updatedField(props.tableData.id, j, { - [checkedValues.target.value]: - checkedValues.target.checked, - }) - } - > -
- - - + >
- } - trigger="click" - position="rightTop" - showArrow - > - -
- -
- +
+
Autoincrement
+ { + setUndoStack((prev) => [ + ...prev, + { + action: Action.EDIT, + element: ObjectType.TABLE, + component: "field", + tid: props.tableData.id, + fid: j, + undo: { + [checkedValues.target.value]: + !checkedValues.target.checked, + }, + redo: { + [checkedValues.target.value]: + checkedValues.target.checked, + }, + }, + ]); + setRedoStack([]); + updateField(props.tableData.id, j, { + [checkedValues.target.value]: + checkedValues.target.checked, + }); + }} + > +
+
Comment
+