import { useState } from "react"; import { sqlDataTypes, tableThemes, defaultBlue, Tab, Action, ObjectType, } from "../../data/constants"; import { IconEdit, IconMore, IconMinus, IconDeleteStroked, IconKeyStroked, IconCheckboxTick, } from "@douyinfe/semi-icons"; import { Select, Input, TextArea, Card, Checkbox, InputNumber, TagInput, Row, Col, Popover, Tag, Button, SideSheet, Toast, } from "@douyinfe/semi-ui"; import { getSize, hasCheck, hasPrecision, isSized } from "../../utils/toSQL"; import useLayout from "../../hooks/useLayout"; import useSettings from "../../hooks/useSettings"; import useUndoRedo from "../../hooks/useUndoRedo"; import useTables from "../../hooks/useTables"; import useSelect from "../../hooks/useSelect"; import useTypes from "../../hooks/useTypes"; export default function Table(props) { const [isHovered, setIsHovered] = useState(false); const [hoveredField, setHoveredField] = useState(-1); const [editField, setEditField] = useState({}); const { layout } = useLayout(); const { deleteTable, updateTable, updateField, setRelationships } = useTables(); const { settings } = useSettings(); const { types } = useTypes(); const { setUndoStack, setRedoStack } = useUndoRedo(); const { selectedElement, setSelectedElement } = useSelect(); const height = props.tableData.fields.length * 36 + 50 + 7; return ( <> setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} >
{props.tableData.name}
{isHovered && (
} position="rightTop" showArrow trigger="click" style={{ width: "200px" }} >
)}
{props.tableData.fields.map((e, i) => { return settings.showFieldSummary ? (

{e.name}

{e.type}


{e.primary && ( Primary )} {e.unique && ( Unique )} {e.notNull && ( Not null )} {e.increment && ( Increment )}

Default :{" "} {e.default === "" ? "Not set" : e.default}

} position="right" showArrow > {field(e, i)} ) : ( field(e, i) ); })}
setSelectedElement((prev) => ({ ...prev, open: !prev.open, })) } style={{ paddingBottom: "16px" }} >
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 }, message: `Edit table name to ${e.target.value}`, }, ]); setRedoStack([]); }} />
{props.tableData.fields.map((f, j) => ( 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 }, message: `Edit table field name to "${e.target.value}"`, }, ]); setRedoStack([]); }} />