import { React, useContext, useState, useRef } from "react"; import { Action, ObjectType, defaultTableTheme, sqlDataTypes, tableThemes, } from "../data/data"; import { Collapse, Row, Col, Input, Form, Button, Card, Popover, Checkbox, Select, AutoComplete, Toast, Empty, } from "@douyinfe/semi-ui"; import { IconMore, IconKeyStroked, IconDeleteStroked, IconCheckboxTick, IconPlus, IconSearch, } from "@douyinfe/semi-icons"; import { IllustrationNoContent, IllustrationNoContentDark, } from "@douyinfe/semi-illustrations"; import { TableContext, UndoRedoContext } from "../pages/editor"; export default function TableOverview(props) { const [indexActiveKey, setIndexActiveKey] = useState(""); const [value, setValue] = useState(""); const { tables, setTables, addTable, deleteTable } = useContext(TableContext); const { setUndoStack, setRedoStack } = useContext(UndoRedoContext); const [editField, setEditField] = useState({}); const selectRef = useRef(null); const [filteredResult, setFilteredResult] = useState( tables.map((t) => { return t.name; }) ); const handleStringSearch = (value) => { setFilteredResult( tables .map((t) => { return t.name; }) .filter((i) => i.includes(value)) ); }; 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; }) ); }; return ( <> } placeholder="Search..." emptyContent={
No tables found
} onSearch={(v) => handleStringSearch(v)} onChange={(v) => setValue(v)} onSelect={(v) => { const { id } = tables.find((t) => t.name === v); props.setSelectedTable(`${id}`); document .getElementById(`scroll_table_${id}`) .scrollIntoView({ behavior: "smooth" }); }} className="w-full" />
props.setSelectedTable(k)} accordion > {tables.length <= 0 ? (
} darkModeImage={ } title="No tables" description="Start building your diagram!" />
) : ( tables.map((t, i) => (
{t.name}
} itemKey={`${t.id}`}> {t.fields.map((f, j) => ( updatedField(i, j, { name: value }) } onFocus={(e) => setEditField({ tid: i, fid: j, values: { name: e.target.value }, }) } onBlur={(e) => { if (e.target.value === editField.name) return; setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.TABLE, component: "field", data: { undo: editField, redo: { tid: i, fid: j, values: { name: e.target.value }, }, }, }, ]); setRedoStack([]); setEditField({}); }} />
updatedField(i, j, value.values) } >
updatedField(i, j, { [checkedValues.target.value]: checkedValues.target.checked, }) } >
updatedField(i, j, { [checkedValues.target.value]: checkedValues.target.checked, }) } >
} trigger="click" position="rightTop" showArrow >
))} {t.indices.length > 0 && ( setIndexActiveKey(itemKey)} accordion > {t.indices.map((idx, k) => (