@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.
- package/.turbo/turbo-build.log +7 -7
- package/CHANGELOG.md +11 -0
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/es/components/selection-select/index.js +8 -6
- package/es/dynamic-group/model.d.ts +6 -0
- package/es/dynamic-group/model.js +20 -0
- package/es/dynamic-group/node.d.ts +2 -1
- package/es/dynamic-group/node.js +15 -14
- package/es/tools/label/Label.d.ts +1 -0
- package/es/tools/label/Label.js +8 -1
- package/es/tools/label/index.js +4 -1
- package/lib/components/selection-select/index.js +8 -6
- package/lib/dynamic-group/model.d.ts +6 -0
- package/lib/dynamic-group/model.js +20 -0
- package/lib/dynamic-group/node.d.ts +2 -1
- package/lib/dynamic-group/node.js +15 -14
- package/lib/tools/label/Label.d.ts +1 -0
- package/lib/tools/label/Label.js +8 -1
- package/lib/tools/label/index.js +4 -1
- package/package.json +3 -3
- package/src/components/selection-select/index.ts +8 -6
- package/src/dynamic-group/model.ts +29 -0
- package/src/dynamic-group/node.ts +21 -17
- package/src/tools/label/Label.tsx +9 -0
- package/src/tools/label/index.ts +6 -2
- package/stats.html +1 -1
|
@@ -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 (
|
|
64
|
-
|
|
64
|
+
if (group_1 && group_1.getNodeGroup(element.id)) {
|
|
65
|
+
return;
|
|
65
66
|
}
|
|
66
|
-
|
|
67
|
-
|
|
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:
|
|
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: (
|
|
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;
|
package/es/dynamic-group/node.js
CHANGED
|
@@ -131,20 +131,20 @@ var DynamicGroupNode = /** @class */ (function (_super) {
|
|
|
131
131
|
});
|
|
132
132
|
}
|
|
133
133
|
};
|
|
134
|
-
_this.onNodeMouseMove = function (
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
if (data.id === curGroup.id) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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;
|
package/es/tools/label/Label.js
CHANGED
|
@@ -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
|
package/es/tools/label/index.js
CHANGED
|
@@ -143,7 +143,10 @@ var Label = /** @class */ (function () {
|
|
|
143
143
|
editable: true,
|
|
144
144
|
vertical: false,
|
|
145
145
|
};
|
|
146
|
-
|
|
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 (
|
|
67
|
-
|
|
67
|
+
if (group_1 && group_1.getNodeGroup(element.id)) {
|
|
68
|
+
return;
|
|
68
69
|
}
|
|
69
|
-
|
|
70
|
-
|
|
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:
|
|
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: (
|
|
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 (
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
if (data.id === curGroup.id) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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;
|
package/lib/tools/label/Label.js
CHANGED
|
@@ -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
|
package/lib/tools/label/index.js
CHANGED
|
@@ -149,7 +149,10 @@ var Label = /** @class */ (function () {
|
|
|
149
149
|
editable: true,
|
|
150
150
|
vertical: false,
|
|
151
151
|
};
|
|
152
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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 (
|
|
172
|
-
|
|
172
|
+
if (group && group.getNodeGroup(element.id)) {
|
|
173
|
+
return
|
|
173
174
|
}
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
|
|
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',
|
package/src/tools/label/index.ts
CHANGED
|
@@ -221,8 +221,12 @@ export class Label implements Extension {
|
|
|
221
221
|
editable: true,
|
|
222
222
|
vertical: false,
|
|
223
223
|
}
|
|
224
|
-
|
|
225
|
-
if (
|
|
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
|
|