Skip to content

Commit 557ce72

Browse files
committed
Add sidesheet for editing relationships
1 parent 6cd0a69 commit 557ce72

File tree

5 files changed

+229
-201
lines changed

5 files changed

+229
-201
lines changed

src/components/EditorCanvas/Canvas.jsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ export default function Canvas() {
8787
* @param {ObjectType[keyof ObjectType]} type
8888
*/
8989
const handlePointerDownOnElement = (e, id, type) => {
90+
if (selectedElement.open && !layout.sidebar) return;
91+
9092
if (!e.isPrimary) return;
9193

9294
if (type === ObjectType.TABLE) {
@@ -138,6 +140,8 @@ export default function Canvas() {
138140
* @param {PointerEvent} e
139141
*/
140142
const handlePointerMove = (e) => {
143+
if (selectedElement.open && !layout.sidebar) return;
144+
141145
if (!e.isPrimary) return;
142146

143147
if (linking) {
@@ -226,6 +230,8 @@ export default function Canvas() {
226230
* @param {PointerEvent} e
227231
*/
228232
const handlePointerDown = (e) => {
233+
if (selectedElement.open && !layout.sidebar) return;
234+
229235
if (!e.isPrimary) return;
230236

231237
// don't pan if the sidesheet for editing a table is open
@@ -309,6 +315,8 @@ export default function Canvas() {
309315
* @param {PointerEvent} e
310316
*/
311317
const handlePointerUp = (e) => {
318+
if (selectedElement.open && !layout.sidebar) return;
319+
312320
if (!e.isPrimary) return;
313321

314322
if (coordsDidUpdate(dragging.element)) {

src/components/EditorCanvas/Relationship.jsx

Lines changed: 85 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { Cardinality, ObjectType, Tab } from "../../data/constants";
33
import { calcPath } from "../../utils/calcPath";
44
import { useDiagram, useSettings, useLayout, useSelect } from "../../hooks";
55
import { useTranslation } from "react-i18next";
6+
import { SideSheet } from "@douyinfe/semi-ui";
7+
import RelationshipInfo from "../EditorSidePanel/RelationshipsTab/RelationshipInfo";
68

79
export default function Relationship({ data }) {
810
const { settings } = useSettings();
@@ -79,67 +81,90 @@ export default function Relationship({ data }) {
7981
};
8082

8183
return (
82-
<g className="select-none group" onDoubleClick={edit}>
83-
<path
84-
ref={pathRef}
85-
d={calcPath(
86-
{
87-
...data,
88-
startTable: {
89-
x: tables[data.startTableId].x,
90-
y: tables[data.startTableId].y,
84+
<>
85+
<g className="select-none group" onDoubleClick={edit}>
86+
<path
87+
ref={pathRef}
88+
d={calcPath(
89+
{
90+
...data,
91+
startTable: {
92+
x: tables[data.startTableId].x,
93+
y: tables[data.startTableId].y,
94+
},
95+
endTable: {
96+
x: tables[data.endTableId].x,
97+
y: tables[data.endTableId].y,
98+
},
9199
},
92-
endTable: {
93-
x: tables[data.endTableId].x,
94-
y: tables[data.endTableId].y,
95-
},
96-
},
97-
settings.tableWidth,
100+
settings.tableWidth,
101+
)}
102+
stroke="gray"
103+
className="group-hover:stroke-sky-700"
104+
fill="none"
105+
strokeWidth={2}
106+
cursor="pointer"
107+
/>
108+
{pathRef.current && settings.showCardinality && (
109+
<>
110+
<circle
111+
cx={cardinalityStartX}
112+
cy={cardinalityStartY}
113+
r="12"
114+
fill="grey"
115+
className="group-hover:fill-sky-700"
116+
/>
117+
<text
118+
x={cardinalityStartX}
119+
y={cardinalityStartY}
120+
fill="white"
121+
strokeWidth="0.5"
122+
textAnchor="middle"
123+
alignmentBaseline="middle"
124+
>
125+
{cardinalityStart}
126+
</text>
127+
<circle
128+
cx={cardinalityEndX}
129+
cy={cardinalityEndY}
130+
r="12"
131+
fill="grey"
132+
className="group-hover:fill-sky-700"
133+
/>
134+
<text
135+
x={cardinalityEndX}
136+
y={cardinalityEndY}
137+
fill="white"
138+
strokeWidth="0.5"
139+
textAnchor="middle"
140+
alignmentBaseline="middle"
141+
>
142+
{cardinalityEnd}
143+
</text>
144+
</>
98145
)}
99-
stroke="gray"
100-
className="group-hover:stroke-sky-700"
101-
fill="none"
102-
strokeWidth={2}
103-
cursor="pointer"
104-
/>
105-
{pathRef.current && settings.showCardinality && (
106-
<>
107-
<circle
108-
cx={cardinalityStartX}
109-
cy={cardinalityStartY}
110-
r="12"
111-
fill="grey"
112-
className="group-hover:fill-sky-700"
113-
/>
114-
<text
115-
x={cardinalityStartX}
116-
y={cardinalityStartY}
117-
fill="white"
118-
strokeWidth="0.5"
119-
textAnchor="middle"
120-
alignmentBaseline="middle"
121-
>
122-
{cardinalityStart}
123-
</text>
124-
<circle
125-
cx={cardinalityEndX}
126-
cy={cardinalityEndY}
127-
r="12"
128-
fill="grey"
129-
className="group-hover:fill-sky-700"
130-
/>
131-
<text
132-
x={cardinalityEndX}
133-
y={cardinalityEndY}
134-
fill="white"
135-
strokeWidth="0.5"
136-
textAnchor="middle"
137-
alignmentBaseline="middle"
138-
>
139-
{cardinalityEnd}
140-
</text>
141-
</>
142-
)}
143-
</g>
146+
</g>
147+
<SideSheet
148+
title={t("edit")}
149+
size="small"
150+
visible={
151+
selectedElement.element === ObjectType.RELATIONSHIP &&
152+
selectedElement.id === data.id &&
153+
selectedElement.open &&
154+
!layout.sidebar
155+
}
156+
onCancel={() => {
157+
setSelectedElement((prev) => ({
158+
...prev,
159+
open: false,
160+
}));
161+
}}
162+
style={{ paddingBottom: "16px" }}
163+
>
164+
<div className="sidesheet-theme">
165+
<RelationshipInfo data={data} />
166+
</div>
167+
</SideSheet>
168+
</>
144169
);
145170
}

0 commit comments

Comments
 (0)