fix deleting tables

This commit is contained in:
1ilit 2023-09-19 15:48:13 +03:00
parent d3897f8112
commit 7f6a2d208f
6 changed files with 2176 additions and 2066 deletions

4139
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -294,7 +294,6 @@ export default function Canvas(props) {
onMouseDown={(e) => onMouseDown={(e) =>
handleMouseDownRect(e, table.id, ObjectType.TABLE) handleMouseDownRect(e, table.id, ObjectType.TABLE)
} }
handleDelete={props.handleDelete}
/> />
))} ))}
{linking && ( {linking && (

View File

@ -1,4 +1,4 @@
import { React, useState, useRef } from "react"; import { React, useState, useRef, memo } from "react";
import { ResizableBox } from "react-resizable"; import { ResizableBox } from "react-resizable";
import CodeMirror from "@uiw/react-codemirror"; import CodeMirror from "@uiw/react-codemirror";
import { createTheme } from "@uiw/codemirror-themes"; import { createTheme } from "@uiw/codemirror-themes";
@ -28,7 +28,7 @@ const myTheme = createTheme({
], ],
}); });
export default function EditorPanel(props) { const EditorPanel = memo(function EditorPanel(props) {
const [tab, setTab] = useState("1"); const [tab, setTab] = useState("1");
const map = useRef(new Map()); const map = useRef(new Map());
@ -40,7 +40,7 @@ export default function EditorPanel(props) {
]; ];
const contentList = [ const contentList = [
<div> <div>
<TableOverview tables={props.tables} setTables={props.setTables} handleDelete={props.handleDelete}/> <TableOverview tables={props.tables} setTables={props.setTables}/>
</div>, </div>,
<div> <div>
<ReferenceOverview <ReferenceOverview
@ -176,4 +176,6 @@ export default function EditorPanel(props) {
</div> </div>
</ResizableBox> </ResizableBox>
); );
} });
export default EditorPanel;

View File

@ -21,7 +21,7 @@ import {
export default function Table(props) { export default function Table(props) {
const [isHovered, setIsHovered] = useState(false); const [isHovered, setIsHovered] = useState(false);
const [hoveredField, setHoveredField] = useState(-1); const [hoveredField, setHoveredField] = useState(-1);
const [name, setName] = useState(props.tableData.name); // const [name, setName] = useState(props.tableData.name);
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
const [editFieldVisible, setEditFieldVisible] = useState(-1); const [editFieldVisible, setEditFieldVisible] = useState(-1);
@ -127,16 +127,16 @@ export default function Table(props) {
}) })
} }
> >
<input <div
type="text" // type="text"
value={name} // value={name}
onChange={(e) => setName(e.target.value)} // onChange={(e) => setName(e.target.value)}
className={`p-1 select-text w-[100px] bg-gray-400 focus:bg-gray-200 ${ className={`p-1 select-text w-[100px] bg-gray-400 focus:bg-gray-200 ${
name < 1 false
? "ring-2 ring-red-600" ? "ring-2 ring-red-600"
: "focus:ring-2 focus:ring-sky-500 " : "focus:ring-2 focus:ring-sky-500 "
}`} }`}
/> >{props.tableData.name}</div>
</form> </form>
} }
{isHovered && ( {isHovered && (
@ -157,7 +157,7 @@ export default function Table(props) {
okText="Delete" okText="Delete"
onConfirm={() => { onConfirm={() => {
Toast.success(`Table deleted!`); Toast.success(`Table deleted!`);
props.handleDelete(props.id); console.log("table.jsx ", props.id);
}} }}
onCancel={() => {}} onCancel={() => {}}
> >

View File

@ -1,8 +1,7 @@
import { React, useState } from "react"; import { React, useState, memo } from "react";
import { defaultTableTheme, sqlDataTypes, tableThemes } from "../data/data"; import { defaultTableTheme, sqlDataTypes, tableThemes } from "../data/data";
import { import {
Collapse, Collapse,
Input,
Row, Row,
Col, Col,
Form, Form,
@ -12,7 +11,7 @@ import {
Checkbox, Checkbox,
Select, Select,
AutoComplete, AutoComplete,
Toast Toast,
} from "@douyinfe/semi-ui"; } from "@douyinfe/semi-ui";
import { import {
IconMore, IconMore,
@ -24,9 +23,9 @@ import {
IconSearch, IconSearch,
} from "@douyinfe/semi-icons"; } from "@douyinfe/semi-icons";
export default function TableOverview(props) { const TableOverview = memo(function TableOverView(props) {
const [indexActiveKey, setIndexActiveKey] = useState(""); const [indexActiveKey, setIndexActiveKey] = useState("");
const [indexActiveKeyTable, setIndexActiveKeyTable] = useState([]); const [tableActiveKey, setTableActiveKey] = useState("");
const updateColor = (id, c) => { const updateColor = (id, c) => {
const updatedTables = [...props.tables]; const updatedTables = [...props.tables];
@ -71,7 +70,7 @@ export default function TableOverview(props) {
onChange={(v) => handleChange(v)} onChange={(v) => handleChange(v)}
onSelect={(v) => { onSelect={(v) => {
const { id, name } = props.tables.find((t) => t.name === v); const { id, name } = props.tables.find((t) => t.name === v);
setIndexActiveKeyTable([`${id}`]); setTableActiveKey(`${id}`);
document document
.getElementById(`${name}_scroll_id`) .getElementById(`${name}_scroll_id`)
.scrollIntoView({ behavior: "smooth" }); .scrollIntoView({ behavior: "smooth" });
@ -122,29 +121,32 @@ export default function TableOverview(props) {
</Row> </Row>
</div> </div>
<Collapse <Collapse
activeKey={indexActiveKeyTable} activeKey={tableActiveKey}
onChange={(k) => setIndexActiveKeyTable(k)} onChange={(k) => setTableActiveKey(k)}
accordion
> >
{props.tables.map((t, i) => ( {props.tables.map((t, i) => (
<div id={`${t.name}_scroll_id`} key={t.id}> <div id={`${t.name}_scroll_id`} key={t.id}>
<Collapse.Panel <Collapse.Panel header={<div>{t.name}</div>} itemKey={`${t.id}`}>
header={
<div>
<Input defaultValue={t.name} borderless />
</div>
}
itemKey={`${t.id}`}
>
{t.fields.map((f, j) => ( {t.fields.map((f, j) => (
<Form <Form
key={j} key={j}
onChange={(value) => { onChange={(value) => {
const updatedTables = [...props.tables]; props.setTables((prev) => {
updatedTables[i].fields = updatedTables[i].fields.map( return prev.map((p, idx) => {
(field, index) => if (idx === i) {
index === j ? { ...field, ...value.values } : field return {
); ...p,
props.setTables(updatedTables); fields: p.fields.map((field, index) =>
index === j
? { ...field, ...value.values }
: field
),
};
}
return p;
});
});
}} }}
> >
<Row <Row
@ -176,6 +178,7 @@ export default function TableOverview(props) {
})} })}
filter filter
initValue={f.type} initValue={f.type}
placeholder="Type"
></Form.Select> ></Form.Select>
</Col> </Col>
<Col span={3}> <Col span={3}>
@ -583,7 +586,12 @@ export default function TableOverview(props) {
type="danger" type="danger"
onClick={() => { onClick={() => {
Toast.success(`Table deleted!`); Toast.success(`Table deleted!`);
props.handleDelete(i); props.setTables((prev) => {
return prev
.filter((e) => e.id !== i)
.map((e, idx) => ({ ...e, id: idx }));
});
setTableActiveKey("");
}} }}
></Button> ></Button>
</Col> </Col>
@ -594,4 +602,6 @@ export default function TableOverview(props) {
</Collapse> </Collapse>
</> </>
); );
} });
export default TableOverview;

View File

@ -1,4 +1,4 @@
import React, { useState } from "react"; import React, { useState, useEffect } from "react";
import Header from "../components/header"; import Header from "../components/header";
import Sidebar from "../components/sidebar"; import Sidebar from "../components/sidebar";
import ControlPanel from "../components/control_panel"; import ControlPanel from "../components/control_panel";
@ -13,14 +13,13 @@ export default function Editor(props) {
const [relationships, setRelationships] = useState([]); const [relationships, setRelationships] = useState([]);
const [areas, setAreas] = useState([]); const [areas, setAreas] = useState([]);
const deleteTable = (id) => { useEffect(() => {
let updatedTables = [...tables]; console.log("changed: ", tables);
updatedTables.splice(id, 1); }, [tables]);
updatedTables = updatedTables.length>0? updatedTables.map((t, i) => ({ ...t, id: i })):[];
setTables(updatedTables);
console.log(tables);
};
// const handleDelete = useCallback((id)=>{
// setTables(prev=>prev.filter(e=>e.id!==id).map((e, i)=>({...e, id: i})))
// }, [])
return ( return (
<> <>
@ -37,7 +36,7 @@ export default function Editor(props) {
setRelationships={setRelationships} setRelationships={setRelationships}
areas={areas} areas={areas}
setAreas={setAreas} setAreas={setAreas}
handleDelete={deleteTable} // handleDelete={handleDelete}
/> />
<Canvas <Canvas
tables={tables} tables={tables}
@ -48,7 +47,6 @@ export default function Editor(props) {
setRelationships={setRelationships} setRelationships={setRelationships}
areas={areas} areas={areas}
setAreas={setAreas} setAreas={setAreas}
handleDelete={deleteTable}
/> />
</DndProvider> </DndProvider>
<Sidebar /> <Sidebar />