import { useState, useRef } from "react"; import { Collapse, Input, TextArea, Button, Card, Select, } from "@douyinfe/semi-ui"; import ColorPicker from "../ColorPicker"; import { IconDeleteStroked } from "@douyinfe/semi-icons"; import { useDiagram, useSaveState, useUndoRedo } from "../../../hooks"; import { Action, ObjectType, State, DB } from "../../../data/constants"; import TableField from "./TableField"; import IndexDetails from "./IndexDetails"; import { useTranslation } from "react-i18next"; import { SortableList } from "../../SortableList/SortableList"; import { nanoid } from "nanoid"; export default function TableInfo({ data }) { const { tables, database } = useDiagram(); const { t } = useTranslation(); const [indexActiveKey, setIndexActiveKey] = useState(""); const { deleteTable, updateTable, setTables } = useDiagram(); const { setUndoStack, setRedoStack } = useUndoRedo(); const { setSaveState } = useSaveState(); const [editField, setEditField] = useState({}); const initialColorRef = useRef(data.color); const handleColorPick = (color) => { setUndoStack((prev) => { let undoColor = initialColorRef.current; const lastColorChange = prev.findLast( (e) => e.element === ObjectType.TABLE && e.tid === data.id && e.action === Action.EDIT && e.redo?.color, ); if (lastColorChange) { undoColor = lastColorChange.redo.color; } if (color === undoColor) return prev; const newStack = [ ...prev, { action: Action.EDIT, element: ObjectType.TABLE, component: "self", tid: data.id, undo: { color: undoColor }, redo: { color: color }, message: t("edit_table", { tableName: data.name, extra: "[color]", }), }, ]; return newStack; }); setRedoStack([]); }; const inheritedFieldNames = Array.isArray(data.inherits) && data.inherits.length > 0 ? data.inherits .map((parentName) => { const parent = tables.find((t) => t.name === parentName); return parent ? parent.fields.map((f) => f.name) : []; }) .flat() : []; return (
{t("name")}:
updateTable(data.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: data.id, undo: editField, redo: { name: e.target.value }, message: t("edit_table", { tableName: e.target.value, extra: "[name]", }), }, ]); setRedoStack([]); }} />
setTables((prev) => prev.map((t) => t.id === data.id ? { ...t, fields: newFields } : t, ), ) } afterChange={() => setSaveState(State.SAVING)} renderItem={(item, i) => ( )} /> {database === DB.POSTGRES && (
{t("inherits")}: