diff --git a/src/components/EditorCanvas/Relationship.jsx b/src/components/EditorCanvas/Relationship.jsx index 3667aea..fd4b33e 100644 --- a/src/components/EditorCanvas/Relationship.jsx +++ b/src/components/EditorCanvas/Relationship.jsx @@ -5,7 +5,7 @@ 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 } from "./RelationshipFormat"; +import { CrowOM, CrowOO, CrowZM, DefaultNotation } from "./RelationshipFormat"; export default function Relationship({ data }) { @@ -15,32 +15,48 @@ export default function Relationship({ data }) { const { selectedElement, setSelectedElement } = useSelect(); const { t } = useTranslation(); const pathRef = useRef(); + const type = settings.notation === 'default' ? 0 : 10; + const relationshipType=(5,type); + let direction = 1; let cardinalityStart = "1"; let cardinalityEnd = "1"; let cardinalityvar; - let type = 10; - let relationshipType=(5,type); switch (data.cardinality) { // the translated values are to ensure backwards compatibility case t(Cardinality.MANY_TO_ONE): case Cardinality.MANY_TO_ONE: - cardinalityStart = "n"; - cardinalityEnd = "(1,*)"; - cardinalityvar="1"; + 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: - cardinalityStart = "1"; - cardinalityEnd = "n"; - cardinalityvar="2"; + 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: - cardinalityStart = "1"; - cardinalityEnd = "1"; - cardinalityvar="3"; + if (settings.notation === 'default') { + cardinalityStart = "1"; + cardinalityEnd = "1"; + } else { + cardinalityStart = "(1,1)"; + cardinalityEnd = "(1,1)"; + cardinalityvar="3"; + } break; default: break; @@ -55,10 +71,14 @@ export default function Relationship({ data }) { if (pathRef.current) { - const pathLength = pathRef.current.getTotalLength(); + 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, ); @@ -88,9 +108,11 @@ export default function Relationship({ data }) { .scrollIntoView({ behavior: "smooth" }); } }; - if (cardinalityEndX < cardinalityStartX){ - direction=-1 + + if (settings.notation === 'crows_foot' && cardinalityEndX < cardinalityStartX){ + direction = -1; } + return ( <> @@ -113,16 +135,17 @@ export default function Relationship({ data }) { stroke="gray" className="group-hover:stroke-sky-700" fill="none" - stroke-dasharray={relationshipType} + strokeDasharray={relationshipType} strokeWidth={2} cursor="pointer" /> - {CrowOM(pathRef.current,settings.showCardinality, cardinalityvar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityEnd)} - {CrowOO(pathRef.current,settings.showCardinality, cardinalityvar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityEnd)} - {CrowZM(pathRef.current,settings.showCardinality, cardinalityvar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityEnd)} + {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)} - + + {cardinalityStart} + + {cardinalityEnd} @@ -62,11 +72,10 @@ export function CrowOM(pathRef, settings, cardinalityvar, cardinalityEndX, cardi ) } -export function CrowOO(pathRef, settings, cardinalityvar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityEnd){ - return( - pathRef && settings && cardinalityvar==3 &&( - <> - {console.log(settings) } +export function CrowOO(pathRef, notation, cardinalityvar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalitySart, cardinalityEnd){ + return( + pathRef && notation === 'crows_foot' && cardinalityvar==3 &&( + <> - + - + - {cardinalityEnd} + {cardinalitySart} + + + {cardinalityEnd} ) @@ -121,9 +140,9 @@ export function CrowOO(pathRef, settings, cardinalityvar, cardinalityEndX, cardi } -export function CrowZM(pathRef, settings, cardinalityvar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityEnd){ - return( - pathRef && settings && (cardinalityvar==1) &&( +export function CrowZM(pathRef, notation, cardinalityvar, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, direction, cardinalityStart, cardinalityEnd){ + return( + pathRef && notation === 'crows_foot' && (cardinalityvar==1) &&( <> + {cardinalityStart} + + {cardinalityEnd} @@ -183,4 +212,47 @@ export function CrowZM(pathRef, settings, cardinalityvar, cardinalityEndX, cardi ) ) -} \ No newline at end of file +} + +export function DefaultNotation(pathRef, notation, cardinalityEndX, cardinalityEndY, cardinalityStartX, cardinalityStartY, cardinalityStart, cardinalityEnd){ + return( + pathRef && notation === 'default' && ( + <> + + + {cardinalityStart} + + + + {cardinalityEnd} + + + ) + ) +} diff --git a/src/components/EditorHeader/ControlPanel.jsx b/src/components/EditorHeader/ControlPanel.jsx index 6fde750..90930f7 100644 --- a/src/components/EditorHeader/ControlPanel.jsx +++ b/src/components/EditorHeader/ControlPanel.jsx @@ -1220,17 +1220,34 @@ export default function ControlPanel({ function: viewGrid, shortcut: "Ctrl+Shift+G", }, - show_cardinality: { - state: settings.showCardinality ? ( - - ) : ( - - ), - function: () => - setSettings((prev) => ({ - ...prev, - showCardinality: !prev.showCardinality, - })), + // show_cardinality: { + // state: settings.showCardinality ? ( + // + // ) : ( + // + // ), + // function: () => + // setSettings((prev) => ({ + // ...prev, + // showCardinality: !prev.showCardinality, + // })), + // }, + notation: { + children: [ + { + default_notation: () => { + console.log(settings.notation); + setSettings((prev) => ({ ...prev, notation: "default" })); + }, + }, + { + crows_foot_notation: () => { + console.log(settings.notation); + setSettings((prev) => ({ ...prev, notation: "crows_foot" })); + }, + }, + ], + function: () => {}, }, show_debug_coordinates: { state: settings.showDebugCoordinates ? (