@antv/layout 0.3.6 → 0.3.7
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/layout.min.js +1 -1
- package/dist/layout.min.js.map +1 -1
- package/es/layout/base.d.ts +1 -0
- package/es/layout/base.js +3 -0
- package/es/layout/base.js.map +1 -1
- package/es/layout/dagre.js +35 -14
- package/es/layout/dagre.js.map +1 -1
- package/es/layout/types.d.ts +2 -0
- package/lib/layout/base.d.ts +1 -0
- package/lib/layout/base.js +3 -0
- package/lib/layout/base.js.map +1 -1
- package/lib/layout/dagre.js +36 -15
- package/lib/layout/dagre.js.map +1 -1
- package/lib/layout/types.d.ts +2 -0
- package/package.json +1 -1
- package/src/layout/base.ts +3 -0
- package/src/layout/dagre.ts +28 -12
- package/src/layout/types.ts +2 -0
package/src/layout/dagre.ts
CHANGED
|
@@ -104,7 +104,7 @@ export class DagreLayout extends Base {
|
|
|
104
104
|
*/
|
|
105
105
|
public execute() {
|
|
106
106
|
const self = this;
|
|
107
|
-
const { nodes, nodeSize, rankdir, combos, begin, radial, comboEdges = [] } = self;
|
|
107
|
+
const { nodes, nodeSize, rankdir, combos, begin, radial, comboEdges = [], vedges = [] } = self;
|
|
108
108
|
if (!nodes) return;
|
|
109
109
|
const edges = (self.edges as any[]) || [];
|
|
110
110
|
const g = new DagreGraph({
|
|
@@ -150,13 +150,22 @@ export class DagreLayout extends Base {
|
|
|
150
150
|
g.setDefaultEdgeLabel(() => ({}));
|
|
151
151
|
g.setGraph(self);
|
|
152
152
|
|
|
153
|
-
const comboMap: { [key: string]:
|
|
153
|
+
const comboMap: { [key: string]: any } = {};
|
|
154
154
|
|
|
155
155
|
if (this.sortByCombo && combos) {
|
|
156
156
|
combos.forEach((combo) => {
|
|
157
|
+
comboMap[combo.id] = combo;
|
|
158
|
+
// regard the collapsed combo as a node
|
|
159
|
+
if (combo.collapsed) {
|
|
160
|
+
const size = nodeSizeFunc(combo);
|
|
161
|
+
const verti = vertisep(combo);
|
|
162
|
+
const hori = horisep(combo);
|
|
163
|
+
const width = size[0] + 2 * hori;
|
|
164
|
+
const height = size[1] + 2 * verti;
|
|
165
|
+
g.setNode(combo.id, { width, height });
|
|
166
|
+
}
|
|
157
167
|
if (!combo.parentId) return;
|
|
158
168
|
if (!comboMap[combo.parentId]) {
|
|
159
|
-
comboMap[combo.parentId] = true;
|
|
160
169
|
g.setNode(combo.parentId, {});
|
|
161
170
|
}
|
|
162
171
|
g.setParent(combo.id, combo.parentId);
|
|
@@ -179,7 +188,7 @@ export class DagreLayout extends Base {
|
|
|
179
188
|
|
|
180
189
|
if (this.sortByCombo && node.comboId) {
|
|
181
190
|
if (!comboMap[node.comboId]) {
|
|
182
|
-
comboMap[node.comboId] =
|
|
191
|
+
comboMap[node.comboId] = { id: node.comboId };
|
|
183
192
|
g.setNode(node.comboId, {});
|
|
184
193
|
}
|
|
185
194
|
g.setParent(node.id, node.comboId);
|
|
@@ -200,10 +209,10 @@ export class DagreLayout extends Base {
|
|
|
200
209
|
});
|
|
201
210
|
|
|
202
211
|
// create virtual edges from node to node for comboEdges
|
|
203
|
-
comboEdges?.forEach((comboEdge: any) => {
|
|
212
|
+
(comboEdges?.concat(vedges || []))?.forEach((comboEdge: any) => {
|
|
204
213
|
const { source, target } = comboEdge;
|
|
205
|
-
const sources = nodeComboMap[source] || [source];
|
|
206
|
-
const targets = nodeComboMap[target] || [
|
|
214
|
+
const sources = comboMap[source]?.collapsed ? [source] : nodeComboMap[source] || [source];
|
|
215
|
+
const targets = comboMap[target]?.collapsed ? [target] : nodeComboMap[target] || [target];
|
|
207
216
|
sources.forEach((s: string) => {
|
|
208
217
|
targets.forEach((t: string) => {
|
|
209
218
|
g.setEdge(s, t, {
|
|
@@ -339,6 +348,7 @@ export class DagreLayout extends Base {
|
|
|
339
348
|
if (isFirstLevel && layerNodes.nodes.length === 1) {
|
|
340
349
|
// 将新坐标写入源数据
|
|
341
350
|
const i = nodes.findIndex((it) => it.id === layerNodes.nodes[0]);
|
|
351
|
+
if (i <= -1) return;
|
|
342
352
|
nodes[i].x = dBegin[0];
|
|
343
353
|
nodes[i].y = dBegin[1];
|
|
344
354
|
radiusMap[layerNodes.nodes[0]] = 0;
|
|
@@ -369,6 +379,7 @@ export class DagreLayout extends Base {
|
|
|
369
379
|
const target = getEdgeTerminal(it, 'target');
|
|
370
380
|
return source === edge.v && target === edge.w;
|
|
371
381
|
});
|
|
382
|
+
if (i <= -1) return;
|
|
372
383
|
if ((self.edgeLabelSpace) && self.controlPoints && edges[i].type !== "loop") {
|
|
373
384
|
const otherDim = dim === 'x' ? 'y' : 'x';
|
|
374
385
|
const controlPoints = coord?.points?.slice(1, coord.points.length - 1);
|
|
@@ -393,12 +404,16 @@ export class DagreLayout extends Base {
|
|
|
393
404
|
} else {
|
|
394
405
|
g.nodes().forEach((node: any) => {
|
|
395
406
|
const coord = g.node(node)!;
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
407
|
+
if (!coord) return;
|
|
408
|
+
let ndata: any = nodes.find((it) => it.id === node);
|
|
409
|
+
if (!ndata) {
|
|
410
|
+
ndata = combos?.find((it) => it.id === node);
|
|
411
|
+
}
|
|
412
|
+
if (!ndata) return;
|
|
413
|
+
ndata.x = coord.x! + dBegin[0];
|
|
414
|
+
ndata.y = coord.y! + dBegin[1];
|
|
400
415
|
// @ts-ignore: pass layer order to data for increment layout use
|
|
401
|
-
|
|
416
|
+
ndata._order = coord._order;
|
|
402
417
|
});
|
|
403
418
|
g.edges().forEach((edge: any) => {
|
|
404
419
|
const coord = g.edge(edge);
|
|
@@ -407,6 +422,7 @@ export class DagreLayout extends Base {
|
|
|
407
422
|
const target = getEdgeTerminal(it, 'target');
|
|
408
423
|
return source === edge.v && target === edge.w;
|
|
409
424
|
});
|
|
425
|
+
if (i <= -1) return;
|
|
410
426
|
if ((self.edgeLabelSpace) && self.controlPoints && edges[i].type !== "loop") {
|
|
411
427
|
edges[i].controlPoints = coord?.points?.slice(1, coord.points.length - 1); // 去掉头尾
|
|
412
428
|
edges[i].controlPoints.forEach((point: any) => {
|
package/src/layout/types.ts
CHANGED
|
@@ -40,6 +40,7 @@ export interface Combo {
|
|
|
40
40
|
size?: number;
|
|
41
41
|
r?: number;
|
|
42
42
|
itemType?: string;
|
|
43
|
+
collapsed?: boolean;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
export interface Model {
|
|
@@ -50,6 +51,7 @@ export interface Model {
|
|
|
50
51
|
hiddenNodes?: Node[];
|
|
51
52
|
hiddenEdges?: Edge[];
|
|
52
53
|
hiddenCombos?: Combo[];
|
|
54
|
+
vedges?: Edge[]; // temp edges e.g. the edge generated for releated collapsed combo
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
export interface OutModel extends Model {
|