import { React, useState } from "react"; import Node from "./node"; import { IconEdit, IconDelete, IconPlus, IconMinus, } from "@douyinfe/semi-icons"; import { Modal, Form, Checkbox, Row, Col } from "@douyinfe/semi-ui"; const Rect = (props) => { const [node, setNode] = useState(Node.NONE); const [isHovered, setIsHovered] = useState(false); const [hoveredField, setHoveredField] = useState(-1); const [name, setName] = useState("New Table"); const [visible, setVisible] = useState(false); const handleOk = () => { setVisible(false); }; const sqlDataTypes = [ "INT", "SMALLINT", "BIGINT", "DECIMAL", "NUMERIC", "FLOAT", "REAL", "DOUBLE PRECISION", "CHAR", "VARCHAR", "TEXT", "DATE", "TIME", "TIMESTAMP", "INTERVAL", "BOOLEAN", "BINARY", "VARBINARY", "BLOB", "CLOB", "UUID", "XML", "JSON", ]; const [fields, setFields] = useState([ { name: "id", type: "uuid", default: "", primary: true, unique: true, notNull: true, increment: false, }, { name: "name", type: "varchar(20)", default: "n/a", primary: false, unique: false, notNull: true, increment: false, }, ]); const height = fields.length * 36 + 40 + 4; return ( { setIsHovered(true); props.setOnRect(true); }} onMouseLeave={() => { setIsHovered(false); props.setOnRect(false); }} >
{
e.preventDefault()}> setName(e.target.value)} className={`p-1 select-text w-[100px] bg-gray-400 focus:bg-gray-200 ${ name < 1 ? "ring-2 ring-red-600" : "focus:ring-2 focus:ring-sky-500 " }`} />
} {isHovered && (
)}
{fields.map((e, i) => { return (
{ setHoveredField(i); }} onMouseLeave={() => { setHoveredField(-1); }} >
{e.name}
{hoveredField === i ? (
) : ( e.type )}
); })}
{ setNode(Node.TOP); props.setLinks([ ...props.links, { rect: props.id, node: Node.TOP, x: props.x + props.width / 2, y: props.y, }, ]); }} style={{ fill: node === Node.TOP ? "green" : "black" }} /> { setNode(Node.LEFT); props.setLinks([ ...props.links, { rect: props.id, node: Node.LEFT, x: props.x, y: props.y + height / 2, }, ]); }} style={{ fill: node === Node.LEFT ? "green" : "black" }} /> { setNode(Node.RIGHT); props.setLinks([ ...props.links, { rect: props.id, node: Node.RIGHT, x: props.x + props.width, y: props.y + height / 2, }, ]); }} style={{ fill: node === Node.RIGHT ? "green" : "black" }} /> { setNode(Node.BOTTOM); props.setLinks([ ...props.links, { rect: props.id, node: Node.BOTTOM, x: props.x + props.width / 2, y: props.y + height, }, ]); }} style={{ fill: node === Node.BOTTOM ? "green" : "black" }} />
{ return { label: value, value: index, }; })} >
Primary Unique Not null Increment
); }; export default Rect;