-
Notifications
You must be signed in to change notification settings - Fork 40
Expand file tree
/
Copy pathdatabase-relation-two-tables-path.component.tsx
More file actions
116 lines (111 loc) · 2.94 KB
/
Copy pathdatabase-relation-two-tables-path.component.tsx
File metadata and controls
116 lines (111 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import React from 'react';
import { RelationType } from '@/core/providers/canvas-schema';
import { Coords, GUID } from '@/core/model';
import {
getForkCoords,
getRelationPath,
} from './database-relation-two-tables-path.business';
import { ClickablePathComponent } from './components/clickable-path.component';
import { isDrawLeftToRightLogic } from './relation.business';
import { ForkComponent } from './components';
import classes from './database-relation.component.module.css';
interface DatabaseRelationshipTwoTablesProps {
id: GUID;
relationType: RelationType;
startCoords: Coords;
endCoords: Coords;
onClick: (relationId: GUID) => void;
onDoubleClick: (relationId: GUID) => void;
isSelected: boolean;
startTableWidth?: number;
endTableWidth?: number;
relationColor?: string;
}
export const DatabaseRelationshipTwoTablePathComponent: React.FC<
DatabaseRelationshipTwoTablesProps
> = ({
id,
startCoords,
relationType,
endCoords,
isSelected,
onClick,
onDoubleClick,
startTableWidth,
endTableWidth,
relationColor,
}) => {
const isDrawLeftToRight = isDrawLeftToRightLogic(
relationType,
startCoords,
endCoords
);
const relationStrokeStyle = relationColor
? { stroke: relationColor }
: undefined;
return (
<svg>
{/* Glow filter if selected */}
<defs>
<filter id="table_glow">
<feGaussianBlur stdDeviation="3.5" result="coloredBlur" />
<feMerge>
<feMergeNode in="coloredBlur" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
</defs>
<path
d={getRelationPath(
relationType,
startCoords,
endCoords,
startTableWidth,
endTableWidth
)}
className={
isSelected ? classes.selectedRelation : classes.nonSelectedRelation
}
style={relationStrokeStyle}
filter={isSelected ? `url(#table_glow)` : ''}
/>
{/* Draw the fork */}
{relationType === '1:M' && (
<ForkComponent
isSelected={isSelected}
forkCoords={getForkCoords(
relationType,
startCoords,
endCoords,
startTableWidth,
endTableWidth
)}
drawLeftToRight={!isDrawLeftToRight}
relationColor={relationColor}
/>
)}
{relationType === 'M:1' && (
<ForkComponent
isSelected={isSelected}
forkCoords={getForkCoords(
relationType,
startCoords,
endCoords,
startTableWidth,
endTableWidth
)}
drawLeftToRight={isDrawLeftToRight}
relationColor={relationColor}
/>
)}
<ClickablePathComponent
id={id}
startCoords={startCoords}
endCoords={endCoords}
relationType={relationType}
onClick={onClick}
onDoubleClick={onDoubleClick}
/>
</svg>
);
};