@webviz/group-tree-plot 1.3.24 → 1.4.0
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/GroupTreePlot.d.ts +6 -1
- package/dist/GroupTreePlot.js +43 -43
- package/dist/GroupTreePlot.js.map +1 -1
- package/dist/components/PlotErrorOverlay.d.ts +5 -0
- package/dist/components/PlotErrorOverlay.js +7 -0
- package/dist/components/PlotErrorOverlay.js.map +1 -0
- package/dist/components/TreePlotRenderer/TreePlotRenderer.d.ts +11 -0
- package/dist/components/TreePlotRenderer/TreePlotRenderer.js +85 -0
- package/dist/components/TreePlotRenderer/TreePlotRenderer.js.map +1 -0
- package/dist/components/TreePlotRenderer/index.d.ts +1 -0
- package/dist/components/TreePlotRenderer/index.js +2 -0
- package/dist/components/TreePlotRenderer/index.js.map +1 -0
- package/dist/components/TreePlotRenderer/privateComponents/HiddenChildren.d.ts +6 -0
- package/dist/components/TreePlotRenderer/privateComponents/HiddenChildren.js +13 -0
- package/dist/components/TreePlotRenderer/privateComponents/HiddenChildren.js.map +1 -0
- package/dist/components/TreePlotRenderer/privateComponents/TransitionTreeEdge.d.ts +10 -0
- package/dist/components/TreePlotRenderer/privateComponents/TransitionTreeEdge.js +30 -0
- package/dist/components/TreePlotRenderer/privateComponents/TransitionTreeEdge.js.map +1 -0
- package/dist/components/TreePlotRenderer/privateComponents/TransitionTreeNode.d.ts +11 -0
- package/dist/components/TreePlotRenderer/privateComponents/TransitionTreeNode.js +37 -0
- package/dist/components/TreePlotRenderer/privateComponents/TransitionTreeNode.js.map +1 -0
- package/dist/hooks/useCollapseMotionProps.d.ts +15 -0
- package/dist/hooks/useCollapseMotionProps.js +46 -0
- package/dist/hooks/useCollapseMotionProps.js.map +1 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/DataAssembler.d.ts +74 -0
- package/dist/utils/DataAssembler.js +179 -0
- package/dist/utils/DataAssembler.js.map +1 -0
- package/dist/utils/treePlot.d.ts +36 -0
- package/dist/utils/treePlot.js +85 -0
- package/dist/utils/treePlot.js.map +1 -0
- package/package.json +3 -2
- package/dist/GroupTreeAssembler/groupTreeAssembler.d.ts +0 -64
- package/dist/GroupTreeAssembler/groupTreeAssembler.js +0 -579
- package/dist/GroupTreeAssembler/groupTreeAssembler.js.map +0 -1
- /package/dist/{GroupTreeAssembler/group_tree.css → group_tree.css} +0 -0
|
@@ -1,579 +0,0 @@
|
|
|
1
|
-
/** This code is copied directly from
|
|
2
|
-
* https://github.com/anders-kiaer/webviz-subsurface-components/blob/dynamic_tree/src/lib/components/DynamicTree/group_tree.js
|
|
3
|
-
* This needs to be refactored to develop further
|
|
4
|
-
*
|
|
5
|
-
* 9 july 2021: refactored to use new format.
|
|
6
|
-
*/
|
|
7
|
-
import * as d3 from "d3";
|
|
8
|
-
import "./group_tree.css";
|
|
9
|
-
import { cloneDeep } from "lodash";
|
|
10
|
-
/* eslint camelcase: "off" */
|
|
11
|
-
/* eslint array-callback-return: "off" */
|
|
12
|
-
/* eslint no-return-assign: "off" */
|
|
13
|
-
/* eslint no-use-before-define: "off" */
|
|
14
|
-
/* eslint no-useless-concat: "off" */
|
|
15
|
-
/* Fix this lint when rewriting the whole file */
|
|
16
|
-
/**
|
|
17
|
-
* Class to assemble Group tree visualization. Creates an _svg, and appends to the
|
|
18
|
-
* assigned HTML element. Draws the tree provided in datedTrees with the current flow rate,
|
|
19
|
-
* node info and date time.
|
|
20
|
-
*
|
|
21
|
-
* Provides methods to update selected date time, and change flow rate and node info.
|
|
22
|
-
*/
|
|
23
|
-
export default class GroupTreeAssembler {
|
|
24
|
-
/**
|
|
25
|
-
*
|
|
26
|
-
* @param dom_element_id - id of the HTML element to append the _svg to
|
|
27
|
-
* @param datedTrees - List of dated tree data structure containing the trees to visualize
|
|
28
|
-
* @param initialFlowRate - key identifying the initial selected flow rate for the tree edges
|
|
29
|
-
* @param initialNodeInfo - key identifying the initial selected node info for the tree nodes
|
|
30
|
-
* @param currentDateTime - the initial/current date time
|
|
31
|
-
* @param edgeMetadataList - List of metadata for the edge keys in the tree data structure
|
|
32
|
-
* @param nodeMetadataList - List of metadata for the node keys in the tree data structure
|
|
33
|
-
*/
|
|
34
|
-
constructor(dom_element_id, datedTrees, initialFlowRate, initialNodeInfo, currentDateTime, edgeMetadataList, nodeMetadataList) {
|
|
35
|
-
// Cloned as it is mutated within class
|
|
36
|
-
let clonedDatedTrees = cloneDeep(datedTrees);
|
|
37
|
-
// Add "#" if missing.
|
|
38
|
-
if (dom_element_id.charAt(0) !== "#") {
|
|
39
|
-
dom_element_id = "#" + dom_element_id;
|
|
40
|
-
}
|
|
41
|
-
// Map from property to [label/name, unit]
|
|
42
|
-
const metadataList = [...edgeMetadataList, ...nodeMetadataList];
|
|
43
|
-
this._propertyToLabelMap = new Map();
|
|
44
|
-
metadataList.forEach((elm) => {
|
|
45
|
-
var _a, _b;
|
|
46
|
-
this._propertyToLabelMap.set(elm.key, [
|
|
47
|
-
(_a = elm.label) !== null && _a !== void 0 ? _a : "",
|
|
48
|
-
(_b = elm.unit) !== null && _b !== void 0 ? _b : "",
|
|
49
|
-
]);
|
|
50
|
-
});
|
|
51
|
-
// Represent possible empty data by single empty node.
|
|
52
|
-
if (clonedDatedTrees.length === 0) {
|
|
53
|
-
currentDateTime = "";
|
|
54
|
-
clonedDatedTrees = [
|
|
55
|
-
{
|
|
56
|
-
dates: [currentDateTime],
|
|
57
|
-
tree: {
|
|
58
|
-
node_label: "NO DATA",
|
|
59
|
-
edge_label: "NO DATA",
|
|
60
|
-
node_data: {},
|
|
61
|
-
edge_data: {},
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
];
|
|
65
|
-
}
|
|
66
|
-
this._currentFlowRate = initialFlowRate;
|
|
67
|
-
this._currentNodeInfo = initialNodeInfo;
|
|
68
|
-
this._currentDateTime = currentDateTime;
|
|
69
|
-
this._transitionTime = 200;
|
|
70
|
-
const tree_values = {};
|
|
71
|
-
clonedDatedTrees.map((datedTree) => {
|
|
72
|
-
let tree = datedTree.tree;
|
|
73
|
-
d3.hierarchy(tree, (d) => d.children).each((node) => {
|
|
74
|
-
// edge_data
|
|
75
|
-
Object.keys(node.data.edge_data).forEach((key) => {
|
|
76
|
-
if (!tree_values[key]) {
|
|
77
|
-
tree_values[key] = [];
|
|
78
|
-
}
|
|
79
|
-
tree_values[key].push(node.data.edge_data[key]);
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
this._path_scale = new Map();
|
|
84
|
-
Object.keys(tree_values).forEach((key) => {
|
|
85
|
-
const extent = [0, d3.max(tree_values[key].flat())];
|
|
86
|
-
this._path_scale[key] = d3
|
|
87
|
-
.scaleLinear()
|
|
88
|
-
.domain(extent)
|
|
89
|
-
.range([2, 100]);
|
|
90
|
-
});
|
|
91
|
-
const margin = {
|
|
92
|
-
top: 10,
|
|
93
|
-
right: 90,
|
|
94
|
-
bottom: 30,
|
|
95
|
-
left: 90,
|
|
96
|
-
};
|
|
97
|
-
const select = d3.select(dom_element_id);
|
|
98
|
-
// Svg bounding client rect
|
|
99
|
-
this._rectWidth = select.node().getBoundingClientRect().width;
|
|
100
|
-
this._rectHeight = 700;
|
|
101
|
-
this._rectLeftMargin = -margin.left;
|
|
102
|
-
this._rectTopMargin = -margin.top;
|
|
103
|
-
const treeHeight = this._rectHeight - margin.top - margin.bottom;
|
|
104
|
-
this._treeWidth = this._rectWidth - margin.left - margin.right;
|
|
105
|
-
// Clear possible existing svg's.
|
|
106
|
-
d3.select(dom_element_id).selectAll("svg").remove();
|
|
107
|
-
this._svg = d3
|
|
108
|
-
.select(dom_element_id)
|
|
109
|
-
.append("svg")
|
|
110
|
-
.attr("width", this._treeWidth + margin.right + margin.left)
|
|
111
|
-
.attr("height", treeHeight + margin.top + margin.bottom)
|
|
112
|
-
.append("g")
|
|
113
|
-
.attr("transform", `translate(${margin.left},${margin.top})`);
|
|
114
|
-
this._textpaths = this._svg.append("g");
|
|
115
|
-
this._renderTree = d3.tree().size([treeHeight, this._treeWidth]);
|
|
116
|
-
this._data = GroupTreeAssembler.initHierarchies(clonedDatedTrees, treeHeight);
|
|
117
|
-
this._currentTree = {};
|
|
118
|
-
this.update(currentDateTime);
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Initialize all trees in the group tree datastructure, once for the entire visualization.
|
|
122
|
-
*
|
|
123
|
-
*/
|
|
124
|
-
static initHierarchies(tree_data, height) {
|
|
125
|
-
// generate the node-id used to match in the enter, update and exit selections
|
|
126
|
-
const getId = (d) => d.parent === null
|
|
127
|
-
? d.data.node_label
|
|
128
|
-
: `${d.parent.id}_${d.data.node_label}`;
|
|
129
|
-
tree_data.map((datedTree) => {
|
|
130
|
-
let tree = datedTree.tree;
|
|
131
|
-
tree = d3.hierarchy(tree, (dd) => dd.children);
|
|
132
|
-
tree.descendants().map((n) => (n.id = getId(n)));
|
|
133
|
-
tree.x0 = height / 2;
|
|
134
|
-
tree.y0 = 0;
|
|
135
|
-
datedTree.tree = tree;
|
|
136
|
-
});
|
|
137
|
-
return tree_data;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* @returns {*} -The initialized hierarchical group tree data structure
|
|
141
|
-
*/
|
|
142
|
-
get data() {
|
|
143
|
-
return this._data;
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Set the flowrate and update display of all edges accordingly.
|
|
147
|
-
*
|
|
148
|
-
* @param flowrate - key identifying the flowrate of the incoming edge
|
|
149
|
-
*/
|
|
150
|
-
set flowrate(flowrate) {
|
|
151
|
-
this._currentFlowRate = flowrate;
|
|
152
|
-
const current_tree_index = this._data.findIndex((e) => {
|
|
153
|
-
return e.dates.includes(this._currentDateTime);
|
|
154
|
-
});
|
|
155
|
-
if (current_tree_index === -1) {
|
|
156
|
-
this._svg.selectAll("path.link").remove();
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
const date_index = this._data[current_tree_index].dates.indexOf(this._currentDateTime);
|
|
160
|
-
if (date_index === -1) {
|
|
161
|
-
this._svg.selectAll("path.link").remove();
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
this._svg
|
|
165
|
-
.selectAll("path.link")
|
|
166
|
-
.transition()
|
|
167
|
-
.duration(this._transitionTime)
|
|
168
|
-
.attr("class", () => `link grouptree_link grouptree_link__${flowrate}`)
|
|
169
|
-
.style("stroke-width", (d) => {
|
|
170
|
-
var _a, _b;
|
|
171
|
-
return this.getEdgeStrokeWidth(flowrate, (_b = (_a = d.data.edge_data[flowrate]) === null || _a === void 0 ? void 0 : _a[date_index]) !== null && _b !== void 0 ? _b : 0);
|
|
172
|
-
})
|
|
173
|
-
.style("stroke-dasharray", (d) => {
|
|
174
|
-
var _a, _b;
|
|
175
|
-
return ((_b = (_a = d.data.edge_data[flowrate]) === null || _a === void 0 ? void 0 : _a[date_index]) !== null && _b !== void 0 ? _b : 0) > 0
|
|
176
|
-
? "none"
|
|
177
|
-
: "5,5";
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
get flowrate() {
|
|
181
|
-
return this._currentFlowRate;
|
|
182
|
-
}
|
|
183
|
-
set nodeinfo(nodeinfo) {
|
|
184
|
-
this._currentNodeInfo = nodeinfo;
|
|
185
|
-
const current_tree_index = this._data.findIndex((e) => {
|
|
186
|
-
return e.dates.includes(this._currentDateTime);
|
|
187
|
-
});
|
|
188
|
-
if (current_tree_index === -1) {
|
|
189
|
-
this._svg.selectAll("path.link").remove();
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
const date_index = this._data[current_tree_index].dates.indexOf(this._currentDateTime);
|
|
193
|
-
if (date_index === -1) {
|
|
194
|
-
this._svg.selectAll("path.link").remove();
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
this._svg
|
|
198
|
-
.selectAll(".grouptree__pressurelabel")
|
|
199
|
-
.text((d) => {
|
|
200
|
-
var _a, _b, _c, _d;
|
|
201
|
-
return (_d = (_c = (_b = (_a = d.data.node_data) === null || _a === void 0 ? void 0 : _a[nodeinfo]) === null || _b === void 0 ? void 0 : _b[date_index]) === null || _c === void 0 ? void 0 : _c.toFixed(0)) !== null && _d !== void 0 ? _d : "NA";
|
|
202
|
-
});
|
|
203
|
-
this._svg.selectAll(".grouptree__pressureunit").text(() => {
|
|
204
|
-
var _a;
|
|
205
|
-
const t = (_a = this._propertyToLabelMap.get(nodeinfo)) !== null && _a !== void 0 ? _a : ["", ""];
|
|
206
|
-
return t[1];
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
get nodeinfo() {
|
|
210
|
-
return this._currentNodeInfo;
|
|
211
|
-
}
|
|
212
|
-
getEdgeStrokeWidth(key, val) {
|
|
213
|
-
const normalized = this._path_scale[key] !== undefined
|
|
214
|
-
? this._path_scale[key](val !== null && val !== void 0 ? val : 0)
|
|
215
|
-
: 2;
|
|
216
|
-
return `${normalized}px`;
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Sets the state of the current tree, and updates the tree visualization accordingly.
|
|
220
|
-
* The state is changed either due to a branch open/close, or that the tree is entirely changed
|
|
221
|
-
* when moving back and fourth in time.
|
|
222
|
-
*
|
|
223
|
-
* @param root
|
|
224
|
-
*/
|
|
225
|
-
update(newDateTime) {
|
|
226
|
-
var _a;
|
|
227
|
-
const self = this;
|
|
228
|
-
const new_tree_index = self._data.findIndex((e) => {
|
|
229
|
-
return e.dates.includes(newDateTime);
|
|
230
|
-
});
|
|
231
|
-
const root = self._data[new_tree_index];
|
|
232
|
-
const date_index = (_a = root === null || root === void 0 ? void 0 : root.dates.indexOf(newDateTime)) !== null && _a !== void 0 ? _a : -1;
|
|
233
|
-
// Invalid date gives invalid indices
|
|
234
|
-
const hasInvalidDate = !root || date_index === -1 || new_tree_index === -1;
|
|
235
|
-
if (hasInvalidDate) {
|
|
236
|
-
self._currentDateTime = newDateTime;
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Assigns y coordinates to all tree nodes in the rendered tree.
|
|
240
|
-
* @param t - a rendered tree
|
|
241
|
-
* @param {int} width - the
|
|
242
|
-
* @returns a rendered tree width coordinates for all nodes.
|
|
243
|
-
*/
|
|
244
|
-
function growNewTree(t, width) {
|
|
245
|
-
t.descendants().forEach((d) => {
|
|
246
|
-
d.y = (d.depth * width) / (t.height + 1);
|
|
247
|
-
});
|
|
248
|
-
return t;
|
|
249
|
-
}
|
|
250
|
-
function doPostUpdateOperations(tree) {
|
|
251
|
-
setEndPositions(tree.descendants());
|
|
252
|
-
setNodeVisibility(tree.descendants(), true);
|
|
253
|
-
return tree;
|
|
254
|
-
}
|
|
255
|
-
function findClosestVisibleParent(d) {
|
|
256
|
-
let c = d;
|
|
257
|
-
while (c.parent && !c.isvisible) {
|
|
258
|
-
c = c.parent;
|
|
259
|
-
}
|
|
260
|
-
return c;
|
|
261
|
-
}
|
|
262
|
-
function getClosestVisibleParentStartCoordinates(d) {
|
|
263
|
-
var _a, _b;
|
|
264
|
-
const p = findClosestVisibleParent(d);
|
|
265
|
-
return { x: (_a = p.x0) !== null && _a !== void 0 ? _a : 0, y: (_b = p.y0) !== null && _b !== void 0 ? _b : 0 };
|
|
266
|
-
}
|
|
267
|
-
function getClosestVisibleParentEndCoordinates(d) {
|
|
268
|
-
const p = findClosestVisibleParent(d);
|
|
269
|
-
return { x: p.x, y: p.y };
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Implicitly alter the state of a node, by hiding its children
|
|
273
|
-
* @param node
|
|
274
|
-
*/
|
|
275
|
-
function toggleBranch(node) {
|
|
276
|
-
if (node.children) {
|
|
277
|
-
node._children = node.children;
|
|
278
|
-
node.children = null;
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
281
|
-
node.children = node._children;
|
|
282
|
-
node._children = null;
|
|
283
|
-
}
|
|
284
|
-
self.update(self._currentDateTime);
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Toggles visibility of a node. This state determines if the node, and its children
|
|
288
|
-
* @param nodes
|
|
289
|
-
* @param visibility
|
|
290
|
-
*/
|
|
291
|
-
function setNodeVisibility(nodes, visibility) {
|
|
292
|
-
nodes.forEach((d) => {
|
|
293
|
-
d.isvisible = visibility;
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* After node translation transition, save end position
|
|
298
|
-
* @param nodes
|
|
299
|
-
*/
|
|
300
|
-
function setEndPositions(nodes) {
|
|
301
|
-
nodes.forEach((d) => {
|
|
302
|
-
d.x0 = d.x;
|
|
303
|
-
d.y0 = d.y;
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
function getToolTipText(data, date_index) {
|
|
307
|
-
if (data === undefined || date_index === undefined) {
|
|
308
|
-
return "";
|
|
309
|
-
}
|
|
310
|
-
const propNames = Object.keys(data);
|
|
311
|
-
let text = "";
|
|
312
|
-
propNames.forEach(function (s) {
|
|
313
|
-
var _a, _b, _c, _d;
|
|
314
|
-
const t = (_a = self._propertyToLabelMap.get(s)) !== null && _a !== void 0 ? _a : [s, ""];
|
|
315
|
-
const pre = t[0];
|
|
316
|
-
const unit = t[1];
|
|
317
|
-
text +=
|
|
318
|
-
pre +
|
|
319
|
-
" " +
|
|
320
|
-
((_d = (_c = (_b = data[s]) === null || _b === void 0 ? void 0 : _b[date_index]) === null || _c === void 0 ? void 0 : _c.toFixed(0)) !== null && _d !== void 0 ? _d : "") +
|
|
321
|
-
" " +
|
|
322
|
-
unit +
|
|
323
|
-
"\n";
|
|
324
|
-
});
|
|
325
|
-
return text;
|
|
326
|
-
}
|
|
327
|
-
/**
|
|
328
|
-
* Clone old node start position to new node start position.
|
|
329
|
-
* Clone new node end position to old node end position.
|
|
330
|
-
* Clone old visibility to new.
|
|
331
|
-
*
|
|
332
|
-
* @param newRoot
|
|
333
|
-
* @param oldRoot
|
|
334
|
-
*/
|
|
335
|
-
function cloneExistingNodeStates(newRoot, oldRoot) {
|
|
336
|
-
if (Object.keys(oldRoot).length > 0) {
|
|
337
|
-
oldRoot.descendants().forEach((oldNode) => {
|
|
338
|
-
newRoot.descendants().forEach((newNode) => {
|
|
339
|
-
if (oldNode.id === newNode.id) {
|
|
340
|
-
newNode.x0 = oldNode.x0;
|
|
341
|
-
newNode.y0 = oldNode.y0;
|
|
342
|
-
oldNode.x = newNode.x;
|
|
343
|
-
oldNode.y = newNode.y;
|
|
344
|
-
newNode.isvisible = oldNode.isvisible;
|
|
345
|
-
}
|
|
346
|
-
});
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
return newRoot;
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* Merge the existing tree, with nodes from a new tree.
|
|
353
|
-
* New nodes fold out from the closest visible parent.
|
|
354
|
-
* Old nodes are removed.
|
|
355
|
-
*
|
|
356
|
-
* @param nodes - list of nodes in a tree
|
|
357
|
-
*/
|
|
358
|
-
function updateNodes(nodes, nodeinfo) {
|
|
359
|
-
const node = self._svg.selectAll("g.node").data(nodes, (d) => d.id);
|
|
360
|
-
const nodeEnter = node
|
|
361
|
-
.enter()
|
|
362
|
-
.append("g")
|
|
363
|
-
.attr("class", "node")
|
|
364
|
-
.attr("id", (d) => d.id)
|
|
365
|
-
.attr("transform", (d) => {
|
|
366
|
-
const c = getClosestVisibleParentStartCoordinates(d);
|
|
367
|
-
return `translate(${c.y},${c.x})`;
|
|
368
|
-
})
|
|
369
|
-
.on("click", toggleBranch);
|
|
370
|
-
nodeEnter
|
|
371
|
-
.append("circle")
|
|
372
|
-
.attr("id", (d) => d.id)
|
|
373
|
-
.attr("r", 6)
|
|
374
|
-
.transition()
|
|
375
|
-
.duration(self._transitionTime)
|
|
376
|
-
.attr("x", (d) => d.x)
|
|
377
|
-
.attr("y", (d) => d.y);
|
|
378
|
-
nodeEnter
|
|
379
|
-
.append("text")
|
|
380
|
-
.attr("class", "grouptree__nodelabel")
|
|
381
|
-
.attr("dy", ".35em")
|
|
382
|
-
.style("fill-opacity", 1)
|
|
383
|
-
.attr("x", (d) => (d.children || d._children ? -21 : 21))
|
|
384
|
-
.attr("text-anchor", (d) => d.children || d._children ? "end" : "start")
|
|
385
|
-
.text((d) => d.data.node_label);
|
|
386
|
-
nodeEnter
|
|
387
|
-
.append("text")
|
|
388
|
-
.attr("class", "grouptree__pressurelabel")
|
|
389
|
-
.attr("x", 0)
|
|
390
|
-
.attr("dy", "-.05em")
|
|
391
|
-
.attr("text-anchor", "middle")
|
|
392
|
-
.text((d) => {
|
|
393
|
-
var _a, _b, _c;
|
|
394
|
-
return (_c = (_b = (_a = d.data.node_data[nodeinfo]) === null || _a === void 0 ? void 0 : _a[date_index]) === null || _b === void 0 ? void 0 : _b.toFixed(0)) !== null && _c !== void 0 ? _c : "NA";
|
|
395
|
-
});
|
|
396
|
-
nodeEnter
|
|
397
|
-
.append("text")
|
|
398
|
-
.attr("class", "grouptree__pressureunit")
|
|
399
|
-
.attr("x", 0)
|
|
400
|
-
.attr("dy", ".04em")
|
|
401
|
-
.attr("dominant-baseline", "text-before-edge")
|
|
402
|
-
.attr("text-anchor", "middle")
|
|
403
|
-
.text(() => {
|
|
404
|
-
var _a;
|
|
405
|
-
const t = (_a = self._propertyToLabelMap.get(nodeinfo)) !== null && _a !== void 0 ? _a : [
|
|
406
|
-
"",
|
|
407
|
-
"",
|
|
408
|
-
];
|
|
409
|
-
return t[1];
|
|
410
|
-
});
|
|
411
|
-
nodeEnter
|
|
412
|
-
.append("title")
|
|
413
|
-
.text((d) => getToolTipText(d.data.node_data, date_index));
|
|
414
|
-
const nodeUpdate = nodeEnter.merge(node);
|
|
415
|
-
// Nodes from earlier exit selection may reenter if transition is interupted. Restore state.
|
|
416
|
-
nodeUpdate
|
|
417
|
-
.filter(".exiting")
|
|
418
|
-
.interrupt()
|
|
419
|
-
.classed("exiting", false)
|
|
420
|
-
.attr("opacity", 1);
|
|
421
|
-
nodeUpdate
|
|
422
|
-
.select("text.grouptree__pressurelabel")
|
|
423
|
-
.text((d) => {
|
|
424
|
-
var _a, _b, _c;
|
|
425
|
-
return (_c = (_b = (_a = d.data.node_data[nodeinfo]) === null || _a === void 0 ? void 0 : _a[date_index]) === null || _b === void 0 ? void 0 : _b.toFixed(0)) !== null && _c !== void 0 ? _c : "NA";
|
|
426
|
-
});
|
|
427
|
-
nodeUpdate
|
|
428
|
-
.transition()
|
|
429
|
-
.duration(self._transitionTime)
|
|
430
|
-
.attr("transform", (d) => `translate(${d.y},${d.x})`);
|
|
431
|
-
nodeUpdate
|
|
432
|
-
.select("circle")
|
|
433
|
-
.attr("class", (d) => `${"grouptree__node" + " "}${d.children || d._children
|
|
434
|
-
? "grouptree__node--withchildren"
|
|
435
|
-
: "grouptree__node"}`)
|
|
436
|
-
.transition()
|
|
437
|
-
.duration(self._transitionTime)
|
|
438
|
-
.attr("r", 15);
|
|
439
|
-
nodeUpdate
|
|
440
|
-
.select("title")
|
|
441
|
-
.text((d) => getToolTipText(d.data.node_data, date_index));
|
|
442
|
-
node.exit()
|
|
443
|
-
.classed("exiting", true)
|
|
444
|
-
.attr("opacity", 1)
|
|
445
|
-
.transition()
|
|
446
|
-
.duration(self._transitionTime)
|
|
447
|
-
.attr("opacity", 1e-6)
|
|
448
|
-
.attr("transform", (d) => {
|
|
449
|
-
d.isvisible = false;
|
|
450
|
-
const c = getClosestVisibleParentEndCoordinates(d);
|
|
451
|
-
return `translate(${c.y},${c.x})`;
|
|
452
|
-
})
|
|
453
|
-
.remove();
|
|
454
|
-
}
|
|
455
|
-
/**
|
|
456
|
-
* Draw new edges, and update existing ones.
|
|
457
|
-
*
|
|
458
|
-
* @param edges -list of edges in a tree
|
|
459
|
-
* @param flowrate - key identifying the flowrate of the incoming edge
|
|
460
|
-
*/
|
|
461
|
-
function updateEdges(edges, flowrate) {
|
|
462
|
-
const link = self._svg
|
|
463
|
-
.selectAll("path.link")
|
|
464
|
-
.data(edges, (d) => d.id);
|
|
465
|
-
const linkEnter = link
|
|
466
|
-
.enter()
|
|
467
|
-
.insert("path", "g")
|
|
468
|
-
.attr("id", (d) => `path ${d.id}`)
|
|
469
|
-
.attr("d", (d) => {
|
|
470
|
-
const c = getClosestVisibleParentStartCoordinates(d);
|
|
471
|
-
return diagonal(c, c);
|
|
472
|
-
});
|
|
473
|
-
linkEnter
|
|
474
|
-
.append("title")
|
|
475
|
-
.text((d) => getToolTipText(d.data.edge_data, date_index));
|
|
476
|
-
const linkUpdate = linkEnter.merge(link);
|
|
477
|
-
linkUpdate
|
|
478
|
-
.attr("class", () => `link grouptree_link grouptree_link__${flowrate}`)
|
|
479
|
-
.transition()
|
|
480
|
-
.duration(self._transitionTime)
|
|
481
|
-
.attr("d", (d) => diagonal(d, d.parent))
|
|
482
|
-
.style("stroke-width", (d) => {
|
|
483
|
-
var _a, _b;
|
|
484
|
-
return self.getEdgeStrokeWidth(flowrate, (_b = (_a = d.data.edge_data[flowrate]) === null || _a === void 0 ? void 0 : _a[date_index]) !== null && _b !== void 0 ? _b : 0);
|
|
485
|
-
})
|
|
486
|
-
.style("stroke-dasharray", (d) => {
|
|
487
|
-
var _a, _b;
|
|
488
|
-
return ((_b = (_a = d.data.edge_data[flowrate]) === null || _a === void 0 ? void 0 : _a[date_index]) !== null && _b !== void 0 ? _b : 0) > 0
|
|
489
|
-
? "none"
|
|
490
|
-
: "5,5";
|
|
491
|
-
});
|
|
492
|
-
linkUpdate
|
|
493
|
-
.select("title")
|
|
494
|
-
.text((d) => getToolTipText(d.data.edge_data, date_index));
|
|
495
|
-
link.exit()
|
|
496
|
-
.transition()
|
|
497
|
-
.duration(self._transitionTime)
|
|
498
|
-
.attr("d", (d) => {
|
|
499
|
-
d.isvisible = false;
|
|
500
|
-
const c = getClosestVisibleParentEndCoordinates(d);
|
|
501
|
-
return diagonal(c, c);
|
|
502
|
-
})
|
|
503
|
-
.remove();
|
|
504
|
-
/**
|
|
505
|
-
* Create the curve definition for the edge between node s and node d.
|
|
506
|
-
* @param s - source node
|
|
507
|
-
* @param d - destination node
|
|
508
|
-
*/
|
|
509
|
-
function diagonal(s, d) {
|
|
510
|
-
return `M ${d.y} ${d.x}
|
|
511
|
-
C ${(d.y + s.y) / 2} ${d.x},
|
|
512
|
-
${(d.y + s.y) / 2} ${s.x},
|
|
513
|
-
${s.y} ${s.x}`;
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
/**
|
|
517
|
-
* Add new and update existing texts/textpaths on edges.
|
|
518
|
-
*
|
|
519
|
-
* @param edges - list of edges in a tree
|
|
520
|
-
*/
|
|
521
|
-
function updateEdgeTexts(edges) {
|
|
522
|
-
const textpath = self._textpaths
|
|
523
|
-
.selectAll(".edge_info_text")
|
|
524
|
-
.data(edges, (d) => d.id);
|
|
525
|
-
const enter = textpath
|
|
526
|
-
.enter()
|
|
527
|
-
.insert("text")
|
|
528
|
-
.attr("dominant-baseline", "central")
|
|
529
|
-
.attr("text-anchor", "middle")
|
|
530
|
-
.append("textPath")
|
|
531
|
-
.attr("class", "edge_info_text")
|
|
532
|
-
.attr("startOffset", "50%")
|
|
533
|
-
.attr("xlink:href", (d) => `#path ${d.id}`);
|
|
534
|
-
enter
|
|
535
|
-
.merge(textpath)
|
|
536
|
-
.attr("fill-opacity", 1e-6)
|
|
537
|
-
.transition()
|
|
538
|
-
.duration(self._transitionTime)
|
|
539
|
-
.attr("fill-opacity", 1)
|
|
540
|
-
.text((d) => d.data.edge_label);
|
|
541
|
-
textpath.exit().remove();
|
|
542
|
-
}
|
|
543
|
-
// Clear any existing error overlay
|
|
544
|
-
this._svg
|
|
545
|
-
.selectAll(".error-overlay-background, .error-overlay")
|
|
546
|
-
.remove();
|
|
547
|
-
if (hasInvalidDate) {
|
|
548
|
-
// // Add opacity to overlay background
|
|
549
|
-
this._svg
|
|
550
|
-
.append("rect")
|
|
551
|
-
.attr("class", "error-overlay-background")
|
|
552
|
-
.attr("width", this._rectWidth)
|
|
553
|
-
.attr("height", this._rectHeight)
|
|
554
|
-
.attr("x", this._rectLeftMargin)
|
|
555
|
-
.attr("y", this._rectTopMargin)
|
|
556
|
-
.attr("fill", "rgba(255, 255, 255, 0.8)");
|
|
557
|
-
// Show overlay text with error message
|
|
558
|
-
this._svg
|
|
559
|
-
.append("text")
|
|
560
|
-
.attr("class", "error-overlay")
|
|
561
|
-
.attr("x", this._rectWidth / 2 + 2 * this._rectLeftMargin)
|
|
562
|
-
.attr("y", this._rectHeight / 2 + 2 * this._rectTopMargin)
|
|
563
|
-
.style("fill", "red")
|
|
564
|
-
.style("font-size", "16px")
|
|
565
|
-
.text("Date not found in data");
|
|
566
|
-
}
|
|
567
|
-
else {
|
|
568
|
-
// Grow new tree
|
|
569
|
-
const newTree = cloneExistingNodeStates(growNewTree(this._renderTree(root.tree), this._treeWidth), this._currentTree);
|
|
570
|
-
// execute visualization operations on enter, update and exit selections
|
|
571
|
-
updateNodes(newTree.descendants(), this.nodeinfo);
|
|
572
|
-
updateEdges(newTree.descendants().slice(1), this.flowrate);
|
|
573
|
-
updateEdgeTexts(newTree.descendants().slice(1));
|
|
574
|
-
// save the state of the now current tree, before next update
|
|
575
|
-
this._currentTree = doPostUpdateOperations(newTree);
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
//# sourceMappingURL=groupTreeAssembler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"groupTreeAssembler.js","sourceRoot":"","sources":["../../src/GroupTreeAssembler/groupTreeAssembler.js"],"names":[],"mappings":"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"}
|
|
File without changes
|