add relationships
This commit is contained in:
parent
e39feea551
commit
5e2c205f39
@ -11,8 +11,12 @@ export default function Canvas(props) {
|
|||||||
endX: 0,
|
endX: 0,
|
||||||
endY: 0,
|
endY: 0,
|
||||||
});
|
});
|
||||||
|
const [relationships, setRelationships] = useState([]);
|
||||||
const [offset, setOffset] = useState({ x: 0, y: 0 });
|
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 [panning, setPanning] = useState(false);
|
||||||
const [panOffset, setPanOffset] = useState({ x: 0, y: 0 });
|
const [panOffset, setPanOffset] = useState({ x: 0, y: 0 });
|
||||||
const [cursor, setCursor] = useState("default");
|
const [cursor, setCursor] = useState("default");
|
||||||
@ -71,7 +75,7 @@ export default function Canvas(props) {
|
|||||||
|
|
||||||
const handleMouseDown = (e) => {
|
const handleMouseDown = (e) => {
|
||||||
if (dragging < 0) {
|
if (dragging < 0) {
|
||||||
if (!onRect) {
|
if (onRect.tableId < 0) {
|
||||||
setPanning(true);
|
setPanning(true);
|
||||||
setPanOffset({ x: e.clientX, y: e.clientY });
|
setPanOffset({ x: e.clientX, y: e.clientY });
|
||||||
setCursor("grabbing");
|
setCursor("grabbing");
|
||||||
@ -83,6 +87,7 @@ export default function Canvas(props) {
|
|||||||
setDragging(-1);
|
setDragging(-1);
|
||||||
setPanning(false);
|
setPanning(false);
|
||||||
setCursor("default");
|
setCursor("default");
|
||||||
|
if (linking) handleLinking();
|
||||||
setLinking(false);
|
setLinking(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -96,10 +101,21 @@ export default function Canvas(props) {
|
|||||||
setPanning(false);
|
setPanning(false);
|
||||||
setDragging(-1);
|
setDragging(-1);
|
||||||
setLinking(true);
|
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(
|
const [, drop] = useDrop(
|
||||||
() => ({
|
() => ({
|
||||||
@ -203,6 +219,15 @@ export default function Canvas(props) {
|
|||||||
strokeDasharray="5,5"
|
strokeDasharray="5,5"
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
{relationships.map((e) => (
|
||||||
|
<line
|
||||||
|
x1={e.startX}
|
||||||
|
y1={e.startY}
|
||||||
|
x2={e.endX}
|
||||||
|
y2={e.endY}
|
||||||
|
stroke="gray"
|
||||||
|
/>
|
||||||
|
))}
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -96,11 +96,13 @@ export default function Table(props) {
|
|||||||
onMouseDown={props.onMouseDown}
|
onMouseDown={props.onMouseDown}
|
||||||
onMouseEnter={() => {
|
onMouseEnter={() => {
|
||||||
setIsHovered(true);
|
setIsHovered(true);
|
||||||
props.setOnRect(true);
|
|
||||||
}}
|
}}
|
||||||
onMouseLeave={() => {
|
onMouseLeave={() => {
|
||||||
setIsHovered(false);
|
setIsHovered(false);
|
||||||
props.setOnRect(false);
|
props.setOnRect({
|
||||||
|
tableId: -1,
|
||||||
|
field: -2,
|
||||||
|
});
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@ -110,7 +112,15 @@ export default function Table(props) {
|
|||||||
>
|
>
|
||||||
<div className="p-3 font-bold text-slate-800 h-[40px] bg-gray-400 rounded-t-md flex justify-between items-center">
|
<div className="p-3 font-bold text-slate-800 h-[40px] bg-gray-400 rounded-t-md flex justify-between items-center">
|
||||||
{
|
{
|
||||||
<form onSubmit={(e) => e.preventDefault()}>
|
<form
|
||||||
|
onSubmit={(e) => e.preventDefault()}
|
||||||
|
onMouseEnter={() =>
|
||||||
|
props.setOnRect({
|
||||||
|
tableId: props.id,
|
||||||
|
field: -1,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
value={name}
|
value={name}
|
||||||
@ -200,6 +210,10 @@ export default function Table(props) {
|
|||||||
} h-[36px] p-2 flex justify-between`}
|
} h-[36px] p-2 flex justify-between`}
|
||||||
onMouseEnter={() => {
|
onMouseEnter={() => {
|
||||||
setHoveredField(i);
|
setHoveredField(i);
|
||||||
|
props.setOnRect({
|
||||||
|
tableId: props.id,
|
||||||
|
field: i,
|
||||||
|
});
|
||||||
}}
|
}}
|
||||||
onMouseLeave={() => {
|
onMouseLeave={() => {
|
||||||
setHoveredField(-1);
|
setHoveredField(-1);
|
||||||
|
Loading…
Reference in New Issue
Block a user