@logicflow/extension 1.2.0-next.1 → 1.2.0-next.3
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/cjs/NodeResize/Control/Control.js +71 -16
- package/cjs/NodeResize/Node/DiamondResize.js +24 -10
- package/cjs/NodeResize/Node/EllipseResize.js +24 -10
- package/cjs/NodeResize/Node/HtmlResize.js +24 -10
- package/cjs/NodeResize/Node/RectResize.js +24 -10
- package/cjs/bpmn-adapter/index.js +74 -122
- package/cjs/bpmn-adapter/json2xml.js +2 -4
- package/cjs/bpmn-adapter/xml2json.js +247 -2
- package/cjs/components/control/index.js +16 -16
- package/cjs/components/dnd-panel/index.js +21 -0
- package/cjs/components/highlight/index.js +0 -1
- package/cjs/components/menu/index.js +9 -9
- package/cjs/components/mini-map/index.js +223 -138
- package/cjs/components/selection-select/index.js +6 -19
- package/cjs/index.js +0 -1
- package/cjs/materials/curved-edge/index.js +19 -5
- package/cjs/materials/curved-edge/searchMiddleIndex.js +17 -0
- package/cjs/materials/group/GroupNode.js +34 -64
- package/cjs/materials/group/index.js +99 -70
- package/cjs/style/index.css +10 -0
- package/cjs/tools/auto-layout/index.js +1 -1
- package/es/NodeResize/Control/Control.d.ts +4 -1
- package/es/NodeResize/Control/Control.js +71 -16
- package/es/NodeResize/Node/DiamondResize.d.ts +3 -1
- package/es/NodeResize/Node/DiamondResize.js +24 -10
- package/es/NodeResize/Node/EllipseResize.d.ts +3 -1
- package/es/NodeResize/Node/EllipseResize.js +24 -10
- package/es/NodeResize/Node/HtmlResize.d.ts +3 -1
- package/es/NodeResize/Node/HtmlResize.js +24 -10
- package/es/NodeResize/Node/RectResize.d.ts +3 -1
- package/es/NodeResize/Node/RectResize.js +24 -10
- package/es/bpmn-adapter/index.d.ts +33 -41
- package/es/bpmn-adapter/index.js +74 -122
- package/es/bpmn-adapter/json2xml.js +2 -4
- package/es/bpmn-adapter/xml2json.js +247 -2
- package/es/components/control/index.d.ts +3 -2
- package/es/components/control/index.js +16 -16
- package/es/components/dnd-panel/index.js +21 -0
- package/es/components/highlight/index.js +0 -1
- package/es/components/menu/index.d.ts +3 -2
- package/es/components/menu/index.js +9 -9
- package/es/components/mini-map/index.d.ts +57 -45
- package/es/components/mini-map/index.js +223 -138
- package/es/components/selection-select/index.d.ts +0 -1
- package/es/components/selection-select/index.js +6 -19
- package/es/index.d.ts +0 -1
- package/es/index.js +0 -1
- package/es/materials/curved-edge/index.js +19 -5
- package/es/materials/curved-edge/searchMiddleIndex.d.ts +1 -0
- package/es/materials/curved-edge/searchMiddleIndex.js +14 -0
- package/es/materials/group/GroupNode.d.ts +5 -7
- package/es/materials/group/GroupNode.js +34 -64
- package/es/materials/group/index.d.ts +21 -1
- package/es/materials/group/index.js +99 -70
- package/es/style/index.css +10 -0
- package/es/tools/auto-layout/index.d.ts +1 -1
- package/es/tools/auto-layout/index.js +1 -1
- package/lib/AutoLayout.js +1 -1
- package/lib/BpmnAdapter.js +1 -1
- package/lib/BpmnElement.js +1 -1
- package/lib/ContextMenu.js +1 -1
- package/lib/Control.js +1 -1
- package/lib/CurvedEdge.js +1 -1
- package/lib/DndPanel.js +1 -1
- package/lib/FlowPath.js +1 -1
- package/lib/Group.js +1 -1
- package/lib/Highlight.js +1 -1
- package/lib/InsertNodeInPolyline.js +1 -1
- package/lib/Menu.js +1 -1
- package/lib/MiniMap.js +1 -1
- package/lib/NodeResize.js +1 -1
- package/lib/RectLabelNode.js +1 -1
- package/lib/SelectionSelect.js +1 -1
- package/lib/Snapshot.js +1 -1
- package/lib/TurboAdapter.js +1 -1
- package/lib/lfJson2Xml.js +1 -1
- package/lib/lfXml2Json.js +1 -1
- package/lib/style/index.css +10 -0
- package/package.json +3 -2
- package/types/NodeResize/Control/Control.d.ts +4 -1
- package/types/NodeResize/Node/DiamondResize.d.ts +3 -1
- package/types/NodeResize/Node/EllipseResize.d.ts +3 -1
- package/types/NodeResize/Node/HtmlResize.d.ts +3 -1
- package/types/NodeResize/Node/RectResize.d.ts +3 -1
- package/types/bpmn-adapter/index.d.ts +33 -41
- package/types/components/control/index.d.ts +3 -2
- package/types/components/menu/index.d.ts +3 -2
- package/types/components/mini-map/index.d.ts +57 -45
- package/types/components/selection-select/index.d.ts +0 -1
- package/types/index.d.ts +0 -1
- package/types/materials/curved-edge/searchMiddleIndex.d.ts +1 -0
- package/types/materials/group/GroupNode.d.ts +5 -7
- package/types/materials/group/index.d.ts +21 -1
- package/types/tools/auto-layout/index.d.ts +1 -1
- package/cjs/locale/en-locale/en.js +0 -22
- package/cjs/locale/en-locale/index.js +0 -29
- package/cjs/locale/locale.js +0 -19
- package/es/locale/en-locale/en.d.ts +0 -19
- package/es/locale/en-locale/en.js +0 -19
- package/es/locale/en-locale/index.d.ts +0 -9
- package/es/locale/en-locale/index.js +0 -26
- package/es/locale/locale.d.ts +0 -6
- package/es/locale/locale.js +0 -16
- package/lib/EnLocale.js +0 -1
|
@@ -47,8 +47,6 @@ declare class GroupNodeModel extends RectResize.model {
|
|
|
47
47
|
*/
|
|
48
48
|
foldGroup(isFolded: any): void;
|
|
49
49
|
getAnchorStyle(anchorInfo: any): Record<string, any>;
|
|
50
|
-
foldRect(isFolded: any): void;
|
|
51
|
-
foldChildren(isFolded: any): import("@logicflow/core/types/model/edge/BaseEdgeModel").BaseEdgeModel[];
|
|
52
50
|
/**
|
|
53
51
|
* 折叠分组的时候,处理分组自身的连线和分组内部子节点上的连线
|
|
54
52
|
* 边的分类:
|
|
@@ -92,10 +90,6 @@ declare class GroupNodeModel extends RectResize.model {
|
|
|
92
90
|
* @param id 节点id
|
|
93
91
|
*/
|
|
94
92
|
removeChild(id: any): void;
|
|
95
|
-
/**
|
|
96
|
-
* 获得包含嵌套组的所有子节点
|
|
97
|
-
*/
|
|
98
|
-
getChildren(): any[];
|
|
99
93
|
getAddableOutlineStyle(): {
|
|
100
94
|
stroke: string;
|
|
101
95
|
strokeWidth: number;
|
|
@@ -108,10 +102,14 @@ declare class GroupNodeModel extends RectResize.model {
|
|
|
108
102
|
* 是否允许此节点添加到此分组中
|
|
109
103
|
*/
|
|
110
104
|
isAllowAppendIn(nodeData: any): boolean;
|
|
105
|
+
/**
|
|
106
|
+
* 当groupA被添加到groupB中时,将groupB及groupB所属的group的zIndex减1
|
|
107
|
+
*/
|
|
108
|
+
toBack(): void;
|
|
111
109
|
}
|
|
112
110
|
declare class GroupNode extends RectResize.view {
|
|
113
111
|
getControlGroup(): h.JSX.Element;
|
|
114
|
-
|
|
112
|
+
getAddableShape(): import("preact").VNode<any>;
|
|
115
113
|
getFoldIcon(): import("preact").VNode<any>;
|
|
116
114
|
getResizeShape(): import("preact").VNode<any>;
|
|
117
115
|
}
|
|
@@ -46,6 +46,7 @@ import { h } from '@logicflow/core';
|
|
|
46
46
|
import { RectResize } from '../../NodeResize';
|
|
47
47
|
var defaultWidth = 500;
|
|
48
48
|
var defaultHeight = 300;
|
|
49
|
+
var DEFAULT_BOTTOM_Z_INDEX = -10000;
|
|
49
50
|
var GroupNodeModel = /** @class */ (function (_super) {
|
|
50
51
|
__extends(GroupNodeModel, _super);
|
|
51
52
|
function GroupNodeModel() {
|
|
@@ -68,8 +69,7 @@ var GroupNodeModel = /** @class */ (function (_super) {
|
|
|
68
69
|
this.height = defaultHeight;
|
|
69
70
|
this.foldedWidth = 80;
|
|
70
71
|
this.foldedHeight = 60;
|
|
71
|
-
|
|
72
|
-
this.zIndex = -1;
|
|
72
|
+
this.zIndex = DEFAULT_BOTTOM_Z_INDEX;
|
|
73
73
|
this.radius = 0;
|
|
74
74
|
this.text.editable = false;
|
|
75
75
|
this.text.draggable = false;
|
|
@@ -77,8 +77,6 @@ var GroupNodeModel = /** @class */ (function (_super) {
|
|
|
77
77
|
this.resizable = false;
|
|
78
78
|
this.autoToFront = false;
|
|
79
79
|
this.foldable = false;
|
|
80
|
-
// 是否可以被嵌套
|
|
81
|
-
this.nestable = false;
|
|
82
80
|
if (this.properties.isFolded === undefined) {
|
|
83
81
|
this.properties.isFolded = false;
|
|
84
82
|
}
|
|
@@ -102,59 +100,41 @@ var GroupNodeModel = /** @class */ (function (_super) {
|
|
|
102
100
|
* 3. 处理连线
|
|
103
101
|
*/
|
|
104
102
|
GroupNodeModel.prototype.foldGroup = function (isFolded) {
|
|
103
|
+
var _this = this;
|
|
105
104
|
this.setProperty('isFolded', isFolded);
|
|
106
105
|
this.isFolded = isFolded;
|
|
107
106
|
// step 1
|
|
108
|
-
this.foldRect(isFolded);
|
|
109
|
-
// step 2
|
|
110
|
-
var allEdges = this.foldChildren(isFolded);
|
|
111
|
-
// step 3
|
|
112
|
-
this.foldEdge(isFolded, allEdges);
|
|
113
|
-
};
|
|
114
|
-
GroupNodeModel.prototype.getAnchorStyle = function (anchorInfo) {
|
|
115
|
-
var style = _super.prototype.getAnchorStyle.call(this, anchorInfo);
|
|
116
|
-
style.stroke = 'transparent';
|
|
117
|
-
style.fill = 'transparent';
|
|
118
|
-
style.hover.fill = 'transparent';
|
|
119
|
-
style.hover.stroke = 'transparent';
|
|
120
|
-
return style;
|
|
121
|
-
};
|
|
122
|
-
GroupNodeModel.prototype.foldRect = function (isFolded) {
|
|
123
107
|
if (isFolded) {
|
|
108
|
+
this.x = this.x - this.width / 2 + this.foldedWidth / 2;
|
|
109
|
+
this.y = this.y - this.height / 2 + this.foldedHeight / 2;
|
|
124
110
|
this.unfoldedWidth = this.width;
|
|
125
111
|
this.unfoldedHight = this.height;
|
|
126
|
-
this.
|
|
127
|
-
|
|
128
|
-
y: this.y - this.height / 2 + this.foldedHeight / 2,
|
|
129
|
-
width: this.foldedWidth,
|
|
130
|
-
height: this.foldedHeight,
|
|
131
|
-
});
|
|
112
|
+
this.width = this.foldedWidth;
|
|
113
|
+
this.height = this.foldedHeight;
|
|
132
114
|
}
|
|
133
115
|
else {
|
|
134
|
-
this.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
y: this.y + this.unfoldedHight / 2 - this.foldedHeight / 2,
|
|
139
|
-
});
|
|
116
|
+
this.width = this.unfoldedWidth;
|
|
117
|
+
this.height = this.unfoldedHight;
|
|
118
|
+
this.x = this.x + this.width / 2 - this.foldedWidth / 2;
|
|
119
|
+
this.y = this.y + this.height / 2 - this.foldedHeight / 2;
|
|
140
120
|
}
|
|
141
|
-
|
|
142
|
-
GroupNodeModel.prototype.foldChildren = function (isFolded) {
|
|
143
|
-
var _this = this;
|
|
121
|
+
// step 2
|
|
144
122
|
var allEdges = this.incoming.edges.concat(this.outgoing.edges);
|
|
145
123
|
this.children.forEach(function (elementId) {
|
|
146
124
|
var nodeModel = _this.graphModel.getElement(elementId);
|
|
147
|
-
|
|
148
|
-
var childEdges = nodeModel.foldChildren(isFolded || nodeModel.isFolded);
|
|
149
|
-
allEdges = allEdges.concat(childEdges);
|
|
150
|
-
nodeModel.foldEdge(isFolded, childEdges);
|
|
151
|
-
}
|
|
125
|
+
nodeModel.visible = !isFolded;
|
|
152
126
|
allEdges = allEdges.concat(nodeModel.incoming.edges.concat(nodeModel.outgoing.edges));
|
|
153
|
-
nodeModel.updateAttributes({
|
|
154
|
-
visible: !isFolded,
|
|
155
|
-
});
|
|
156
127
|
});
|
|
157
|
-
|
|
128
|
+
// step 3
|
|
129
|
+
this.foldEdge(isFolded, allEdges);
|
|
130
|
+
};
|
|
131
|
+
GroupNodeModel.prototype.getAnchorStyle = function (anchorInfo) {
|
|
132
|
+
var style = _super.prototype.getAnchorStyle.call(this, anchorInfo);
|
|
133
|
+
style.stroke = 'transparent';
|
|
134
|
+
style.fill = 'transparent';
|
|
135
|
+
style.hover.fill = 'transparent';
|
|
136
|
+
style.hover.stroke = 'transparent';
|
|
137
|
+
return style;
|
|
158
138
|
};
|
|
159
139
|
/**
|
|
160
140
|
* 折叠分组的时候,处理分组自身的连线和分组内部子节点上的连线
|
|
@@ -214,9 +194,7 @@ var GroupNodeModel = /** @class */ (function (_super) {
|
|
|
214
194
|
if (targetNodeIdGroup.id !== _this.id || sourceNodeIdGroup.id !== _this.id) {
|
|
215
195
|
_this.createVirtualEdge(data);
|
|
216
196
|
}
|
|
217
|
-
edgeModel.
|
|
218
|
-
visible: false,
|
|
219
|
-
});
|
|
197
|
+
edgeModel.visible = false;
|
|
220
198
|
}
|
|
221
199
|
// 展开时,处理被隐藏的边的逻辑
|
|
222
200
|
if (!isFolded && edgeModel.visible === false) {
|
|
@@ -232,9 +210,7 @@ var GroupNodeModel = /** @class */ (function (_super) {
|
|
|
232
210
|
_this.createVirtualEdge(data);
|
|
233
211
|
}
|
|
234
212
|
else {
|
|
235
|
-
edgeModel.
|
|
236
|
-
visible: true,
|
|
237
|
-
});
|
|
213
|
+
edgeModel.visible = true;
|
|
238
214
|
}
|
|
239
215
|
}
|
|
240
216
|
});
|
|
@@ -279,19 +255,6 @@ var GroupNodeModel = /** @class */ (function (_super) {
|
|
|
279
255
|
GroupNodeModel.prototype.removeChild = function (id) {
|
|
280
256
|
this.children.delete(id);
|
|
281
257
|
};
|
|
282
|
-
/**
|
|
283
|
-
* 获得包含嵌套组的所有子节点
|
|
284
|
-
*/
|
|
285
|
-
GroupNodeModel.prototype.getChildren = function () {
|
|
286
|
-
var _this = this;
|
|
287
|
-
return __spread(this.children).flatMap(function (child) {
|
|
288
|
-
var model = _this.graphModel.getElement(child);
|
|
289
|
-
if (model.isGroup) {
|
|
290
|
-
return __spread([child], model.getChildren());
|
|
291
|
-
}
|
|
292
|
-
return child;
|
|
293
|
-
});
|
|
294
|
-
};
|
|
295
258
|
GroupNodeModel.prototype.getAddableOutlineStyle = function () {
|
|
296
259
|
return {
|
|
297
260
|
stroke: '#FEB663',
|
|
@@ -311,6 +274,7 @@ var GroupNodeModel = /** @class */ (function (_super) {
|
|
|
311
274
|
GroupNodeModel.prototype.getHistoryData = function () {
|
|
312
275
|
var data = _super.prototype.getData.call(this);
|
|
313
276
|
data.children = __spread(this.children);
|
|
277
|
+
data.isGroup = true;
|
|
314
278
|
var properties = data.properties;
|
|
315
279
|
delete properties.groupAddable;
|
|
316
280
|
if (properties.isFolded) { // 如果分组被折叠
|
|
@@ -325,6 +289,12 @@ var GroupNodeModel = /** @class */ (function (_super) {
|
|
|
325
289
|
GroupNodeModel.prototype.isAllowAppendIn = function (nodeData) {
|
|
326
290
|
return true;
|
|
327
291
|
};
|
|
292
|
+
/**
|
|
293
|
+
* 当groupA被添加到groupB中时,将groupB及groupB所属的group的zIndex减1
|
|
294
|
+
*/
|
|
295
|
+
GroupNodeModel.prototype.toBack = function () {
|
|
296
|
+
this.zIndex--;
|
|
297
|
+
};
|
|
328
298
|
return GroupNodeModel;
|
|
329
299
|
}(RectResize.model));
|
|
330
300
|
var GroupNode = /** @class */ (function (_super) {
|
|
@@ -336,7 +306,7 @@ var GroupNode = /** @class */ (function (_super) {
|
|
|
336
306
|
var _a = this.props.model, resizable = _a.resizable, properties = _a.properties;
|
|
337
307
|
return resizable && !properties.isFolded ? _super.prototype.getControlGroup.call(this) : null;
|
|
338
308
|
};
|
|
339
|
-
GroupNode.prototype.
|
|
309
|
+
GroupNode.prototype.getAddableShape = function () {
|
|
340
310
|
var _a = this.props.model, width = _a.width, height = _a.height, x = _a.x, y = _a.y, radius = _a.radius, properties = _a.properties;
|
|
341
311
|
if (!properties.groupAddable)
|
|
342
312
|
return null;
|
|
@@ -382,7 +352,7 @@ var GroupNode = /** @class */ (function (_super) {
|
|
|
382
352
|
};
|
|
383
353
|
GroupNode.prototype.getResizeShape = function () {
|
|
384
354
|
return h('g', {}, [
|
|
385
|
-
this.
|
|
355
|
+
this.getAddableShape(),
|
|
386
356
|
_super.prototype.getResizeShape.call(this),
|
|
387
357
|
this.getFoldIcon(),
|
|
388
358
|
]);
|
|
@@ -2,9 +2,16 @@ import LogicFlow, { BaseNodeModel } from '@logicflow/core';
|
|
|
2
2
|
import GroupNode from './GroupNode';
|
|
3
3
|
declare type BaseNodeId = string;
|
|
4
4
|
declare type GroupId = string;
|
|
5
|
+
declare type Bounds = {
|
|
6
|
+
x1: number;
|
|
7
|
+
y1: number;
|
|
8
|
+
x2: number;
|
|
9
|
+
y2: number;
|
|
10
|
+
};
|
|
5
11
|
declare class Group {
|
|
6
12
|
static pluginName: string;
|
|
7
13
|
lf: LogicFlow;
|
|
14
|
+
topGroupZIndex: number;
|
|
8
15
|
activeGroup: any;
|
|
9
16
|
nodeGroupMap: Map<BaseNodeId, GroupId>;
|
|
10
17
|
constructor({ lf }: {
|
|
@@ -24,10 +31,23 @@ declare class Group {
|
|
|
24
31
|
setActiveGroup: ({ data }: {
|
|
25
32
|
data: any;
|
|
26
33
|
}) => void;
|
|
34
|
+
/**
|
|
35
|
+
* 1. 分组节点默认在普通节点下面。
|
|
36
|
+
* 2. 分组节点被选中后,会将分组节点以及其内部的其他分组节点放到其余分组节点的上面。
|
|
37
|
+
* 3. 分组节点取消选中后,不会将分组节点重置为原来的高度。
|
|
38
|
+
* 4. 由于LogicFlow核心目标是支持用户手动绘制流程图,所以不考虑一张流程图超过1000个分组节点的情况。
|
|
39
|
+
*/
|
|
40
|
+
nodeSelected: ({ data, isMultiple, isSelected }: {
|
|
41
|
+
data: any;
|
|
42
|
+
isMultiple: any;
|
|
43
|
+
isSelected: any;
|
|
44
|
+
}) => void;
|
|
45
|
+
toFrontGroup: (model: any) => void;
|
|
27
46
|
/**
|
|
28
47
|
* 获取自定位置其所属分组
|
|
48
|
+
* 当分组重合时,优先返回最上层的分组
|
|
29
49
|
*/
|
|
30
|
-
getGroup(
|
|
50
|
+
getGroup(bounds: Bounds, nodeData: BaseNodeModel): BaseNodeModel | undefined;
|
|
31
51
|
/**
|
|
32
52
|
* 获取某个节点所属的groupModel
|
|
33
53
|
*/
|
|
@@ -1,28 +1,11 @@
|
|
|
1
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
2
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
3
|
-
if (!m) return o;
|
|
4
|
-
var i = m.call(o), r, ar = [], e;
|
|
5
|
-
try {
|
|
6
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
7
|
-
}
|
|
8
|
-
catch (error) { e = { error: error }; }
|
|
9
|
-
finally {
|
|
10
|
-
try {
|
|
11
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
12
|
-
}
|
|
13
|
-
finally { if (e) throw e.error; }
|
|
14
|
-
}
|
|
15
|
-
return ar;
|
|
16
|
-
};
|
|
17
|
-
var __spread = (this && this.__spread) || function () {
|
|
18
|
-
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
|
|
19
|
-
return ar;
|
|
20
|
-
};
|
|
21
1
|
import GroupNode from './GroupNode';
|
|
2
|
+
var DEFAULT_TOP_Z_INDEX = -1000;
|
|
3
|
+
var DEFAULT_BOTTOM_Z_INDEX = -10000;
|
|
22
4
|
var Group = /** @class */ (function () {
|
|
23
5
|
function Group(_a) {
|
|
24
6
|
var _this = this;
|
|
25
7
|
var lf = _a.lf;
|
|
8
|
+
this.topGroupZIndex = DEFAULT_BOTTOM_Z_INDEX;
|
|
26
9
|
this.nodeGroupMap = new Map();
|
|
27
10
|
this.graphRendered = function (data) {
|
|
28
11
|
// 如果节点
|
|
@@ -47,7 +30,9 @@ var Group = /** @class */ (function () {
|
|
|
47
30
|
preGroup.setAllowAppendChild(false);
|
|
48
31
|
}
|
|
49
32
|
// 然后再判断这个节点是否在某个group中,如果在,则将其添加到对应的group中
|
|
50
|
-
var
|
|
33
|
+
var nodeModel = _this.lf.getNodeModelById(data.id);
|
|
34
|
+
var bounds = nodeModel.getBounds();
|
|
35
|
+
var group = _this.getGroup(bounds, data);
|
|
51
36
|
if (!group)
|
|
52
37
|
return;
|
|
53
38
|
var isAllowAppendIn = group.isAllowAppendIn(data);
|
|
@@ -58,20 +43,26 @@ var Group = /** @class */ (function () {
|
|
|
58
43
|
});
|
|
59
44
|
return;
|
|
60
45
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
else if (data.children && data.children.length > 0) {
|
|
67
|
-
// 表示当前添加的节点是一个新增的group
|
|
46
|
+
group.addChild(data.id);
|
|
47
|
+
_this.nodeGroupMap.set(data.id, group.id);
|
|
48
|
+
group.setAllowAppendChild(false);
|
|
49
|
+
// 如果这个节点是分组,那么将其子节点也记录下来
|
|
50
|
+
if (nodeModel.isGroup) {
|
|
68
51
|
data.children.forEach(function (nodeId) {
|
|
69
52
|
_this.nodeGroupMap.set(nodeId, data.id);
|
|
70
53
|
});
|
|
54
|
+
_this.nodeSelected({ data: data, isSelected: false, isMultiple: false });
|
|
71
55
|
}
|
|
72
56
|
};
|
|
73
57
|
this.deleteGroupChild = function (_a) {
|
|
74
58
|
var data = _a.data;
|
|
59
|
+
// 如果删除的是分组节点,则同时删除分组的子节点
|
|
60
|
+
if (data.children) {
|
|
61
|
+
data.children.forEach(function (nodeId) {
|
|
62
|
+
_this.nodeGroupMap.delete(nodeId);
|
|
63
|
+
_this.lf.deleteNode(nodeId);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
75
66
|
var groupId = _this.nodeGroupMap.get(data.id);
|
|
76
67
|
if (groupId) {
|
|
77
68
|
var group = _this.lf.getNodeModelById(groupId);
|
|
@@ -82,7 +73,8 @@ var Group = /** @class */ (function () {
|
|
|
82
73
|
this.setActiveGroup = function (_a) {
|
|
83
74
|
var data = _a.data;
|
|
84
75
|
var nodeModel = _this.lf.getNodeModelById(data.id);
|
|
85
|
-
var
|
|
76
|
+
var bounds = nodeModel.getBounds();
|
|
77
|
+
var newGroup = _this.getGroup(bounds, data);
|
|
86
78
|
if (_this.activeGroup) {
|
|
87
79
|
_this.activeGroup.setAllowAppendChild(false);
|
|
88
80
|
}
|
|
@@ -95,6 +87,65 @@ var Group = /** @class */ (function () {
|
|
|
95
87
|
_this.activeGroup = newGroup;
|
|
96
88
|
_this.activeGroup.setAllowAppendChild(true);
|
|
97
89
|
};
|
|
90
|
+
/**
|
|
91
|
+
* 1. 分组节点默认在普通节点下面。
|
|
92
|
+
* 2. 分组节点被选中后,会将分组节点以及其内部的其他分组节点放到其余分组节点的上面。
|
|
93
|
+
* 3. 分组节点取消选中后,不会将分组节点重置为原来的高度。
|
|
94
|
+
* 4. 由于LogicFlow核心目标是支持用户手动绘制流程图,所以不考虑一张流程图超过1000个分组节点的情况。
|
|
95
|
+
*/
|
|
96
|
+
this.nodeSelected = function (_a) {
|
|
97
|
+
var data = _a.data, isMultiple = _a.isMultiple, isSelected = _a.isSelected;
|
|
98
|
+
var nodeModel = _this.lf.getNodeModelById(data.id);
|
|
99
|
+
_this.toFrontGroup(nodeModel);
|
|
100
|
+
// 重置所有的group zIndex,防止group节点zIndex增长为正。
|
|
101
|
+
if (_this.topGroupZIndex > DEFAULT_TOP_Z_INDEX) {
|
|
102
|
+
_this.topGroupZIndex = DEFAULT_BOTTOM_Z_INDEX;
|
|
103
|
+
var allGroups = _this.lf.graphModel.nodes
|
|
104
|
+
.filter(function (node) { return node.isGroup; })
|
|
105
|
+
.sort(function (a, b) { return a.zIndex - b.zIndex; });
|
|
106
|
+
var preZIndex = 0;
|
|
107
|
+
for (var i = 0; i < allGroups.length; i++) {
|
|
108
|
+
var group = allGroups[i];
|
|
109
|
+
if (group.zIndex !== preZIndex) {
|
|
110
|
+
_this.topGroupZIndex++;
|
|
111
|
+
preZIndex = group.zIndex;
|
|
112
|
+
}
|
|
113
|
+
group.setZIndex(_this.topGroupZIndex);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// FIX #1004
|
|
117
|
+
// 如果节点被多选,
|
|
118
|
+
// 这个节点是分组,则将分组的所有子节点取消选中
|
|
119
|
+
// 这个节点是分组的子节点,且其所属分组节点已选,则取消选中
|
|
120
|
+
if (isMultiple && isSelected) {
|
|
121
|
+
if (nodeModel.isGroup) {
|
|
122
|
+
nodeModel.children.forEach(function (child) {
|
|
123
|
+
var childModel = _this.lf.graphModel.getElement(child);
|
|
124
|
+
childModel.setSelected(false);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
var groupId = _this.nodeGroupMap.get(data.id);
|
|
129
|
+
if (groupId) {
|
|
130
|
+
var groupModel = _this.lf.getNodeModelById(groupId);
|
|
131
|
+
groupModel.isSelected && nodeModel.setSelected(false);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
this.toFrontGroup = function (model) {
|
|
137
|
+
if (!model || !model.isGroup) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
_this.topGroupZIndex++;
|
|
141
|
+
model.setZIndex(_this.topGroupZIndex);
|
|
142
|
+
if (model.children) {
|
|
143
|
+
model.children.forEach(function (nodeId) {
|
|
144
|
+
var node = _this.lf.getNodeModelById(nodeId);
|
|
145
|
+
_this.toFrontGroup(node);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
};
|
|
98
149
|
lf.register(GroupNode);
|
|
99
150
|
this.lf = lf;
|
|
100
151
|
lf.graphModel.addNodeMoveRules(function (model, deltaX, deltaY) {
|
|
@@ -104,34 +155,23 @@ var Group = /** @class */ (function () {
|
|
|
104
155
|
return true;
|
|
105
156
|
}
|
|
106
157
|
var groupModel = lf.getNodeModelById(_this.nodeGroupMap.get(model.id));
|
|
107
|
-
|
|
108
|
-
if (groupModel && groupModel.isRestrict) {
|
|
109
|
-
// 如果移动的节点存在分组中,且这个分组禁止子节点移出去。
|
|
158
|
+
if (groupModel && groupModel.isRestrict) { // 如果移动的节点存在分组中,且这个分组禁止子节点移出去。
|
|
110
159
|
var _a = model.getBounds(), x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;
|
|
111
|
-
|
|
160
|
+
var r = groupModel.isAllowMoveTo({
|
|
112
161
|
x1: x1 + deltaX,
|
|
113
162
|
y1: y1 + deltaY,
|
|
114
163
|
x2: x2 + deltaX,
|
|
115
164
|
y2: y2 + deltaY,
|
|
116
165
|
});
|
|
166
|
+
return r;
|
|
117
167
|
}
|
|
118
|
-
|
|
119
|
-
// 如果移动的是分组,那么分组的子节点也跟着移动。
|
|
120
|
-
if (allowMove === true) {
|
|
121
|
-
lf.graphModel.moveNodes(__spread(model.getChildren()), deltaX, deltaY, true);
|
|
122
|
-
}
|
|
123
|
-
else if (typeof allowMove !== 'boolean') {
|
|
124
|
-
lf.graphModel.moveNodes(__spread(model.getChildren()), allowMove.x ? deltaX : 0, allowMove.y ? deltaY : 0, true);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return allowMove;
|
|
168
|
+
return true;
|
|
128
169
|
});
|
|
129
170
|
lf.graphModel.group = this;
|
|
130
|
-
lf.on('node:add', this.appendNodeToGroup);
|
|
171
|
+
lf.on('node:add,node:drop,node:dnd-add', this.appendNodeToGroup);
|
|
131
172
|
lf.on('node:delete', this.deleteGroupChild);
|
|
132
|
-
lf.on('node:
|
|
133
|
-
lf.on('node:
|
|
134
|
-
lf.on('node:drag', this.setActiveGroup);
|
|
173
|
+
lf.on('node:dnd-drag,node:drag', this.setActiveGroup);
|
|
174
|
+
lf.on('node:click', this.nodeSelected);
|
|
135
175
|
lf.on('graph:rendered', this.graphRendered);
|
|
136
176
|
}
|
|
137
177
|
/**
|
|
@@ -153,33 +193,22 @@ var Group = /** @class */ (function () {
|
|
|
153
193
|
};
|
|
154
194
|
/**
|
|
155
195
|
* 获取自定位置其所属分组
|
|
196
|
+
* 当分组重合时,优先返回最上层的分组
|
|
156
197
|
*/
|
|
157
|
-
Group.prototype.getGroup = function (
|
|
158
|
-
if (nodeModel.nestable === false) {
|
|
159
|
-
return null;
|
|
160
|
-
}
|
|
161
|
-
var bounds = nodeModel.getBounds();
|
|
198
|
+
Group.prototype.getGroup = function (bounds, nodeData) {
|
|
162
199
|
var nodes = this.lf.graphModel.nodes;
|
|
163
|
-
var
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if (!model.isInRange(selectedModel.getBounds())) {
|
|
173
|
-
selectedModel = model;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
selectedModel = model;
|
|
179
|
-
}
|
|
200
|
+
var groups = nodes.filter(function (node) { return node.isGroup && node.isInRange(bounds) && node.id !== nodeData.id; });
|
|
201
|
+
if (groups.length === 0)
|
|
202
|
+
return;
|
|
203
|
+
if (groups.length === 1)
|
|
204
|
+
return groups[0];
|
|
205
|
+
var topGroup = groups[groups.length - 1];
|
|
206
|
+
for (var i = groups.length - 2; i >= 0; i--) {
|
|
207
|
+
if (groups[i].zIndex > topGroup.zIndex) {
|
|
208
|
+
topGroup = groups[i];
|
|
180
209
|
}
|
|
181
210
|
}
|
|
182
|
-
return
|
|
211
|
+
return topGroup;
|
|
183
212
|
};
|
|
184
213
|
/**
|
|
185
214
|
* 获取某个节点所属的groupModel
|
package/es/style/index.css
CHANGED
|
@@ -164,6 +164,16 @@
|
|
|
164
164
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACL0lEQVRoQ+1YT2vUQBT/vS+Smc3u0ZtfwA+hUKEttIIVbMEWrGAL3UItqKCCCipooS3Ynu29ePfqLcnO5Nov0NsrWbc0myxtJpNmGZw9LZk37/3+vCTzQnD8R47jhycwbQe9A94BSwV8C1kKaL3dO2AtoWWC/8+BMJB9ItwHcM6MX0mqtm1EzOU7Y8bvJFV9k3zGDnSFPAVw76oIb8ZavzIpehnbE+Ilg/J7/8Za3THJVYfAHwB3x4owXsSpemNSuCs6zwEu7rl9AmEgt4hQspkIa5FS76uQCKV8RoxSLDP6pi1p7EAGsCvEBkA7ZbC0EuvBp+tI9IR4yqBSDIE3Iq13qwiQj6lFYEgikOsgvC4VJDyJlfo6CUg3kI9BmLBG67EevDUFn8XXJpBt7km5yox3xcIMfpRo/SN/PZRygRhj17J1JqwmSn2oA96awL926iwD/LEIgJjmo3RwMCQadGaZePh/3H5ejrT+XBd8IwSGJKRcAuPLhHZ6mIkMxlFpjbEUp+qbDfjGCGSJQiEWCfS9CiAmLCZK7VWJvSnG6h4oJu8FnTkm3r+uKDHNReng8CZgVdcbJTBqpxkwfk4EQJiJlTquCq5KnCeQV8npFnL6Jnb6Mer0i8zpo4TThzmnj9OjGXardDBrZqDZbmMmdnukdH6oL3xWOTG1vNh6oxn7AYB2PqtUOWC1GdP4Ya5N8I0ONG0Dv6znHZiW8t6BaSvvHfAONKSAf4w2JGTtNBey0xBAkjSEzwAAAABJRU5ErkJggg==');
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
+
.lf-mini-map-no-header {
|
|
168
|
+
padding-top: 0;
|
|
169
|
+
}
|
|
170
|
+
.lf-mini-map-no-header .lf-mini-map-header {
|
|
171
|
+
display: none;
|
|
172
|
+
}
|
|
173
|
+
.lf-mini-map-no-close-icon .lf-mini-map-close{
|
|
174
|
+
display: none;
|
|
175
|
+
}
|
|
176
|
+
|
|
167
177
|
/* 节点调整 */
|
|
168
178
|
|
|
169
179
|
.lf-resize-control-0{
|