import { React, useState } from "react"; import Node from "./node"; import { IconEdit, IconDelete, IconPlus, IconMinus, } from "@arco-design/web-react/icon"; const Rect = (props) => { const [isHovered, setIsHovered] = useState(false); const [hoveredField, setHoveredField] = useState(-1); const [node, setNode] = useState(Node.NONE); 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 table = { name: "Students", }; const height = fields.length * 36 + (fields.length - 1) * 2 + 40 + 2; return ( { setIsHovered(true); props.setOnRect(true); }} onMouseLeave={() => { setIsHovered(false); props.setOnRect(false); }} >
{table.name} {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" }} />
); }; export default Rect;