import { useState } from "react"; import { Collapse, Input, TextArea, Button, Card, Popover, } from "@douyinfe/semi-ui"; import { IconDeleteStroked } from "@douyinfe/semi-icons"; import { useTables, useUndoRedo } from "../../../hooks"; import { Action, ObjectType, defaultBlue } from "../../../data/constants"; import ColorPalette from "../../ColorPicker"; import TableField from "./TableField"; import IndexDetails from "./IndexDetails"; import { useTranslation } from "react-i18next"; export default function TableInfo({ data }) { const { t } = useTranslation(); const [indexActiveKey, setIndexActiveKey] = useState(""); const { deleteTable, updateTable, updateField, setRelationships } = useTables(); const { setUndoStack, setRedoStack } = useUndoRedo(); const [editField, setEditField] = useState({}); const [drag, setDrag] = useState({ draggingElementIndex: null, draggingOverIndexList: [], }); 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([]); }} />
{data.fields.map((f, j) => (
{ setDrag((prev) => ({ ...prev, draggingElementIndex: j })); }} onDragLeave={() => { setDrag((prev) => ({ ...prev, draggingOverIndexList: prev.draggingOverIndexList.filter( (index) => index !== j, ), })); }} onDragOver={(e) => { e.preventDefault(); if (drag.draggingElementIndex != null) { if (j !== drag.draggingElementIndex) { setDrag((prev) => { if (prev.draggingOverIndexList.includes(j)) { return prev; } return { ...prev, draggingOverIndexList: prev.draggingOverIndexList.concat(j), }; }); } return; } }} onDrop={(e) => { e.preventDefault(); const index = drag.draggingElementIndex; setDrag({ draggingElementIndex: null, draggingOverIndexList: [] }); if (index == null || index === j) { return; } const a = data.fields[index]; const b = data.fields[j]; updateField(data.id, index, { ...b, id: index }); updateField(data.id, j, { ...a, id: j }); setRelationships((prev) => prev.map((e) => { if (e.startTableId === data.id) { if (e.startFieldId === index) { return { ...e, startFieldId: j }; } if (e.startFieldId === j) { return { ...e, startFieldId: index }; } } if (e.endTableId === data.id) { if (e.endFieldId === index) { return { ...e, endFieldId: j }; } if (e.endFieldId === j) { return { ...e, endFieldId: index }; } } return e; }), ); }} onDragEnd={(e) => { e.preventDefault(); setDrag({ draggingElementIndex: null, draggingOverIndexList: [] }); }} >
))} {data.indices.length > 0 && ( setIndexActiveKey(itemKey)} accordion > {data.indices.map((idx, k) => ( ({ value: e.name, label: e.name, }))} /> ))} )}