@deck.gl-community/graph-layers 9.2.0-beta.2 → 9.2.0-beta.3
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/core/graph-engine.d.ts +63 -21
- package/dist/core/graph-engine.d.ts.map +1 -1
- package/dist/core/graph-engine.js +155 -75
- package/dist/core/graph-engine.js.map +1 -1
- package/dist/core/graph-layout.d.ts +22 -18
- package/dist/core/graph-layout.d.ts.map +1 -1
- package/dist/core/graph-layout.js +33 -18
- package/dist/core/graph-layout.js.map +1 -1
- package/dist/core/interaction-manager.d.ts +2 -2
- package/dist/core/interaction-manager.d.ts.map +1 -1
- package/dist/core/interaction-manager.js +7 -5
- package/dist/core/interaction-manager.js.map +1 -1
- package/dist/graph/arrow-graph.d.ts +69 -0
- package/dist/graph/arrow-graph.d.ts.map +1 -0
- package/dist/graph/arrow-graph.js +513 -0
- package/dist/graph/arrow-graph.js.map +1 -0
- package/dist/graph/classic-graph.d.ts +169 -0
- package/dist/graph/classic-graph.d.ts.map +1 -0
- package/dist/graph/classic-graph.js +390 -0
- package/dist/graph/classic-graph.js.map +1 -0
- package/dist/graph/edge.d.ts +6 -6
- package/dist/graph/edge.d.ts.map +1 -1
- package/dist/graph/edge.js.map +1 -1
- package/dist/graph/functions/arrow-utils.d.ts +6 -0
- package/dist/graph/functions/arrow-utils.d.ts.map +1 -0
- package/dist/graph/functions/arrow-utils.js +67 -0
- package/dist/graph/functions/arrow-utils.js.map +1 -0
- package/dist/graph/functions/create-graph-from-data.d.ts +3 -0
- package/dist/graph/functions/create-graph-from-data.d.ts.map +1 -0
- package/dist/graph/functions/create-graph-from-data.js +12 -0
- package/dist/graph/functions/create-graph-from-data.js.map +1 -0
- package/dist/graph/graph-normalization.d.ts +10 -0
- package/dist/graph/graph-normalization.d.ts.map +1 -0
- package/dist/graph/graph-normalization.js +65 -0
- package/dist/graph/graph-normalization.js.map +1 -0
- package/dist/graph/graph.d.ts +62 -155
- package/dist/graph/graph.d.ts.map +1 -1
- package/dist/graph/graph.js +11 -300
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/node.d.ts +6 -6
- package/dist/graph/node.d.ts.map +1 -1
- package/dist/graph/node.js +2 -2
- package/dist/graph/node.js.map +1 -1
- package/dist/graph-data/arrow-graph-data-builder.d.ts +21 -0
- package/dist/graph-data/arrow-graph-data-builder.d.ts.map +1 -0
- package/dist/graph-data/arrow-graph-data-builder.js +105 -0
- package/dist/graph-data/arrow-graph-data-builder.js.map +1 -0
- package/dist/graph-data/graph-data-builder.d.ts +6 -0
- package/dist/graph-data/graph-data-builder.d.ts.map +1 -0
- package/dist/graph-data/graph-data-builder.js +1 -0
- package/dist/graph-data/graph-data-builder.js.map +1 -0
- package/dist/graph-data/graph-data.d.ts +40 -0
- package/dist/graph-data/graph-data.d.ts.map +1 -0
- package/dist/graph-data/graph-data.js +11 -0
- package/dist/graph-data/graph-data.js.map +1 -0
- package/dist/graph-data/plain-graph-data-builder.d.ts +20 -0
- package/dist/graph-data/plain-graph-data-builder.d.ts.map +1 -0
- package/dist/graph-data/plain-graph-data-builder.js +105 -0
- package/dist/graph-data/plain-graph-data-builder.js.map +1 -0
- package/dist/graph-style-schema.cdn.js +1 -1
- package/dist/graph-style-schema.json +1 -1
- package/dist/index.cjs +6905 -4576
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +14 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -11
- package/dist/index.js.map +1 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts.map +1 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js +1 -2
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js.map +1 -1
- package/dist/layers/common-layers/grid-layer/grid-layer.d.ts +83 -0
- package/dist/layers/common-layers/grid-layer/grid-layer.d.ts.map +1 -0
- package/dist/layers/common-layers/grid-layer/grid-layer.js +133 -0
- package/dist/layers/common-layers/grid-layer/grid-layer.js.map +1 -0
- package/dist/layers/edge-attachment-helper.d.ts.map +1 -1
- package/dist/layers/edge-attachment-helper.js +1 -2
- package/dist/layers/edge-attachment-helper.js.map +1 -1
- package/dist/layers/graph-layer.d.ts +68 -11
- package/dist/layers/graph-layer.d.ts.map +1 -1
- package/dist/layers/graph-layer.js +435 -50
- package/dist/layers/graph-layer.js.map +1 -1
- package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts +24 -0
- package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts.map +1 -0
- package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js +251 -0
- package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js.map +1 -0
- package/dist/layouts/d3-dag/d3-dag-layout.d.ts +46 -61
- package/dist/layouts/d3-dag/d3-dag-layout.d.ts.map +1 -1
- package/dist/layouts/d3-dag/d3-dag-layout.js +85 -270
- package/dist/layouts/d3-dag/d3-dag-layout.js.map +1 -1
- package/dist/layouts/d3-force/d3-force-layout.d.ts +20 -8
- package/dist/layouts/d3-force/d3-force-layout.d.ts.map +1 -1
- package/dist/layouts/d3-force/d3-force-layout.js +39 -20
- package/dist/layouts/d3-force/d3-force-layout.js.map +1 -1
- package/dist/layouts/experimental/force-multi-graph-layout.d.ts +19 -15
- package/dist/layouts/experimental/force-multi-graph-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/force-multi-graph-layout.js +47 -38
- package/dist/layouts/experimental/force-multi-graph-layout.js.map +1 -1
- package/dist/layouts/experimental/hive-plot-layout.d.ts +18 -15
- package/dist/layouts/experimental/hive-plot-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/hive-plot-layout.js +33 -34
- package/dist/layouts/experimental/hive-plot-layout.js.map +1 -1
- package/dist/layouts/experimental/radial-layout.d.ts +12 -7
- package/dist/layouts/experimental/radial-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/radial-layout.js +31 -14
- package/dist/layouts/experimental/radial-layout.js.map +1 -1
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts +11 -8
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts.map +1 -1
- package/dist/layouts/gpu-force/gpu-force-layout.js +59 -56
- package/dist/layouts/gpu-force/gpu-force-layout.js.map +1 -1
- package/dist/layouts/simple-layout.d.ts +8 -25
- package/dist/layouts/simple-layout.d.ts.map +1 -1
- package/dist/layouts/simple-layout.js +13 -17
- package/dist/layouts/simple-layout.js.map +1 -1
- package/dist/loaders/dot-graph-loader.d.ts +25 -0
- package/dist/loaders/dot-graph-loader.d.ts.map +1 -0
- package/dist/loaders/dot-graph-loader.js +668 -0
- package/dist/loaders/dot-graph-loader.js.map +1 -0
- package/dist/loaders/json-graph-loader.d.ts +6 -0
- package/dist/loaders/json-graph-loader.d.ts.map +1 -0
- package/dist/loaders/json-graph-loader.js +31 -0
- package/dist/loaders/json-graph-loader.js.map +1 -0
- package/dist/loaders/{edge-parsers.d.ts → parsers/edge-parsers.d.ts} +1 -1
- package/dist/loaders/parsers/edge-parsers.d.ts.map +1 -0
- package/dist/loaders/{edge-parsers.js → parsers/edge-parsers.js} +1 -1
- package/dist/loaders/parsers/edge-parsers.js.map +1 -0
- package/dist/loaders/{node-parsers.d.ts → parsers/node-parsers.d.ts} +1 -1
- package/dist/loaders/parsers/node-parsers.d.ts.map +1 -0
- package/dist/loaders/{node-parsers.js → parsers/node-parsers.js} +1 -1
- package/dist/loaders/parsers/node-parsers.js.map +1 -0
- package/dist/loaders/parsers/parse-json-graph.d.ts +29 -0
- package/dist/loaders/parsers/parse-json-graph.d.ts.map +1 -0
- package/dist/loaders/parsers/parse-json-graph.js +78 -0
- package/dist/loaders/parsers/parse-json-graph.js.map +1 -0
- package/dist/style/graph-style-engine.d.ts +4 -2
- package/dist/style/graph-style-engine.d.ts.map +1 -1
- package/dist/style/graph-style-engine.js +3 -2
- package/dist/style/graph-style-engine.js.map +1 -1
- package/dist/style/{style-engine.d.ts → stylesheet-engine.d.ts} +3 -3
- package/dist/style/stylesheet-engine.d.ts.map +1 -0
- package/dist/style/{style-engine.js → stylesheet-engine.js} +1 -1
- package/dist/style/stylesheet-engine.js.map +1 -0
- package/dist/utils/collapsed-chains.d.ts +8 -8
- package/dist/utils/collapsed-chains.d.ts.map +1 -1
- package/dist/utils/collapsed-chains.js +1 -6
- package/dist/utils/collapsed-chains.js.map +1 -1
- package/dist/utils/rank-grid.d.ts +30 -0
- package/dist/utils/rank-grid.d.ts.map +1 -0
- package/dist/utils/rank-grid.js +306 -0
- package/dist/utils/rank-grid.js.map +1 -0
- package/package.json +4 -8
- package/src/_disabled/arrow-graph-data.ts.disabled +18 -0
- package/src/_disabled/columnar-graph-data-builder.ts.disabled +250 -0
- package/src/_disabled/graph-runtime-layout.ts.disabled +29 -0
- package/src/core/graph-engine.ts +201 -84
- package/src/core/graph-layout.ts +52 -29
- package/src/core/interaction-manager.ts +20 -20
- package/src/graph/arrow-graph.ts +648 -0
- package/src/graph/classic-graph.ts +447 -0
- package/src/graph/edge.ts +7 -7
- package/src/graph/functions/arrow-utils.ts +72 -0
- package/src/graph/functions/convert-arrow-graph-to-classic-graph.ts.disabled +47 -0
- package/src/graph/functions/convert-plain-graph-to-arrow-graph.ts.disabled +119 -0
- package/src/graph/functions/create-graph-from-data.ts +16 -0
- package/src/graph/functions/create-plain-graph-from-data.ts.disabled +176 -0
- package/src/graph/graph-normalization.ts +87 -0
- package/src/graph/graph.ts +68 -339
- package/src/graph/node.ts +9 -9
- package/src/graph/tabular-graph.ts.disabled +761 -0
- package/src/graph-data/arrow-graph-data-builder.ts +165 -0
- package/src/graph-data/graph-data-builder.ts +7 -0
- package/src/graph-data/graph-data.ts +57 -0
- package/src/graph-data/plain-graph-data-builder.ts +132 -0
- package/src/index.ts +53 -13
- package/src/layers/common-layers/flow-path-layer/flow-path-layer.ts +1 -2
- package/src/layers/common-layers/grid-layer/grid-layer.ts +237 -0
- package/src/layers/edge-attachment-helper.ts +22 -16
- package/src/layers/graph-layer.ts +642 -62
- package/src/layouts/d3-dag/collapsable-d3-dag-layout.ts +330 -0
- package/src/layouts/d3-dag/d3-dag-layout.ts +166 -396
- package/src/layouts/d3-force/d3-force-layout.ts +52 -30
- package/src/layouts/experimental/force-multi-graph-layout.ts +55 -49
- package/src/layouts/experimental/hive-plot-layout.ts +41 -42
- package/src/layouts/experimental/radial-layout.ts +39 -20
- package/src/layouts/gpu-force/gpu-force-layout.ts +72 -70
- package/src/layouts/simple-layout.ts +20 -44
- package/src/loaders/{create-graph.ts → deprecated/create-graph.ts.disabled} +6 -6
- package/src/loaders/deprecated/json-classic-graph-loader.ts.disabled +33 -0
- package/src/loaders/{simple-json-graph-loader.ts → deprecated/simple-json-graph-loader.ts.disabled} +3 -3
- package/src/loaders/{table-graph-loader.ts → deprecated/table-graph-loader.ts.disabled} +8 -8
- package/src/loaders/dot-graph-loader.ts +860 -0
- package/src/loaders/json-graph-loader.ts +48 -0
- package/src/loaders/parsers/create-graph-data.ts.disabled +45 -0
- package/src/loaders/{edge-parsers.ts → parsers/edge-parsers.ts} +2 -2
- package/src/loaders/{node-parsers.ts → parsers/node-parsers.ts} +2 -2
- package/src/loaders/parsers/parse-json-graph.ts +134 -0
- package/src/style/graph-style-engine.ts +5 -2
- package/src/style/{style-engine.ts → stylesheet-engine.ts} +3 -3
- package/src/utils/collapsed-chains.ts +11 -17
- package/src/utils/rank-grid.ts +426 -0
- package/dist/loaders/create-graph.d.ts +0 -12
- package/dist/loaders/create-graph.d.ts.map +0 -1
- package/dist/loaders/create-graph.js +0 -38
- package/dist/loaders/create-graph.js.map +0 -1
- package/dist/loaders/edge-parsers.d.ts.map +0 -1
- package/dist/loaders/edge-parsers.js.map +0 -1
- package/dist/loaders/json-loader.d.ts +0 -7
- package/dist/loaders/json-loader.d.ts.map +0 -1
- package/dist/loaders/json-loader.js +0 -16
- package/dist/loaders/json-loader.js.map +0 -1
- package/dist/loaders/node-parsers.d.ts.map +0 -1
- package/dist/loaders/node-parsers.js.map +0 -1
- package/dist/loaders/simple-json-graph-loader.d.ts +0 -11
- package/dist/loaders/simple-json-graph-loader.d.ts.map +0 -1
- package/dist/loaders/simple-json-graph-loader.js +0 -20
- package/dist/loaders/simple-json-graph-loader.js.map +0 -1
- package/dist/loaders/table-graph-loader.d.ts +0 -16
- package/dist/loaders/table-graph-loader.d.ts.map +0 -1
- package/dist/loaders/table-graph-loader.js +0 -91
- package/dist/loaders/table-graph-loader.js.map +0 -1
- package/dist/style/style-engine.d.ts.map +0 -1
- package/dist/style/style-engine.js.map +0 -1
- package/dist/widgets/long-press-button.d.ts +0 -12
- package/dist/widgets/long-press-button.d.ts.map +0 -1
- package/dist/widgets/long-press-button.js +0 -31
- package/dist/widgets/long-press-button.js.map +0 -1
- package/dist/widgets/view-control-widget.d.ts +0 -77
- package/dist/widgets/view-control-widget.d.ts.map +0 -1
- package/dist/widgets/view-control-widget.js +0 -197
- package/dist/widgets/view-control-widget.js.map +0 -1
- package/src/loaders/json-loader.ts +0 -19
- package/src/widgets/long-press-button.tsx +0 -50
- package/src/widgets/view-control-widget.tsx +0 -339
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';
|
|
6
|
+
import type {Graph, NodeInterface, EdgeInterface} from '../../graph/graph';
|
|
6
7
|
|
|
7
8
|
export type GPUForceLayoutOptions = GraphLayoutProps & {
|
|
8
9
|
alpha?: number;
|
|
@@ -18,6 +19,7 @@ export type GPUForceLayoutOptions = GraphLayoutProps & {
|
|
|
18
19
|
*/
|
|
19
20
|
export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
20
21
|
static defaultProps: Required<GPUForceLayoutOptions> = {
|
|
22
|
+
...GraphLayout.defaultProps,
|
|
21
23
|
alpha: 0.3,
|
|
22
24
|
resumeAlpha: 0.1,
|
|
23
25
|
nBodyStrength: -900,
|
|
@@ -27,40 +29,30 @@ export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
|
27
29
|
};
|
|
28
30
|
|
|
29
31
|
protected readonly _name: string = 'GPU';
|
|
30
|
-
private _d3Graph: any;
|
|
31
|
-
private _nodeMap: any
|
|
32
|
-
private _edgeMap: any
|
|
33
|
-
private _graph:
|
|
32
|
+
private _d3Graph: {nodes: any[]; edges: any[]};
|
|
33
|
+
private _nodeMap: Map<string | number, any>;
|
|
34
|
+
private _edgeMap: Map<string | number, any>;
|
|
35
|
+
private _graph: Graph | null;
|
|
34
36
|
private _worker: Worker | null = null;
|
|
35
|
-
private _callbacks: any;
|
|
36
37
|
|
|
37
38
|
constructor(options: GPUForceLayoutOptions = {}) {
|
|
38
|
-
|
|
39
|
-
...GPUForceLayout.defaultProps,
|
|
40
|
-
...options
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
super(_options);
|
|
39
|
+
super(options, GPUForceLayout.defaultProps);
|
|
44
40
|
|
|
45
41
|
this._name = 'GPU';
|
|
46
|
-
this._options = _options;
|
|
47
42
|
// store graph and prepare internal data
|
|
48
43
|
this._d3Graph = {nodes: [], edges: []};
|
|
49
|
-
this._nodeMap =
|
|
50
|
-
this._edgeMap =
|
|
51
|
-
this.
|
|
52
|
-
onLayoutChange: this._onLayoutChange,
|
|
53
|
-
onLayoutDone: this._onLayoutDone
|
|
54
|
-
};
|
|
44
|
+
this._nodeMap = new Map();
|
|
45
|
+
this._edgeMap = new Map();
|
|
46
|
+
this._graph = null;
|
|
55
47
|
}
|
|
56
48
|
|
|
57
|
-
initializeGraph(graph) {
|
|
49
|
+
initializeGraph(graph: Graph) {
|
|
58
50
|
this._graph = graph;
|
|
59
|
-
this._nodeMap =
|
|
60
|
-
this._edgeMap =
|
|
51
|
+
this._nodeMap = new Map();
|
|
52
|
+
this._edgeMap = new Map();
|
|
61
53
|
// nodes
|
|
62
|
-
const d3Nodes = graph.getNodes()
|
|
63
|
-
const id = node.
|
|
54
|
+
const d3Nodes = Array.from(graph.getNodes(), (node) => {
|
|
55
|
+
const id = node.getId();
|
|
64
56
|
const locked = node.getPropertyValue('locked') || false;
|
|
65
57
|
const x = node.getPropertyValue('x') || 0;
|
|
66
58
|
const y = node.getPropertyValue('y') || 0;
|
|
@@ -74,17 +66,18 @@ export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
|
74
66
|
collisionRadius,
|
|
75
67
|
locked
|
|
76
68
|
};
|
|
77
|
-
this._nodeMap
|
|
69
|
+
this._nodeMap.set(id, d3Node);
|
|
78
70
|
return d3Node;
|
|
79
71
|
});
|
|
80
72
|
// edges
|
|
81
|
-
const d3Edges = graph.getEdges()
|
|
73
|
+
const d3Edges = Array.from(graph.getEdges(), (edge) => {
|
|
74
|
+
const id = edge.getId();
|
|
82
75
|
const d3Edge = {
|
|
83
|
-
id
|
|
84
|
-
source: this._nodeMap
|
|
85
|
-
target: this._nodeMap
|
|
76
|
+
id,
|
|
77
|
+
source: this._nodeMap.get(edge.getSourceNodeId()),
|
|
78
|
+
target: this._nodeMap.get(edge.getTargetNodeId())
|
|
86
79
|
};
|
|
87
|
-
this._edgeMap
|
|
80
|
+
this._edgeMap.set(id, d3Edge);
|
|
88
81
|
return d3Edge;
|
|
89
82
|
});
|
|
90
83
|
this._d3Graph = {
|
|
@@ -109,7 +102,7 @@ export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
|
109
102
|
|
|
110
103
|
this._worker = new Worker(new URL('./worker.js', import.meta.url).href);
|
|
111
104
|
const {alpha, nBodyStrength, nBodyDistanceMin, nBodyDistanceMax, getCollisionRadius} =
|
|
112
|
-
this.
|
|
105
|
+
this.props;
|
|
113
106
|
this._worker.postMessage({
|
|
114
107
|
nodes: this._d3Graph.nodes,
|
|
115
108
|
edges: this._d3Graph.edges,
|
|
@@ -152,18 +145,22 @@ export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
|
152
145
|
}
|
|
153
146
|
|
|
154
147
|
// for steaming new data on the same graph
|
|
155
|
-
updateGraph(graph) {
|
|
156
|
-
|
|
148
|
+
updateGraph(graph: Graph) {
|
|
149
|
+
const previousName = this._graph?.getGraphName?.();
|
|
150
|
+
const nextName = graph.getGraphName?.();
|
|
151
|
+
const isSameGraph =
|
|
152
|
+
(previousName && nextName && previousName === nextName) || this._graph === graph;
|
|
153
|
+
if (!isSameGraph) {
|
|
157
154
|
// reset the maps
|
|
158
|
-
this._nodeMap =
|
|
159
|
-
this._edgeMap =
|
|
155
|
+
this._nodeMap = new Map();
|
|
156
|
+
this._edgeMap = new Map();
|
|
160
157
|
}
|
|
161
158
|
this._graph = graph;
|
|
162
159
|
// update internal layout data
|
|
163
160
|
// nodes
|
|
164
|
-
const newNodeMap =
|
|
165
|
-
const newD3Nodes = graph.getNodes()
|
|
166
|
-
const id = node.
|
|
161
|
+
const newNodeMap = new Map<string | number, any>();
|
|
162
|
+
const newD3Nodes = Array.from(graph.getNodes(), (node) => {
|
|
163
|
+
const id = node.getId();
|
|
167
164
|
const locked = node.getPropertyValue('locked') || false;
|
|
168
165
|
const x = node.getPropertyValue('x') || 0;
|
|
169
166
|
const y = node.getPropertyValue('y') || 0;
|
|
@@ -171,68 +168,69 @@ export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
|
171
168
|
const fy = locked ? y : null;
|
|
172
169
|
const collisionRadius = node.getPropertyValue('collisionRadius') || 0;
|
|
173
170
|
|
|
174
|
-
const oldD3Node = this._nodeMap
|
|
171
|
+
const oldD3Node = this._nodeMap.get(id);
|
|
175
172
|
const newD3Node = oldD3Node ? oldD3Node : {id, x, y, fx, fy, collisionRadius};
|
|
176
|
-
newNodeMap
|
|
173
|
+
newNodeMap.set(id, newD3Node);
|
|
177
174
|
return newD3Node;
|
|
178
175
|
});
|
|
179
176
|
this._nodeMap = newNodeMap;
|
|
180
177
|
this._d3Graph.nodes = newD3Nodes;
|
|
181
178
|
// edges
|
|
182
|
-
const newEdgeMap =
|
|
183
|
-
const newD3Edges = graph.getEdges()
|
|
184
|
-
const
|
|
179
|
+
const newEdgeMap = new Map<string | number, any>();
|
|
180
|
+
const newD3Edges = Array.from(graph.getEdges(), (edge) => {
|
|
181
|
+
const id = edge.getId();
|
|
182
|
+
const oldD3Edge = this._edgeMap.get(id);
|
|
185
183
|
const newD3Edge = oldD3Edge || {
|
|
186
|
-
id
|
|
187
|
-
source: newNodeMap
|
|
188
|
-
target: newNodeMap
|
|
184
|
+
id,
|
|
185
|
+
source: newNodeMap.get(edge.getSourceNodeId()),
|
|
186
|
+
target: newNodeMap.get(edge.getTargetNodeId())
|
|
189
187
|
};
|
|
190
|
-
newEdgeMap
|
|
188
|
+
newEdgeMap.set(id, newD3Edge);
|
|
191
189
|
return newD3Edge;
|
|
192
190
|
});
|
|
193
191
|
this._edgeMap = newEdgeMap;
|
|
194
192
|
this._d3Graph.edges = newD3Edges;
|
|
195
193
|
}
|
|
196
194
|
|
|
197
|
-
updateD3Graph(graph) {
|
|
198
|
-
const existingNodes = this._graph.getNodes();
|
|
195
|
+
updateD3Graph(graph: {nodes: any[]; edges: any[]}): void {
|
|
196
|
+
const existingNodes = this._graph ? Array.from(this._graph.getNodes()) : [];
|
|
199
197
|
// update internal layout data
|
|
200
198
|
// nodes
|
|
201
|
-
const newNodeMap =
|
|
199
|
+
const newNodeMap = new Map<string | number, any>();
|
|
202
200
|
const newD3Nodes = graph.nodes.map((node) => {
|
|
203
201
|
// Update existing _graph with the new values
|
|
204
202
|
const existingNode = existingNodes.find((n) => n.getId() === node.id);
|
|
205
|
-
existingNode
|
|
206
|
-
existingNode
|
|
207
|
-
existingNode
|
|
208
|
-
existingNode
|
|
203
|
+
existingNode?.setDataProperty('locked', node.locked);
|
|
204
|
+
existingNode?.setDataProperty('x', node.x);
|
|
205
|
+
existingNode?.setDataProperty('y', node.y);
|
|
206
|
+
existingNode?.setDataProperty('collisionRadius', node.collisionRadius);
|
|
209
207
|
|
|
210
|
-
newNodeMap
|
|
208
|
+
newNodeMap.set(node.id, node);
|
|
211
209
|
return node;
|
|
212
210
|
});
|
|
213
211
|
this._nodeMap = newNodeMap;
|
|
214
212
|
this._d3Graph.nodes = newD3Nodes;
|
|
215
213
|
// edges
|
|
216
|
-
const newEdgeMap =
|
|
214
|
+
const newEdgeMap = new Map<string | number, any>();
|
|
217
215
|
const newD3Edges = graph.edges.map((edge) => {
|
|
218
|
-
newEdgeMap
|
|
216
|
+
newEdgeMap.set(edge.id, edge);
|
|
219
217
|
return edge;
|
|
220
218
|
});
|
|
221
|
-
this._graph
|
|
219
|
+
this._graph?.triggerUpdate?.();
|
|
222
220
|
this._edgeMap = newEdgeMap;
|
|
223
221
|
this._d3Graph.edges = newD3Edges;
|
|
224
222
|
}
|
|
225
223
|
|
|
226
|
-
getNodePosition = (node): [number, number] => {
|
|
227
|
-
const d3Node = this._nodeMap
|
|
224
|
+
getNodePosition = (node: NodeInterface): [number, number] => {
|
|
225
|
+
const d3Node = this._nodeMap.get(node.getId());
|
|
228
226
|
if (d3Node) {
|
|
229
227
|
return [d3Node.x, d3Node.y];
|
|
230
228
|
}
|
|
231
229
|
return [0, 0];
|
|
232
230
|
};
|
|
233
231
|
|
|
234
|
-
getEdgePosition = (edge) => {
|
|
235
|
-
const d3Edge = this._edgeMap
|
|
232
|
+
getEdgePosition = (edge: EdgeInterface) => {
|
|
233
|
+
const d3Edge = this._edgeMap.get(edge.getId());
|
|
236
234
|
const sourcePosition = d3Edge && d3Edge.source;
|
|
237
235
|
const targetPosition = d3Edge && d3Edge.target;
|
|
238
236
|
if (d3Edge && sourcePosition && targetPosition) {
|
|
@@ -251,26 +249,30 @@ export class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {
|
|
|
251
249
|
};
|
|
252
250
|
};
|
|
253
251
|
|
|
254
|
-
lockNodePosition = (node, x, y) => {
|
|
255
|
-
const d3Node = this._nodeMap
|
|
252
|
+
lockNodePosition = (node: NodeInterface, x: number, y: number) => {
|
|
253
|
+
const d3Node = this._nodeMap.get(node.getId());
|
|
254
|
+
if (!d3Node) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
256
257
|
d3Node.x = x;
|
|
257
258
|
d3Node.y = y;
|
|
258
259
|
d3Node.fx = x;
|
|
259
260
|
d3Node.fy = y;
|
|
260
|
-
this.
|
|
261
|
-
this.
|
|
261
|
+
this._onLayoutChange();
|
|
262
|
+
this._onLayoutDone();
|
|
262
263
|
};
|
|
263
264
|
|
|
264
|
-
unlockNodePosition = (node) => {
|
|
265
|
-
const d3Node = this._nodeMap
|
|
265
|
+
unlockNodePosition = (node: NodeInterface) => {
|
|
266
|
+
const d3Node = this._nodeMap.get(node.getId());
|
|
267
|
+
if (!d3Node) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
266
270
|
d3Node.fx = null;
|
|
267
271
|
d3Node.fy = null;
|
|
268
272
|
};
|
|
269
273
|
|
|
270
274
|
protected override _updateBounds(): void {
|
|
271
|
-
const positions =
|
|
272
|
-
this._normalizePosition(node)
|
|
273
|
-
);
|
|
275
|
+
const positions = Array.from(this._nodeMap.values(), (node) => this._normalizePosition(node));
|
|
274
276
|
this._bounds = this._calculateBounds(positions);
|
|
275
277
|
}
|
|
276
278
|
}
|
|
@@ -3,44 +3,28 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import {GraphLayout, GraphLayoutProps} from '../core/graph-layout';
|
|
6
|
-
import {
|
|
7
|
-
import {Edge} from '../graph/edge';
|
|
8
|
-
import {Graph} from '../graph/graph';
|
|
6
|
+
import type {Graph, NodeInterface, EdgeInterface} from '../graph/graph';
|
|
9
7
|
|
|
10
8
|
export type SimpleLayoutProps = GraphLayoutProps & {
|
|
11
|
-
/** The accessor lets the application supply the position ([x, y]) of each node.
|
|
12
|
-
|
|
13
|
-
```js
|
|
14
|
-
<GraphGL
|
|
15
|
-
{...otherProps}
|
|
16
|
-
layout={
|
|
17
|
-
new SimpleLayout({
|
|
18
|
-
nodePositionAccessor: node => [
|
|
19
|
-
node.getPropertyValue('x'),
|
|
20
|
-
node.getPropertyValue('y'),
|
|
21
|
-
]
|
|
22
|
-
})
|
|
23
|
-
}
|
|
24
|
-
/>
|
|
25
|
-
```
|
|
26
|
-
*/
|
|
27
|
-
nodePositionAccessor?: (node: Node) => [number, number];
|
|
9
|
+
/** The accessor lets the application supply the position ([x, y]) of each node. */
|
|
10
|
+
nodePositionAccessor?: (node: NodeInterface) => [number, number];
|
|
28
11
|
};
|
|
29
12
|
|
|
30
13
|
/** A basic layout where the application controls positions of each node */
|
|
31
14
|
export class SimpleLayout extends GraphLayout<SimpleLayoutProps> {
|
|
32
15
|
static defaultProps: Required<SimpleLayoutProps> = {
|
|
16
|
+
...GraphLayout.defaultProps,
|
|
33
17
|
nodePositionAccessor: (node) =>
|
|
34
18
|
[node.getPropertyValue('x'), node.getPropertyValue('y')] as [number, number]
|
|
35
19
|
};
|
|
36
20
|
|
|
37
21
|
protected readonly _name = 'SimpleLayout';
|
|
38
22
|
protected _graph: Graph | null = null;
|
|
39
|
-
protected _nodeMap:
|
|
40
|
-
protected _nodePositionMap:
|
|
23
|
+
protected _nodeMap: Map<string | number, NodeInterface> = new Map();
|
|
24
|
+
protected _nodePositionMap: Map<string | number, [number, number] | null> = new Map();
|
|
41
25
|
|
|
42
26
|
constructor(options: SimpleLayoutProps = {}) {
|
|
43
|
-
super(
|
|
27
|
+
super(options, SimpleLayout.defaultProps);
|
|
44
28
|
}
|
|
45
29
|
|
|
46
30
|
initializeGraph(graph: Graph): void {
|
|
@@ -63,36 +47,28 @@ export class SimpleLayout extends GraphLayout<SimpleLayoutProps> {
|
|
|
63
47
|
|
|
64
48
|
updateGraph(graph: Graph): void {
|
|
65
49
|
this._graph = graph;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
{}
|
|
50
|
+
const nodes = Array.from(graph.getNodes());
|
|
51
|
+
this._nodeMap = new Map(nodes.map((node) => [node.getId(), node]));
|
|
52
|
+
this._nodePositionMap = new Map(
|
|
53
|
+
nodes.map((node) => [node.getId(), this._normalizePosition(this.props.nodePositionAccessor(node))])
|
|
78
54
|
);
|
|
79
55
|
}
|
|
80
56
|
|
|
81
57
|
setNodePositionAccessor = (accessor) => {
|
|
82
|
-
(this.
|
|
58
|
+
(this.props as any).nodePositionAccessor = accessor;
|
|
83
59
|
};
|
|
84
60
|
|
|
85
|
-
getNodePosition = (node:
|
|
61
|
+
getNodePosition = (node: NodeInterface | null): [number, number] => {
|
|
86
62
|
if (!node) {
|
|
87
63
|
return [0, 0] as [number, number];
|
|
88
64
|
}
|
|
89
|
-
const position = this._nodePositionMap
|
|
65
|
+
const position = this._nodePositionMap.get(node.getId());
|
|
90
66
|
return position ?? [0, 0] as [number, number];
|
|
91
67
|
};
|
|
92
68
|
|
|
93
|
-
getEdgePosition = (edge:
|
|
94
|
-
const sourceNode = this._nodeMap
|
|
95
|
-
const targetNode = this._nodeMap
|
|
69
|
+
getEdgePosition = (edge: EdgeInterface) => {
|
|
70
|
+
const sourceNode = this._nodeMap.get(edge.getSourceNodeId());
|
|
71
|
+
const targetNode = this._nodeMap.get(edge.getTargetNodeId());
|
|
96
72
|
const sourcePos = sourceNode ? this.getNodePosition(sourceNode) : [0, 0];
|
|
97
73
|
const targetPos = targetNode ? this.getNodePosition(targetNode) : [0, 0];
|
|
98
74
|
return {
|
|
@@ -103,8 +79,8 @@ export class SimpleLayout extends GraphLayout<SimpleLayoutProps> {
|
|
|
103
79
|
};
|
|
104
80
|
};
|
|
105
81
|
|
|
106
|
-
lockNodePosition = (node, x, y) => {
|
|
107
|
-
this._nodePositionMap
|
|
82
|
+
lockNodePosition = (node: NodeInterface, x: number, y: number) => {
|
|
83
|
+
this._nodePositionMap.set(node.getId(), [x, y]);
|
|
108
84
|
this._onLayoutChange();
|
|
109
85
|
this._onLayoutDone();
|
|
110
86
|
};
|
|
@@ -117,7 +93,7 @@ export class SimpleLayout extends GraphLayout<SimpleLayoutProps> {
|
|
|
117
93
|
|
|
118
94
|
|
|
119
95
|
protected override _updateBounds(): void {
|
|
120
|
-
const positions =
|
|
96
|
+
const positions = Array.from(this._nodePositionMap.values(), (position) =>
|
|
121
97
|
this._normalizePosition(position)
|
|
122
98
|
);
|
|
123
99
|
this._bounds = this._calculateBounds(positions);
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {Edge} from '
|
|
6
|
-
import {Node} from '
|
|
7
|
-
import {
|
|
5
|
+
import {Edge} from '../../graph/edge';
|
|
6
|
+
import {Node} from '../../graph/node';
|
|
7
|
+
import {ClassicGraph} from '../../graph/classic-graph';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* @deprecated Use `new
|
|
10
|
+
* @deprecated Use `new ClassicGraph(name, nodes, edges)`
|
|
11
11
|
* Create a graph from a list of Nodes and edges
|
|
12
12
|
*/
|
|
13
|
-
export function createGraph(props: {name; nodes; edges; nodeParser; edgeParser}) {
|
|
13
|
+
export function createGraph(props: {name; nodes; edges; nodeParser; edgeParser}): ClassicGraph {
|
|
14
14
|
const {name, nodes, edges, nodeParser, edgeParser} = props;
|
|
15
15
|
// create a new empty graph
|
|
16
|
-
const graph = new
|
|
16
|
+
const graph = new ClassicGraph();
|
|
17
17
|
|
|
18
18
|
const graphName = name || Date.now();
|
|
19
19
|
graph.setGraphName(graphName);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {createGraph} from './create-graph';
|
|
6
|
+
import {basicNodeParser} from '../parsers/node-parsers';
|
|
7
|
+
import {basicEdgeParser} from '../parsers/edge-parsers';
|
|
8
|
+
import {error} from '../../utils/log';
|
|
9
|
+
import type {ClassicGraph} from '../../graph/classic-graph';
|
|
10
|
+
|
|
11
|
+
export type JSONClassicGraphLoaderOptions = {
|
|
12
|
+
json: {
|
|
13
|
+
name?: string;
|
|
14
|
+
nodes?: unknown[] | null;
|
|
15
|
+
edges?: unknown[] | null;
|
|
16
|
+
};
|
|
17
|
+
nodeParser?: typeof basicNodeParser;
|
|
18
|
+
edgeParser?: typeof basicEdgeParser;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export function JSONClassicGraphLoader({
|
|
22
|
+
json,
|
|
23
|
+
nodeParser = basicNodeParser,
|
|
24
|
+
edgeParser = basicEdgeParser
|
|
25
|
+
}: JSONClassicGraphLoaderOptions): ClassicGraph | null {
|
|
26
|
+
const {name = 'default', nodes, edges = []} = json ?? {};
|
|
27
|
+
if (!Array.isArray(nodes)) {
|
|
28
|
+
error('Invalid graph: nodes is missing.');
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return createGraph({name, nodes, edges, nodeParser, edgeParser});
|
|
33
|
+
}
|
package/src/loaders/{simple-json-graph-loader.ts → deprecated/simple-json-graph-loader.ts.disabled}
RENAMED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import {createGraph} from './create-graph';
|
|
6
|
-
import {error} from '
|
|
7
|
-
import {basicNodeParser} from '
|
|
8
|
-
import {basicEdgeParser} from '
|
|
6
|
+
import {error} from '../../utils/log';
|
|
7
|
+
import {basicNodeParser} from '../parsers/node-parsers';
|
|
8
|
+
import {basicEdgeParser} from '../parsers/edge-parsers';
|
|
9
9
|
|
|
10
10
|
/** @deprecated Use loadSimpleJSONGraph */
|
|
11
11
|
export const JSONLoader = ({json, nodeParser, edgeParser}) =>
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import type {NodeOptions} from '
|
|
6
|
-
import type {EdgeOptions} from '
|
|
7
|
-
import {Edge} from '
|
|
8
|
-
import {Node} from '
|
|
9
|
-
import {
|
|
5
|
+
import type {NodeOptions} from '../../graph/node';
|
|
6
|
+
import type {EdgeOptions} from '../../graph/edge';
|
|
7
|
+
import {Edge} from '../../graph/edge';
|
|
8
|
+
import {Node} from '../../graph/node';
|
|
9
|
+
import {ClassicGraph} from '../../graph/classic-graph';
|
|
10
10
|
|
|
11
|
-
import {error} from '
|
|
11
|
+
import {error} from '../../utils/log';
|
|
12
12
|
|
|
13
13
|
export type ParseGraphOptions = {
|
|
14
14
|
nodeIdField?: string;
|
|
@@ -42,7 +42,7 @@ const defaultParseGraphOptions = {
|
|
|
42
42
|
export function tableGraphLoader(
|
|
43
43
|
tables: {nodes: any[]; edges: any[]},
|
|
44
44
|
options?: ParseGraphOptions
|
|
45
|
-
):
|
|
45
|
+
): ClassicGraph {
|
|
46
46
|
options = {...defaultParseGraphOptions, ...options};
|
|
47
47
|
|
|
48
48
|
const {nodes, edges} = tables;
|
|
@@ -95,7 +95,7 @@ export function tableGraphLoader(
|
|
|
95
95
|
|
|
96
96
|
// create a new empty graph
|
|
97
97
|
const name = 'loaded';
|
|
98
|
-
const graph = new
|
|
98
|
+
const graph = new ClassicGraph({name, nodes: glNodes, edges: glEdges});
|
|
99
99
|
return graph;
|
|
100
100
|
}
|
|
101
101
|
|