@deck.gl-community/graph-layers 9.1.1 → 9.2.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_deprecated/old-constants.d.ts +107 -0
- package/dist/_deprecated/old-constants.d.ts.map +1 -0
- package/dist/_deprecated/old-constants.js +111 -0
- package/dist/_deprecated/old-constants.js.map +1 -0
- package/dist/core/cache.d.ts +0 -1
- package/dist/core/cache.js +0 -1
- package/dist/core/constants.d.ts +12 -100
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +3 -44
- package/dist/core/constants.js.map +1 -1
- package/dist/core/graph-engine.d.ts +12 -11
- package/dist/core/graph-engine.d.ts.map +1 -1
- package/dist/core/graph-engine.js +22 -11
- package/dist/core/graph-engine.js.map +1 -1
- package/dist/core/graph-layout.d.ts +48 -21
- package/dist/core/graph-layout.d.ts.map +1 -1
- package/dist/core/graph-layout.js +91 -24
- package/dist/core/graph-layout.js.map +1 -1
- package/dist/core/interaction-manager.d.ts +6 -4
- package/dist/core/interaction-manager.d.ts.map +1 -1
- package/dist/core/interaction-manager.js +59 -17
- package/dist/core/interaction-manager.js.map +1 -1
- package/dist/graph/edge.d.ts +7 -7
- package/dist/graph/edge.d.ts.map +1 -1
- package/dist/graph/edge.js +3 -6
- package/dist/graph/edge.js.map +1 -1
- package/dist/graph/graph.d.ts +2 -3
- package/dist/graph/graph.js +8 -9
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/node.d.ts +7 -8
- package/dist/graph/node.d.ts.map +1 -1
- package/dist/graph/node.js +3 -5
- package/dist/graph/node.js.map +1 -1
- package/dist/graph-style-schema.cdn.d.ts +2 -0
- package/dist/graph-style-schema.cdn.js +2 -0
- package/dist/graph-style-schema.json +12 -0
- package/dist/index.cjs +2821 -549
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +28 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -21
- package/dist/index.js.map +1 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.d.ts +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.js +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.d.ts +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.js +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.d.ts +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.js +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js +0 -1
- package/dist/layers/common-layers/marker-layer/atlas-data-url.d.ts +0 -1
- package/dist/layers/common-layers/marker-layer/atlas-data-url.js +0 -1
- package/dist/layers/common-layers/marker-layer/marker-layer.d.ts +0 -1
- package/dist/layers/common-layers/marker-layer/marker-layer.js +2 -3
- package/dist/layers/common-layers/marker-layer/marker-list.d.ts +2 -63
- package/dist/layers/common-layers/marker-layer/marker-list.d.ts.map +1 -1
- package/dist/layers/common-layers/marker-layer/marker-list.js +1 -65
- package/dist/layers/common-layers/marker-layer/marker-list.js.map +1 -1
- package/dist/layers/common-layers/marker-layer/marker-mapping.d.ts +0 -1
- package/dist/layers/common-layers/marker-layer/marker-mapping.js +0 -1
- package/dist/layers/common-layers/spline-layer/spline-layer.d.ts +0 -1
- package/dist/layers/common-layers/spline-layer/spline-layer.js +0 -1
- package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.d.ts +0 -1
- package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.js +0 -1
- package/dist/layers/edge-attachment-helper.d.ts +15 -0
- package/dist/layers/edge-attachment-helper.d.ts.map +1 -0
- package/dist/layers/edge-attachment-helper.js +230 -0
- package/dist/layers/edge-attachment-helper.js.map +1 -0
- package/dist/layers/edge-layer.d.ts +1 -5
- package/dist/layers/edge-layer.d.ts.map +1 -1
- package/dist/layers/edge-layer.js +9 -11
- package/dist/layers/edge-layer.js.map +1 -1
- package/dist/layers/edge-layers/arrow-2d-geometry.d.ts +4 -0
- package/dist/layers/edge-layers/arrow-2d-geometry.d.ts.map +1 -0
- package/dist/layers/edge-layers/arrow-2d-geometry.js +42 -0
- package/dist/layers/edge-layers/arrow-2d-geometry.js.map +1 -0
- package/dist/layers/edge-layers/curved-edge-layer.d.ts +1 -2
- package/dist/layers/edge-layers/curved-edge-layer.js +1 -2
- package/dist/layers/edge-layers/edge-arrow-layer.d.ts +21 -0
- package/dist/layers/edge-layers/edge-arrow-layer.d.ts.map +1 -0
- package/dist/layers/edge-layers/edge-arrow-layer.js +131 -0
- package/dist/layers/edge-layers/edge-arrow-layer.js.map +1 -0
- package/dist/layers/edge-layers/edge-label-layer.d.ts +1 -2
- package/dist/layers/edge-layers/edge-label-layer.js +1 -2
- package/dist/layers/edge-layers/flow-layer.d.ts +1 -2
- package/dist/layers/edge-layers/flow-layer.js +1 -2
- package/dist/layers/edge-layers/path-edge-layer.d.ts +0 -1
- package/dist/layers/edge-layers/path-edge-layer.js +0 -1
- package/dist/layers/edge-layers/straight-line-edge-layer.d.ts +0 -1
- package/dist/layers/edge-layers/straight-line-edge-layer.js +0 -1
- package/dist/layers/graph-layer.d.ts +22 -23
- package/dist/layers/graph-layer.d.ts.map +1 -1
- package/dist/layers/graph-layer.js +218 -62
- package/dist/layers/graph-layer.js.map +1 -1
- package/dist/layers/node-layers/circle-layer.d.ts +0 -1
- package/dist/layers/node-layers/circle-layer.js +0 -1
- package/dist/layers/node-layers/image-layer.d.ts +0 -1
- package/dist/layers/node-layers/image-layer.js +0 -1
- package/dist/layers/node-layers/label-layer.d.ts +1 -2
- package/dist/layers/node-layers/label-layer.js +1 -2
- package/dist/layers/node-layers/path-rounded-rectangle-layer.d.ts +0 -1
- package/dist/layers/node-layers/path-rounded-rectangle-layer.js +1 -2
- package/dist/layers/node-layers/rectangle-layer.d.ts +0 -1
- package/dist/layers/node-layers/rectangle-layer.js +0 -1
- package/dist/layers/node-layers/rounded-rectangle-layer-fragment.d.ts +0 -1
- package/dist/layers/node-layers/rounded-rectangle-layer-fragment.js +0 -1
- package/dist/layers/node-layers/rounded-rectangle-layer.d.ts +1 -2
- package/dist/layers/node-layers/rounded-rectangle-layer.js +2 -3
- package/dist/layers/node-layers/zoomable-marker-layer.d.ts +1 -2
- package/dist/layers/node-layers/zoomable-marker-layer.js +1 -2
- package/dist/layouts/d3-dag/d3-dag-layout.d.ts +117 -0
- package/dist/layouts/d3-dag/d3-dag-layout.d.ts.map +1 -0
- package/dist/layouts/d3-dag/d3-dag-layout.js +716 -0
- package/dist/layouts/d3-dag/d3-dag-layout.js.map +1 -0
- package/dist/layouts/d3-force/d3-force-layout.d.ts +4 -4
- package/dist/layouts/d3-force/d3-force-layout.d.ts.map +1 -1
- package/dist/layouts/d3-force/d3-force-layout.js +25 -10
- package/dist/layouts/d3-force/d3-force-layout.js.map +1 -1
- package/dist/layouts/d3-force/worker.d.ts +0 -1
- package/dist/layouts/d3-force/worker.js +0 -1
- package/dist/layouts/experimental/force-multi-graph-layout.d.ts +9 -8
- package/dist/layouts/experimental/force-multi-graph-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/force-multi-graph-layout.js +15 -11
- package/dist/layouts/experimental/force-multi-graph-layout.js.map +1 -1
- package/dist/layouts/experimental/hive-plot-layout.d.ts +11 -8
- package/dist/layouts/experimental/hive-plot-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/hive-plot-layout.js +12 -7
- package/dist/layouts/experimental/hive-plot-layout.js.map +1 -1
- package/dist/layouts/experimental/radial-layout.d.ts +10 -7
- package/dist/layouts/experimental/radial-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/radial-layout.js +11 -6
- package/dist/layouts/experimental/radial-layout.js.map +1 -1
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts +4 -4
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts.map +1 -1
- package/dist/layouts/gpu-force/gpu-force-layout.js +18 -9
- package/dist/layouts/gpu-force/gpu-force-layout.js.map +1 -1
- package/dist/layouts/gpu-force/worker.d.ts +0 -1
- package/dist/layouts/gpu-force/worker.js +0 -1
- package/dist/layouts/simple-layout.d.ts +19 -12
- package/dist/layouts/simple-layout.d.ts.map +1 -1
- package/dist/layouts/simple-layout.js +26 -15
- package/dist/layouts/simple-layout.js.map +1 -1
- package/dist/loaders/create-graph.d.ts +1 -2
- package/dist/loaders/create-graph.js +3 -4
- package/dist/loaders/edge-parsers.d.ts +1 -2
- package/dist/loaders/edge-parsers.js +2 -3
- package/dist/loaders/edge-parsers.js.map +1 -1
- package/dist/loaders/json-loader.d.ts +2 -3
- package/dist/loaders/json-loader.d.ts.map +1 -1
- package/dist/loaders/json-loader.js +5 -6
- package/dist/loaders/json-loader.js.map +1 -1
- package/dist/loaders/node-parsers.d.ts +1 -2
- package/dist/loaders/node-parsers.js +2 -3
- package/dist/loaders/node-parsers.js.map +1 -1
- package/dist/loaders/simple-json-graph-loader.d.ts +0 -1
- package/dist/loaders/simple-json-graph-loader.d.ts.map +1 -1
- package/dist/loaders/simple-json-graph-loader.js +5 -6
- package/dist/loaders/simple-json-graph-loader.js.map +1 -1
- package/dist/loaders/table-graph-loader.d.ts +3 -4
- package/dist/loaders/table-graph-loader.js +5 -6
- package/dist/loaders/table-graph-loader.js.map +1 -1
- package/dist/style/graph-layer-stylesheet.d.ts +34 -0
- package/dist/style/graph-layer-stylesheet.d.ts.map +1 -0
- package/dist/style/graph-layer-stylesheet.js +39 -0
- package/dist/style/graph-layer-stylesheet.js.map +1 -0
- package/dist/style/graph-style-accessor-map.d.ts +93 -0
- package/dist/style/graph-style-accessor-map.d.ts.map +1 -0
- package/dist/style/graph-style-accessor-map.js +93 -0
- package/dist/style/graph-style-accessor-map.js.map +1 -0
- package/dist/style/graph-style-engine.d.ts +10 -0
- package/dist/style/graph-style-engine.d.ts.map +1 -0
- package/dist/style/graph-style-engine.js +163 -0
- package/dist/style/graph-style-engine.js.map +1 -0
- package/dist/style/graph-stylesheet.schema.d.ts +310 -0
- package/dist/style/graph-stylesheet.schema.d.ts.map +1 -0
- package/dist/style/graph-stylesheet.schema.js +237 -0
- package/dist/style/graph-stylesheet.schema.js.map +1 -0
- package/dist/style/style-engine.d.ts +33 -0
- package/dist/style/style-engine.d.ts.map +1 -0
- package/dist/style/style-engine.js +121 -0
- package/dist/style/style-engine.js.map +1 -0
- package/dist/style/style-property.d.ts +2 -3
- package/dist/style/style-property.d.ts.map +1 -1
- package/dist/style/style-property.js +224 -48
- package/dist/style/style-property.js.map +1 -1
- package/dist/utils/collapsed-chains.d.ts +17 -0
- package/dist/utils/collapsed-chains.d.ts.map +1 -0
- package/dist/utils/collapsed-chains.js +197 -0
- package/dist/utils/collapsed-chains.js.map +1 -0
- package/dist/utils/layer-utils.d.ts +0 -1
- package/dist/utils/layer-utils.d.ts.map +1 -1
- package/dist/utils/layer-utils.js +0 -1
- package/dist/utils/log.d.ts +2 -1
- package/dist/utils/log.d.ts.map +1 -1
- package/dist/utils/log.js +12 -2
- package/dist/utils/log.js.map +1 -1
- package/dist/utils/node-boundary.d.ts +10 -0
- package/dist/utils/node-boundary.d.ts.map +1 -0
- package/dist/utils/node-boundary.js +130 -0
- package/dist/utils/node-boundary.js.map +1 -0
- package/dist/utils/polygon-calculations.d.ts +0 -1
- package/dist/utils/polygon-calculations.js +0 -1
- package/dist/widgets/long-press-button.d.ts +0 -1
- package/dist/widgets/long-press-button.js +0 -1
- package/dist/widgets/view-control-widget.d.ts +4 -5
- package/dist/widgets/view-control-widget.d.ts.map +1 -1
- package/dist/widgets/view-control-widget.js +10 -8
- package/dist/widgets/view-control-widget.js.map +1 -1
- package/package.json +23 -7
- package/src/_deprecated/old-constants.ts +122 -0
- package/src/core/constants.ts +21 -43
- package/src/core/graph-engine.ts +24 -9
- package/src/core/graph-layout.ts +133 -28
- package/src/core/interaction-manager.ts +80 -20
- package/src/graph/edge.ts +6 -6
- package/src/graph/graph.ts +7 -7
- package/src/graph/node.ts +6 -6
- package/src/index.ts +31 -6
- package/src/layers/common-layers/marker-layer/marker-list.ts +62 -64
- package/src/layers/edge-attachment-helper.ts +355 -0
- package/src/layers/edge-layer.ts +6 -7
- package/src/layers/edge-layers/arrow-2d-geometry.ts +51 -0
- package/src/layers/edge-layers/edge-arrow-layer.ts +171 -0
- package/src/layers/graph-layer.ts +304 -86
- package/src/layouts/d3-dag/d3-dag-layout.ts +969 -0
- package/src/layouts/d3-force/d3-force-layout.ts +33 -11
- package/src/layouts/experimental/force-multi-graph-layout.ts +22 -13
- package/src/layouts/experimental/hive-plot-layout.ts +22 -10
- package/src/layouts/experimental/radial-layout.ts +20 -8
- package/src/layouts/gpu-force/gpu-force-layout.ts +22 -10
- package/src/layouts/simple-layout.ts +48 -25
- package/src/loaders/edge-parsers.ts +2 -2
- package/src/loaders/json-loader.ts +2 -2
- package/src/loaders/node-parsers.ts +2 -2
- package/src/loaders/simple-json-graph-loader.ts +2 -2
- package/src/loaders/table-graph-loader.ts +2 -2
- package/src/style/graph-layer-stylesheet.ts +99 -0
- package/src/style/graph-style-accessor-map.ts +103 -0
- package/src/style/graph-style-engine.ts +229 -0
- package/src/style/graph-stylesheet.schema.ts +344 -0
- package/src/style/style-engine.ts +168 -0
- package/src/style/style-property.ts +314 -51
- package/src/utils/collapsed-chains.ts +261 -0
- package/src/utils/log.ts +15 -1
- package/src/utils/node-boundary.ts +238 -0
- package/src/widgets/view-control-widget.tsx +15 -13
- package/dist/style/style-sheet.d.ts +0 -11
- package/dist/style/style-sheet.d.ts.map +0 -1
- package/dist/style/style-sheet.js +0 -253
- package/dist/style/style-sheet.js.map +0 -1
- package/src/style/style-sheet.ts +0 -277
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {GraphLayout,
|
|
5
|
+
import {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';
|
|
6
|
+
import {log} from '../../utils/log';
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export type D3ForceLayoutOptions = GraphLayoutOptions & {
|
|
8
|
+
export type D3ForceLayoutOptions = GraphLayoutProps & {
|
|
10
9
|
alpha?: number;
|
|
11
10
|
resumeAlpha?: number;
|
|
12
11
|
nBodyStrength?: number;
|
|
@@ -16,7 +15,7 @@ export type D3ForceLayoutOptions = GraphLayoutOptions & {
|
|
|
16
15
|
};
|
|
17
16
|
|
|
18
17
|
export class D3ForceLayout extends GraphLayout<D3ForceLayoutOptions> {
|
|
19
|
-
static
|
|
18
|
+
static defaultProps: Required<D3ForceLayoutOptions> = {
|
|
20
19
|
alpha: 0.3,
|
|
21
20
|
resumeAlpha: 0.1,
|
|
22
21
|
nBodyStrength: -900,
|
|
@@ -34,7 +33,7 @@ export class D3ForceLayout extends GraphLayout<D3ForceLayoutOptions> {
|
|
|
34
33
|
super(options);
|
|
35
34
|
|
|
36
35
|
this._options = {
|
|
37
|
-
...D3ForceLayout.
|
|
36
|
+
...D3ForceLayout.defaultProps,
|
|
38
37
|
...options
|
|
39
38
|
};
|
|
40
39
|
}
|
|
@@ -84,6 +83,7 @@ export class D3ForceLayout extends GraphLayout<D3ForceLayoutOptions> {
|
|
|
84
83
|
});
|
|
85
84
|
|
|
86
85
|
this._worker.onmessage = (event) => {
|
|
86
|
+
log.log(0, 'D3ForceLayout: worker message', event.data?.type, event.data);
|
|
87
87
|
if (event.data.type !== 'end') {
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
@@ -106,25 +106,39 @@ export class D3ForceLayout extends GraphLayout<D3ForceLayoutOptions> {
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
stop() {
|
|
109
|
-
this._worker
|
|
109
|
+
if (this._worker) {
|
|
110
|
+
this._worker.terminate();
|
|
111
|
+
this._worker = null;
|
|
112
|
+
}
|
|
110
113
|
}
|
|
111
114
|
|
|
112
115
|
getEdgePosition = (edge) => {
|
|
113
116
|
const sourceNode = this._graph.findNode(edge.getSourceNodeId());
|
|
114
117
|
const targetNode = this._graph.findNode(edge.getTargetNodeId());
|
|
115
|
-
if (!
|
|
118
|
+
if (!sourceNode || !targetNode) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const sourcePosition = this.getNodePosition(sourceNode);
|
|
123
|
+
const targetPosition = this.getNodePosition(targetNode);
|
|
124
|
+
|
|
125
|
+
if (!sourcePosition || !targetPosition) {
|
|
116
126
|
return null;
|
|
117
127
|
}
|
|
118
128
|
|
|
119
129
|
return {
|
|
120
|
-
type:
|
|
121
|
-
sourcePosition
|
|
122
|
-
targetPosition
|
|
130
|
+
type: 'line',
|
|
131
|
+
sourcePosition,
|
|
132
|
+
targetPosition,
|
|
123
133
|
controlPoints: []
|
|
124
134
|
};
|
|
125
135
|
};
|
|
126
136
|
|
|
127
137
|
getNodePosition = (node) => {
|
|
138
|
+
if (!node) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
|
|
128
142
|
const d3Node = this._positionsByNodeId.get(node.id);
|
|
129
143
|
if (d3Node) {
|
|
130
144
|
return d3Node.coordinates;
|
|
@@ -152,4 +166,12 @@ export class D3ForceLayout extends GraphLayout<D3ForceLayoutOptions> {
|
|
|
152
166
|
d3Node.fx = null;
|
|
153
167
|
d3Node.fy = null;
|
|
154
168
|
};
|
|
169
|
+
|
|
170
|
+
protected override _updateBounds(): void {
|
|
171
|
+
const positions = Array.from(
|
|
172
|
+
this._positionsByNodeId.values(),
|
|
173
|
+
(data) => data?.coordinates as [number, number] | null | undefined
|
|
174
|
+
);
|
|
175
|
+
this._bounds = this._calculateBounds(positions);
|
|
176
|
+
}
|
|
155
177
|
}
|
|
@@ -2,21 +2,20 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {GraphLayout,
|
|
5
|
+
import {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';
|
|
6
6
|
import {Node} from '../../graph/node';
|
|
7
|
-
import {EDGE_TYPE} from '../../core/constants';
|
|
8
7
|
import {Graph} from '../../graph/graph';
|
|
9
8
|
import * as d3 from 'd3-force';
|
|
10
9
|
|
|
11
|
-
export type
|
|
10
|
+
export type ForceMultiGraphLayoutProps = GraphLayoutProps & {
|
|
12
11
|
alpha?: number;
|
|
13
12
|
nBodyStrength?: number;
|
|
14
13
|
nBodyDistanceMin?: number;
|
|
15
14
|
nBodyDistanceMax?: number;
|
|
16
15
|
};
|
|
17
16
|
|
|
18
|
-
export class ForceMultiGraphLayout extends GraphLayout<
|
|
19
|
-
static
|
|
17
|
+
export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutProps> {
|
|
18
|
+
static defaultProps = {
|
|
20
19
|
alpha: 3,
|
|
21
20
|
nBodyStrength: -1200,
|
|
22
21
|
nBodyDistanceMin: 100,
|
|
@@ -33,10 +32,10 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
|
|
|
33
32
|
_edgeMap = {};
|
|
34
33
|
_simulator;
|
|
35
34
|
|
|
36
|
-
constructor(options:
|
|
35
|
+
constructor(options: ForceMultiGraphLayoutProps = {}) {
|
|
37
36
|
super(options);
|
|
38
37
|
this._options = {
|
|
39
|
-
...ForceMultiGraphLayout.
|
|
38
|
+
...ForceMultiGraphLayout.defaultProps,
|
|
40
39
|
...options
|
|
41
40
|
};
|
|
42
41
|
}
|
|
@@ -68,6 +67,7 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
|
|
|
68
67
|
'edge',
|
|
69
68
|
d3
|
|
70
69
|
.forceLink(g.edges)
|
|
70
|
+
// @ts-ignore TODO id not defined?
|
|
71
71
|
.id((n) => n.id)
|
|
72
72
|
.strength(this._strength)
|
|
73
73
|
)
|
|
@@ -98,6 +98,8 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
|
|
|
98
98
|
this._simulator.stop();
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
+
update(): void {}
|
|
102
|
+
|
|
101
103
|
updateGraph(graph) {
|
|
102
104
|
this._graph = graph;
|
|
103
105
|
|
|
@@ -138,7 +140,7 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
|
|
|
138
140
|
if (betweenEdges.length === 1) {
|
|
139
141
|
// do nothing, this is a real edge
|
|
140
142
|
const newD3Edge = {
|
|
141
|
-
type:
|
|
143
|
+
type: 'line',
|
|
142
144
|
id: firstEdge.getId(),
|
|
143
145
|
source: newNodeMap[firstEdge.getSourceNodeId()],
|
|
144
146
|
target: newNodeMap[firstEdge.getTargetNodeId()],
|
|
@@ -151,7 +153,7 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
|
|
|
151
153
|
|
|
152
154
|
// else reduce to one virtual edge
|
|
153
155
|
const newD3Edge = {
|
|
154
|
-
type:
|
|
156
|
+
type: 'line',
|
|
155
157
|
id: pairId,
|
|
156
158
|
source: newNodeMap[firstEdge.getSourceNodeId()],
|
|
157
159
|
target: newNodeMap[firstEdge.getTargetNodeId()],
|
|
@@ -163,7 +165,7 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
|
|
|
163
165
|
|
|
164
166
|
betweenEdges.forEach((e, idx) => {
|
|
165
167
|
newEdgeMap[e.id] = {
|
|
166
|
-
type:
|
|
168
|
+
type: 'spline-curve',
|
|
167
169
|
id: e.id,
|
|
168
170
|
source: newNodeMap[e.getSourceNodeId()],
|
|
169
171
|
target: newNodeMap[e.getTargetNodeId()],
|
|
@@ -194,7 +196,7 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
|
|
|
194
196
|
if (d3Edge) {
|
|
195
197
|
if (!d3Edge.isVirtual) {
|
|
196
198
|
return {
|
|
197
|
-
type:
|
|
199
|
+
type: 'line',
|
|
198
200
|
sourcePosition: [d3Edge.source.x, d3Edge.source.y],
|
|
199
201
|
targetPosition: [d3Edge.target.x, d3Edge.target.y],
|
|
200
202
|
controlPoints: []
|
|
@@ -222,7 +224,7 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
|
|
|
222
224
|
(symmetricShape ? Math.floor(index / 2 + 1) : Math.ceil(index / 2));
|
|
223
225
|
const controlPoint = computeControlPoint(sourcePosition, targetPosition, direction, offset);
|
|
224
226
|
return {
|
|
225
|
-
type:
|
|
227
|
+
type: 'spline-curve',
|
|
226
228
|
sourcePosition,
|
|
227
229
|
targetPosition,
|
|
228
230
|
controlPoints: [controlPoint]
|
|
@@ -230,7 +232,7 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
|
|
|
230
232
|
}
|
|
231
233
|
// default value
|
|
232
234
|
return {
|
|
233
|
-
type:
|
|
235
|
+
type: 'line',
|
|
234
236
|
sourcePosition: [0, 0],
|
|
235
237
|
targetPosition: [0, 0],
|
|
236
238
|
controlPoints: []
|
|
@@ -244,6 +246,13 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
|
|
|
244
246
|
this._onLayoutChange();
|
|
245
247
|
this._onLayoutDone();
|
|
246
248
|
};
|
|
249
|
+
|
|
250
|
+
protected override _updateBounds(): void {
|
|
251
|
+
const positions = Object.values(this._nodeMap ?? {}).map((node) =>
|
|
252
|
+
this._normalizePosition(node)
|
|
253
|
+
);
|
|
254
|
+
this._bounds = this._calculateBounds(positions);
|
|
255
|
+
}
|
|
247
256
|
}
|
|
248
257
|
|
|
249
258
|
/**
|
|
@@ -2,23 +2,22 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {GraphLayout,
|
|
5
|
+
import {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';
|
|
6
6
|
import {Node} from '../../graph/node';
|
|
7
|
-
import {EDGE_TYPE} from '../../core/constants';
|
|
8
7
|
import {Graph} from '../../graph/graph';
|
|
9
8
|
|
|
10
|
-
export type
|
|
9
|
+
export type HivePlotLayoutProps = GraphLayoutProps & {
|
|
11
10
|
innerRadius?: number;
|
|
12
11
|
outerRadius?: number;
|
|
13
12
|
getNodeAxis?: (node: Node) => any;
|
|
14
13
|
};
|
|
15
14
|
|
|
16
|
-
export class HivePlotLayout extends GraphLayout<
|
|
17
|
-
static
|
|
15
|
+
export class HivePlotLayout extends GraphLayout<HivePlotLayoutProps> {
|
|
16
|
+
static defaultProps = {
|
|
18
17
|
innerRadius: 100,
|
|
19
18
|
outerRadius: 500,
|
|
20
19
|
getNodeAxis: (node: Node) => node.getPropertyValue('group')
|
|
21
|
-
} as const satisfies Readonly<Required<
|
|
20
|
+
} as const satisfies Readonly<Required<HivePlotLayoutProps>>;
|
|
22
21
|
|
|
23
22
|
_name = 'HivePlot';
|
|
24
23
|
_graph: Graph;
|
|
@@ -27,10 +26,10 @@ export class HivePlotLayout extends GraphLayout<HivePlotLayoutOptions> {
|
|
|
27
26
|
_nodeMap = {};
|
|
28
27
|
_nodePositionMap = {};
|
|
29
28
|
|
|
30
|
-
constructor(options:
|
|
29
|
+
constructor(options: HivePlotLayoutProps = {}) {
|
|
31
30
|
super(options);
|
|
32
31
|
this._options = {
|
|
33
|
-
...HivePlotLayout.
|
|
32
|
+
...HivePlotLayout.defaultProps,
|
|
34
33
|
...options
|
|
35
34
|
};
|
|
36
35
|
}
|
|
@@ -98,6 +97,12 @@ export class HivePlotLayout extends GraphLayout<HivePlotLayoutOptions> {
|
|
|
98
97
|
this._onLayoutDone();
|
|
99
98
|
}
|
|
100
99
|
|
|
100
|
+
stop() {}
|
|
101
|
+
|
|
102
|
+
update() {}
|
|
103
|
+
|
|
104
|
+
resume() {}
|
|
105
|
+
|
|
101
106
|
getNodePosition = (node) => this._nodePositionMap[node.getId()];
|
|
102
107
|
|
|
103
108
|
getEdgePosition = (edge) => {
|
|
@@ -116,7 +121,7 @@ export class HivePlotLayout extends GraphLayout<HivePlotLayoutOptions> {
|
|
|
116
121
|
|
|
117
122
|
if (sourceNodeAxis === targetNodeAxis) {
|
|
118
123
|
return {
|
|
119
|
-
type:
|
|
124
|
+
type: 'line',
|
|
120
125
|
sourcePosition,
|
|
121
126
|
targetPosition,
|
|
122
127
|
controlPoints: []
|
|
@@ -132,7 +137,7 @@ export class HivePlotLayout extends GraphLayout<HivePlotLayoutOptions> {
|
|
|
132
137
|
});
|
|
133
138
|
|
|
134
139
|
return {
|
|
135
|
-
type:
|
|
140
|
+
type: 'spline-curve',
|
|
136
141
|
sourcePosition,
|
|
137
142
|
targetPosition,
|
|
138
143
|
controlPoints: [controlPoint]
|
|
@@ -144,6 +149,13 @@ export class HivePlotLayout extends GraphLayout<HivePlotLayoutOptions> {
|
|
|
144
149
|
this._onLayoutChange();
|
|
145
150
|
this._onLayoutDone();
|
|
146
151
|
};
|
|
152
|
+
|
|
153
|
+
protected override _updateBounds(): void {
|
|
154
|
+
const positions = Object.values(this._nodePositionMap ?? {}).map((position) =>
|
|
155
|
+
this._normalizePosition(position)
|
|
156
|
+
);
|
|
157
|
+
this._bounds = this._calculateBounds(positions);
|
|
158
|
+
}
|
|
147
159
|
}
|
|
148
160
|
|
|
149
161
|
function computeControlPoint({
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {GraphLayout,
|
|
6
|
-
import {EDGE_TYPE} from '../../core/constants';
|
|
5
|
+
import {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';
|
|
7
6
|
import {Graph} from '../../graph/graph';
|
|
8
7
|
|
|
9
|
-
export type
|
|
8
|
+
export type RadialLayoutProps = GraphLayoutProps & {
|
|
10
9
|
radius?: number;
|
|
11
10
|
tree?: any;
|
|
12
11
|
};
|
|
@@ -52,8 +51,8 @@ const getPath = (node, targetId, path) => {
|
|
|
52
51
|
return false;
|
|
53
52
|
};
|
|
54
53
|
|
|
55
|
-
export class RadialLayout extends GraphLayout<
|
|
56
|
-
static
|
|
54
|
+
export class RadialLayout extends GraphLayout<RadialLayoutProps> {
|
|
55
|
+
static defaultProps = {
|
|
57
56
|
radius: 500
|
|
58
57
|
};
|
|
59
58
|
|
|
@@ -63,10 +62,10 @@ export class RadialLayout extends GraphLayout<RadialLayoutOptions> {
|
|
|
63
62
|
_hierarchicalPoints = {};
|
|
64
63
|
nestedTree;
|
|
65
64
|
|
|
66
|
-
constructor(options:
|
|
65
|
+
constructor(options: RadialLayoutProps = {}) {
|
|
67
66
|
super(options);
|
|
68
67
|
this._options = {
|
|
69
|
-
...RadialLayout.
|
|
68
|
+
...RadialLayout.defaultProps,
|
|
70
69
|
...options
|
|
71
70
|
};
|
|
72
71
|
}
|
|
@@ -149,6 +148,12 @@ export class RadialLayout extends GraphLayout<RadialLayoutOptions> {
|
|
|
149
148
|
this._onLayoutDone();
|
|
150
149
|
}
|
|
151
150
|
|
|
151
|
+
stop(): void {}
|
|
152
|
+
|
|
153
|
+
resume() {}
|
|
154
|
+
|
|
155
|
+
update() {}
|
|
156
|
+
|
|
152
157
|
getNodePosition = (node) => {
|
|
153
158
|
return this._hierarchicalPoints[node.id];
|
|
154
159
|
};
|
|
@@ -185,7 +190,7 @@ export class RadialLayout extends GraphLayout<RadialLayoutOptions> {
|
|
|
185
190
|
}
|
|
186
191
|
|
|
187
192
|
return {
|
|
188
|
-
type:
|
|
193
|
+
type: 'spline-curve',
|
|
189
194
|
sourcePosition: sourceNodePos,
|
|
190
195
|
targetPosition: targetNodePos,
|
|
191
196
|
controlPoints: wayPoints
|
|
@@ -197,6 +202,13 @@ export class RadialLayout extends GraphLayout<RadialLayoutOptions> {
|
|
|
197
202
|
this._onLayoutChange();
|
|
198
203
|
this._onLayoutDone();
|
|
199
204
|
};
|
|
205
|
+
|
|
206
|
+
protected override _updateBounds(): void {
|
|
207
|
+
const positions = Object.values(this._hierarchicalPoints ?? {}).map((position) =>
|
|
208
|
+
this._normalizePosition(position)
|
|
209
|
+
);
|
|
210
|
+
this._bounds = this._calculateBounds(positions);
|
|
211
|
+
}
|
|
200
212
|
}
|
|
201
213
|
|
|
202
214
|
function rotate(cx, cy, x, y, angle) {
|
|
@@ -2,11 +2,9 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {GraphLayout,
|
|
5
|
+
import {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export type GPUForceLayoutOptions = GraphLayoutOptions & {
|
|
7
|
+
export type GPUForceLayoutOptions = GraphLayoutProps & {
|
|
10
8
|
alpha?: number;
|
|
11
9
|
resumeAlpha?: number;
|
|
12
10
|
nBodyStrength?: number;
|
|
@@ -19,7 +17,7 @@ export type GPUForceLayoutOptions = GraphLayoutOptions & {
|
|
|
19
17
|
* @todo this layout should be updated with the organizational and logic improvements made in d3-force
|
|
20
18
|
*/
|
|
21
19
|
export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
22
|
-
static
|
|
20
|
+
static defaultProps: Required<GPUForceLayoutOptions> = {
|
|
23
21
|
alpha: 0.3,
|
|
24
22
|
resumeAlpha: 0.1,
|
|
25
23
|
nBodyStrength: -900,
|
|
@@ -33,12 +31,12 @@ export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
|
33
31
|
private _nodeMap: any;
|
|
34
32
|
private _edgeMap: any;
|
|
35
33
|
private _graph: any;
|
|
36
|
-
private _worker: Worker;
|
|
34
|
+
private _worker: Worker | null = null;
|
|
37
35
|
private _callbacks: any;
|
|
38
36
|
|
|
39
37
|
constructor(options: GPUForceLayoutOptions = {}) {
|
|
40
38
|
const _options = {
|
|
41
|
-
...GPUForceLayout.
|
|
39
|
+
...GPUForceLayout.defaultProps,
|
|
42
40
|
...options
|
|
43
41
|
};
|
|
44
42
|
|
|
@@ -50,6 +48,10 @@ export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
|
50
48
|
this._d3Graph = {nodes: [], edges: []};
|
|
51
49
|
this._nodeMap = {};
|
|
52
50
|
this._edgeMap = {};
|
|
51
|
+
this._callbacks = {
|
|
52
|
+
onLayoutChange: this._onLayoutChange,
|
|
53
|
+
onLayoutDone: this._onLayoutDone
|
|
54
|
+
};
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
initializeGraph(graph) {
|
|
@@ -143,7 +145,10 @@ export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
|
143
145
|
throw new Error('Resume unavailable');
|
|
144
146
|
}
|
|
145
147
|
stop() {
|
|
146
|
-
this._worker
|
|
148
|
+
if (this._worker) {
|
|
149
|
+
this._worker.terminate();
|
|
150
|
+
this._worker = null;
|
|
151
|
+
}
|
|
147
152
|
}
|
|
148
153
|
|
|
149
154
|
// for steaming new data on the same graph
|
|
@@ -232,14 +237,14 @@ export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
|
232
237
|
const targetPosition = d3Edge && d3Edge.target;
|
|
233
238
|
if (d3Edge && sourcePosition && targetPosition) {
|
|
234
239
|
return {
|
|
235
|
-
type:
|
|
240
|
+
type: 'line',
|
|
236
241
|
sourcePosition: [sourcePosition.x, sourcePosition.y],
|
|
237
242
|
targetPosition: [targetPosition.x, targetPosition.y],
|
|
238
243
|
controlPoints: []
|
|
239
244
|
};
|
|
240
245
|
}
|
|
241
246
|
return {
|
|
242
|
-
type:
|
|
247
|
+
type: 'line',
|
|
243
248
|
sourcePosition: [0, 0],
|
|
244
249
|
targetPosition: [0, 0],
|
|
245
250
|
controlPoints: []
|
|
@@ -261,4 +266,11 @@ export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
|
261
266
|
d3Node.fx = null;
|
|
262
267
|
d3Node.fy = null;
|
|
263
268
|
};
|
|
269
|
+
|
|
270
|
+
protected override _updateBounds(): void {
|
|
271
|
+
const positions = Object.values(this._nodeMap ?? {}).map((node) =>
|
|
272
|
+
this._normalizePosition(node)
|
|
273
|
+
);
|
|
274
|
+
this._bounds = this._calculateBounds(positions);
|
|
275
|
+
}
|
|
264
276
|
}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {GraphLayout,
|
|
5
|
+
import {GraphLayout, GraphLayoutProps} from '../core/graph-layout';
|
|
6
6
|
import {Node} from '../graph/node';
|
|
7
|
-
import {
|
|
7
|
+
import {Edge} from '../graph/edge';
|
|
8
8
|
import {Graph} from '../graph/graph';
|
|
9
9
|
|
|
10
|
-
export type
|
|
10
|
+
export type SimpleLayoutProps = GraphLayoutProps & {
|
|
11
11
|
/** The accessor lets the application supply the position ([x, y]) of each node.
|
|
12
12
|
* @example
|
|
13
13
|
```js
|
|
@@ -28,8 +28,8 @@ export type SimpleLayoutOptions = GraphLayoutOptions & {
|
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
/** A basic layout where the application controls positions of each node */
|
|
31
|
-
export class SimpleLayout extends GraphLayout<
|
|
32
|
-
static
|
|
31
|
+
export class SimpleLayout extends GraphLayout<SimpleLayoutProps> {
|
|
32
|
+
static defaultProps: Required<SimpleLayoutProps> = {
|
|
33
33
|
nodePositionAccessor: (node) =>
|
|
34
34
|
[node.getPropertyValue('x'), node.getPropertyValue('y')] as [number, number]
|
|
35
35
|
};
|
|
@@ -37,26 +37,22 @@ export class SimpleLayout extends GraphLayout<SimpleLayoutOptions> {
|
|
|
37
37
|
protected readonly _name = 'SimpleLayout';
|
|
38
38
|
protected _graph: Graph | null = null;
|
|
39
39
|
protected _nodeMap: Record<string, Node> = {};
|
|
40
|
-
protected _nodePositionMap: Record<string,
|
|
40
|
+
protected _nodePositionMap: Record<string, [number, number] | null> = {};
|
|
41
41
|
|
|
42
|
-
constructor(options:
|
|
43
|
-
super({...SimpleLayout.
|
|
42
|
+
constructor(options: SimpleLayoutProps = {}) {
|
|
43
|
+
super({...SimpleLayout.defaultProps, ...options});
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
initializeGraph(graph: Graph): void {
|
|
47
47
|
this.updateGraph(graph);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
_notifyLayoutComplete(): void {
|
|
51
|
-
this._onLayoutStart();
|
|
52
|
-
this._onLayoutChange();
|
|
53
|
-
this._onLayoutDone();
|
|
54
|
-
}
|
|
55
|
-
|
|
56
50
|
start(): void {
|
|
57
51
|
this._notifyLayoutComplete();
|
|
58
52
|
}
|
|
59
53
|
|
|
54
|
+
stop() : void {}
|
|
55
|
+
|
|
60
56
|
update(): void {
|
|
61
57
|
this._notifyLayoutComplete();
|
|
62
58
|
}
|
|
@@ -71,32 +67,59 @@ export class SimpleLayout extends GraphLayout<SimpleLayoutOptions> {
|
|
|
71
67
|
res[node.getId()] = node;
|
|
72
68
|
return res;
|
|
73
69
|
}, {});
|
|
74
|
-
this._nodePositionMap = graph.getNodes().reduce
|
|
75
|
-
res
|
|
76
|
-
|
|
77
|
-
|
|
70
|
+
this._nodePositionMap = graph.getNodes().reduce<Record<string, [number, number] | null>>(
|
|
71
|
+
(res, node) => {
|
|
72
|
+
res[node.getId()] = this._normalizePosition(
|
|
73
|
+
this._options.nodePositionAccessor(node)
|
|
74
|
+
);
|
|
75
|
+
return res;
|
|
76
|
+
},
|
|
77
|
+
{}
|
|
78
|
+
);
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
setNodePositionAccessor = (accessor) => {
|
|
81
82
|
(this._options as any).nodePositionAccessor = accessor;
|
|
82
83
|
};
|
|
83
84
|
|
|
84
|
-
getNodePosition = (node)
|
|
85
|
+
getNodePosition = (node: Node | null): [number, number] => {
|
|
86
|
+
if (!node) {
|
|
87
|
+
return [0, 0] as [number, number];
|
|
88
|
+
}
|
|
89
|
+
const position = this._nodePositionMap[node.getId()];
|
|
90
|
+
return position ?? [0, 0] as [number, number];
|
|
91
|
+
};
|
|
85
92
|
|
|
86
|
-
getEdgePosition = (edge) => {
|
|
87
|
-
const
|
|
88
|
-
const
|
|
93
|
+
getEdgePosition = (edge: Edge) => {
|
|
94
|
+
const sourceNode = this._nodeMap[edge.getSourceNodeId()];
|
|
95
|
+
const targetNode = this._nodeMap[edge.getTargetNodeId()];
|
|
96
|
+
const sourcePos = sourceNode ? this.getNodePosition(sourceNode) : [0, 0];
|
|
97
|
+
const targetPos = targetNode ? this.getNodePosition(targetNode) : [0, 0];
|
|
89
98
|
return {
|
|
90
|
-
type:
|
|
99
|
+
type: 'line',
|
|
91
100
|
sourcePosition: sourcePos,
|
|
92
101
|
targetPosition: targetPos,
|
|
93
102
|
controlPoints: []
|
|
94
|
-
}
|
|
103
|
+
};
|
|
95
104
|
};
|
|
96
105
|
|
|
97
106
|
lockNodePosition = (node, x, y) => {
|
|
98
|
-
this._nodePositionMap[node.getId()] = [x, y]
|
|
107
|
+
this._nodePositionMap[node.getId()] = [x, y];
|
|
99
108
|
this._onLayoutChange();
|
|
100
109
|
this._onLayoutDone();
|
|
101
110
|
};
|
|
111
|
+
|
|
112
|
+
_notifyLayoutComplete(): void {
|
|
113
|
+
this._onLayoutStart();
|
|
114
|
+
this._onLayoutChange();
|
|
115
|
+
this._onLayoutDone();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
protected override _updateBounds(): void {
|
|
120
|
+
const positions = Object.values(this._nodePositionMap).map((position) =>
|
|
121
|
+
this._normalizePosition(position)
|
|
122
|
+
);
|
|
123
|
+
this._bounds = this._calculateBounds(positions);
|
|
124
|
+
}
|
|
102
125
|
}
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import type {EdgeOptions} from '../graph/edge';
|
|
6
|
-
import {
|
|
6
|
+
import {error} from '../utils/log';
|
|
7
7
|
|
|
8
8
|
export function basicEdgeParser(edge: any): Omit<EdgeOptions, 'data'> {
|
|
9
9
|
const {id, directed, sourceId, targetId} = edge;
|
|
10
10
|
|
|
11
11
|
if (sourceId === undefined || targetId === undefined) {
|
|
12
|
-
|
|
12
|
+
error('Invalid edge: sourceId or targetId is missing.');
|
|
13
13
|
return null;
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
import {createGraph} from './create-graph';
|
|
6
6
|
import {basicNodeParser} from './node-parsers';
|
|
7
7
|
import {basicEdgeParser} from './edge-parsers';
|
|
8
|
-
import {
|
|
8
|
+
import {error} from '../utils/log';
|
|
9
9
|
|
|
10
10
|
export const JSONLoader = ({json, nodeParser = basicNodeParser, edgeParser = basicEdgeParser}) => {
|
|
11
11
|
const {name = 'default', nodes, edges} = json;
|
|
12
12
|
if (!nodes) {
|
|
13
|
-
|
|
13
|
+
error('Invalid graph: nodes is missing.');
|
|
14
14
|
return null;
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import type {NodeOptions} from '../graph/node';
|
|
6
|
-
import {
|
|
6
|
+
import {error} from '../utils/log';
|
|
7
7
|
|
|
8
8
|
export function basicNodeParser(node: any): Pick<NodeOptions, 'id'> {
|
|
9
9
|
if (node.id === undefined) {
|
|
10
|
-
|
|
10
|
+
error('Invalid node: id is missing.');
|
|
11
11
|
return null;
|
|
12
12
|
}
|
|
13
13
|
return {id: node.id};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import {createGraph} from './create-graph';
|
|
6
|
-
import {
|
|
6
|
+
import {error} from '../utils/log';
|
|
7
7
|
import {basicNodeParser} from './node-parsers';
|
|
8
8
|
import {basicEdgeParser} from './edge-parsers';
|
|
9
9
|
|
|
@@ -19,7 +19,7 @@ export function loadSimpleJSONGraph(
|
|
|
19
19
|
const {nodeParser = basicNodeParser, edgeParser = basicEdgeParser} = options;
|
|
20
20
|
const {name = 'default', nodes, edges} = json;
|
|
21
21
|
if (!nodes) {
|
|
22
|
-
|
|
22
|
+
error('Invalid graph: nodes is missing.');
|
|
23
23
|
return null;
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -8,7 +8,7 @@ import {Edge} from '../graph/edge';
|
|
|
8
8
|
import {Node} from '../graph/node';
|
|
9
9
|
import {Graph} from '../graph/graph';
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import {error} from '../utils/log';
|
|
12
12
|
|
|
13
13
|
export type ParseGraphOptions = {
|
|
14
14
|
nodeIdField?: string;
|
|
@@ -73,7 +73,7 @@ export function tableGraphLoader(
|
|
|
73
73
|
// add nodes
|
|
74
74
|
|
|
75
75
|
if (!nodes) {
|
|
76
|
-
|
|
76
|
+
error('Invalid graph: nodes is missing.');
|
|
77
77
|
return null;
|
|
78
78
|
}
|
|
79
79
|
|