@logicflow/extension 2.2.0-alpha.7 → 2.2.1

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 (125) hide show
  1. package/README.md +16 -0
  2. package/package.json +10 -7
  3. package/.turbo/turbo-build.log +0 -38
  4. package/CHANGELOG.md +0 -1829
  5. package/__test__/bpmn-adapter.test.js +0 -227
  6. package/es/materials/curved-edge/__test__/curved-edge.test.d.ts +0 -1
  7. package/es/materials/curved-edge/__test__/curved-edge.test.js +0 -18
  8. package/jest.config.js +0 -198
  9. package/lib/materials/curved-edge/__test__/curved-edge.test.d.ts +0 -1
  10. package/lib/materials/curved-edge/__test__/curved-edge.test.js +0 -20
  11. package/rollup.config.js +0 -52
  12. package/src/NodeResize/BasicShape/Ellipse.tsx +0 -22
  13. package/src/NodeResize/BasicShape/Polygon.tsx +0 -24
  14. package/src/NodeResize/BasicShape/Rect.tsx +0 -44
  15. package/src/NodeResize/control/Control.tsx +0 -537
  16. package/src/NodeResize/control/ControlGroup.tsx +0 -76
  17. package/src/NodeResize/control/Util.ts +0 -206
  18. package/src/NodeResize/index.ts +0 -26
  19. package/src/NodeResize/node/DiamondResize.tsx +0 -149
  20. package/src/NodeResize/node/EllipseResize.tsx +0 -140
  21. package/src/NodeResize/node/HtmlResize.tsx +0 -125
  22. package/src/NodeResize/node/RectResize.tsx +0 -126
  23. package/src/NodeResize/node/index.ts +0 -4
  24. package/src/bpmn/constant.ts +0 -56
  25. package/src/bpmn/events/EndEvent.ts +0 -73
  26. package/src/bpmn/events/StartEvent.ts +0 -52
  27. package/src/bpmn/events/index.ts +0 -2
  28. package/src/bpmn/flow/SequenceFlow.ts +0 -25
  29. package/src/bpmn/flow/index.ts +0 -1
  30. package/src/bpmn/gateways/ExclusiveGateway.ts +0 -71
  31. package/src/bpmn/gateways/index.ts +0 -1
  32. package/src/bpmn/getBpmnId.ts +0 -31
  33. package/src/bpmn/index.ts +0 -60
  34. package/src/bpmn/tasks/ServiceTask.ts +0 -63
  35. package/src/bpmn/tasks/UserTask.ts +0 -64
  36. package/src/bpmn/tasks/index.ts +0 -2
  37. package/src/bpmn-adapter/bpmnIds.ts +0 -31
  38. package/src/bpmn-adapter/index.ts +0 -835
  39. package/src/bpmn-adapter/json2xml.ts +0 -127
  40. package/src/bpmn-adapter/xml2json.ts +0 -544
  41. package/src/bpmn-elements/README.md +0 -223
  42. package/src/bpmn-elements/__tests__/definition.test.js +0 -72
  43. package/src/bpmn-elements/index.d.ts +0 -26
  44. package/src/bpmn-elements/index.ts +0 -107
  45. package/src/bpmn-elements/presets/Event/EndEventFactory.ts +0 -114
  46. package/src/bpmn-elements/presets/Event/IntermediateCatchEvent.ts +0 -108
  47. package/src/bpmn-elements/presets/Event/IntermediateThrowEvent.ts +0 -109
  48. package/src/bpmn-elements/presets/Event/StartEventFactory.ts +0 -114
  49. package/src/bpmn-elements/presets/Event/boundaryEventFactory.ts +0 -117
  50. package/src/bpmn-elements/presets/Event/index.ts +0 -14
  51. package/src/bpmn-elements/presets/Flow/flow.d.ts +0 -6
  52. package/src/bpmn-elements/presets/Flow/index.ts +0 -8
  53. package/src/bpmn-elements/presets/Flow/manhattan.ts +0 -691
  54. package/src/bpmn-elements/presets/Flow/sequenceFlow.ts +0 -65
  55. package/src/bpmn-elements/presets/Gateway/gateway.ts +0 -107
  56. package/src/bpmn-elements/presets/Gateway/index.ts +0 -23
  57. package/src/bpmn-elements/presets/Pool/Lane.ts +0 -211
  58. package/src/bpmn-elements/presets/Pool/Pool.ts +0 -284
  59. package/src/bpmn-elements/presets/Pool/index.ts +0 -89
  60. package/src/bpmn-elements/presets/Task/index.ts +0 -122
  61. package/src/bpmn-elements/presets/Task/subProcess.ts +0 -189
  62. package/src/bpmn-elements/presets/Task/task.ts +0 -193
  63. package/src/bpmn-elements/presets/icons.ts +0 -155
  64. package/src/bpmn-elements/utils.ts +0 -52
  65. package/src/bpmn-elements-adapter/README.md +0 -293
  66. package/src/bpmn-elements-adapter/__tests__/adapter_in.test.js +0 -528
  67. package/src/bpmn-elements-adapter/__tests__/adapter_out.test.js +0 -569
  68. package/src/bpmn-elements-adapter/constant.ts +0 -76
  69. package/src/bpmn-elements-adapter/index.ts +0 -1134
  70. package/src/bpmn-elements-adapter/json2xml.ts +0 -105
  71. package/src/bpmn-elements-adapter/xml2json.ts +0 -542
  72. package/src/components/context-menu/index.ts +0 -253
  73. package/src/components/control/index.ts +0 -155
  74. package/src/components/dnd-panel/index.ts +0 -137
  75. package/src/components/highlight/index.ts +0 -227
  76. package/src/components/menu/index.ts +0 -748
  77. package/src/components/mini-map/index.ts +0 -686
  78. package/src/components/selection-select/index.ts +0 -387
  79. package/src/dynamic-group/index.ts +0 -774
  80. package/src/dynamic-group/model.ts +0 -580
  81. package/src/dynamic-group/node.ts +0 -288
  82. package/src/dynamic-group/utils.ts +0 -46
  83. package/src/index.less +0 -1
  84. package/src/index.ts +0 -47
  85. package/src/insert-node-in-polyline/edge.ts +0 -175
  86. package/src/insert-node-in-polyline/index.ts +0 -193
  87. package/src/materials/curved-edge/__test__/curved-edge.test.ts +0 -46
  88. package/src/materials/curved-edge/index.ts +0 -217
  89. package/src/materials/group/GroupNode.ts +0 -437
  90. package/src/materials/group/index.ts +0 -542
  91. package/src/materials/node-selection/index.ts +0 -380
  92. package/src/mindmap/fakerRoot.ts +0 -19
  93. package/src/mindmap/index.ts +0 -328
  94. package/src/mindmap/markContent.ts +0 -81
  95. package/src/mindmap/markContentOption.ts +0 -81
  96. package/src/mindmap/markEntity.ts +0 -82
  97. package/src/mindmap/markRoot.ts +0 -83
  98. package/src/mindmap/theme.ts +0 -11
  99. package/src/pool/LaneModel.ts +0 -226
  100. package/src/pool/LaneView.ts +0 -220
  101. package/src/pool/PoolModel.ts +0 -631
  102. package/src/pool/PoolView.ts +0 -75
  103. package/src/pool/constant.ts +0 -19
  104. package/src/pool/index.ts +0 -621
  105. package/src/pool/utils.ts +0 -46
  106. package/src/rect-label-node/RectLabelNodeView.ts +0 -33
  107. package/src/rect-label-node/index.ts +0 -15
  108. package/src/style/index.less +0 -381
  109. package/src/style/raw.ts +0 -328
  110. package/src/tools/auto-layout/index.ts +0 -282
  111. package/src/tools/flow-path/index.ts +0 -233
  112. package/src/tools/label/Label.tsx +0 -357
  113. package/src/tools/label/LabelModel.ts +0 -83
  114. package/src/tools/label/LabelOverlay.tsx +0 -162
  115. package/src/tools/label/algorithm.ts +0 -42
  116. package/src/tools/label/index.ts +0 -479
  117. package/src/tools/label/mediumEditor.ts +0 -121
  118. package/src/tools/label/utils.ts +0 -395
  119. package/src/tools/proximity-connect/index.ts +0 -435
  120. package/src/tools/snapshot/README.md +0 -145
  121. package/src/tools/snapshot/index.ts +0 -701
  122. package/src/tools/snapshot/utils.ts +0 -163
  123. package/src/turbo-adapter/index.ts +0 -212
  124. package/stats.html +0 -4842
  125. package/tsconfig.json +0 -18
@@ -1,580 +0,0 @@
1
- import LogicFlow, {
2
- observable,
3
- BaseEdgeModel,
4
- ElementType,
5
- GraphModel,
6
- IRectNodeProperties,
7
- RectNodeModel,
8
- } from '@logicflow/core'
9
- import { forEach } from 'lodash-es'
10
-
11
- import NodeData = LogicFlow.NodeData
12
- import NodeConfig = LogicFlow.NodeConfig
13
- import EdgeConfig = LogicFlow.EdgeConfig
14
-
15
- export type IGroupNodeProperties = {
16
- /**
17
- * 当前分组中的节点 id
18
- */
19
- children?: string[]
20
- /**
21
- * 分组节点是否可以折叠
22
- */
23
- collapsible?: boolean
24
- /**
25
- * 分组节点折叠状态
26
- */
27
- isCollapsed?: boolean
28
- /**
29
- * 子节点是否限制移动范围
30
- * 默认为 false,允许拖拽移除分组
31
- */
32
- isRestrict?: boolean
33
- /**
34
- * isRestrict 模式启用时,
35
- * 如果同时设置 autoResize 为 true,
36
- * 那么子节点在父节点中移动时,父节点会自动调整大小
37
- */
38
- autoResize?: boolean
39
-
40
- /**
41
- * 分组节点的收起状态宽高
42
- */
43
- collapsedWidth?: number
44
- collapsedHeight?: number
45
- // 默认宽高作为 group 的展开宽高
46
- // /**
47
- // * 分组节点的展开状态宽高
48
- // */
49
- // expandWidth?: number
50
- // expandHeight?: number
51
-
52
- /**
53
- * 缩放或旋转容器时,是否缩放或旋转组内节点
54
- */
55
- transformWithContainer?: boolean
56
-
57
- /**
58
- * 当前分组元素的 zIndex
59
- */
60
- zIndex?: number
61
- /**
62
- * 分组节点是否自动置顶
63
- */
64
- autoToFront?: boolean
65
-
66
- // 节点是否允许添加到分组中,是否可以通过 properties 的方式传入
67
- // TODO: 函数类型的 properties 该如何传入
68
- isAllowAppendIn?: (_nodeData) => boolean
69
- } & IRectNodeProperties
70
-
71
- // 分组节点默认展开时的大小
72
- const DEFAULT_GROUP_EXPAND_WIDTH = 400
73
- const DEFAULT_GROUP_EXPAND_HEIGHT = 230
74
- // 分组节点默认收起时的大小
75
- const DEFAULT_GROUP_COLLAPSE_WIDTH = 80
76
- const DEFAULT_GROUP_COLLAPSE_HEIGHT = 60
77
-
78
- const DEFAULT_BOTTOM_Z_INDEX = -10000
79
-
80
- export class DynamicGroupNodeModel extends RectNodeModel<IGroupNodeProperties> {
81
- readonly isGroup = true
82
-
83
- // 保存组内的节点
84
- children!: Set<string>
85
- // 是否限制组内节点的移动范围。默认不限制 TODO: 完善该功能
86
- isRestrict: boolean = false
87
- // isRestrict 模式启用时,如果同时设置 autoResize 为 true,那么子节点在父节点中移动时,父节点会自动调整大小
88
- autoResize: boolean = false
89
- // 分组节点是否可以折叠
90
- collapsible: boolean = true
91
- // 是否使用自定义文本位置
92
- staticTextPosition: boolean = true
93
-
94
- // 分组节点 初始化尺寸(默认展开),后续支持从 properties 中传入 width 和 height 设置
95
- expandWidth!: number
96
- expandHeight!: number
97
- // 折叠后
98
- collapsedWidth!: number
99
- collapsedHeight!: number
100
-
101
- // 当前组是否收起状态
102
- @observable isCollapsed: boolean = false
103
- // 当前分组是否在可添加状态 - 实时状态
104
- @observable groupAddable: boolean = false
105
- // 缩放或旋转容器时,是否缩放或旋转组内节点
106
- @observable transformWithContainer: boolean = false
107
- childrenLastCollapseStateDict: Map<string, boolean> = new Map()
108
-
109
- constructor(data: NodeConfig<IGroupNodeProperties>, graphModel: GraphModel) {
110
- super(data, graphModel)
111
- this.childrenLastCollapseStateDict = new Map()
112
-
113
- this.initNodeData(data)
114
- this.setAttributes()
115
- }
116
-
117
- initNodeData(data: LogicFlow.NodeConfig<IGroupNodeProperties>) {
118
- super.initNodeData(data)
119
-
120
- const {
121
- children,
122
- width,
123
- height,
124
- collapsedWidth,
125
- collapsedHeight,
126
-
127
- collapsible,
128
- isCollapsed,
129
- zIndex,
130
- isRestrict,
131
- autoResize,
132
- autoToFront,
133
- transformWithContainer,
134
- } = data.properties ?? {}
135
-
136
- this.children = children ? new Set(children) : new Set()
137
- this.zIndex = zIndex ?? DEFAULT_BOTTOM_Z_INDEX
138
- this.isCollapsed = isCollapsed ?? false
139
- this.setProperties({ isCollapsed: isCollapsed ?? false })
140
-
141
- const expandWidth = width ?? DEFAULT_GROUP_EXPAND_WIDTH
142
- const expandHeight = height ?? DEFAULT_GROUP_EXPAND_HEIGHT
143
-
144
- // 初始化分组节点的宽高数据
145
- this.width = expandWidth
146
- this.height = expandHeight
147
- this.expandWidth = expandWidth
148
- this.expandHeight = expandHeight
149
- this.collapsedWidth = collapsedWidth ?? DEFAULT_GROUP_COLLAPSE_WIDTH
150
- this.collapsedHeight = collapsedHeight ?? DEFAULT_GROUP_COLLAPSE_HEIGHT
151
-
152
- this.isRestrict = isRestrict ?? false
153
- this.transformWithContainer = transformWithContainer ?? false
154
- this.autoResize = autoResize ?? false
155
- this.collapsible = collapsible ?? true
156
- this.autoToFront = autoToFront ?? false
157
- this.setTextPosition()
158
- // 禁用掉 Group 节点的文本编辑能力
159
- this.text.editable = false
160
- this.text.draggable = false
161
- }
162
-
163
- setAttributes() {
164
- super.setAttributes()
165
- }
166
-
167
- getData(): NodeData {
168
- const data = super.getData()
169
- const children: string[] = []
170
-
171
- forEach(Array.from(this.children), (childId) => {
172
- const model = this.graphModel.getNodeModelById(childId)
173
- if (model && !model.virtual) {
174
- children.push(childId)
175
- }
176
- })
177
- data.children = children
178
-
179
- if (data.properties) {
180
- data.properties.children = children
181
- data.properties.isCollapsed = this.isCollapsed
182
- }
183
-
184
- return data
185
- }
186
-
187
- /**
188
- * 获取分组内的节点
189
- * @param groupModel
190
- */
191
- getNodesInGroup(groupModel: DynamicGroupNodeModel): string[] {
192
- const nodeIds: string[] = []
193
- if (groupModel.isGroup) {
194
- forEach(Array.from(groupModel.children), (nodeId: string) => {
195
- nodeIds.push(nodeId)
196
- })
197
- }
198
- return nodeIds
199
- }
200
-
201
- getMoveDistance(
202
- deltaX: number,
203
- deltaY: number,
204
- isIgnoreRule = false,
205
- ): [number, number] {
206
- const [moveDeltaX, moveDeltaY] = super.getMoveDistance(
207
- deltaX,
208
- deltaY,
209
- isIgnoreRule,
210
- )
211
- const nodeIds = this.getNodesInGroup(this)
212
- this.graphModel.moveNodes(nodeIds, deltaX, deltaY, isIgnoreRule)
213
- return [moveDeltaX, moveDeltaY]
214
- }
215
-
216
- /**
217
- * 重写 getHistoryData 方法
218
- */
219
- getHistoryData(): NodeData {
220
- const data = super.getHistoryData()
221
- data.children = Array.from(this.children)
222
- data.isGroup = true
223
-
224
- const {
225
- x,
226
- y,
227
- collapsedWidth,
228
- collapsedHeight,
229
- expandWidth,
230
- expandHeight,
231
- isCollapsed,
232
- } = this
233
- if (isCollapsed) {
234
- // 如果当前是折叠模式
235
- // 存入history的时候,将坐标恢复到未折叠前的坐标数据
236
- // 因为拿出history数据的时候,会触发collapse()进行坐标的折叠计算
237
- data.x = x + expandWidth / 2 - collapsedWidth / 2
238
- data.y = y + expandHeight / 2 - collapsedHeight / 2
239
- if (data.text) {
240
- data.text.x = data.text.x + expandWidth / 2 - collapsedWidth / 2
241
- data.text.y = data.text.y + expandHeight / 2 - collapsedHeight / 2
242
- }
243
- }
244
- return data
245
- }
246
-
247
- /**
248
- * 触发分组节点的「折叠 or 展开」动作
249
- * 1. 折叠分组的宽高
250
- * 2. 处理分组子节点
251
- * 3. 处理连线
252
- * @param collapse {boolean} true -> 折叠;false -> 展开
253
- */
254
- toggleCollapse(collapse?: boolean) {
255
- const { graphModel } = this
256
- const nextCollapseState = !!collapse
257
- // DONE: 通过 setProperty 设置 isCollapsed 的值 -> 否则无法触发 node:properties-changed 事件
258
- this.isCollapsed = nextCollapseState
259
- this.setProperties({ isCollapsed: nextCollapseState })
260
-
261
- graphModel.eventCenter.emit('dynamicGroup:collapse', {
262
- collapse: nextCollapseState,
263
- nodeModel: this,
264
- })
265
-
266
- // step 1
267
- if (nextCollapseState) {
268
- this.collapse()
269
- } else {
270
- this.expand()
271
- }
272
-
273
- // step 2
274
- let allRelatedEdges = [...this.incoming.edges, ...this.outgoing.edges]
275
- const childrenArr = Array.from(this.children)
276
-
277
- forEach(childrenArr, (elementId) => {
278
- // FIX: 当使用 graphModel.getElement 获取元素时,会因为
279
- // const model = this.graphModel.getElement(elementId)
280
- const model = this.graphModel.elementsModelMap.get(elementId)
281
-
282
- if (model) {
283
- // TODO: ??? 普通节点有这个属性吗?确认这个代码的意义
284
- const collapseStatus = model.isCollapsed
285
- // FIX: https://github.com/didi/LogicFlow/issues/1007
286
- // 下面代码片段,针对 Group 节点执行
287
- if (model.isGroup) {
288
- const groupModel = model as DynamicGroupNodeModel
289
-
290
- if (!groupModel.isCollapsed) {
291
- // 正常情况下,parent 折叠后,children 也应该折叠
292
- // 因此当前 parent 准备展开时,children 的目前状态肯定是折叠状态,也就是 model.isCollapsed 为 true,这个代码块不会触发
293
- // 只有当 parent 准备折叠时,children 目前状态才有可能是展开
294
- // 即 model.isCollapsed 为 false,这个代码块触发, 此时 isCollapse 为 true,触发 children 也进行折叠
295
- groupModel.toggleCollapse(collapse)
296
- }
297
-
298
- if (!collapse) {
299
- // 当 parent 准备展开时,children 的值应该恢复到折叠前的状态
300
- const lastCollapseStatus =
301
- this.childrenLastCollapseStateDict?.get(elementId)
302
- if (
303
- lastCollapseStatus !== undefined &&
304
- lastCollapseStatus !== model.isCollapsed
305
- ) {
306
- // https://github.com/didi/LogicFlow/issues/1145
307
- // 当parent准备展开时,children的值肯定是折叠,也就是nodeModel.isCollapsed=true
308
- // 当parent准备展开时,如果children之前的状态是展开,则恢复展开状态
309
- groupModel.toggleCollapse(lastCollapseStatus)
310
- }
311
- }
312
- }
313
-
314
- this.childrenLastCollapseStateDict?.set(elementId, !!collapseStatus)
315
- model.visible = !collapse
316
-
317
- // 判断,如果是节点时,才去读取节点的 incoming 和 outgoing
318
- if (model.BaseType === ElementType.NODE) {
319
- const incomingEdges = model.incoming.edges
320
- const outgoingEdges = model.outgoing.edges
321
-
322
- allRelatedEdges = [
323
- ...allRelatedEdges,
324
- ...incomingEdges,
325
- ...outgoingEdges,
326
- ]
327
- }
328
- }
329
- })
330
- // step 3
331
- this.collapseEdge(nextCollapseState, allRelatedEdges)
332
- }
333
-
334
- setTextPosition() {
335
- const {
336
- x,
337
- y,
338
- staticTextPosition,
339
- text,
340
- isCollapsed,
341
- width,
342
- height,
343
- collapsedWidth,
344
- collapsedHeight,
345
- } = this
346
- if (staticTextPosition) {
347
- text.x = x
348
- text.y = isCollapsed ? y : y - height / 2 + 15
349
- return
350
- }
351
- text.x = isCollapsed
352
- ? x - width / 2 + collapsedWidth / 2
353
- : x + width / 2 - collapsedWidth / 2
354
- text.y = isCollapsed
355
- ? y - height / 2 + collapsedHeight / 2
356
- : y + height / 2 - collapsedHeight / 2
357
- }
358
-
359
- // 折叠操作
360
- private collapse() {
361
- const { x, y, width, height, collapsedWidth, collapsedHeight } = this
362
- this.x = x - width / 2 + collapsedWidth / 2
363
- this.y = y - height / 2 + collapsedHeight / 2
364
-
365
- // 记录折叠前的节点大小,并将其记录到 expandWidth 中
366
- this.expandWidth = width
367
- this.expandHeight = height
368
-
369
- this.width = collapsedWidth
370
- this.height = collapsedHeight
371
- // 设置文本位置
372
- this.setTextPosition()
373
- }
374
-
375
- // 展开操作
376
- private expand() {
377
- const { x, y, expandWidth, expandHeight, collapsedWidth, collapsedHeight } =
378
- this
379
- this.width = expandWidth
380
- this.height = expandHeight
381
-
382
- // 重新计算节点及文本的坐标
383
- this.x = x + this.width / 2 - collapsedWidth / 2
384
- this.y = y + this.height / 2 - collapsedHeight / 2
385
- // 设置文本位置
386
- this.setTextPosition()
387
- }
388
-
389
- createVirtualEdge(edgeConfig: EdgeConfig) {
390
- edgeConfig.pointsList = undefined
391
-
392
- const virtualEdge = this.graphModel.addEdge(edgeConfig)
393
- virtualEdge.virtual = true
394
-
395
- // TODO: 强制不保存 group 连线数据???-> 为什么注释掉?是不是不能强制设置为 null,会导致无法回填
396
- // virtualEdge.getData = () => null
397
- virtualEdge.text.editable = false
398
- virtualEdge.isCollapsedEdge = true // 这一行干啥的,TODO: 项目中没搜到应用的地方,是否应该移除
399
- }
400
-
401
- /**
402
- * 折叠分组的时候,需要处理分组自身的连线和分组内部子节点上的连线
403
- * 边的分类:
404
- * - 虚拟边:分组被收起时,标识分组本身与外部节点关系的边
405
- * - 真实边:分组本身或者分组内部节点与外部节点(非收起分组)关系的边
406
- * 如果一个分组,本身与外部节点有 M 条连线,且内部 N 个子节点与外部节点有连线,那么这个分组收起时会生成 M+N 条连线
407
- * 折叠分组时:
408
- * - 原有的虚拟边删除
409
- * - 创建一个虚拟边
410
- * - 真实边则隐藏
411
- * 展开分组时:
412
- * - 当前的虚拟边删除
413
- * - 如果外部节点是收起的分组,则创建虚拟边
414
- * - 如果外部节点是普通节点,则显示真实边
415
- *
416
- * @param collapse
417
- * @param edges
418
- */
419
- collapseEdge(collapse: boolean, edges: BaseEdgeModel[]) {
420
- const { graphModel } = this
421
- forEach(edges, (edge, idx) => {
422
- const edgeData = edge.getData()
423
- const { targetNodeId, sourceNodeId } = edgeData
424
-
425
- const edgeConfig: EdgeConfig = {
426
- ...edgeData,
427
- id: `${edgeData.id}__${idx}`,
428
- text: edgeData.text?.value,
429
- }
430
-
431
- if (edge.virtual) {
432
- graphModel.deleteEdgeById(edge.id)
433
- }
434
- // 考虑目标节点也属于分组的情况
435
- let targetNodeGroup =
436
- graphModel.dynamicGroup.getGroupByNodeId(targetNodeId)
437
- if (!targetNodeGroup) {
438
- targetNodeGroup = graphModel.getNodeModelById(targetNodeId)
439
- }
440
-
441
- // 考虑源节点也属于分组的情况
442
- let sourceNodeGroup =
443
- graphModel.dynamicGroup.getGroupByNodeId(sourceNodeId)
444
- if (!sourceNodeGroup) {
445
- sourceNodeGroup = graphModel.getNodeModelById(sourceNodeId)
446
- }
447
-
448
- // 折叠时,处理未被隐藏的边的逻辑 -> collapse
449
- if (collapse && edge.visible) {
450
- // 需要确认此分组节点是新连线的起点还是终点
451
- // 创建一个虚拟边,虚拟边相对于真实边,起点或者终点从一起分组节点的中心点开始 TODO:??? 确认什么意思
452
- // 如果需要被隐藏的边的起点在需要折叠的分组中,那么设置虚拟边的开始节点为此分组
453
- if (this.children.has(sourceNodeId) || this.id === sourceNodeId) {
454
- edgeConfig.startPoint = undefined
455
- edgeConfig.sourceNodeId = this.id
456
- } else {
457
- edgeConfig.endPoint = undefined
458
- edgeConfig.targetNodeId = this.id
459
- }
460
-
461
- // 如果边的起点和终点都在分组内部,则不创建新的虚拟边
462
- if (targetNodeGroup.id !== this.id || sourceNodeGroup.id !== this.id) {
463
- this.createVirtualEdge(edgeConfig)
464
- }
465
- edge.visible = false
466
- }
467
-
468
- // 展开时,处理被隐藏的边的逻辑 -> expand
469
- if (!collapse && !edge.visible) {
470
- // 展开分组时:判断真实边的起点和中带你是否有任一节点在已折叠分组中,如果不是,则显示真实边
471
- // 如果是,则修改这个边的对应目标节点 id 来创建虚拟边
472
- if (
473
- targetNodeGroup &&
474
- targetNodeGroup.isGroup &&
475
- targetNodeGroup.isCollapsed
476
- ) {
477
- edgeConfig.targetNodeId = targetNodeGroup.id
478
- edgeConfig.endPoint = undefined
479
- this.createVirtualEdge(edgeConfig)
480
- } else if (
481
- sourceNodeGroup &&
482
- sourceNodeGroup.isGroup &&
483
- sourceNodeGroup.isCollapsed
484
- ) {
485
- edgeConfig.sourceNodeId = sourceNodeGroup.id
486
- edgeConfig.startPoint = undefined
487
- this.createVirtualEdge(edgeConfig)
488
- } else {
489
- edge.visible = true
490
- }
491
- }
492
- })
493
- }
494
-
495
- /**
496
- * 是否允许此节点添加到该分组
497
- * TODO: 如何重写该方法呢?
498
- * @param _nodeData
499
- */
500
- // eslint-disable-next-line
501
- isAllowAppendIn(_nodeData: NodeData) {
502
- // TODO: 此处使用 this.properties.groupAddable 还是 this.groupAddable
503
- // this.groupAddable 是否存在更新不及时的问题
504
- return true
505
- }
506
-
507
- /**
508
- * 更新分组节点是否允许添加节点的属性
509
- * @param isAllow
510
- */
511
- setAllowAppendChild(isAllow: boolean) {
512
- // this.setProperty('groupAddable', isAllow)
513
- this.groupAddable = isAllow
514
- }
515
-
516
- /**
517
- * 添加节点至分组中
518
- * @param id
519
- */
520
- addChild(id: string) {
521
- this.children.add(id)
522
- const groupData = this.getData()
523
- this.graphModel.eventCenter.emit('group:add-node', {
524
- data: groupData,
525
- childId: id,
526
- })
527
- }
528
-
529
- /**
530
- * 从分组中移除某节点
531
- * @param id
532
- */
533
- removeChild(id: string) {
534
- this.children.delete(id)
535
- const groupData = this.getData()
536
- this.graphModel.eventCenter.emit('group:remove-node', { data: groupData })
537
- }
538
-
539
- /**
540
- * 当 groupA 被添加到 groupB 中时,将 groupB 及 groupB 所属的 group zIndex 减 1
541
- */
542
- toBack() {
543
- this.zIndex--
544
- }
545
-
546
- /**
547
- * 重写 Group 节点的 Resize Outline
548
- */
549
- // getResizeOutlineStyle(): LogicFlow.CommonTheme {
550
- // const style = super.getResizeOutlineStyle()
551
- // // style.stroke = 'none'
552
- // return style
553
- // }
554
-
555
- // TODO: 是否是设置 group 节点没有锚点,而不是设置成透明???
556
- getAnchorStyle() {
557
- const style = super.getAnchorStyle()
558
- style.stroke = 'transparent'
559
- style.fill = 'transparent'
560
- if (style.hover) {
561
- style.hover.fill = 'transparent'
562
- style.hover.stroke = 'transparent'
563
- }
564
- return style
565
- }
566
-
567
- /**
568
- * 设置分组节点 drop 区域的样式
569
- */
570
- getAddableOutlineStyle() {
571
- return {
572
- stroke: '#feb663',
573
- strokeWidth: 2,
574
- strokeDasharray: '4 4',
575
- fill: 'transparent',
576
- }
577
- }
578
- }
579
-
580
- export default DynamicGroupNodeModel