@logicflow/extension 2.0.13 → 2.0.15

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 (38) hide show
  1. package/.turbo/turbo-build.log +10 -7
  2. package/CHANGELOG.md +21 -0
  3. package/dist/index.css +1 -1
  4. package/dist/index.min.js +1 -1
  5. package/dist/index.min.js.map +1 -1
  6. package/es/components/selection-select/index.js +8 -6
  7. package/es/dynamic-group/index.d.ts +1 -0
  8. package/es/dynamic-group/index.js +9 -5
  9. package/es/dynamic-group/model.d.ts +6 -0
  10. package/es/dynamic-group/model.js +24 -1
  11. package/es/dynamic-group/node.d.ts +2 -1
  12. package/es/dynamic-group/node.js +15 -14
  13. package/es/index.css +1 -1
  14. package/es/style/index.css +1 -1
  15. package/es/tools/label/Label.d.ts +1 -0
  16. package/es/tools/label/Label.js +8 -1
  17. package/es/tools/label/index.js +4 -1
  18. package/lib/components/selection-select/index.js +8 -6
  19. package/lib/dynamic-group/index.d.ts +1 -0
  20. package/lib/dynamic-group/index.js +9 -5
  21. package/lib/dynamic-group/model.d.ts +6 -0
  22. package/lib/dynamic-group/model.js +24 -1
  23. package/lib/dynamic-group/node.d.ts +2 -1
  24. package/lib/dynamic-group/node.js +15 -14
  25. package/lib/index.css +1 -1
  26. package/lib/style/index.css +1 -1
  27. package/lib/tools/label/Label.d.ts +1 -0
  28. package/lib/tools/label/Label.js +8 -1
  29. package/lib/tools/label/index.js +4 -1
  30. package/package.json +3 -3
  31. package/src/components/selection-select/index.ts +8 -6
  32. package/src/dynamic-group/index.ts +12 -2
  33. package/src/dynamic-group/model.ts +33 -1
  34. package/src/dynamic-group/node.ts +21 -17
  35. package/src/style/index.less +5 -0
  36. package/src/tools/label/Label.tsx +9 -0
  37. package/src/tools/label/index.ts +6 -2
  38. package/stats.html +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logicflow/extension",
3
- "version": "2.0.13",
3
+ "version": "2.0.15",
4
4
  "description": "LogicFlow Extensions",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -20,7 +20,7 @@
20
20
  "author": "Logicflow-Team",
21
21
  "license": "Apache-2.0",
22
22
  "peerDependencies": {
23
- "@logicflow/core": "2.0.9"
23
+ "@logicflow/core": "2.0.11"
24
24
  },
25
25
  "dependencies": {
26
26
  "@antv/hierarchy": "^0.6.11",
@@ -31,7 +31,7 @@
31
31
  "preact": "^10.17.1",
32
32
  "rangy": "^1.3.1",
33
33
  "vanilla-picker": "^2.12.3",
34
- "@logicflow/core": "2.0.9"
34
+ "@logicflow/core": "2.0.11"
35
35
  },
36
36
  "devDependencies": {
37
37
  "less": "^4.1.1",
@@ -166,18 +166,20 @@ export class SelectionSelect {
166
166
  true,
167
167
  )
168
168
  const { dynamicGroup, group } = this.lf.graphModel
169
+ const nonGroupedElements: typeof elements = []
169
170
  elements.forEach((element) => {
170
171
  // 如果节点属于分组,则不选中节点,此处兼容旧版 Group 插件
171
- if (!group || !group.getNodeGroup(element.id)) {
172
- this.lf.selectElementById(element.id, true)
172
+ if (group && group.getNodeGroup(element.id)) {
173
+ return
173
174
  }
174
- // 如果节点属于动态分组,则不不选中节点
175
- if (!dynamicGroup || !dynamicGroup.getGroupByNodeId(element.id)) {
176
- this.lf.selectElementById(element.id, true)
175
+ if (dynamicGroup && dynamicGroup.getGroupByNodeId(element.id)) {
176
+ return
177
177
  }
178
+ this.lf.selectElementById(element.id, true)
179
+ nonGroupedElements.push(element)
178
180
  })
179
181
  this.lf.emit('selection:selected', {
180
- elements,
182
+ elements: nonGroupedElements,
181
183
  leftTopPoint: lt,
182
184
  rightBottomPoint: rb,
183
185
  })
@@ -229,7 +229,8 @@ export class DynamicGroup {
229
229
  console.log('isAllowAppendIn', isAllowAppendIn)
230
230
  if (isAllowAppendIn) {
231
231
  group.addChild(node.id)
232
- this.nodeGroupMap.set(node.id, group.id)
232
+ // 建立节点与 group 的映射关系放在了 group.addChild 触发的事件中,与直接调用 addChild 的行为保持一致
233
+ // TODO 下面这个是干什么的,是否需要一起移动到事件的逻辑中?
233
234
  group.setAllowAppendChild(true)
234
235
  } else {
235
236
  // 抛出不允许插入的事件
@@ -242,6 +243,14 @@ export class DynamicGroup {
242
243
  }
243
244
  }
244
245
 
246
+ onGroupAddNode = ({
247
+ data: groupData,
248
+ childId,
249
+ }: CallbackArgs<'group:add-node'>) => {
250
+ console.log('group:add-node', groupData)
251
+ this.nodeGroupMap.set(childId, groupData.id)
252
+ }
253
+
245
254
  removeNodeFromGroup = ({
246
255
  data: node,
247
256
  model,
@@ -666,7 +675,7 @@ export class DynamicGroup {
666
675
 
667
676
  lf.on('graph:updated', ({ data }) => console.log('data', data))
668
677
 
669
- lf.on('group:add-node', ({ data }) => console.log('group:add-node', data))
678
+ lf.on('group:add-node', this.onGroupAddNode)
670
679
 
671
680
  // https://github.com/didi/LogicFlow/issues/1346
672
681
  // 重写 addElements() 方法,在 addElements() 原有基础上增加对 group 内部所有 nodes 和 edges 的复制功能
@@ -733,6 +742,7 @@ export class DynamicGroup {
733
742
  this.lf.off('node:click', this.onNodeSelect)
734
743
  this.lf.off('node:mousemove', this.onNodeMove)
735
744
  this.lf.off('graph:rendered', this.onGraphRendered)
745
+ this.lf.off('group:add-node', this.onGroupAddNode)
736
746
 
737
747
  // 还原 lf.addElements 方法?
738
748
  // 移除 graphModel 上重写的 addNodeMoveRules 方法?
@@ -181,6 +181,35 @@ export class DynamicGroupNodeModel extends RectNodeModel<IGroupNodeProperties> {
181
181
  return data
182
182
  }
183
183
 
184
+ /**
185
+ * 获取分组内的节点
186
+ * @param groupModel
187
+ */
188
+ getNodesInGroup(groupModel: DynamicGroupNodeModel): string[] {
189
+ const nodeIds: string[] = []
190
+ if (groupModel.isGroup) {
191
+ forEach(Array.from(groupModel.children), (nodeId: string) => {
192
+ nodeIds.push(nodeId)
193
+ })
194
+ }
195
+ return nodeIds
196
+ }
197
+
198
+ getMoveDistance(
199
+ deltaX: number,
200
+ deltaY: number,
201
+ isIgnoreRule = false,
202
+ ): [number, number] {
203
+ const [moveDeltaX, moveDeltaY] = super.getMoveDistance(
204
+ deltaX,
205
+ deltaY,
206
+ isIgnoreRule,
207
+ )
208
+ const nodeIds = this.getNodesInGroup(this)
209
+ this.graphModel.moveNodes(nodeIds, deltaX, deltaY, isIgnoreRule)
210
+ return [moveDeltaX, moveDeltaY]
211
+ }
212
+
184
213
  /**
185
214
  * 重写 getHistoryData 方法
186
215
  */
@@ -463,7 +492,10 @@ export class DynamicGroupNodeModel extends RectNodeModel<IGroupNodeProperties> {
463
492
  addChild(id: string) {
464
493
  this.children.add(id)
465
494
  const groupData = this.getData()
466
- this.graphModel.eventCenter.emit('group:add-node', { data: groupData })
495
+ this.graphModel.eventCenter.emit('group:add-node', {
496
+ data: groupData,
497
+ childId: id,
498
+ })
467
499
  }
468
500
 
469
501
  /**
@@ -106,24 +106,27 @@ export class DynamicGroupNode<
106
106
  }
107
107
  }
108
108
 
109
- onNodeMouseMove = ({
110
- deltaX,
111
- deltaY,
112
- data,
113
- }: Omit<CallbackArgs<'node:mousemove'>, 'e' | 'position'>) => {
114
- const { model: curGroup, graphModel } = this.props
115
- const { transformModel } = graphModel
116
- const { SCALE_X, SCALE_Y } = transformModel
117
- if (data.id === curGroup.id) {
118
- const nodeIds = this.getNodesInGroup(curGroup, graphModel)
119
- // https://github.com/didi/LogicFlow/issues/1914
120
- // 当调用lf.fitView()时,会改变整体的SCALE_X和SCALE_Y
121
- // 由于group的mousemove是在drag.ts的this.onDragging()处理的,在onDragging()里面进行SCALE的处理
122
- // 而"node:mousemove"emit出来跟onDragging()是同时的,也就是emit出来的数据是没有经过SCALE处理的坐标
123
- // 因此这里需要增加SCALE的处理
124
- graphModel.moveNodes(nodeIds, deltaX / SCALE_X, deltaY / SCALE_Y, true)
109
+ onNodeMouseMove = () =>
110
+ // {
111
+ // deltaX,
112
+ // deltaY,
113
+ // data,
114
+ // }: Omit<CallbackArgs<'node:mousemove'>, 'e' | 'position'>
115
+ {
116
+ // console.log(data,deltaX,deltaY,'111')
117
+ // const { model: curGroup, graphModel } = this.props
118
+ // const { transformModel } = graphModel
119
+ // const { SCALE_X, SCALE_Y } = transformModel
120
+ // if (data.id === curGroup.id) {
121
+ // const nodeIds = this.getNodesInGroup(curGroup, graphModel)
122
+ // // https://github.com/didi/LogicFlow/issues/1914
123
+ // // 当调用lf.fitView()时,会改变整体的SCALE_X和SCALE_Y
124
+ // // 由于group的mousemove是在drag.ts的this.onDragging()处理的,在onDragging()里面进行SCALE的处理
125
+ // // 而"node:mousemove"emit出来跟onDragging()是同时的,也就是emit出来的数据是没有经过SCALE处理的坐标
126
+ // // 因此这里需要增加SCALE的处理
127
+ // graphModel.moveNodes(nodeIds, deltaX / SCALE_X, deltaY / SCALE_Y, true)
128
+ // }
125
129
  }
126
- }
127
130
 
128
131
  graphRendered = () => {
129
132
  const { model } = this.props
@@ -169,6 +172,7 @@ export class DynamicGroupNode<
169
172
  /**
170
173
  * 获取分组内的节点
171
174
  * @param groupModel
175
+ * @param graphModel
172
176
  */
173
177
  getNodesInGroup(
174
178
  groupModel: DynamicGroupNodeModel,
@@ -221,6 +221,11 @@
221
221
  border: 1px solid #93a3b4;
222
222
  }
223
223
 
224
+ .lf-mini-map .lf-graph {
225
+ width: 100% !important;
226
+ height: 100% !important;
227
+ }
228
+
224
229
  .lf-mini-map-graph {
225
230
  position: relative;
226
231
  overflow: hidden;
@@ -182,6 +182,14 @@ export class Label extends Component<ILabelProps, ILabelState> {
182
182
  })
183
183
  }
184
184
 
185
+ handleInput = (e: InputEvent) => {
186
+ const { label, graphModel } = this.props
187
+ graphModel.eventCenter.emit('label:input', {
188
+ e,
189
+ data: label.getData(),
190
+ })
191
+ }
192
+
185
193
  setElementModelLabelInfo(data) {
186
194
  const { label, element, graphModel } = this.props
187
195
  const {
@@ -330,6 +338,7 @@ export class Label extends Component<ILabelProps, ILabelState> {
330
338
  'lf-label-editor-hover': !isEditing && (isHovered || isSelected),
331
339
  [`lf-label-editor-${textOverflowMode}`]: !isEditing,
332
340
  })}
341
+ onInput={this.handleInput}
333
342
  style={{
334
343
  maxWidth: `${maxLabelWidth}px`,
335
344
  boxSizing: 'border-box',
@@ -221,8 +221,12 @@ export class Label implements Extension {
221
221
  editable: true,
222
222
  vertical: false,
223
223
  }
224
-
225
- if (!isMultiple || len >= (curLabelOption?.maxCount ?? maxCount)) {
224
+ // 全局的isMultiple为false,或全局isMultiple为true但局部isMultiple指明是false,或当前label长度已经达到上线时,不允许添加多个 label
225
+ if (
226
+ !isMultiple ||
227
+ (isMultiple && curLabelOption.isMultiple === false) ||
228
+ len >= (curLabelOption?.maxCount ?? maxCount)
229
+ ) {
226
230
  return
227
231
  }
228
232