-
Notifications
You must be signed in to change notification settings - Fork 11
/
index.ts
73 lines (70 loc) · 1.72 KB
/
index.ts
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
import { EdgeLayout, ReactflowNodeWithData } from "../../data/types";
import { kReactflow } from "../../states/reactflow";
import { getControlPoints, GetControlPointsParams } from "./algorithms";
import { getLabelPosition, getPathWithRoundCorners } from "./edge";
interface GetBasePathParams extends GetControlPointsParams {
borderRadius: number;
}
export function getBasePath({
id,
offset,
borderRadius,
source,
target,
sourceX,
sourceY,
targetX,
targetY,
sourcePosition,
targetPosition,
}: any) {
const sourceNode: ReactflowNodeWithData =
kReactflow.instance!.getNode(source)!;
const targetNode: ReactflowNodeWithData =
kReactflow.instance!.getNode(target)!;
return getPathWithPoints({
offset,
borderRadius,
source: {
id: "source-" + id,
x: sourceX,
y: sourceY,
position: sourcePosition,
},
target: {
id: "target-" + id,
x: targetX,
y: targetY,
position: targetPosition,
},
sourceRect: {
...(sourceNode.positionAbsolute || sourceNode.position),
width: sourceNode.width!,
height: sourceNode.height!,
},
targetRect: {
...(targetNode.positionAbsolute || targetNode.position),
width: targetNode.width!,
height: targetNode.height!,
},
});
}
export function getPathWithPoints({
source,
target,
sourceRect,
targetRect,
offset = 20,
borderRadius = 16,
}: GetBasePathParams): EdgeLayout {
const { points, inputPoints } = getControlPoints({
source,
target,
offset,
sourceRect,
targetRect,
});
const labelPosition = getLabelPosition(points);
const path = getPathWithRoundCorners(points, borderRadius);
return { path, points, inputPoints, labelPosition };
}