Clean up relationship component
This commit is contained in:
parent
23bc6278a2
commit
91549d3089
@ -1,17 +1,16 @@
|
|||||||
import { useRef, useState } from "react";
|
import { useRef } from "react";
|
||||||
import { calcPath } from "../utils";
|
import { calcPath } from "../utils";
|
||||||
import { Cardinality } from "../data/data";
|
import { Cardinality } from "../data/data";
|
||||||
import useSettings from "../hooks/useSettings";
|
import useSettings from "../hooks/useSettings";
|
||||||
|
|
||||||
export default function Relationship(props) {
|
export default function Relationship({ data }) {
|
||||||
const [hovered, setHovered] = useState(false);
|
|
||||||
const { settings } = useSettings();
|
const { settings } = useSettings();
|
||||||
const pathRef = useRef();
|
const pathRef = useRef();
|
||||||
|
|
||||||
let cardinalityStart = "1";
|
let cardinalityStart = "1";
|
||||||
let cardinalityEnd = "1";
|
let cardinalityEnd = "1";
|
||||||
|
|
||||||
switch (props.data.cardinality) {
|
switch (data.cardinality) {
|
||||||
case Cardinality.MANY_TO_ONE:
|
case Cardinality.MANY_TO_ONE:
|
||||||
cardinalityStart = "n";
|
cardinalityStart = "n";
|
||||||
cardinalityEnd = "1";
|
cardinalityEnd = "1";
|
||||||
@ -33,48 +32,37 @@ export default function Relationship(props) {
|
|||||||
let cardinalityStartY = 0;
|
let cardinalityStartY = 0;
|
||||||
let cardinalityEndY = 0;
|
let cardinalityEndY = 0;
|
||||||
|
|
||||||
const length = 32;
|
const cardinalityOffset = 28;
|
||||||
|
|
||||||
if (pathRef.current) {
|
if (pathRef.current) {
|
||||||
const pathLength = pathRef.current.getTotalLength();
|
const pathLength = pathRef.current.getTotalLength();
|
||||||
const point1 = pathRef.current.getPointAtLength(length);
|
const point1 = pathRef.current.getPointAtLength(cardinalityOffset);
|
||||||
cardinalityStartX = point1.x;
|
cardinalityStartX = point1.x;
|
||||||
cardinalityStartY = point1.y;
|
cardinalityStartY = point1.y;
|
||||||
const point2 = pathRef.current.getPointAtLength(pathLength - length);
|
const point2 = pathRef.current.getPointAtLength(
|
||||||
|
pathLength - cardinalityOffset
|
||||||
|
);
|
||||||
cardinalityEndX = point2.x;
|
cardinalityEndX = point2.x;
|
||||||
cardinalityEndY = point2.y;
|
cardinalityEndY = point2.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<g className="select-none">
|
<g className="select-none group">
|
||||||
<defs>
|
|
||||||
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
|
|
||||||
<feDropShadow
|
|
||||||
dx="0"
|
|
||||||
dy="0"
|
|
||||||
stdDeviation="4"
|
|
||||||
floodColor="gray"
|
|
||||||
floodOpacity="0.3"
|
|
||||||
/>
|
|
||||||
</filter>
|
|
||||||
</defs>
|
|
||||||
<path
|
<path
|
||||||
ref={pathRef}
|
ref={pathRef}
|
||||||
d={calcPath(
|
d={calcPath(
|
||||||
props.data.startX,
|
data.startX,
|
||||||
props.data.endX,
|
data.endX,
|
||||||
props.data.startY,
|
data.startY,
|
||||||
props.data.endY,
|
data.endY,
|
||||||
props.data.startFieldId,
|
data.startFieldId,
|
||||||
props.data.endFieldId
|
data.endFieldId
|
||||||
)}
|
)}
|
||||||
stroke={hovered ? "blue" : "gray"}
|
stroke="gray"
|
||||||
|
className="group-hover:stroke-sky-700"
|
||||||
fill="none"
|
fill="none"
|
||||||
strokeWidth={2}
|
strokeWidth={2}
|
||||||
filter="url(#shadow)"
|
|
||||||
cursor="pointer"
|
cursor="pointer"
|
||||||
onMouseEnter={() => setHovered(true)}
|
|
||||||
onMouseLeave={() => setHovered(false)}
|
|
||||||
/>
|
/>
|
||||||
{pathRef.current && settings.showCardinality && (
|
{pathRef.current && settings.showCardinality && (
|
||||||
<>
|
<>
|
||||||
@ -83,6 +71,7 @@ export default function Relationship(props) {
|
|||||||
cy={cardinalityStartY}
|
cy={cardinalityStartY}
|
||||||
r="12"
|
r="12"
|
||||||
fill="grey"
|
fill="grey"
|
||||||
|
className="group-hover:fill-sky-700"
|
||||||
></circle>
|
></circle>
|
||||||
<text
|
<text
|
||||||
x={cardinalityStartX}
|
x={cardinalityStartX}
|
||||||
@ -99,6 +88,7 @@ export default function Relationship(props) {
|
|||||||
cy={cardinalityEndY}
|
cy={cardinalityEndY}
|
||||||
r="12"
|
r="12"
|
||||||
fill="grey"
|
fill="grey"
|
||||||
|
className="group-hover:fill-sky-700"
|
||||||
></circle>
|
></circle>
|
||||||
<text
|
<text
|
||||||
x={cardinalityEndX}
|
x={cardinalityEndX}
|
||||||
|
Loading…
Reference in New Issue
Block a user