import { useRef } from "react"; import { Cardinality, ObjectType, Tab, SubtypeRestriction } from "../../data/constants"; import { calcPath } from "../../utils/calcPath"; import { useDiagram, useSettings, useLayout, useSelect } from "../../hooks"; import { useTranslation } from "react-i18next"; import { SideSheet } from "@douyinfe/semi-ui"; import RelationshipInfo from "../EditorSidePanel/RelationshipsTab/RelationshipInfo"; import { CrowOM, CrowOO, CrowZM, IDEFZM, DefaultNotation, subDP, subDT, subOP, subOT } from "./RelationshipFormat"; export default function Relationship({ data }) { const { settings } = useSettings(); const { tables } = useDiagram(); const { layout } = useLayout(); const { selectedElement, setSelectedElement } = useSelect(); const { t } = useTranslation(); const pathRef = useRef(); const type = settings.notation === 'default' ? 0 : 10; const relationshipType=(0,0); let direction = 1; let cardinalityStart = "1"; let cardinalityEnd = "1"; let cardinalityvar; let subtypevar; switch (data.cardinality) { // the translated values are to ensure backwards compatibility case t(Cardinality.ZERO_TO_MANY): case Cardinality.ZERO_TO_MANY: if (settings.notation === 'default') { cardinalityStart = "n"; cardinalityEnd = "1"; } else { cardinalityStart = "(1,*)"; cardinalityEnd = "(1,1)"; cardinalityvar="1"; } break; case t(Cardinality.ONE_TO_MANY): case Cardinality.ONE_TO_MANY: if (settings.notation === 'default') { cardinalityStart = "1"; cardinalityEnd = "n"; } else { cardinalityStart = "(1,1)"; cardinalityEnd = "(1,*)"; cardinalityvar="2"; } break; case t(Cardinality.ONE_TO_ONE): case Cardinality.ONE_TO_ONE: if (settings.notation === 'default') { cardinalityStart = "1"; cardinalityEnd = "1"; } else { cardinalityStart = "(1,1)"; cardinalityEnd = "(1,1)"; cardinalityvar="3"; } break; default: break; } switch (data.subtype_restriction){ case t(SubtypeRestriction.DISJOINT_TOTAL): case SubtypeRestriction.DISJOINT_TOTAL: subtypevar="1"; console.log(subtypevar) break; case t(SubtypeRestriction.DISJOINT_PARTIAL): case SubtypeRestriction.DISJOINT_PARTIAL: subtypevar="2"; console.log(subtypevar) break; case t(SubtypeRestriction.OVERLAPPING_TOTAL): case SubtypeRestriction.OVERLAPPING_TOTAL: subtypevar="3"; console.log(subtypevar) break; case t(SubtypeRestriction.OVERLAPPING_PARTIAL): case SubtypeRestriction.OVERLAPPING_PARTIAL: subtypevar="4"; console.log(subtypevar) break; default: break; } let cardinalityStartX = 0; let cardinalityEndX = 0; let cardinalityStartY = 0; let cardinalityEndY = 0; const cardinalityOffset = 28; if (pathRef.current) { const pathLength = settings.notation === 'default' ? pathRef.current.getTotalLength() - cardinalityOffset: pathRef.current.getTotalLength(); const point1 = pathRef.current.getPointAtLength(cardinalityOffset); cardinalityStartX = point1.x; cardinalityStartY = point1.y; const point2 = pathRef.current.getPointAtLength( pathLength, ); cardinalityEndX = point2.x; cardinalityEndY = point2.y; } const edit = () => { if (!layout.sidebar) { setSelectedElement((prev) => ({ ...prev, element: ObjectType.RELATIONSHIP, id: data.id, open: true, })); } else { setSelectedElement((prev) => ({ ...prev, currentTab: Tab.RELATIONSHIPS, element: ObjectType.RELATIONSHIP, id: data.id, open: true, })); if (selectedElement.currentTab !== Tab.RELATIONSHIPS) return; document .getElementById(`scroll_ref_${data.id}`) .scrollIntoView({ behavior: "smooth" }); } }; if ((settings.notation === 'crows_foot' || settings.notation === 'idef1x') && cardinalityEndX < cardinalityStartX){ direction = -1; } return ( <> {CrowOM(pathRef.current,settings.notation, cardinalityvar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityStart, cardinalityEnd)} {CrowOO(pathRef.current,settings.notation, cardinalityvar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityStart, cardinalityEnd)} {CrowZM(pathRef.current,settings.notation, cardinalityvar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityStart, cardinalityEnd)} {DefaultNotation(pathRef.current,settings.notation, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, cardinalityStart, cardinalityEnd)} {IDEFZM(pathRef.current,settings.notation, cardinalityvar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityStart, cardinalityEnd)} {subDP(pathRef.current,settings.notation, subtypevar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityStart, cardinalityEnd)} {subDT(pathRef.current,settings.notation, subtypevar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityStart, cardinalityEnd)} {subOT(pathRef.current,settings.notation, subtypevar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityStart, cardinalityEnd)} {subOP(pathRef.current,settings.notation, subtypevar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityStart, cardinalityEnd)} { setSelectedElement((prev) => ({ ...prev, open: false, })); }} style={{ paddingBottom: "16px" }} >
); }