@logicflow/extension 2.0.13 → 2.0.14

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.
@@ -58,18 +58,20 @@ var SelectionSelect = /** @class */ (function () {
58
58
  }
59
59
  var elements = _this.lf.graphModel.getAreaElement(lt, rb, _this.isWholeEdge, _this.isWholeNode, true);
60
60
  var _d = _this.lf.graphModel, dynamicGroup_1 = _d.dynamicGroup, group_1 = _d.group;
61
+ var nonGroupedElements_1 = [];
61
62
  elements.forEach(function (element) {
62
63
  // 如果节点属于分组,则不选中节点,此处兼容旧版 Group 插件
63
- if (!group_1 || !group_1.getNodeGroup(element.id)) {
64
- _this.lf.selectElementById(element.id, true);
64
+ if (group_1 && group_1.getNodeGroup(element.id)) {
65
+ return;
65
66
  }
66
- // 如果节点属于动态分组,则不不选中节点
67
- if (!dynamicGroup_1 || !dynamicGroup_1.getGroupByNodeId(element.id)) {
68
- _this.lf.selectElementById(element.id, true);
67
+ if (dynamicGroup_1 && dynamicGroup_1.getGroupByNodeId(element.id)) {
68
+ return;
69
69
  }
70
+ _this.lf.selectElementById(element.id, true);
71
+ nonGroupedElements_1.push(element);
70
72
  });
71
73
  _this.lf.emit('selection:selected', {
72
- elements: elements,
74
+ elements: nonGroupedElements_1,
73
75
  leftTopPoint: lt,
74
76
  rightBottomPoint: rb,
75
77
  });
@@ -63,6 +63,12 @@ export declare class DynamicGroupNodeModel extends RectNodeModel<IGroupNodePrope
63
63
  initNodeData(data: LogicFlow.NodeConfig<IGroupNodeProperties>): void;
64
64
  setAttributes(): void;
65
65
  getData(): NodeData;
66
+ /**
67
+ * 获取分组内的节点
68
+ * @param groupModel
69
+ */
70
+ getNodesInGroup(groupModel: DynamicGroupNodeModel): string[];
71
+ getMoveDistance(deltaX: number, deltaY: number, isIgnoreRule?: boolean): [number, number];
66
72
  /**
67
73
  * 重写 getHistoryData 方法
68
74
  */
@@ -132,6 +132,26 @@ var DynamicGroupNodeModel = /** @class */ (function (_super) {
132
132
  }
133
133
  return data;
134
134
  };
135
+ /**
136
+ * 获取分组内的节点
137
+ * @param groupModel
138
+ */
139
+ DynamicGroupNodeModel.prototype.getNodesInGroup = function (groupModel) {
140
+ var nodeIds = [];
141
+ if (groupModel.isGroup) {
142
+ forEach(Array.from(groupModel.children), function (nodeId) {
143
+ nodeIds.push(nodeId);
144
+ });
145
+ }
146
+ return nodeIds;
147
+ };
148
+ DynamicGroupNodeModel.prototype.getMoveDistance = function (deltaX, deltaY, isIgnoreRule) {
149
+ if (isIgnoreRule === void 0) { isIgnoreRule = false; }
150
+ var _a = __read(_super.prototype.getMoveDistance.call(this, deltaX, deltaY, isIgnoreRule), 2), moveDeltaX = _a[0], moveDeltaY = _a[1];
151
+ var nodeIds = this.getNodesInGroup(this);
152
+ this.graphModel.moveNodes(nodeIds, deltaX, deltaY, isIgnoreRule);
153
+ return [moveDeltaX, moveDeltaY];
154
+ };
135
155
  /**
136
156
  * 重写 getHistoryData 方法
137
157
  */
@@ -9,13 +9,14 @@ export declare class DynamicGroupNode<P extends IDynamicGroupNodeProps = IDynami
9
9
  childrenPositionMap: Map<string, Position>;
10
10
  onNodeRotate: ({ model, }: Omit<CallbackArgs<'node:rotate'>, 'e' | 'position'>) => void;
11
11
  onNodeResize: ({ deltaX, deltaY, index, model, preData, }: Omit<CallbackArgs<'node:resize'>, 'e' | 'position'>) => void;
12
- onNodeMouseMove: ({ deltaX, deltaY, data, }: Omit<CallbackArgs<'node:mousemove'>, 'e' | 'position'>) => void;
12
+ onNodeMouseMove: () => void;
13
13
  graphRendered: () => void;
14
14
  componentDidMount(): void;
15
15
  componentWillUnmount(): void;
16
16
  /**
17
17
  * 获取分组内的节点
18
18
  * @param groupModel
19
+ * @param graphModel
19
20
  */
20
21
  getNodesInGroup(groupModel: DynamicGroupNodeModel, graphModel: GraphModel): string[];
21
22
  getResizeControl(): h.JSX.Element | null;
@@ -131,20 +131,20 @@ var DynamicGroupNode = /** @class */ (function (_super) {
131
131
  });
132
132
  }
133
133
  };
134
- _this.onNodeMouseMove = function (_a) {
135
- var deltaX = _a.deltaX, deltaY = _a.deltaY, data = _a.data;
136
- var _b = _this.props, curGroup = _b.model, graphModel = _b.graphModel;
137
- var transformModel = graphModel.transformModel;
138
- var SCALE_X = transformModel.SCALE_X, SCALE_Y = transformModel.SCALE_Y;
139
- if (data.id === curGroup.id) {
140
- var nodeIds = _this.getNodesInGroup(curGroup, graphModel);
141
- // https://github.com/didi/LogicFlow/issues/1914
142
- // 当调用lf.fitView()时,会改变整体的SCALE_X和SCALE_Y
143
- // 由于group的mousemove是在drag.ts的this.onDragging()处理的,在onDragging()里面进行SCALE的处理
144
- // 而"node:mousemove"emit出来跟onDragging()是同时的,也就是emit出来的数据是没有经过SCALE处理的坐标
145
- // 因此这里需要增加SCALE的处理
146
- graphModel.moveNodes(nodeIds, deltaX / SCALE_X, deltaY / SCALE_Y, true);
147
- }
134
+ _this.onNodeMouseMove = function () {
135
+ // console.log(data,deltaX,deltaY,'111')
136
+ // const { model: curGroup, graphModel } = this.props
137
+ // const { transformModel } = graphModel
138
+ // const { SCALE_X, SCALE_Y } = transformModel
139
+ // if (data.id === curGroup.id) {
140
+ // const nodeIds = this.getNodesInGroup(curGroup, graphModel)
141
+ // // https://github.com/didi/LogicFlow/issues/1914
142
+ // // 当调用lf.fitView()时,会改变整体的SCALE_X和SCALE_Y
143
+ // // 由于group的mousemove是在drag.ts的this.onDragging()处理的,在onDragging()里面进行SCALE的处理
144
+ // // 而"node:mousemove"emit出来跟onDragging()是同时的,也就是emit出来的数据是没有经过SCALE处理的坐标
145
+ // // 因此这里需要增加SCALE的处理
146
+ // graphModel.moveNodes(nodeIds, deltaX / SCALE_X, deltaY / SCALE_Y, true)
147
+ // }
148
148
  };
149
149
  _this.graphRendered = function () {
150
150
  var model = _this.props.model;
@@ -189,6 +189,7 @@ var DynamicGroupNode = /** @class */ (function (_super) {
189
189
  /**
190
190
  * 获取分组内的节点
191
191
  * @param groupModel
192
+ * @param graphModel
192
193
  */
193
194
  DynamicGroupNode.prototype.getNodesInGroup = function (groupModel, graphModel) {
194
195
  var _this = this;
@@ -24,6 +24,7 @@ export declare class Label extends Component<ILabelProps, ILabelState> {
24
24
  handleClick: (e: MouseEvent) => void;
25
25
  handleDbClick: (e: MouseEvent) => void;
26
26
  handleBlur: (e: FocusEvent) => void;
27
+ handleInput: (e: InputEvent) => void;
27
28
  setElementModelLabelInfo(data: any): void;
28
29
  reCalcLabelSize: () => void;
29
30
  componentDidMount(): void;
@@ -161,6 +161,13 @@ var Label = /** @class */ (function (_super) {
161
161
  isSelected: false,
162
162
  });
163
163
  };
164
+ _this.handleInput = function (e) {
165
+ var _a = _this.props, label = _a.label, graphModel = _a.graphModel;
166
+ graphModel.eventCenter.emit('label:input', {
167
+ e: e,
168
+ data: label.getData(),
169
+ });
170
+ };
164
171
  // 重新计算 Label 大小
165
172
  _this.reCalcLabelSize = function () { };
166
173
  var label = props.label, _a = props.graphModel, gridSize = _a.gridSize, eventCenter = _a.eventCenter;
@@ -273,7 +280,7 @@ var Label = /** @class */ (function (_super) {
273
280
  'lf-label-editor-hover': !isEditing && (isHovered || isSelected)
274
281
  },
275
282
  _a["lf-label-editor-".concat(textOverflowMode)] = !isEditing,
276
- _a)), style: __assign({ maxWidth: "".concat(maxLabelWidth, "px"), boxSizing: 'border-box', display: 'inline-block', background: isEditing || element.BaseType === 'edge' ? '#fff' : 'transparent' }, style), dangerouslySetInnerHTML: { __html: content } }) }));
283
+ _a)), onInput: this.handleInput, style: __assign({ maxWidth: "".concat(maxLabelWidth, "px"), boxSizing: 'border-box', display: 'inline-block', background: isEditing || element.BaseType === 'edge' ? '#fff' : 'transparent' }, style), dangerouslySetInnerHTML: { __html: content } }) }));
277
284
  };
278
285
  Label = __decorate([
279
286
  observer
@@ -143,7 +143,10 @@ var Label = /** @class */ (function () {
143
143
  editable: true,
144
144
  vertical: false,
145
145
  };
146
- if (!isMultiple || len >= ((_c = curLabelOption === null || curLabelOption === void 0 ? void 0 : curLabelOption.maxCount) !== null && _c !== void 0 ? _c : maxCount)) {
146
+ // 全局的isMultiple为false,或全局isMultiple为true但局部isMultiple指明是false,或当前label长度已经达到上线时,不允许添加多个 label
147
+ if (!isMultiple ||
148
+ (isMultiple && curLabelOption.isMultiple === false) ||
149
+ len >= ((_c = curLabelOption === null || curLabelOption === void 0 ? void 0 : curLabelOption.maxCount) !== null && _c !== void 0 ? _c : maxCount)) {
147
150
  return;
148
151
  }
149
152
  curLabelConfig.push(newLabel);
@@ -61,18 +61,20 @@ var SelectionSelect = /** @class */ (function () {
61
61
  }
62
62
  var elements = _this.lf.graphModel.getAreaElement(lt, rb, _this.isWholeEdge, _this.isWholeNode, true);
63
63
  var _d = _this.lf.graphModel, dynamicGroup_1 = _d.dynamicGroup, group_1 = _d.group;
64
+ var nonGroupedElements_1 = [];
64
65
  elements.forEach(function (element) {
65
66
  // 如果节点属于分组,则不选中节点,此处兼容旧版 Group 插件
66
- if (!group_1 || !group_1.getNodeGroup(element.id)) {
67
- _this.lf.selectElementById(element.id, true);
67
+ if (group_1 && group_1.getNodeGroup(element.id)) {
68
+ return;
68
69
  }
69
- // 如果节点属于动态分组,则不不选中节点
70
- if (!dynamicGroup_1 || !dynamicGroup_1.getGroupByNodeId(element.id)) {
71
- _this.lf.selectElementById(element.id, true);
70
+ if (dynamicGroup_1 && dynamicGroup_1.getGroupByNodeId(element.id)) {
71
+ return;
72
72
  }
73
+ _this.lf.selectElementById(element.id, true);
74
+ nonGroupedElements_1.push(element);
73
75
  });
74
76
  _this.lf.emit('selection:selected', {
75
- elements: elements,
77
+ elements: nonGroupedElements_1,
76
78
  leftTopPoint: lt,
77
79
  rightBottomPoint: rb,
78
80
  });
@@ -63,6 +63,12 @@ export declare class DynamicGroupNodeModel extends RectNodeModel<IGroupNodePrope
63
63
  initNodeData(data: LogicFlow.NodeConfig<IGroupNodeProperties>): void;
64
64
  setAttributes(): void;
65
65
  getData(): NodeData;
66
+ /**
67
+ * 获取分组内的节点
68
+ * @param groupModel
69
+ */
70
+ getNodesInGroup(groupModel: DynamicGroupNodeModel): string[];
71
+ getMoveDistance(deltaX: number, deltaY: number, isIgnoreRule?: boolean): [number, number];
66
72
  /**
67
73
  * 重写 getHistoryData 方法
68
74
  */
@@ -135,6 +135,26 @@ var DynamicGroupNodeModel = /** @class */ (function (_super) {
135
135
  }
136
136
  return data;
137
137
  };
138
+ /**
139
+ * 获取分组内的节点
140
+ * @param groupModel
141
+ */
142
+ DynamicGroupNodeModel.prototype.getNodesInGroup = function (groupModel) {
143
+ var nodeIds = [];
144
+ if (groupModel.isGroup) {
145
+ (0, lodash_es_1.forEach)(Array.from(groupModel.children), function (nodeId) {
146
+ nodeIds.push(nodeId);
147
+ });
148
+ }
149
+ return nodeIds;
150
+ };
151
+ DynamicGroupNodeModel.prototype.getMoveDistance = function (deltaX, deltaY, isIgnoreRule) {
152
+ if (isIgnoreRule === void 0) { isIgnoreRule = false; }
153
+ var _a = __read(_super.prototype.getMoveDistance.call(this, deltaX, deltaY, isIgnoreRule), 2), moveDeltaX = _a[0], moveDeltaY = _a[1];
154
+ var nodeIds = this.getNodesInGroup(this);
155
+ this.graphModel.moveNodes(nodeIds, deltaX, deltaY, isIgnoreRule);
156
+ return [moveDeltaX, moveDeltaY];
157
+ };
138
158
  /**
139
159
  * 重写 getHistoryData 方法
140
160
  */
@@ -9,13 +9,14 @@ export declare class DynamicGroupNode<P extends IDynamicGroupNodeProps = IDynami
9
9
  childrenPositionMap: Map<string, Position>;
10
10
  onNodeRotate: ({ model, }: Omit<CallbackArgs<'node:rotate'>, 'e' | 'position'>) => void;
11
11
  onNodeResize: ({ deltaX, deltaY, index, model, preData, }: Omit<CallbackArgs<'node:resize'>, 'e' | 'position'>) => void;
12
- onNodeMouseMove: ({ deltaX, deltaY, data, }: Omit<CallbackArgs<'node:mousemove'>, 'e' | 'position'>) => void;
12
+ onNodeMouseMove: () => void;
13
13
  graphRendered: () => void;
14
14
  componentDidMount(): void;
15
15
  componentWillUnmount(): void;
16
16
  /**
17
17
  * 获取分组内的节点
18
18
  * @param groupModel
19
+ * @param graphModel
19
20
  */
20
21
  getNodesInGroup(groupModel: DynamicGroupNodeModel, graphModel: GraphModel): string[];
21
22
  getResizeControl(): h.JSX.Element | null;
@@ -134,20 +134,20 @@ var DynamicGroupNode = /** @class */ (function (_super) {
134
134
  });
135
135
  }
136
136
  };
137
- _this.onNodeMouseMove = function (_a) {
138
- var deltaX = _a.deltaX, deltaY = _a.deltaY, data = _a.data;
139
- var _b = _this.props, curGroup = _b.model, graphModel = _b.graphModel;
140
- var transformModel = graphModel.transformModel;
141
- var SCALE_X = transformModel.SCALE_X, SCALE_Y = transformModel.SCALE_Y;
142
- if (data.id === curGroup.id) {
143
- var nodeIds = _this.getNodesInGroup(curGroup, graphModel);
144
- // https://github.com/didi/LogicFlow/issues/1914
145
- // 当调用lf.fitView()时,会改变整体的SCALE_X和SCALE_Y
146
- // 由于group的mousemove是在drag.ts的this.onDragging()处理的,在onDragging()里面进行SCALE的处理
147
- // 而"node:mousemove"emit出来跟onDragging()是同时的,也就是emit出来的数据是没有经过SCALE处理的坐标
148
- // 因此这里需要增加SCALE的处理
149
- graphModel.moveNodes(nodeIds, deltaX / SCALE_X, deltaY / SCALE_Y, true);
150
- }
137
+ _this.onNodeMouseMove = function () {
138
+ // console.log(data,deltaX,deltaY,'111')
139
+ // const { model: curGroup, graphModel } = this.props
140
+ // const { transformModel } = graphModel
141
+ // const { SCALE_X, SCALE_Y } = transformModel
142
+ // if (data.id === curGroup.id) {
143
+ // const nodeIds = this.getNodesInGroup(curGroup, graphModel)
144
+ // // https://github.com/didi/LogicFlow/issues/1914
145
+ // // 当调用lf.fitView()时,会改变整体的SCALE_X和SCALE_Y
146
+ // // 由于group的mousemove是在drag.ts的this.onDragging()处理的,在onDragging()里面进行SCALE的处理
147
+ // // 而"node:mousemove"emit出来跟onDragging()是同时的,也就是emit出来的数据是没有经过SCALE处理的坐标
148
+ // // 因此这里需要增加SCALE的处理
149
+ // graphModel.moveNodes(nodeIds, deltaX / SCALE_X, deltaY / SCALE_Y, true)
150
+ // }
151
151
  };
152
152
  _this.graphRendered = function () {
153
153
  var model = _this.props.model;
@@ -192,6 +192,7 @@ var DynamicGroupNode = /** @class */ (function (_super) {
192
192
  /**
193
193
  * 获取分组内的节点
194
194
  * @param groupModel
195
+ * @param graphModel
195
196
  */
196
197
  DynamicGroupNode.prototype.getNodesInGroup = function (groupModel, graphModel) {
197
198
  var _this = this;
@@ -24,6 +24,7 @@ export declare class Label extends Component<ILabelProps, ILabelState> {
24
24
  handleClick: (e: MouseEvent) => void;
25
25
  handleDbClick: (e: MouseEvent) => void;
26
26
  handleBlur: (e: FocusEvent) => void;
27
+ handleInput: (e: InputEvent) => void;
27
28
  setElementModelLabelInfo(data: any): void;
28
29
  reCalcLabelSize: () => void;
29
30
  componentDidMount(): void;
@@ -167,6 +167,13 @@ var Label = /** @class */ (function (_super) {
167
167
  isSelected: false,
168
168
  });
169
169
  };
170
+ _this.handleInput = function (e) {
171
+ var _a = _this.props, label = _a.label, graphModel = _a.graphModel;
172
+ graphModel.eventCenter.emit('label:input', {
173
+ e: e,
174
+ data: label.getData(),
175
+ });
176
+ };
170
177
  // 重新计算 Label 大小
171
178
  _this.reCalcLabelSize = function () { };
172
179
  var label = props.label, _a = props.graphModel, gridSize = _a.gridSize, eventCenter = _a.eventCenter;
@@ -279,7 +286,7 @@ var Label = /** @class */ (function (_super) {
279
286
  'lf-label-editor-hover': !isEditing && (isHovered || isSelected)
280
287
  },
281
288
  _a["lf-label-editor-".concat(textOverflowMode)] = !isEditing,
282
- _a)), style: __assign({ maxWidth: "".concat(maxLabelWidth, "px"), boxSizing: 'border-box', display: 'inline-block', background: isEditing || element.BaseType === 'edge' ? '#fff' : 'transparent' }, style), dangerouslySetInnerHTML: { __html: content } }) }));
289
+ _a)), onInput: this.handleInput, style: __assign({ maxWidth: "".concat(maxLabelWidth, "px"), boxSizing: 'border-box', display: 'inline-block', background: isEditing || element.BaseType === 'edge' ? '#fff' : 'transparent' }, style), dangerouslySetInnerHTML: { __html: content } }) }));
283
290
  };
284
291
  Label = __decorate([
285
292
  core_1.observer
@@ -149,7 +149,10 @@ var Label = /** @class */ (function () {
149
149
  editable: true,
150
150
  vertical: false,
151
151
  };
152
- if (!isMultiple || len >= ((_c = curLabelOption === null || curLabelOption === void 0 ? void 0 : curLabelOption.maxCount) !== null && _c !== void 0 ? _c : maxCount)) {
152
+ // 全局的isMultiple为false,或全局isMultiple为true但局部isMultiple指明是false,或当前label长度已经达到上线时,不允许添加多个 label
153
+ if (!isMultiple ||
154
+ (isMultiple && curLabelOption.isMultiple === false) ||
155
+ len >= ((_c = curLabelOption === null || curLabelOption === void 0 ? void 0 : curLabelOption.maxCount) !== null && _c !== void 0 ? _c : maxCount)) {
153
156
  return;
154
157
  }
155
158
  curLabelConfig.push(newLabel);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logicflow/extension",
3
- "version": "2.0.13",
3
+ "version": "2.0.14",
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.10"
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.10"
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
  })
@@ -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
  */
@@ -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,
@@ -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