@logicflow/extension 2.2.0 → 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 (201) hide show
  1. package/README.md +16 -0
  2. package/dist/index.css +1 -1
  3. package/dist/index.min.js +1 -1
  4. package/dist/index.min.js.map +1 -1
  5. package/es/NodeResize/node/RectResize.d.ts +0 -6
  6. package/es/NodeResize/node/RectResize.js +2 -11
  7. package/es/bpmn-elements-adapter/json2xml.d.ts +2 -1
  8. package/es/bpmn-elements-adapter/json2xml.js +18 -4
  9. package/es/bpmn-elements-adapter/xml2json.js +2 -7
  10. package/es/components/control/index.d.ts +1 -0
  11. package/es/components/control/index.js +24 -11
  12. package/es/components/mini-map/index.js +1 -1
  13. package/es/dynamic-group/model.d.ts +2 -1
  14. package/es/dynamic-group/model.js +28 -11
  15. package/es/dynamic-group/node.js +1 -0
  16. package/es/index.css +1 -1
  17. package/es/index.d.ts +1 -0
  18. package/es/index.js +2 -0
  19. package/es/insert-node-in-polyline/index.js +11 -35
  20. package/es/materials/curved-edge/index.js +49 -21
  21. package/es/materials/group/GroupNode.d.ts +0 -6
  22. package/es/materials/group/GroupNode.js +1 -6
  23. package/es/pool/LaneModel.d.ts +90 -0
  24. package/es/pool/LaneModel.js +252 -0
  25. package/es/pool/LaneView.d.ts +40 -0
  26. package/es/pool/LaneView.js +202 -0
  27. package/es/pool/PoolModel.d.ts +120 -0
  28. package/es/pool/PoolModel.js +586 -0
  29. package/es/pool/PoolView.d.ts +17 -0
  30. package/es/pool/PoolView.js +76 -0
  31. package/es/pool/constant.d.ts +15 -0
  32. package/es/pool/constant.js +17 -0
  33. package/es/pool/index.d.ts +89 -0
  34. package/es/pool/index.js +524 -0
  35. package/es/pool/utils.d.ts +19 -0
  36. package/es/pool/utils.js +33 -0
  37. package/es/style/index.css +1 -1
  38. package/es/style/raw.d.ts +1 -1
  39. package/es/style/raw.js +1 -1
  40. package/es/tools/label/LabelOverlay.js +3 -3
  41. package/es/tools/label/mediumEditor.d.ts +1 -1
  42. package/es/tools/label/mediumEditor.js +89 -52
  43. package/es/tools/snapshot/index.d.ts +7 -3
  44. package/es/tools/snapshot/index.js +72 -77
  45. package/lib/NodeResize/node/RectResize.d.ts +0 -6
  46. package/lib/NodeResize/node/RectResize.js +1 -10
  47. package/lib/bpmn-elements-adapter/json2xml.d.ts +2 -1
  48. package/lib/bpmn-elements-adapter/json2xml.js +19 -4
  49. package/lib/bpmn-elements-adapter/xml2json.js +2 -7
  50. package/lib/components/control/index.d.ts +1 -0
  51. package/lib/components/control/index.js +24 -11
  52. package/lib/components/mini-map/index.js +1 -1
  53. package/lib/dynamic-group/model.d.ts +2 -1
  54. package/lib/dynamic-group/model.js +28 -11
  55. package/lib/dynamic-group/node.js +1 -0
  56. package/lib/index.css +1 -1
  57. package/lib/index.d.ts +1 -0
  58. package/lib/index.js +2 -0
  59. package/lib/insert-node-in-polyline/index.js +10 -34
  60. package/lib/materials/curved-edge/index.js +49 -21
  61. package/lib/materials/group/GroupNode.d.ts +0 -6
  62. package/lib/materials/group/GroupNode.js +1 -6
  63. package/lib/pool/LaneModel.d.ts +90 -0
  64. package/lib/pool/LaneModel.js +255 -0
  65. package/lib/pool/LaneView.d.ts +40 -0
  66. package/lib/pool/LaneView.js +205 -0
  67. package/lib/pool/PoolModel.d.ts +120 -0
  68. package/lib/pool/PoolModel.js +589 -0
  69. package/lib/pool/PoolView.d.ts +17 -0
  70. package/lib/pool/PoolView.js +79 -0
  71. package/lib/pool/constant.d.ts +15 -0
  72. package/lib/pool/constant.js +20 -0
  73. package/lib/pool/index.d.ts +89 -0
  74. package/lib/pool/index.js +527 -0
  75. package/lib/pool/utils.d.ts +19 -0
  76. package/lib/pool/utils.js +38 -0
  77. package/lib/style/index.css +1 -1
  78. package/lib/style/raw.d.ts +1 -1
  79. package/lib/style/raw.js +1 -1
  80. package/lib/tools/label/LabelOverlay.js +2 -2
  81. package/lib/tools/label/mediumEditor.d.ts +1 -1
  82. package/lib/tools/label/mediumEditor.js +91 -53
  83. package/lib/tools/snapshot/index.d.ts +7 -3
  84. package/lib/tools/snapshot/index.js +72 -77
  85. package/package.json +10 -7
  86. package/.turbo/turbo-build.log +0 -38
  87. package/CHANGELOG.md +0 -1766
  88. package/__test__/bpmn-adapter.test.js +0 -227
  89. package/es/materials/curved-edge/__test__/curved-edge.test.d.ts +0 -1
  90. package/es/materials/curved-edge/__test__/curved-edge.test.js +0 -18
  91. package/jest.config.js +0 -198
  92. package/lib/materials/curved-edge/__test__/curved-edge.test.d.ts +0 -1
  93. package/lib/materials/curved-edge/__test__/curved-edge.test.js +0 -20
  94. package/rollup.config.js +0 -52
  95. package/src/NodeResize/BasicShape/Ellipse.tsx +0 -22
  96. package/src/NodeResize/BasicShape/Polygon.tsx +0 -24
  97. package/src/NodeResize/BasicShape/Rect.tsx +0 -44
  98. package/src/NodeResize/control/Control.tsx +0 -537
  99. package/src/NodeResize/control/ControlGroup.tsx +0 -76
  100. package/src/NodeResize/control/Util.ts +0 -206
  101. package/src/NodeResize/index.ts +0 -26
  102. package/src/NodeResize/node/DiamondResize.tsx +0 -149
  103. package/src/NodeResize/node/EllipseResize.tsx +0 -140
  104. package/src/NodeResize/node/HtmlResize.tsx +0 -125
  105. package/src/NodeResize/node/RectResize.tsx +0 -146
  106. package/src/NodeResize/node/index.ts +0 -4
  107. package/src/bpmn/constant.ts +0 -56
  108. package/src/bpmn/events/EndEvent.ts +0 -73
  109. package/src/bpmn/events/StartEvent.ts +0 -52
  110. package/src/bpmn/events/index.ts +0 -2
  111. package/src/bpmn/flow/SequenceFlow.ts +0 -25
  112. package/src/bpmn/flow/index.ts +0 -1
  113. package/src/bpmn/gateways/ExclusiveGateway.ts +0 -71
  114. package/src/bpmn/gateways/index.ts +0 -1
  115. package/src/bpmn/getBpmnId.ts +0 -31
  116. package/src/bpmn/index.ts +0 -60
  117. package/src/bpmn/tasks/ServiceTask.ts +0 -63
  118. package/src/bpmn/tasks/UserTask.ts +0 -64
  119. package/src/bpmn/tasks/index.ts +0 -2
  120. package/src/bpmn-adapter/bpmnIds.ts +0 -31
  121. package/src/bpmn-adapter/index.ts +0 -835
  122. package/src/bpmn-adapter/json2xml.ts +0 -127
  123. package/src/bpmn-adapter/xml2json.ts +0 -544
  124. package/src/bpmn-elements/README.md +0 -223
  125. package/src/bpmn-elements/__tests__/definition.test.js +0 -72
  126. package/src/bpmn-elements/index.d.ts +0 -26
  127. package/src/bpmn-elements/index.ts +0 -107
  128. package/src/bpmn-elements/presets/Event/EndEventFactory.ts +0 -114
  129. package/src/bpmn-elements/presets/Event/IntermediateCatchEvent.ts +0 -108
  130. package/src/bpmn-elements/presets/Event/IntermediateThrowEvent.ts +0 -109
  131. package/src/bpmn-elements/presets/Event/StartEventFactory.ts +0 -114
  132. package/src/bpmn-elements/presets/Event/boundaryEventFactory.ts +0 -117
  133. package/src/bpmn-elements/presets/Event/index.ts +0 -14
  134. package/src/bpmn-elements/presets/Flow/flow.d.ts +0 -6
  135. package/src/bpmn-elements/presets/Flow/index.ts +0 -8
  136. package/src/bpmn-elements/presets/Flow/manhattan.ts +0 -691
  137. package/src/bpmn-elements/presets/Flow/sequenceFlow.ts +0 -65
  138. package/src/bpmn-elements/presets/Gateway/gateway.ts +0 -107
  139. package/src/bpmn-elements/presets/Gateway/index.ts +0 -23
  140. package/src/bpmn-elements/presets/Pool/Lane.ts +0 -211
  141. package/src/bpmn-elements/presets/Pool/Pool.ts +0 -284
  142. package/src/bpmn-elements/presets/Pool/index.ts +0 -89
  143. package/src/bpmn-elements/presets/Task/index.ts +0 -122
  144. package/src/bpmn-elements/presets/Task/subProcess.ts +0 -189
  145. package/src/bpmn-elements/presets/Task/task.ts +0 -193
  146. package/src/bpmn-elements/presets/icons.ts +0 -155
  147. package/src/bpmn-elements/utils.ts +0 -52
  148. package/src/bpmn-elements-adapter/README.md +0 -293
  149. package/src/bpmn-elements-adapter/__tests__/adapter_in.test.js +0 -528
  150. package/src/bpmn-elements-adapter/__tests__/adapter_out.test.js +0 -569
  151. package/src/bpmn-elements-adapter/constant.ts +0 -76
  152. package/src/bpmn-elements-adapter/index.ts +0 -1134
  153. package/src/bpmn-elements-adapter/json2xml.ts +0 -91
  154. package/src/bpmn-elements-adapter/xml2json.ts +0 -548
  155. package/src/components/context-menu/index.ts +0 -253
  156. package/src/components/control/index.ts +0 -141
  157. package/src/components/dnd-panel/index.ts +0 -137
  158. package/src/components/highlight/index.ts +0 -227
  159. package/src/components/menu/index.ts +0 -748
  160. package/src/components/mini-map/index.ts +0 -686
  161. package/src/components/selection-select/index.ts +0 -387
  162. package/src/dynamic-group/index.ts +0 -775
  163. package/src/dynamic-group/model.ts +0 -562
  164. package/src/dynamic-group/node.ts +0 -288
  165. package/src/dynamic-group/utils.ts +0 -46
  166. package/src/index.less +0 -1
  167. package/src/index.ts +0 -45
  168. package/src/insert-node-in-polyline/edge.ts +0 -175
  169. package/src/insert-node-in-polyline/index.ts +0 -187
  170. package/src/materials/curved-edge/__test__/curved-edge.test.ts +0 -46
  171. package/src/materials/curved-edge/index.ts +0 -185
  172. package/src/materials/group/GroupNode.ts +0 -442
  173. package/src/materials/group/index.ts +0 -542
  174. package/src/materials/node-selection/index.ts +0 -380
  175. package/src/mindmap/fakerRoot.ts +0 -19
  176. package/src/mindmap/index.ts +0 -328
  177. package/src/mindmap/markContent.ts +0 -81
  178. package/src/mindmap/markContentOption.ts +0 -81
  179. package/src/mindmap/markEntity.ts +0 -82
  180. package/src/mindmap/markRoot.ts +0 -83
  181. package/src/mindmap/theme.ts +0 -11
  182. package/src/rect-label-node/RectLabelNodeView.ts +0 -33
  183. package/src/rect-label-node/index.ts +0 -15
  184. package/src/style/index.less +0 -342
  185. package/src/style/raw.ts +0 -295
  186. package/src/tools/auto-layout/index.ts +0 -282
  187. package/src/tools/flow-path/index.ts +0 -233
  188. package/src/tools/label/Label.tsx +0 -357
  189. package/src/tools/label/LabelModel.ts +0 -83
  190. package/src/tools/label/LabelOverlay.tsx +0 -158
  191. package/src/tools/label/algorithm.ts +0 -42
  192. package/src/tools/label/index.ts +0 -479
  193. package/src/tools/label/mediumEditor.ts +0 -94
  194. package/src/tools/label/utils.ts +0 -395
  195. package/src/tools/proximity-connect/index.ts +0 -435
  196. package/src/tools/snapshot/README.md +0 -145
  197. package/src/tools/snapshot/index.ts +0 -718
  198. package/src/tools/snapshot/utils.ts +0 -163
  199. package/src/turbo-adapter/index.ts +0 -212
  200. package/stats.html +0 -4842
  201. package/tsconfig.json +0 -18
@@ -1,442 +0,0 @@
1
- import LogicFlow, { h, BaseEdgeModel } from '@logicflow/core'
2
- import { isArray } from 'lodash-es'
3
- import { RectResizeModel, RectResizeView } from '../../NodeResize'
4
-
5
- import Point = LogicFlow.Point
6
- import NodeData = LogicFlow.NodeData
7
- import EdgeConfig = LogicFlow.EdgeConfig
8
- import GraphElements = LogicFlow.GraphElements
9
-
10
- const defaultWidth = 500
11
- const defaultHeight = 300
12
- const DEFAULT_BOTTOM_Z_INDEX = -10000
13
-
14
- export class GroupNodeModel extends RectResizeModel {
15
- readonly isGroup = true
16
- /**
17
- * 此分组的子节点Id
18
- */
19
- children!: Set<string>
20
- /**
21
- * 其子节点是否被禁止通过拖拽移出分组。 默认false,允许拖拽移除分组。
22
- */
23
- isRestrict?: boolean
24
- /**
25
- * 分组节点是否允许折叠
26
- */
27
- foldable?: boolean
28
- /**
29
- * 折叠后的宽度
30
- */
31
- foldedWidth!: number
32
- /**
33
- * 折叠后的高度
34
- */
35
- foldedHeight!: number
36
- /**
37
- * 分组折叠状态
38
- */
39
- isFolded: boolean = false
40
- unfoldedWidth = defaultWidth
41
- unfoldedHeight = defaultHeight
42
- /**
43
- * children元素上一次折叠的状态缓存
44
- */
45
- childrenLastFoldStatus: Record<string, boolean> = {}
46
-
47
- initNodeData(data: any): void {
48
- super.initNodeData(data)
49
- let children: any = []
50
- if (isArray(data.children)) {
51
- children = data.children
52
- }
53
- // 初始化组的子节点
54
- this.children = new Set(children)
55
- this.width = defaultWidth
56
- this.height = defaultHeight
57
- this.foldedWidth = 80
58
- this.foldedHeight = 60
59
- this.zIndex = DEFAULT_BOTTOM_Z_INDEX
60
- this.radius = 0
61
-
62
- this.text.editable = false
63
- this.text.draggable = false
64
-
65
- this.isRestrict = false
66
- this.resizable = false
67
- this.autoToFront = false
68
- this.foldable = false
69
- if (this.properties.isFolded === undefined) {
70
- this.properties.isFolded = false
71
- }
72
- this.isFolded = !!this.properties.isFolded
73
- // fixme: 虽然默认保存的分组不会收起,但是如果重写保存数据分组了,
74
- // 此处代码会导致多一个history记录
75
- setTimeout(() => {
76
- this.isFolded && this.foldGroup(this.isFolded)
77
- })
78
- // this.foldGroup(this.isFolded);
79
- }
80
-
81
- getResizeOutlineStyle() {
82
- const style = super.getResizeOutlineStyle()
83
- style.stroke = 'none'
84
- return style
85
- }
86
-
87
- /**
88
- * 折叠分组
89
- * 1. 折叠分组的宽高
90
- * 2. 处理分组子节点
91
- * 3. 处理连线
92
- */
93
- foldGroup(isFolded: boolean) {
94
- if (isFolded === this.isFolded) {
95
- // 防止多次调用同样的状态设置
96
- // 如果this.isFolded=false,同时触发foldGroup(false),会导致下面的childrenLastFoldStatus状态错乱
97
- return
98
- }
99
- this.setProperty('isFolded', isFolded)
100
- this.isFolded = isFolded
101
- // step 1
102
- if (isFolded) {
103
- this.x = this.x - this.width / 2 + this.foldedWidth / 2
104
- this.y = this.y - this.height / 2 + this.foldedHeight / 2
105
- this.unfoldedWidth = this.width
106
- this.unfoldedHeight = this.height
107
- this.width = this.foldedWidth
108
- this.height = this.foldedHeight
109
- } else {
110
- this.width = this.unfoldedWidth
111
- this.height = this.unfoldedHeight
112
- this.x = this.x + this.width / 2 - this.foldedWidth / 2
113
- this.y = this.y + this.height / 2 - this.foldedHeight / 2
114
- }
115
- // step 2
116
- let allEdges = [...this.incoming.edges, ...this.outgoing.edges]
117
- this.children.forEach((elementId) => {
118
- const nodeModel = this.graphModel.getElement(elementId)
119
- if (nodeModel) {
120
- const foldStatus = nodeModel.isFolded
121
- // FIX: https://github.com/didi/LogicFlow/issues/1007
122
- if (nodeModel.isGroup && !nodeModel.isFolded) {
123
- // 正常情况下,parent折叠后,children应该折叠
124
- // 因此当parent准备展开时,children的值目前肯定是折叠状态,也就是nodeModel.isFolded=true,这个代码块不会触发
125
- // 只有当parent准备折叠时,children目前状态才有可能是展开,
126
- // 即nodeModel.isFolded=false,这个代码块触发,此时isFolded=true,触发children也进行折叠
127
- ;(nodeModel as GroupNodeModel).foldGroup(isFolded)
128
- }
129
-
130
- if (nodeModel.isGroup && !isFolded) {
131
- // 当parent准备展开时,children的值应该恢复到折叠前的状态
132
- const lastFoldStatus = this.childrenLastFoldStatus[elementId]
133
- if (
134
- lastFoldStatus !== undefined &&
135
- lastFoldStatus !== nodeModel.isFolded
136
- ) {
137
- // https://github.com/didi/LogicFlow/issues/1145
138
- // 当parent准备展开时,children的值肯定是折叠,也就是nodeModel.isFolded=true
139
- // 当parent准备展开时,如果children之前的状态是展开,则恢复展开状态
140
- ;(nodeModel as GroupNodeModel).foldGroup(lastFoldStatus)
141
- }
142
- }
143
- // 存储parent触发children改变折叠状态前的状态
144
- this.childrenLastFoldStatus[elementId] = !!foldStatus
145
- nodeModel.visible = !isFolded
146
-
147
- const incomingEdges = (nodeModel.incoming as GraphElements).edges
148
- const outgoingEdges = (nodeModel.outgoing as GraphElements).edges
149
-
150
- allEdges = [...allEdges, ...incomingEdges, ...outgoingEdges]
151
- }
152
- })
153
- // step 3
154
- this.foldEdge(isFolded, allEdges)
155
- }
156
-
157
- getAnchorStyle(anchorInfo?: Point) {
158
- const style = super.getAnchorStyle(anchorInfo)
159
- style.stroke = 'transparent'
160
- style.fill = 'transparent'
161
- style.hover!.fill = 'transparent' // TODO: 确认这种情况如何解决,style.hover 为 undefined 时该如何处理
162
- style.hover!.stroke = 'transparent'
163
- return style
164
- }
165
-
166
- /**
167
- * 折叠分组的时候,处理分组自身的连线和分组内部子节点上的连线
168
- * 边的分类:
169
- * - 虚拟边:分组被收起时,表示分组本身与外部节点关系的边。
170
- * - 真实边:分组本身或者分组内部节点与外部节点节点(非收起分组)关系的边。
171
- * 如果一个分组,本身与外部节点有M条连线,且内部N个子节点与外部节点有连线,那么这个分组收起时会生成M+N条连线。
172
- * 折叠分组时:
173
- * - 原有的虚拟边删除;
174
- * - 创建一个虚拟边;
175
- * - 真实边则隐藏;
176
- * 展开分组是:
177
- * - 原有的虚拟边删除;
178
- * - 如果目外部点是收起的分组,则创建虚拟边;
179
- * - 如果外部节点是普通节点,则显示真实边;
180
- */
181
- foldEdge(isFolded: boolean, allEdges: BaseEdgeModel[]) {
182
- allEdges.forEach((edgeModel, index) => {
183
- const {
184
- id,
185
- sourceNodeId,
186
- targetNodeId,
187
- startPoint,
188
- endPoint,
189
- type,
190
- text,
191
- } = edgeModel
192
- const properties = edgeModel.getProperties()
193
- const data: EdgeConfig = {
194
- id: `${id}__${index}`,
195
- sourceNodeId,
196
- targetNodeId,
197
- startPoint,
198
- endPoint,
199
- type,
200
- properties,
201
- text: text?.value,
202
- }
203
- if (edgeModel.virtual) {
204
- this.graphModel.deleteEdgeById(edgeModel.id)
205
- }
206
- let targetNodeIdGroup = this.graphModel.group.getNodeGroup(targetNodeId)
207
- // 考虑目标节点本来就是分组的情况
208
- if (!targetNodeIdGroup) {
209
- targetNodeIdGroup = this.graphModel.getNodeModelById(targetNodeId)
210
- }
211
- let sourceNodeIdGroup = this.graphModel.group.getNodeGroup(sourceNodeId)
212
- if (!sourceNodeIdGroup) {
213
- sourceNodeIdGroup = this.graphModel.getNodeModelById(sourceNodeId)
214
- }
215
- // 折叠时,处理未被隐藏的边的逻辑
216
- if (isFolded && edgeModel.visible !== false) {
217
- // 需要确认此分组节点是新连线的起点还是终点
218
- // 创建一个虚拟边,虚拟边相对真实边,起点或者终点从一起分组内部的节点成为了分组,
219
- // 如果需要被隐藏的边的起点在需要折叠的分组中,那么设置虚拟边的开始节点为此分组
220
- if (this.children.has(sourceNodeId) || this.id === sourceNodeId) {
221
- data.startPoint = undefined
222
- data.sourceNodeId = this.id
223
- } else {
224
- data.endPoint = undefined
225
- data.targetNodeId = this.id
226
- }
227
- // 如果边的起点和终点都在分组内部,则不创建新的虚拟边
228
- if (
229
- targetNodeIdGroup.id !== this.id ||
230
- sourceNodeIdGroup.id !== this.id
231
- ) {
232
- this.createVirtualEdge(data)
233
- }
234
- edgeModel.visible = false
235
- }
236
- // 展开时,处理被隐藏的边的逻辑
237
- if (!isFolded && edgeModel.visible === false) {
238
- // 展开分组时:判断真实边的起点和终点是否有任一节点在已折叠分组中,如果不是,则显示真实边。如果是,这修改这个边的对应目标节点id来创建虚拟边。
239
- if (
240
- targetNodeIdGroup &&
241
- targetNodeIdGroup.isGroup &&
242
- targetNodeIdGroup.isFolded
243
- ) {
244
- data.targetNodeId = targetNodeIdGroup.id
245
- data.endPoint = undefined
246
- this.createVirtualEdge(data)
247
- } else if (
248
- sourceNodeIdGroup &&
249
- sourceNodeIdGroup.isGroup &&
250
- sourceNodeIdGroup.isFolded
251
- ) {
252
- data.sourceNodeId = sourceNodeIdGroup.id
253
- data.startPoint = undefined
254
- this.createVirtualEdge(data)
255
- } else {
256
- edgeModel.visible = true
257
- }
258
- }
259
- })
260
- }
261
-
262
- createVirtualEdge(edgeData) {
263
- edgeData.pointsList = undefined
264
- const model = this.graphModel.addEdge(edgeData)
265
- model.virtual = true
266
- // 强制不保存group连线数据
267
- // model.getData = () => null;
268
- model.text.editable = false
269
- model.isFoldedEdge = true
270
- }
271
-
272
- isInRange({ minX, minY, maxX, maxY }) {
273
- return (
274
- minX >= this.x - this.width / 2 &&
275
- maxX <= this.x + this.width / 2 &&
276
- minY >= this.y - this.height / 2 &&
277
- maxY <= this.y + this.height / 2
278
- )
279
- }
280
-
281
- isAllowMoveTo({ minX, minY, maxX, maxY }) {
282
- return {
283
- x: minX >= this.x - this.width / 2 && maxX <= this.x + this.width / 2,
284
- y: minY >= this.y - this.height / 2 && maxY <= this.y + this.height / 2,
285
- }
286
- }
287
-
288
- setAllowAppendChild(isAllow) {
289
- this.setProperty('groupAddable', isAllow)
290
- }
291
-
292
- /**
293
- * 添加分组子节点
294
- * @param id 节点id
295
- */
296
- addChild(id: string) {
297
- this.children.add(id)
298
- this.graphModel.eventCenter.emit('group:add-node', { data: this.getData() })
299
- }
300
-
301
- /**
302
- * 删除分组子节点
303
- * @param id 节点id
304
- */
305
- removeChild(id: string) {
306
- this.children.delete(id)
307
- this.graphModel.eventCenter.emit('group:remove-node', {
308
- data: this.getData(),
309
- })
310
- }
311
-
312
- getAddableOutlineStyle() {
313
- return {
314
- stroke: '#FEB663',
315
- strokeWidth: 2,
316
- strokeDasharray: '4 4',
317
- fill: 'transparent',
318
- }
319
- }
320
-
321
- getData() {
322
- const data = super.getData()
323
- data.children = []
324
- this.children.forEach((childId) => {
325
- const model = this.graphModel.getNodeModelById(childId)
326
- if (model && !model.virtual) {
327
- ;(data.children as string[]).push(childId)
328
- }
329
- })
330
- const { properties } = data
331
- delete properties?.groupAddable
332
- delete properties?.isFolded
333
- return data
334
- }
335
-
336
- getHistoryData() {
337
- const data = super.getData()
338
- data.children = [...this.children]
339
- data.isGroup = true
340
- const { properties } = data
341
- delete properties?.groupAddable
342
- if (properties?.isFolded) {
343
- // 如果分组被折叠
344
- data.x = data.x + this.unfoldedWidth / 2 - this.foldedWidth / 2
345
- data.y = data.y + this.unfoldedHeight / 2 - this.foldedHeight / 2
346
- }
347
- return data
348
- }
349
-
350
- /**
351
- * 是否允许此节点添加到此分组中
352
- */
353
- isAllowAppendIn(_nodeData: NodeData) {
354
- console.info('_nodeData', _nodeData)
355
- return true
356
- }
357
-
358
- /**
359
- * 当groupA被添加到groupB中时,将groupB及groupB所属的group的zIndex减1
360
- */
361
- toBack() {
362
- this.zIndex--
363
- }
364
- }
365
-
366
- export class GroupNode extends RectResizeView {
367
- getControlGroup(): h.JSX.Element | null {
368
- const { resizable, properties } = this.props.model
369
- return resizable && !properties.isFolded ? super.getControlGroup() : null
370
- }
371
-
372
- getAddableShape(): h.JSX.Element | null {
373
- const { width, height, x, y, radius, properties, getAddableOutlineStyle } =
374
- this.props.model as GroupNodeModel
375
- if (!properties.groupAddable) return null
376
- const { strokeWidth = 0 } = this.props.model.getNodeStyle()
377
-
378
- const style: Record<string, any> = getAddableOutlineStyle()
379
- const newWidth = width + strokeWidth + 8
380
- const newHeight = height + strokeWidth + 8
381
-
382
- return h('rect', {
383
- ...style,
384
- width: newWidth,
385
- height: newHeight,
386
- x: x - newWidth / 2,
387
- y: y - newHeight / 2,
388
- rx: radius,
389
- ry: radius,
390
- })
391
- }
392
-
393
- getFoldIcon(): h.JSX.Element | null {
394
- const { model } = this.props
395
- const foldX = model.x - model.width / 2 + 5
396
- const foldY = model.y - model.height / 2 + 5
397
- if (!model.foldable) return null
398
- const iconIcon = h('path', {
399
- fill: 'none',
400
- stroke: '#818281',
401
- strokeWidth: 2,
402
- 'pointer-events': 'none',
403
- d: model.properties.isFolded
404
- ? `M ${foldX + 3},${foldY + 6} ${foldX + 11},${foldY + 6} M${
405
- foldX + 7
406
- },${foldY + 2} ${foldX + 7},${foldY + 10}`
407
- : `M ${foldX + 3},${foldY + 6} ${foldX + 11},${foldY + 6} `,
408
- })
409
- return h('g', {}, [
410
- h('rect', {
411
- height: 12,
412
- width: 14,
413
- rx: 2,
414
- ry: 2,
415
- strokeWidth: 1,
416
- fill: '#F4F5F6',
417
- stroke: '#CECECE',
418
- cursor: 'pointer',
419
- x: model.x - model.width / 2 + 5,
420
- y: model.y - model.height / 2 + 5,
421
- onClick: () => {
422
- ;(model as GroupNodeModel).foldGroup(!model.properties.isFolded)
423
- },
424
- }),
425
- iconIcon,
426
- ])
427
- }
428
-
429
- getResizeShape(): h.JSX.Element {
430
- return h('g', {}, [
431
- this.getAddableShape(),
432
- super.getResizeShape(),
433
- this.getFoldIcon(),
434
- ])
435
- }
436
- }
437
-
438
- export default {
439
- type: 'group',
440
- view: GroupNode,
441
- model: GroupNodeModel,
442
- }