@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.
@@ -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]: boolean } = {};
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] = true;
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] || [source];
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
- const i = nodes.findIndex((it) => it.id === node);
397
- if (!nodes[i]) return;
398
- nodes[i].x = coord.x! + dBegin[0];
399
- nodes[i].y = coord.y! + dBegin[1];
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
- nodes[i]._order = coord._order;
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) => {
@@ -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 {