@logicflow/extension 2.0.0-beta.6 → 2.0.0-beta.8

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.
Files changed (73) hide show
  1. package/.turbo/turbo-build.log +739 -870
  2. package/dist/index.min.js +20 -6
  3. package/es/NodeResize/control/Control.d.ts +3 -3
  4. package/es/NodeResize/control/Control.js +10 -1
  5. package/es/NodeResize/control/Control.js.map +1 -1
  6. package/es/NodeResize/index.d.ts +4 -0
  7. package/es/NodeResize/index.js.map +1 -1
  8. package/es/bpmn-elements/presets/Pool/Pool.d.ts +21 -1
  9. package/es/dynamic-group/index.d.ts +106 -0
  10. package/es/dynamic-group/index.js +536 -0
  11. package/es/dynamic-group/index.js.map +1 -0
  12. package/es/dynamic-group/model.d.ts +135 -0
  13. package/es/dynamic-group/model.js +413 -0
  14. package/es/dynamic-group/model.js.map +1 -0
  15. package/es/dynamic-group/node.d.ts +16 -0
  16. package/es/dynamic-group/node.js +143 -0
  17. package/es/dynamic-group/node.js.map +1 -0
  18. package/es/dynamic-group/utils.d.ts +17 -0
  19. package/es/dynamic-group/utils.js +27 -0
  20. package/es/dynamic-group/utils.js.map +1 -0
  21. package/es/index.d.ts +14 -9
  22. package/es/index.js +21 -9
  23. package/es/index.js.map +1 -1
  24. package/es/materials/group/GroupNode.d.ts +0 -4
  25. package/es/materials/group/GroupNode.js +1 -0
  26. package/es/materials/group/GroupNode.js.map +1 -1
  27. package/es/materials/group/index.d.ts +4 -4
  28. package/es/materials/group/index.js +5 -1
  29. package/es/materials/group/index.js.map +1 -1
  30. package/es/materials/node-selection/index.d.ts +4 -0
  31. package/es/materials/node-selection/index.js.map +1 -1
  32. package/es/mindmap/index.d.ts +2 -2
  33. package/lib/NodeResize/control/Control.d.ts +3 -3
  34. package/lib/NodeResize/control/Control.js +10 -1
  35. package/lib/NodeResize/control/Control.js.map +1 -1
  36. package/lib/NodeResize/index.d.ts +4 -0
  37. package/lib/NodeResize/index.js.map +1 -1
  38. package/lib/bpmn-elements/presets/Pool/Pool.d.ts +21 -1
  39. package/lib/dynamic-group/index.d.ts +106 -0
  40. package/lib/dynamic-group/index.js +553 -0
  41. package/lib/dynamic-group/index.js.map +1 -0
  42. package/lib/dynamic-group/model.d.ts +135 -0
  43. package/lib/dynamic-group/model.js +416 -0
  44. package/lib/dynamic-group/model.js.map +1 -0
  45. package/lib/dynamic-group/node.d.ts +16 -0
  46. package/lib/dynamic-group/node.js +146 -0
  47. package/lib/dynamic-group/node.js.map +1 -0
  48. package/lib/dynamic-group/utils.d.ts +17 -0
  49. package/lib/dynamic-group/utils.js +32 -0
  50. package/lib/dynamic-group/utils.js.map +1 -0
  51. package/lib/index.d.ts +14 -9
  52. package/lib/index.js +21 -9
  53. package/lib/index.js.map +1 -1
  54. package/lib/materials/group/GroupNode.d.ts +0 -4
  55. package/lib/materials/group/GroupNode.js +1 -0
  56. package/lib/materials/group/GroupNode.js.map +1 -1
  57. package/lib/materials/group/index.d.ts +4 -4
  58. package/lib/materials/group/index.js +5 -1
  59. package/lib/materials/group/index.js.map +1 -1
  60. package/lib/materials/node-selection/index.d.ts +4 -0
  61. package/lib/materials/node-selection/index.js.map +1 -1
  62. package/lib/mindmap/index.d.ts +2 -2
  63. package/package.json +3 -5
  64. package/src/NodeResize/control/Control.tsx +10 -1
  65. package/src/NodeResize/index.ts +4 -0
  66. package/src/dynamic-group/index.ts +609 -0
  67. package/src/dynamic-group/model.ts +503 -0
  68. package/src/dynamic-group/node.ts +140 -0
  69. package/src/dynamic-group/utils.ts +33 -0
  70. package/src/index.ts +26 -9
  71. package/src/materials/group/GroupNode.ts +1 -4
  72. package/src/materials/group/index.ts +6 -1
  73. package/src/materials/node-selection/index.ts +6 -1
@@ -0,0 +1,553 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
25
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
26
+ };
27
+ var __rest = (this && this.__rest) || function (s, e) {
28
+ var t = {};
29
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
30
+ t[p] = s[p];
31
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
32
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
33
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
34
+ t[p[i]] = s[p[i]];
35
+ }
36
+ return t;
37
+ };
38
+ var __read = (this && this.__read) || function (o, n) {
39
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
40
+ if (!m) return o;
41
+ var i = m.call(o), r, ar = [], e;
42
+ try {
43
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
+ }
45
+ catch (error) { e = { error: error }; }
46
+ finally {
47
+ try {
48
+ if (r && !r.done && (m = i["return"])) m.call(i);
49
+ }
50
+ finally { if (e) throw e.error; }
51
+ }
52
+ return ar;
53
+ };
54
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
55
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
56
+ if (ar || !(i in from)) {
57
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
58
+ ar[i] = from[i];
59
+ }
60
+ }
61
+ return to.concat(ar || Array.prototype.slice.call(from));
62
+ };
63
+ Object.defineProperty(exports, "__esModule", { value: true });
64
+ exports.DynamicGroup = exports.dynamicGroup = void 0;
65
+ var core_1 = require("@logicflow/core");
66
+ var lodash_es_1 = require("lodash-es");
67
+ var node_1 = require("./node");
68
+ var model_1 = require("./model");
69
+ var utils_1 = require("./utils");
70
+ __exportStar(require("./node"), exports);
71
+ __exportStar(require("./model"), exports);
72
+ exports.dynamicGroup = {
73
+ type: 'dynamic-group',
74
+ view: node_1.DynamicGroupNode,
75
+ model: model_1.DynamicGroupNodeModel,
76
+ };
77
+ var DEFAULT_TOP_Z_INDEX = -1000;
78
+ var DEFAULT_BOTTOM_Z_INDEX = -10000;
79
+ var DynamicGroup = /** @class */ (function () {
80
+ function DynamicGroup(_a) {
81
+ var lf = _a.lf, options = _a.options;
82
+ var _this = this;
83
+ this.topGroupZIndex = DEFAULT_BOTTOM_Z_INDEX;
84
+ // 存储节点与 group 的映射关系
85
+ this.nodeGroupMap = new Map();
86
+ // 监听 LogicFlow 的相关事件,做对应的处理
87
+ this.addNodeToGroup = function (_a) {
88
+ var node = _a.data;
89
+ // 1. 如果该节点之前已经在 group 中了,则将其从之前的 group 移除
90
+ var preGroupId = _this.nodeGroupMap.get(node.id);
91
+ if (preGroupId) {
92
+ var group = _this.lf.getNodeModelById(preGroupId);
93
+ group.removeChild(node.id);
94
+ _this.nodeGroupMap.delete(node.id);
95
+ group.setAllowAppendChild(false);
96
+ }
97
+ // 2. 然后再判断这个节点是否在某个 group 范围内,如果是,则将其添加到对应的 group 中
98
+ var nodeModel = _this.lf.getNodeModelById(node.id);
99
+ var bounds = nodeModel === null || nodeModel === void 0 ? void 0 : nodeModel.getBounds();
100
+ if (nodeModel && bounds) {
101
+ // TODO: 确认下面的注释内容
102
+ // https://github.com/didi/LogicFlow/issues/1261
103
+ // 当使用 SelectionSelect 框选后触发 lf.addNode(Group)
104
+ // 会触发 appendNodeToGroup() 的执行
105
+ // 由于 this.getGroup() 会判断 node.id !== nodeData.id
106
+ // 因此当 addNode 是 Group 类型时,this.getGroup() 会一直返回空
107
+ // 导致了下面这段代码无法执行,也就是无法将当前添加的 Group 添加到 this.nodeGroupMap 中
108
+ // 这导致了折叠分组时触发的 foldEdge() 无法正确通过 getNodeGroup() 拿到正确的 groupId
109
+ // 从而导致折叠分组时一直都会创建一个虚拟边
110
+ // 而初始化分组时由于正确设置了nodeGroupMap的数据,因此不会产生虚拟边的错误情况
111
+ if (nodeModel.isGroup) {
112
+ var group_1 = nodeModel;
113
+ (0, lodash_es_1.forEach)(Array.from(group_1.children), function (childId) {
114
+ _this.nodeGroupMap.set(childId, node.id);
115
+ });
116
+ // 新增 node 时进行 this.topGroupZIndex 的校准更新
117
+ _this.calibrateTopGroupZIndex([node]);
118
+ _this.onNodeSelect({
119
+ data: node,
120
+ isSelected: false,
121
+ isMultiple: false,
122
+ });
123
+ }
124
+ // TODO: 找到这个范围内的 groupModel, 并加 node 添加到该 group
125
+ var group = _this.getGroupByBounds(bounds, node);
126
+ if (group) {
127
+ var isAllowAppendIn = group.isAllowAppendIn(node);
128
+ console.log('isAllowAppendIn', isAllowAppendIn);
129
+ if (isAllowAppendIn) {
130
+ group.addChild(node.id);
131
+ _this.nodeGroupMap.set(node.id, group.id);
132
+ group.setAllowAppendChild(true);
133
+ }
134
+ else {
135
+ // 抛出不允许插入的事件
136
+ _this.lf.emit('group:not-allowed', {
137
+ group: group.getData(),
138
+ node: node,
139
+ });
140
+ }
141
+ }
142
+ }
143
+ };
144
+ this.removeNodeFromGroup = function (_a) {
145
+ var node = _a.data;
146
+ if (node.isGroup && node.children) {
147
+ (0, lodash_es_1.forEach)(Array.from(node.children), function (childId) {
148
+ _this.nodeGroupMap.delete(childId);
149
+ _this.lf.deleteNode(childId);
150
+ });
151
+ }
152
+ var groupId = _this.nodeGroupMap.get(node.id);
153
+ if (groupId) {
154
+ var group = _this.lf.getNodeModelById(groupId);
155
+ group && group.removeChild(node.id);
156
+ _this.nodeGroupMap.delete(node.id);
157
+ }
158
+ };
159
+ this.setActiveGroup = function (_a) {
160
+ var node = _a.data;
161
+ var nodeModel = _this.lf.getNodeModelById(node.id);
162
+ var bounds = nodeModel === null || nodeModel === void 0 ? void 0 : nodeModel.getBounds();
163
+ if (nodeModel && bounds) {
164
+ var targetGroup = _this.getGroupByBounds(bounds, node);
165
+ if (_this.activeGroup) {
166
+ _this.activeGroup.setAllowAppendChild(false);
167
+ }
168
+ if (!targetGroup || (nodeModel.isGroup && targetGroup.id === node.id)) {
169
+ return;
170
+ }
171
+ var isAllowAppendIn = targetGroup.isAllowAppendIn(node);
172
+ if (!isAllowAppendIn)
173
+ return;
174
+ _this.activeGroup = targetGroup;
175
+ console.log('this.activeGroup', _this.activeGroup);
176
+ _this.activeGroup.setAllowAppendChild(true);
177
+ }
178
+ };
179
+ /**
180
+ * 1. 分组节点默认在普通节点下面
181
+ * 2. 分组节点被选中后,会将分组节点以及其内部的其它分组节点放到其余分组节点的上面
182
+ * 3. 分组节点取消选中后,不会将分组节点重置为原来的高度
183
+ * 4. 由于 LogicFlow 核心目标是支持用户手动绘制流程图,所以暂时不支持一张流程图超过 1000 个分组节点的情况
184
+ * @param node
185
+ * @param isMultiple
186
+ * @param isSelected
187
+ */
188
+ this.onNodeSelect = function (_a) {
189
+ var node = _a.data, isMultiple = _a.isMultiple, isSelected = _a.isSelected;
190
+ var nodeModel = _this.lf.getNodeModelById(node.id);
191
+ _this.sendNodeToFront(nodeModel);
192
+ // 重置所有 group 的 zIndex,防止 group 节点 zIndex 增长为正数(目的是保持 group 节点在最底层)
193
+ if (_this.topGroupZIndex > DEFAULT_TOP_Z_INDEX) {
194
+ var nodes = _this.lf.graphModel.nodes;
195
+ _this.topGroupZIndex = DEFAULT_BOTTOM_Z_INDEX;
196
+ var groups = (0, lodash_es_1.sortBy)((0, lodash_es_1.filter)(nodes, function (node) { return !!node.isGroup; }), 'zIndex');
197
+ var preZIndex_1 = 0;
198
+ (0, lodash_es_1.forEach)(groups, function (group) {
199
+ if (group.zIndex !== preZIndex_1) {
200
+ _this.topGroupZIndex++;
201
+ preZIndex_1 = group.zIndex;
202
+ }
203
+ group.setZIndex(_this.topGroupZIndex);
204
+ });
205
+ }
206
+ // FIX #1004
207
+ // 如果节点被多选,
208
+ // 这个节点是分组,则将分组的所有子节点取消选中
209
+ // 这个节点是分组的子节点,且其所属分组节点已选,则取消选中
210
+ if (isMultiple && isSelected) {
211
+ if (nodeModel === null || nodeModel === void 0 ? void 0 : nodeModel.isGroup) {
212
+ var children = nodeModel.children;
213
+ (0, lodash_es_1.forEach)(Array.from(children), function (childId) {
214
+ var childModel = _this.lf.getNodeModelById(childId);
215
+ childModel === null || childModel === void 0 ? void 0 : childModel.setSelected(false);
216
+ });
217
+ }
218
+ else {
219
+ var groupId = _this.nodeGroupMap.get(node.id);
220
+ if (groupId) {
221
+ var graphModel = _this.lf.getNodeModelById(groupId);
222
+ (graphModel === null || graphModel === void 0 ? void 0 : graphModel.isSelected) && (nodeModel === null || nodeModel === void 0 ? void 0 : nodeModel.setSelected(false));
223
+ }
224
+ }
225
+ }
226
+ };
227
+ this.onGraphRendered = function (_a) {
228
+ var data = _a.data;
229
+ console.log('data', data);
230
+ (0, lodash_es_1.forEach)(data.nodes, function (node) {
231
+ if (node.children) {
232
+ (0, lodash_es_1.forEach)(node.children, function (childId) {
233
+ _this.nodeGroupMap.set(childId, node.id);
234
+ });
235
+ }
236
+ });
237
+ // TODO: 确认一下下面方法的必要性及合理性
238
+ // 初始化 nodes 时进行 this.topGroupZIndex 的校准更新
239
+ _this.calibrateTopGroupZIndex(data.nodes);
240
+ };
241
+ lf.register(exports.dynamicGroup);
242
+ this.lf = lf;
243
+ console.log('options', options);
244
+ (0, lodash_es_1.assign)(this, options);
245
+ // 初始化插件,从监听事件开始及设置规则开始
246
+ this.init();
247
+ }
248
+ /**
249
+ * 获取分组内的节点
250
+ * @param groupModel
251
+ */
252
+ DynamicGroup.prototype.getNodesInGroup = function (groupModel) {
253
+ var _this = this;
254
+ var nodeIds = [];
255
+ if (groupModel.isGroup) {
256
+ (0, lodash_es_1.forEach)(Array.from(groupModel.children), function (nodeId) {
257
+ nodeIds.push(nodeId);
258
+ var nodeModel = _this.lf.getNodeModelById(nodeId);
259
+ if (nodeModel === null || nodeModel === void 0 ? void 0 : nodeModel.isGroup) {
260
+ nodeIds = nodeIds.concat(_this.getNodesInGroup(nodeModel));
261
+ }
262
+ });
263
+ }
264
+ return nodeIds;
265
+ };
266
+ /**
267
+ * 获取节点所属的分组
268
+ * @param nodeId
269
+ */
270
+ DynamicGroup.prototype.getGroupByNodeId = function (nodeId) {
271
+ var groupId = this.nodeGroupMap.get(nodeId);
272
+ if (groupId) {
273
+ return this.lf.getNodeModelById(groupId);
274
+ }
275
+ };
276
+ /**
277
+ * 获取自定位置及其所属分组
278
+ * 当分组重合时,优先返回最上层的分组
279
+ * @param bounds
280
+ * @param nodeData
281
+ */
282
+ DynamicGroup.prototype.getGroupByBounds = function (bounds, nodeData) {
283
+ var nodes = this.lf.graphModel.nodes;
284
+ var groups = (0, lodash_es_1.filter)(nodes, function (node) {
285
+ return (!!node.isGroup &&
286
+ (0, utils_1.isBoundsInGroup)(bounds, node) &&
287
+ node.id !== nodeData.id);
288
+ });
289
+ var count = groups.length;
290
+ if (count <= 1) {
291
+ return groups[0];
292
+ }
293
+ else {
294
+ var topZIndexGroup = groups[count - 1];
295
+ for (var i = count - 2; i >= 0; i--) {
296
+ topZIndexGroup = groups[i];
297
+ }
298
+ return topZIndexGroup;
299
+ }
300
+ };
301
+ /**
302
+ * 提高元素的层级,如果是 group,同时提高其子元素的层级
303
+ * @param model
304
+ */
305
+ DynamicGroup.prototype.sendNodeToFront = function (model) {
306
+ var _this = this;
307
+ if (!model || !model.isGroup)
308
+ return;
309
+ this.topGroupZIndex++;
310
+ model.setZIndex(this.topGroupZIndex);
311
+ if (model.children) {
312
+ var children = model.children;
313
+ (0, lodash_es_1.forEach)(Array.from(children), function (nodeId) {
314
+ var node = _this.lf.getNodeModelById(nodeId);
315
+ _this.sendNodeToFront(node);
316
+ });
317
+ }
318
+ };
319
+ /**
320
+ * 递归计算某个分组内最高的 zIndex 值
321
+ * TODO: 这块儿有点疑问❓如果 node 不是 group,这块儿返回的 maxZIndex 是最小值,但 node 的 zIndex 不一定是这个值
322
+ * @param node
323
+ */
324
+ DynamicGroup.prototype.getMaxZIndex = function (node) {
325
+ var _this = this;
326
+ var maxZIndex = DEFAULT_BOTTOM_Z_INDEX;
327
+ if (node.isGroup) {
328
+ maxZIndex = Math.max(maxZIndex, node.zIndex);
329
+ }
330
+ if (node.children) {
331
+ var children = node.children;
332
+ (0, lodash_es_1.forEach)(Array.from(children), function (childId) {
333
+ var child = _this.lf.getNodeModelById(childId);
334
+ if (child === null || child === void 0 ? void 0 : child.isGroup) {
335
+ var childMaxZIndex = _this.getMaxZIndex(child);
336
+ maxZIndex = Math.max(maxZIndex, childMaxZIndex);
337
+ }
338
+ });
339
+ }
340
+ return maxZIndex;
341
+ };
342
+ /**
343
+ * 校准当前 topGroupZIndex 的值
344
+ * @param nodes
345
+ */
346
+ DynamicGroup.prototype.calibrateTopGroupZIndex = function (nodes) {
347
+ var _this = this;
348
+ // 初始化时 or 增加新节点时,找出所有 nodes 的最大 zIndex
349
+ var maxZIndex = DEFAULT_BOTTOM_Z_INDEX;
350
+ (0, lodash_es_1.forEach)(nodes, function (node) {
351
+ var nodeModel = _this.lf.getNodeModelById(node.id);
352
+ if (nodeModel) {
353
+ var currNodeMaxZIndex = _this.getMaxZIndex(nodeModel);
354
+ if (currNodeMaxZIndex > maxZIndex) {
355
+ maxZIndex = currNodeMaxZIndex;
356
+ }
357
+ }
358
+ });
359
+ // TODO: 不是很理解这块儿的代码逻辑,需要整理一下
360
+ if (this.topGroupZIndex >= maxZIndex) {
361
+ // 一般是初始化时/增加新节点时发生,因为外部强行设置了一个很大的 zIndex
362
+ // 删除节点不会影响目前最高 zIndex 的赋值
363
+ return;
364
+ }
365
+ // 新增 nodes 中如果存在 zIndex 比 this.topGroupZIndex 大
366
+ // 说明 this.topGroupZIndex 已经失去意义,代表不了目前最高 zIndex 的 group,需要重新校准
367
+ // https://github.com/didi/LogicFlow/issues/1535
368
+ // 当外部直接设置多个 BaseNode.zIndex = 1 时
369
+ // 当点击某一个 node 时,由于这个 this.topGroupZIndex 是从 -10000 开始计算的,
370
+ // this.topGroupZIndex + 1 也就是-9999,这就造成当前点击的 node 的 zIndex 远远
371
+ // 比其它 node 的 zIndex 小,因此造成 zIndex 错乱的问题
372
+ // TODO: 这儿的 nodes 能否直接用传参进来的 nodes 呢???
373
+ var allNodes = this.lf.graphModel.nodes;
374
+ var allGroups = (0, lodash_es_1.filter)(allNodes, function (node) { return !!node.isGroup; });
375
+ var max = this.topGroupZIndex;
376
+ (0, lodash_es_1.forEach)(allGroups, function (group) {
377
+ if (group.zIndex > max)
378
+ max = group.zIndex;
379
+ });
380
+ this.topGroupZIndex = max;
381
+ };
382
+ /**
383
+ * 创建一个 Group 类型节点内部所有子节点的副本
384
+ * 并且在遍历所有 nodes 的过程中,顺便拿到所有 edges (只在 Group 范围的 edges)
385
+ */
386
+ DynamicGroup.prototype.initGroupChildNodes = function (nodeIdMap, children, curGroup, distance) {
387
+ var _this = this;
388
+ // Group 中所有子节点
389
+ var allChildNodes = [];
390
+ // 属于 Group 内部边的 EdgeData
391
+ var edgesDataArr = [];
392
+ // 所有有关联的连线
393
+ var allRelatedEdges = [];
394
+ (0, lodash_es_1.forEach)(Array.from(children), function (childId) {
395
+ var childNode = _this.lf.getNodeModelById(childId);
396
+ if (childNode) {
397
+ var childNodeData = childNode.getData();
398
+ var eventType = core_1.EventType.NODE_GROUP_COPY || 'node:group-copy-add';
399
+ var newNodeConfig = (0, core_1.transformNodeData)(childNodeData, distance);
400
+ var tempChildNode = _this.lf.addNode(newNodeConfig, eventType);
401
+ curGroup.addChild(tempChildNode.id);
402
+ nodeIdMap[childId] = tempChildNode.id; // id 同 childId,做映射存储
403
+ allChildNodes.push(tempChildNode);
404
+ // 1. 存储 children 内部节点相关的输入边(incoming)
405
+ allRelatedEdges.push.apply(allRelatedEdges, __spreadArray([], __read(__spreadArray(__spreadArray([], __read(tempChildNode.incoming.edges), false), __read(tempChildNode.outgoing.edges), false)), false));
406
+ if (children instanceof Set) {
407
+ var _a = _this.initGroupChildNodes(nodeIdMap, children, tempChildNode, distance), childNodes = _a.childNodes, edgesData = _a.edgesData;
408
+ allChildNodes.push.apply(allChildNodes, __spreadArray([], __read(childNodes), false));
409
+ edgesDataArr.push.apply(edgesDataArr, __spreadArray([], __read(edgesData), false));
410
+ }
411
+ }
412
+ });
413
+ // TODO: 确认,递归的方式,是否将所有嵌套的边数据都有返回
414
+ console.log('allRelatedEdges -->>', allRelatedEdges);
415
+ // 1. 判断每一条边的开始节点、目标节点是否在 Group 中
416
+ var edgesInnerGroup = (0, lodash_es_1.filter)(allRelatedEdges, function (edge) {
417
+ return ((0, lodash_es_1.has)(nodeIdMap, edge.sourceNodeId) && (0, lodash_es_1.has)(nodeIdMap, edge.targetNodeId));
418
+ });
419
+ // 2. 为「每一条 Group 的内部边」构建出 EdgeData 数据,得到 EdgeConfig,生成新的线
420
+ var edgesDataInnerGroup = (0, lodash_es_1.map)(edgesInnerGroup, function (edge) {
421
+ return edge.getData();
422
+ });
423
+ return {
424
+ childNodes: allChildNodes,
425
+ edgesData: edgesDataArr.concat(edgesDataInnerGroup),
426
+ };
427
+ };
428
+ /**
429
+ * 根据参数 edge 选择是新建边还是基于已有边,复制一条边出来
430
+ * @param edge
431
+ * @param nodeIdMap
432
+ * @param distance
433
+ */
434
+ DynamicGroup.prototype.createEdge = function (edge, nodeIdMap, distance) {
435
+ var _a, _b;
436
+ var sourceNodeId = edge.sourceNodeId, targetNodeId = edge.targetNodeId;
437
+ var sourceId = (_a = nodeIdMap[sourceNodeId]) !== null && _a !== void 0 ? _a : sourceNodeId;
438
+ var targetId = (_b = nodeIdMap[targetNodeId]) !== null && _b !== void 0 ? _b : targetNodeId;
439
+ // 如果是有 id 且 text 是对象的边,需要重新计算位置,否则直接用 edgeConfig 生成边
440
+ var newEdgeConfig = (0, lodash_es_1.cloneDeep)(edge);
441
+ if (edge.id && typeof edge.text === 'object' && edge.text !== null) {
442
+ newEdgeConfig = (0, core_1.transformEdgeData)(edge, distance);
443
+ }
444
+ return this.lf.graphModel.addEdge(__assign(__assign({}, newEdgeConfig), { sourceNodeId: sourceId, targetNodeId: targetId }));
445
+ };
446
+ /**
447
+ * Group 插件的初始化方法
448
+ * TODO:1. 待讨论,可能之前插件分类是有意义的 components, material, tools
449
+ * 区别是:1. 有些插件就是自定义节点,可能会有初始化方法 init,但不必要有 render (比如 Group)
450
+ * 2. 有些插件是渲染一些部件(比如 MiniMap、Control、Menu 等)必须要有 render
451
+ * 3. 工具类的,init 、 render
452
+ * 该如何分类呢?并如何完善插件的类型
453
+ *
454
+ * TODO: 2. 插件的 destroy 方法该做些什么,是否应该加 destroy 方法
455
+ * TODO: 3. 是否应该定义一个 Extension 的基类,所有插件基于这个基类来开发,这样在初始化的时候就可以确认执行什么方法
456
+ */
457
+ DynamicGroup.prototype.init = function () {
458
+ var _this = this;
459
+ var lf = this.lf;
460
+ var graphModel = lf.graphModel;
461
+ // 添加分组节点移动规则
462
+ // 1. 移动分组节点时,同时移动分组内所有节点
463
+ // 2. 移动子节点时,判断是否有限制规则(isRestrict)
464
+ graphModel.addNodeMoveRules(function (model, deltaX, deltaY) {
465
+ // 判断如果是 group,移动时需要同时移动组内的所有节点
466
+ if (model.isGroup) {
467
+ var nodeIds = _this.getNodesInGroup(model);
468
+ graphModel.moveNodes(nodeIds, deltaX, deltaY, true);
469
+ return true;
470
+ }
471
+ var groupId = _this.nodeGroupMap.get(model.id);
472
+ var groupModel = _this.lf.getNodeModelById(groupId);
473
+ if (groupModel && groupModel.isRestrict) {
474
+ // 如果移动的节点存在与分组中,且这个分组禁止子节点移出去
475
+ var bounds = model.getBounds();
476
+ return (0, utils_1.isAllowMoveTo)(bounds, groupModel);
477
+ }
478
+ return true;
479
+ });
480
+ graphModel.group = this;
481
+ lf.on('node:add,node:drop,node:dnd-add', this.addNodeToGroup);
482
+ lf.on('node:delete', this.removeNodeFromGroup);
483
+ lf.on('node:drag,node:dnd-drag', this.setActiveGroup);
484
+ lf.on('node:click', this.onNodeSelect);
485
+ lf.on('graph:rendered', this.onGraphRendered);
486
+ lf.on('graph:updated', function (_a) {
487
+ var data = _a.data;
488
+ return console.log('data', data);
489
+ });
490
+ lf.on('group:add-node', function (_a) {
491
+ var data = _a.data;
492
+ return console.log('group:add-node', data);
493
+ });
494
+ // lf.eventCenter.on('node:resize', this.onGroupResize)
495
+ // https://github.com/didi/LogicFlow/issues/1346
496
+ // 重写 addElements() 方法,在 addElements() 原有基础上增加对 group 内部所有 nodes 和 edges 的复制功能
497
+ // 使用场景:addElements api 项目内部目前只在快捷键粘贴时使用(此处解决的也应该是粘贴场景的问题)
498
+ lf.addElements = function (_a, distance) {
499
+ var selectedNodes = _a.nodes, selectedEdges = _a.edges;
500
+ if (distance === void 0) { distance = 40; }
501
+ // oldNodeId -> newNodeId 映射 Map
502
+ var nodeIdMap = {};
503
+ // 本次添加的所有节点和边
504
+ var elements = {
505
+ nodes: [],
506
+ edges: [],
507
+ };
508
+ // 所有属于分组内的边 -> sourceNodeId 和 targetNodeId 都在 Group 内
509
+ var edgesInnerGroup = [];
510
+ (0, lodash_es_1.forEach)(selectedNodes, function (node) {
511
+ var originId = node.id;
512
+ var children = node.children, rest = __rest(node, ["children"]);
513
+ var model = lf.addNode(rest);
514
+ if (originId)
515
+ nodeIdMap[originId] = model.id;
516
+ elements.nodes.push(model); // 此时为 group 的 nodeModel
517
+ // TODO: 递归创建 group 的 nodeModel 的 children
518
+ if (model.isGroup) {
519
+ var edgesData = _this.initGroupChildNodes(nodeIdMap, children, model, distance).edgesData;
520
+ edgesInnerGroup.push.apply(edgesInnerGroup, __spreadArray([], __read(edgesData), false));
521
+ }
522
+ });
523
+ (0, lodash_es_1.forEach)(edgesInnerGroup, function (edge) {
524
+ _this.createEdge(edge, nodeIdMap, distance);
525
+ });
526
+ console.log('selectedEdges --->>>', selectedEdges);
527
+ (0, lodash_es_1.forEach)(selectedEdges, function (edge) {
528
+ elements.edges.push(_this.createEdge(edge, nodeIdMap, distance));
529
+ });
530
+ // 返回 elements 进行选中效果,即触发 element.selectElementById()
531
+ // shortcut.ts 也会对最外层的 nodes 和 edges 进行偏移,即 translationNodeData()
532
+ return elements;
533
+ };
534
+ this.render();
535
+ };
536
+ DynamicGroup.prototype.render = function () { };
537
+ DynamicGroup.prototype.destroy = function () {
538
+ // 销毁监听的事件,并移除渲染的 dom 内容
539
+ this.lf.off('node:add,node:drop,node:dnd-add', this.addNodeToGroup);
540
+ this.lf.off('node:delete', this.removeNodeFromGroup);
541
+ this.lf.off('node:drag,node:dnd-drag', this.setActiveGroup);
542
+ this.lf.off('node:click', this.onNodeSelect);
543
+ this.lf.off('graph:rendered', this.onGraphRendered);
544
+ // 还原 lf.addElements 方法?
545
+ // 移除 graphModel 上重写的 addNodeMoveRules 方法?
546
+ // TODO: 讨论一下插件该具体做些什么
547
+ };
548
+ DynamicGroup.pluginName = 'dynamicGroup';
549
+ return DynamicGroup;
550
+ }());
551
+ exports.DynamicGroup = DynamicGroup;
552
+ exports.default = DynamicGroup;
553
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dynamic-group/index.ts"],"names":[],"mappings":"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"}