diff --git a/src/components/canvas.jsx b/src/components/canvas.jsx index 4de9c77..7478ba3 100644 --- a/src/components/canvas.jsx +++ b/src/components/canvas.jsx @@ -11,8 +11,12 @@ export default function Canvas(props) { endX: 0, endY: 0, }); + const [relationships, setRelationships] = useState([]); const [offset, setOffset] = useState({ x: 0, y: 0 }); - const [onRect, setOnRect] = useState(false); + const [onRect, setOnRect] = useState({ + tableId: -1, + field: -2, + }); const [panning, setPanning] = useState(false); const [panOffset, setPanOffset] = useState({ x: 0, y: 0 }); const [cursor, setCursor] = useState("default"); @@ -71,7 +75,7 @@ export default function Canvas(props) { const handleMouseDown = (e) => { if (dragging < 0) { - if (!onRect) { + if (onRect.tableId < 0) { setPanning(true); setPanOffset({ x: e.clientX, y: e.clientY }); setCursor("grabbing"); @@ -83,6 +87,7 @@ export default function Canvas(props) { setDragging(-1); setPanning(false); setCursor("default"); + if (linking) handleLinking(); setLinking(false); }; @@ -96,10 +101,21 @@ export default function Canvas(props) { setPanning(false); setDragging(-1); setLinking(true); - handleLinking(); }; - const handleLinking = () => {}; + const handleLinking = () => { + if (onRect.tableId < 0) return; + if (onRect.field < 0) return; + setRelationships((prev) => [ + ...prev, + { + startX: line.startX, + startY: line.startY, + endX: props.tables[onRect.tableId].x + 15, + endY: props.tables[onRect.tableId].y + onRect.field * 36 + 40 + 19, + }, + ]); + }; const [, drop] = useDrop( () => ({ @@ -203,6 +219,15 @@ export default function Canvas(props) { strokeDasharray="5,5" /> )} + {relationships.map((e) => ( + + ))} diff --git a/src/components/table.jsx b/src/components/table.jsx index 56be75c..11da960 100644 --- a/src/components/table.jsx +++ b/src/components/table.jsx @@ -96,11 +96,13 @@ export default function Table(props) { onMouseDown={props.onMouseDown} onMouseEnter={() => { setIsHovered(true); - props.setOnRect(true); }} onMouseLeave={() => { setIsHovered(false); - props.setOnRect(false); + props.setOnRect({ + tableId: -1, + field: -2, + }); }} >
{ -
e.preventDefault()}> + e.preventDefault()} + onMouseEnter={() => + props.setOnRect({ + tableId: props.id, + field: -1, + }) + } + > { setHoveredField(i); + props.setOnRect({ + tableId: props.id, + field: i, + }); }} onMouseLeave={() => { setHoveredField(-1);