-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCustomEdge.tsx
86 lines (72 loc) · 1.93 KB
/
CustomEdge.tsx
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
// Graph/CustomEdge.tsx
import React from 'react';
import { EdgeProps, getBezierPath, Position } from '@xyflow/react';
interface CustomEdgeProps extends Omit<EdgeProps, 'markerEnd'> {
sourcePosition: Position;
sourceNode: string;
targetNode: string;
}
const CustomEdge: React.FC<CustomEdgeProps> = ({
id,
sourceX,
sourceY,
targetX,
targetY,
sourcePosition,
targetPosition,
style,
sourceNode,
targetNode
}) => {
const edgePathArray = getBezierPath({
sourceX,
sourceY,
targetX,
targetY,
sourcePosition,
targetPosition
});
const edgePath = Array.isArray(edgePathArray) ? edgePathArray[0] : "";
let strokeColor = 'gray';
if (sourcePosition === Position.Top) {
strokeColor = 'green';
} else if (sourcePosition === Position.Bottom) {
strokeColor = 'red';
}
const edgeStyle = {
...style,
strokeWidth: 4,
stroke: strokeColor,
};
const markerEndId = `arrowhead-${id}`;
const markerFillColor = strokeColor;
return (
<>
<defs>
<marker
id={markerEndId}
viewBox="0 -5 10 10"
refX="10"
refY="0"
markerWidth="3"
markerHeight="3"
orient="auto"
fill={markerFillColor}
>
<path d="M0,-5L10,0L0,5Z" />
</marker>
</defs>
<path
id={id}
style={edgeStyle}
className="react-flow__edge-path"
d={edgePath}
markerEnd={`url(#${markerEndId})`}
strokeLinecap="round"
data-source-node={sourceNode}
data-target-node={targetNode}
/>
</>
);
};
export default React.memo(CustomEdge);