@logicflow/extension 1.1.0-alpha.0 → 1.1.0-alpha.4
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 +2 -1
- package/cjs/NodeResize/Control/Util.js +1 -0
- package/cjs/NodeResize/Node/EllipseResize.js +1 -17
- package/cjs/NodeResize/Node/HtmlResize.js +72 -0
- package/cjs/NodeResize/index.js +6 -0
- package/cjs/components/context-menu/index.js +4 -1
- package/cjs/components/menu/index.js +3 -3
- package/cjs/group-shrink/index.js +213 -0
- package/cjs/index.js +1 -0
- package/cjs/materials/group/GroupNode.js +186 -23
- package/cjs/materials/group/index.js +28 -9
- package/cjs/style/index.css +3 -2
- package/cjs/tools/snapshot/index.js +7 -2
- package/es/NodeResize/Control/Control.js +2 -1
- package/es/NodeResize/Control/Util.d.ts +1 -0
- package/es/NodeResize/Control/Util.js +1 -0
- package/es/NodeResize/Node/EllipseResize.js +1 -17
- package/es/NodeResize/Node/HtmlResize.d.ts +20 -0
- package/es/NodeResize/Node/HtmlResize.js +70 -0
- package/es/NodeResize/index.js +6 -0
- package/es/components/context-menu/index.d.ts +1 -0
- package/es/components/context-menu/index.js +4 -1
- package/es/components/menu/index.js +3 -3
- package/es/group-shrink/index.d.ts +28 -0
- package/es/group-shrink/index.js +210 -0
- package/es/index.d.ts +1 -0
- package/es/index.js +1 -0
- package/es/materials/group/GroupNode.d.ts +35 -11
- package/es/materials/group/GroupNode.js +187 -24
- package/es/materials/group/index.d.ts +3 -1
- package/es/materials/group/index.js +27 -9
- package/es/style/index.css +3 -2
- package/es/tools/snapshot/index.js +7 -2
- 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/GroupShrink.js +1 -0
- 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 +3 -2
- package/package.json +2 -2
- package/types/NodeResize/Control/Util.d.ts +1 -0
- package/types/NodeResize/Node/HtmlResize.d.ts +20 -0
- package/types/components/context-menu/index.d.ts +1 -0
- package/types/group-shrink/index.d.ts +28 -0
- package/types/index.d.ts +1 -0
- package/types/materials/group/GroupNode.d.ts +35 -11
- package/types/materials/group/index.d.ts +3 -1
- package/cjs/NodeResize/BasicShape/Ellipse.js +0 -21
- package/es/NodeResize/BasicShape/Ellipse.d.ts +0 -2
- package/es/NodeResize/BasicShape/Ellipse.js +0 -18
|
@@ -270,7 +270,8 @@ var Control = /** @class */ (function (_super) {
|
|
|
270
270
|
_this.onDraging = function (_a) {
|
|
271
271
|
var deltaX = _a.deltaX, deltaY = _a.deltaY;
|
|
272
272
|
var modelType = _this.nodeModel.modelType;
|
|
273
|
-
|
|
273
|
+
// html和矩形的计算方式是一样的,共用一个方法
|
|
274
|
+
if (modelType === Util_1.ModelType.RECT_NODE || modelType === Util_1.ModelType.HTML_NODE) {
|
|
274
275
|
_this.updateRect({ deltaX: deltaX, deltaY: deltaY });
|
|
275
276
|
}
|
|
276
277
|
else if (modelType === Util_1.ModelType.ELLIPSE_NODE) {
|
|
@@ -7,6 +7,7 @@ var ModelType;
|
|
|
7
7
|
ModelType["CIRCLE_NODE"] = "circle-node";
|
|
8
8
|
ModelType["POLYGON_NODE"] = "polygon-node";
|
|
9
9
|
ModelType["RECT_NODE"] = "rect-node";
|
|
10
|
+
ModelType["HTML_NODE"] = "html-node";
|
|
10
11
|
ModelType["TEXT_NODE"] = "text-node";
|
|
11
12
|
ModelType["ELLIPSE_NODE"] = "ellipse-node";
|
|
12
13
|
ModelType["DIAMOND_NODE"] = "diamond-node";
|
|
@@ -12,21 +12,9 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
12
12
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
13
|
};
|
|
14
14
|
})();
|
|
15
|
-
var __assign = (this && this.__assign) || function () {
|
|
16
|
-
__assign = Object.assign || function(t) {
|
|
17
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
18
|
-
s = arguments[i];
|
|
19
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
20
|
-
t[p] = s[p];
|
|
21
|
-
}
|
|
22
|
-
return t;
|
|
23
|
-
};
|
|
24
|
-
return __assign.apply(this, arguments);
|
|
25
|
-
};
|
|
26
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
16
|
var core_1 = require("@logicflow/core");
|
|
28
17
|
var ControlGroup_1 = require("../Control/ControlGroup");
|
|
29
|
-
var Ellipse_1 = require("../BasicShape/Ellipse");
|
|
30
18
|
var EllipseResizeModel = /** @class */ (function (_super) {
|
|
31
19
|
__extends(EllipseResizeModel, _super);
|
|
32
20
|
function EllipseResizeModel(data, graphModel) {
|
|
@@ -68,11 +56,7 @@ var EllipseResizeView = /** @class */ (function (_super) {
|
|
|
68
56
|
};
|
|
69
57
|
// getResizeShape绘制图形,功能等同于基础椭圆的getShape功能,可以通过复写此方法,进行节点自定义
|
|
70
58
|
EllipseResizeView.prototype.getResizeShape = function () {
|
|
71
|
-
|
|
72
|
-
var rx = model.rx, ry = model.ry, x = model.x, y = model.y;
|
|
73
|
-
var style = model.getNodeStyle();
|
|
74
|
-
return (core_1.h("g", null,
|
|
75
|
-
core_1.h(Ellipse_1.default, __assign({}, style, { rx: rx, ry: ry, x: x, y: y }))));
|
|
59
|
+
return _super.prototype.getShape.call(this);
|
|
76
60
|
};
|
|
77
61
|
EllipseResizeView.prototype.getShape = function () {
|
|
78
62
|
var model = this.props.model;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
extendStatics(d, b);
|
|
11
|
+
function __() { this.constructor = d; }
|
|
12
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
var core_1 = require("@logicflow/core");
|
|
17
|
+
var ControlGroup_1 = require("../Control/ControlGroup");
|
|
18
|
+
var HtmlResizeModel = /** @class */ (function (_super) {
|
|
19
|
+
__extends(HtmlResizeModel, _super);
|
|
20
|
+
function HtmlResizeModel() {
|
|
21
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
22
|
+
_this.minWidth = 30;
|
|
23
|
+
_this.minHeight = 30;
|
|
24
|
+
_this.maxWidth = 2000;
|
|
25
|
+
_this.maxHeight = 2000;
|
|
26
|
+
return _this;
|
|
27
|
+
}
|
|
28
|
+
HtmlResizeModel.prototype.getOutlineStyle = function () {
|
|
29
|
+
var style = _super.prototype.getOutlineStyle.call(this);
|
|
30
|
+
style.stroke = 'none';
|
|
31
|
+
if (style.hover) {
|
|
32
|
+
style.hover.stroke = 'none';
|
|
33
|
+
}
|
|
34
|
+
return style;
|
|
35
|
+
};
|
|
36
|
+
HtmlResizeModel.prototype.setAttributes = function () {
|
|
37
|
+
// @ts-ignore
|
|
38
|
+
var nodeSize = this.properties.nodeSize;
|
|
39
|
+
if (nodeSize) {
|
|
40
|
+
this.width = nodeSize.width;
|
|
41
|
+
this.height = nodeSize.height;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
return HtmlResizeModel;
|
|
45
|
+
}(core_1.HtmlNodeModel));
|
|
46
|
+
var HtmlResizeView = /** @class */ (function (_super) {
|
|
47
|
+
__extends(HtmlResizeView, _super);
|
|
48
|
+
function HtmlResizeView() {
|
|
49
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
50
|
+
}
|
|
51
|
+
HtmlResizeView.prototype.getControlGroup = function () {
|
|
52
|
+
var _a = this.props, model = _a.model, graphModel = _a.graphModel;
|
|
53
|
+
return (core_1.h(ControlGroup_1.default, { model: model, graphModel: graphModel }));
|
|
54
|
+
};
|
|
55
|
+
// getResizeShape绘制图形,功能等同于基础矩形的getShape功能,可以通过复写此方法,进行节点自定义
|
|
56
|
+
HtmlResizeView.prototype.getResizeShape = function () {
|
|
57
|
+
return _super.prototype.getShape.call(this);
|
|
58
|
+
};
|
|
59
|
+
HtmlResizeView.prototype.getShape = function () {
|
|
60
|
+
var isSelected = this.props.model.isSelected;
|
|
61
|
+
return (core_1.h("g", null,
|
|
62
|
+
this.getResizeShape(),
|
|
63
|
+
isSelected ? this.getControlGroup() : ''));
|
|
64
|
+
};
|
|
65
|
+
return HtmlResizeView;
|
|
66
|
+
}(core_1.HtmlNode));
|
|
67
|
+
var HtmlResize = {
|
|
68
|
+
type: 'html',
|
|
69
|
+
view: HtmlResizeView,
|
|
70
|
+
model: HtmlResizeModel,
|
|
71
|
+
};
|
|
72
|
+
exports.default = HtmlResize;
|
package/cjs/NodeResize/index.js
CHANGED
|
@@ -7,6 +7,7 @@ var EllipseResize_1 = require("./Node/EllipseResize");
|
|
|
7
7
|
exports.EllipseResize = EllipseResize_1.default;
|
|
8
8
|
var DiamondResize_1 = require("./Node/DiamondResize");
|
|
9
9
|
exports.DiamondResize = DiamondResize_1.default;
|
|
10
|
+
var HtmlResize_1 = require("./Node/HtmlResize");
|
|
10
11
|
var NodeResize = {
|
|
11
12
|
pluginName: 'nodeResize',
|
|
12
13
|
// 拖动step
|
|
@@ -62,6 +63,11 @@ var NodeResize = {
|
|
|
62
63
|
view: DiamondResize_1.default.view,
|
|
63
64
|
model: DiamondResize_1.default.model,
|
|
64
65
|
});
|
|
66
|
+
lf.register({
|
|
67
|
+
type: HtmlResize_1.default.type,
|
|
68
|
+
view: HtmlResize_1.default.view,
|
|
69
|
+
model: HtmlResize_1.default.model,
|
|
70
|
+
});
|
|
65
71
|
},
|
|
66
72
|
};
|
|
67
73
|
exports.NodeResize = NodeResize;
|
|
@@ -33,7 +33,7 @@ var ContextMenu = /** @class */ (function () {
|
|
|
33
33
|
this.__menuDOM.className = 'lf-inner-context';
|
|
34
34
|
this.menuTypeMap.set(COMMON_TYPE_KEY, []);
|
|
35
35
|
this.lf.setContextMenuByType = function (type, menus) {
|
|
36
|
-
_this.
|
|
36
|
+
_this.setContextMenuByType(type, menus);
|
|
37
37
|
};
|
|
38
38
|
this.lf.setContextMenuItems = function (menus) {
|
|
39
39
|
_this.setContextMenuItems(menus);
|
|
@@ -63,6 +63,9 @@ var ContextMenu = /** @class */ (function () {
|
|
|
63
63
|
_this.hideContextMenu();
|
|
64
64
|
});
|
|
65
65
|
};
|
|
66
|
+
ContextMenu.prototype.setContextMenuByType = function (type, menus) {
|
|
67
|
+
this.menuTypeMap.set(type, menus);
|
|
68
|
+
};
|
|
66
69
|
/**
|
|
67
70
|
* 隐藏菜单
|
|
68
71
|
*/
|
|
@@ -33,13 +33,13 @@ var Menu = /** @class */ (function () {
|
|
|
33
33
|
this.lf = lf;
|
|
34
34
|
this.menuTypeMap = new Map();
|
|
35
35
|
this.init();
|
|
36
|
-
this.lf.
|
|
36
|
+
this.lf.setMenuConfig = function (config) {
|
|
37
37
|
_this.setMenuConfig(config);
|
|
38
38
|
};
|
|
39
|
-
this.lf.
|
|
39
|
+
this.lf.addMenuConfig = function (config) {
|
|
40
40
|
_this.addMenuConfig(config);
|
|
41
41
|
};
|
|
42
|
-
this.lf.
|
|
42
|
+
this.lf.setMenuByType = function (config) {
|
|
43
43
|
_this.setMenuByType(config);
|
|
44
44
|
};
|
|
45
45
|
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
14
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
15
|
+
if (!m) return o;
|
|
16
|
+
var i = m.call(o), r, ar = [], e;
|
|
17
|
+
try {
|
|
18
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
19
|
+
}
|
|
20
|
+
catch (error) { e = { error: error }; }
|
|
21
|
+
finally {
|
|
22
|
+
try {
|
|
23
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
24
|
+
}
|
|
25
|
+
finally { if (e) throw e.error; }
|
|
26
|
+
}
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
var __spread = (this && this.__spread) || function () {
|
|
30
|
+
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.GroupShrink = void 0;
|
|
35
|
+
var lodash_es_1 = require("lodash-es");
|
|
36
|
+
var GroupShrink = /** @class */ (function () {
|
|
37
|
+
function GroupShrink(_a) {
|
|
38
|
+
var _this = this;
|
|
39
|
+
var lf = _a.lf;
|
|
40
|
+
var _b;
|
|
41
|
+
this.group = null; // group节点
|
|
42
|
+
this.lf = null; // lf 实例
|
|
43
|
+
this.shrinkWidth = 100; // 收缩后节点宽度
|
|
44
|
+
this.shrinkHeight = 60; // 收缩后节点高度
|
|
45
|
+
this.getGraphDataWithGroup = function () {
|
|
46
|
+
var _a = _this.lf.graphModel.modelToGraphData(), nodes = _a.nodes, edges = _a.edges;
|
|
47
|
+
var groupNodes = [];
|
|
48
|
+
var groupEdges = [];
|
|
49
|
+
var shrinkedGroupIds = [];
|
|
50
|
+
nodes.forEach(function (node) {
|
|
51
|
+
if (node.type === 'group' && node.properties.shrinkProperty && node.properties.shrinkProperty) {
|
|
52
|
+
var _a = node.properties.shrinkProperty, shrinked = _a.shrinked, groupNode = _a.groupNode, innerNodes = _a.innerNodes, innerEdges = _a.innerEdges;
|
|
53
|
+
if (shrinked) {
|
|
54
|
+
// 是收缩状态下的分组节点,需要恢复原来的节点和边
|
|
55
|
+
node = groupNode;
|
|
56
|
+
groupNodes = __spread(groupNodes, innerNodes);
|
|
57
|
+
groupEdges = __spread(groupEdges, innerEdges);
|
|
58
|
+
shrinkedGroupIds.push(groupNode.id);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// 移除与收缩分组节点相连的边
|
|
63
|
+
if (shrinkedGroupIds.length) {
|
|
64
|
+
lodash_es_1.remove(edges, function (edge) {
|
|
65
|
+
var sourceNodeId = edge.sourceNodeId, targetNodeId = edge.targetNodeId;
|
|
66
|
+
return shrinkedGroupIds.indexOf(sourceNodeId) > -1
|
|
67
|
+
|| shrinkedGroupIds.indexOf(targetNodeId) > -1;
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
nodes: __spread(nodes, groupNodes),
|
|
72
|
+
edges: __spread(edges, groupEdges),
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
this.lf = lf;
|
|
76
|
+
this.lf.extension = __assign(__assign({}, ((_b = this.lf.extension) !== null && _b !== void 0 ? _b : {})), { groupShrink: this });
|
|
77
|
+
this.lf.getGraphData = this.getGraphDataWithGroup;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 收缩
|
|
81
|
+
*/
|
|
82
|
+
GroupShrink.prototype.startShrink = function (group) {
|
|
83
|
+
var _this = this;
|
|
84
|
+
if (group.type !== 'group') {
|
|
85
|
+
throw new Error('Only groupNode can be shrinked!');
|
|
86
|
+
}
|
|
87
|
+
this.group = group;
|
|
88
|
+
var nodeModel = this.lf.getNodeModelById(group.id);
|
|
89
|
+
var shrinkConfig = nodeModel.getProperties().shrinkProperty;
|
|
90
|
+
if (shrinkConfig && shrinkConfig.shrinked) {
|
|
91
|
+
throw new Error('GroupNode which is shrinked cannot be shrinked again!');
|
|
92
|
+
}
|
|
93
|
+
var shrinkProperty = {
|
|
94
|
+
shrinked: true,
|
|
95
|
+
groupNode: __assign({}, this.group),
|
|
96
|
+
innerNodes: [],
|
|
97
|
+
innerEdges: [],
|
|
98
|
+
};
|
|
99
|
+
var newEdges = []; // 需要重新生成的边
|
|
100
|
+
var innerNodes = []; // 分组内节点
|
|
101
|
+
var innerEdges = []; // 分组内部边
|
|
102
|
+
var minX = null;
|
|
103
|
+
var minY = null;
|
|
104
|
+
// 处理分组内的节点和边
|
|
105
|
+
if (this.group && this.group.children && this.group.children.length) {
|
|
106
|
+
var edgesInfo = this.getGroupEdges();
|
|
107
|
+
newEdges = edgesInfo.newEdges;
|
|
108
|
+
innerEdges = edgesInfo.innerEdges;
|
|
109
|
+
var nodesInfo = this.getGroupNodes();
|
|
110
|
+
innerNodes = nodesInfo.innerNodes; // 分组内节点信息
|
|
111
|
+
minX = nodesInfo.minX; // 左上角节点的x
|
|
112
|
+
minY = nodesInfo.minY; // 左上角节点的y
|
|
113
|
+
}
|
|
114
|
+
shrinkProperty.innerNodes = innerNodes;
|
|
115
|
+
shrinkProperty.innerEdges = innerEdges;
|
|
116
|
+
this.lf.setProperties(this.group.id, { shrinkProperty: shrinkProperty }); // 分组节点收缩前状态、分组内节点、分组内边存入properties
|
|
117
|
+
// 收缩后的分组节点移动到分组内左上角的节点位置
|
|
118
|
+
nodeModel.x = minX || this.group.x;
|
|
119
|
+
nodeModel.y = minY || this.group.y;
|
|
120
|
+
// 收缩,调整节点大小
|
|
121
|
+
nodeModel.width = this.shrinkWidth;
|
|
122
|
+
nodeModel.height = this.shrinkHeight;
|
|
123
|
+
// 生成与分组节点相连的边
|
|
124
|
+
newEdges.forEach(function (edgeConfig) {
|
|
125
|
+
_this.lf.addEdge(edgeConfig);
|
|
126
|
+
});
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* 展开
|
|
130
|
+
*/
|
|
131
|
+
GroupShrink.prototype.startExpand = function (group) {
|
|
132
|
+
var _this = this;
|
|
133
|
+
this.group = group;
|
|
134
|
+
var nodeModel = this.lf.getNodeModelById(group.id);
|
|
135
|
+
var _a = nodeModel.getProperties().shrinkProperty, shrinkProperty = _a === void 0 ? {} : _a;
|
|
136
|
+
var shrinked = shrinkProperty.shrinked, groupNode = shrinkProperty.groupNode, innerNodes = shrinkProperty.innerNodes, innerEdges = shrinkProperty.innerEdges;
|
|
137
|
+
if (!shrinked) {
|
|
138
|
+
throw new Error('GroupNode which is not shrinked cannot be expanded');
|
|
139
|
+
}
|
|
140
|
+
// 重新渲染分组节点
|
|
141
|
+
this.lf.deleteNode(group.id);
|
|
142
|
+
this.lf.addNode(groupNode);
|
|
143
|
+
// 恢复分组内的节点
|
|
144
|
+
innerNodes.forEach(function (item) {
|
|
145
|
+
_this.lf.addNode(item);
|
|
146
|
+
});
|
|
147
|
+
// 恢复分组内的节点上所有边
|
|
148
|
+
innerEdges.forEach(function (item) {
|
|
149
|
+
_this.lf.addEdge(item);
|
|
150
|
+
});
|
|
151
|
+
// 修改properties
|
|
152
|
+
this.lf.setProperties(group.id, { shrinkProperty: { shrinked: false } });
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* 获取分组内的节点上的所有边,以及计算新的分组节点需要连接的边,之后删除原来的边
|
|
156
|
+
*/
|
|
157
|
+
GroupShrink.prototype.getGroupEdges = function () {
|
|
158
|
+
var _this = this;
|
|
159
|
+
var edges = this.lf.graphModel.modelToGraphData().edges;
|
|
160
|
+
var children = this.group.children;
|
|
161
|
+
var innerEdges = [];
|
|
162
|
+
var newEdges = [];
|
|
163
|
+
edges.forEach(function (item) {
|
|
164
|
+
var startInGroup = children.indexOf(item.sourceNodeId) > -1;
|
|
165
|
+
var endInGroup = children.indexOf(item.targetNodeId) > -1;
|
|
166
|
+
if (startInGroup || endInGroup) {
|
|
167
|
+
innerEdges.push(item);
|
|
168
|
+
if (startInGroup && !endInGroup) {
|
|
169
|
+
// 从分组内向外的边
|
|
170
|
+
newEdges.push({
|
|
171
|
+
sourceNodeId: _this.group.id,
|
|
172
|
+
targetNodeId: item.targetNodeId,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
if (!startInGroup && endInGroup) {
|
|
176
|
+
// 从外部指向分组内的
|
|
177
|
+
newEdges.push({
|
|
178
|
+
sourceNodeId: item.sourceNodeId,
|
|
179
|
+
targetNodeId: _this.group.id,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
_this.lf.deleteEdge(item.id);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
return { innerEdges: innerEdges, newEdges: newEdges };
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* 获取分组内的节点和左上角节点,获取到有效信息后,删除节点
|
|
189
|
+
*/
|
|
190
|
+
GroupShrink.prototype.getGroupNodes = function () {
|
|
191
|
+
var _this = this;
|
|
192
|
+
var innerNodes = [];
|
|
193
|
+
var nodes = this.lf.graphModel.modelToGraphData().nodes;
|
|
194
|
+
var children = this.group.children;
|
|
195
|
+
var minX = null;
|
|
196
|
+
var minY = null;
|
|
197
|
+
// 遍历所有节点,在分组内的, 暂存&删除
|
|
198
|
+
nodes.forEach(function (item) {
|
|
199
|
+
if (children.indexOf(item.id) > -1) {
|
|
200
|
+
innerNodes.push(item);
|
|
201
|
+
if ((!minX || item.x < minX) && (!minY || item.y < minY)) {
|
|
202
|
+
minX = item.x;
|
|
203
|
+
minY = item.y;
|
|
204
|
+
}
|
|
205
|
+
_this.lf.deleteNode(item.id);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
return { innerNodes: innerNodes, minX: minX, minY: minY };
|
|
209
|
+
};
|
|
210
|
+
GroupShrink.pluginName = 'group-shrink';
|
|
211
|
+
return GroupShrink;
|
|
212
|
+
}());
|
|
213
|
+
exports.GroupShrink = GroupShrink;
|
package/cjs/index.js
CHANGED
|
@@ -29,3 +29,4 @@ __exportStar(require("./tools/flow-path"), exports);
|
|
|
29
29
|
__exportStar(require("./tools/auto-layout"), exports);
|
|
30
30
|
__exportStar(require("./bpmn-adapter/xml2json"), exports);
|
|
31
31
|
__exportStar(require("./bpmn-adapter/json2xml"), exports);
|
|
32
|
+
__exportStar(require("./group-shrink"), exports);
|
|
@@ -12,6 +12,17 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
12
12
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
13
|
};
|
|
14
14
|
})();
|
|
15
|
+
var __assign = (this && this.__assign) || function () {
|
|
16
|
+
__assign = Object.assign || function(t) {
|
|
17
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
18
|
+
s = arguments[i];
|
|
19
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
20
|
+
t[p] = s[p];
|
|
21
|
+
}
|
|
22
|
+
return t;
|
|
23
|
+
};
|
|
24
|
+
return __assign.apply(this, arguments);
|
|
25
|
+
};
|
|
15
26
|
var __read = (this && this.__read) || function (o, n) {
|
|
16
27
|
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
17
28
|
if (!m) return o;
|
|
@@ -34,27 +45,118 @@ var __spread = (this && this.__spread) || function () {
|
|
|
34
45
|
};
|
|
35
46
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
47
|
var core_1 = require("@logicflow/core");
|
|
48
|
+
var NodeResize_1 = require("../../NodeResize");
|
|
49
|
+
var defaultWidth = 500;
|
|
50
|
+
var defaultHeight = 300;
|
|
37
51
|
var GroupNodeModel = /** @class */ (function (_super) {
|
|
38
52
|
__extends(GroupNodeModel, _super);
|
|
39
53
|
function GroupNodeModel() {
|
|
40
54
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
41
55
|
_this.isGroup = true;
|
|
42
|
-
|
|
43
|
-
_this.
|
|
56
|
+
// isFolded: boolean;
|
|
57
|
+
_this.foldedWidth = 100;
|
|
58
|
+
_this.foldedHeight = 40;
|
|
59
|
+
_this.unfoldedWidth = defaultWidth;
|
|
60
|
+
_this.unfoldedHight = defaultHeight;
|
|
44
61
|
return _this;
|
|
45
62
|
}
|
|
46
|
-
GroupNodeModel.prototype.
|
|
47
|
-
this
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
63
|
+
GroupNodeModel.prototype.initNodeData = function (data) {
|
|
64
|
+
_super.prototype.initNodeData.call(this, data);
|
|
65
|
+
var children = [];
|
|
66
|
+
if (Array.isArray(data.children)) {
|
|
67
|
+
children = data.children;
|
|
68
|
+
}
|
|
69
|
+
// 初始化组的子节点
|
|
70
|
+
this.children = new Set(children);
|
|
71
|
+
this.width = defaultWidth;
|
|
72
|
+
this.height = defaultHeight;
|
|
73
|
+
// todo: 参考bpmn.js, 分组和未加入分组的节点重合时,未加入分组的节点在分组之下。方便标识。
|
|
74
|
+
this.zIndex = -1;
|
|
51
75
|
this.radius = 0;
|
|
76
|
+
this.text.editable = false;
|
|
77
|
+
this.text.draggable = false;
|
|
78
|
+
this.isRestrict = false;
|
|
79
|
+
this.resizable = false;
|
|
80
|
+
this.autoToFront = false;
|
|
81
|
+
this.isFolded = false;
|
|
82
|
+
this.properties.isFolded = false;
|
|
83
|
+
};
|
|
84
|
+
GroupNodeModel.prototype.foldGroup = function (isFolded) {
|
|
85
|
+
var _this = this;
|
|
86
|
+
this.setProperty('isFolded', isFolded);
|
|
87
|
+
if (isFolded) {
|
|
88
|
+
this.x = this.x - this.width / 2 + this.foldedWidth / 2;
|
|
89
|
+
this.y = this.y - this.height / 2 + this.foldedHeight / 2;
|
|
90
|
+
this.unfoldedWidth = this.width;
|
|
91
|
+
this.unfoldedHight = this.height;
|
|
92
|
+
this.width = this.foldedWidth;
|
|
93
|
+
this.height = this.foldedHeight;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
this.width = this.unfoldedWidth;
|
|
97
|
+
this.height = this.unfoldedHight;
|
|
98
|
+
this.x = this.x + this.width / 2 - this.foldedWidth / 2;
|
|
99
|
+
this.y = this.y + this.height / 2 - this.foldedHeight / 2;
|
|
100
|
+
}
|
|
101
|
+
// 移动分组上的连线
|
|
102
|
+
var inCommingEdges = this.graphModel.getNodeIncomingEdge(this.id);
|
|
103
|
+
var outgoingEdges = this.graphModel.getNodeOutgoingEdge(this.id);
|
|
104
|
+
inCommingEdges.concat(outgoingEdges).forEach(function (edgeModel) {
|
|
105
|
+
_this.graphModel.deleteEdgeById(edgeModel.id);
|
|
106
|
+
if (!edgeModel.isFoldedEdge) {
|
|
107
|
+
var isCommingEdge = edgeModel.targetNodeId === _this.id;
|
|
108
|
+
var data = edgeModel.getData();
|
|
109
|
+
if (isCommingEdge) {
|
|
110
|
+
data.endPoint = undefined;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
data.startPoint = undefined;
|
|
114
|
+
}
|
|
115
|
+
data.pointsList = undefined;
|
|
116
|
+
_this.graphModel.addEdge(data);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
this.children.forEach(function (elementId) {
|
|
120
|
+
var nodeModel = _this.graphModel.getElement(elementId);
|
|
121
|
+
nodeModel.visible = !isFolded;
|
|
122
|
+
_this.foldEdge(elementId, isFolded);
|
|
123
|
+
});
|
|
52
124
|
};
|
|
53
125
|
/**
|
|
54
|
-
*
|
|
126
|
+
* 折叠分组的时候,处理分组内部子节点上的连线
|
|
127
|
+
* 1. 为了保证校验规则不被打乱,所以只隐藏子节点上面的连线。
|
|
128
|
+
* 2. 重新创建一个属性一样的边。
|
|
129
|
+
* 3. 这个边拥有virtual=true的属性,表示不支持直接修改此边内容。
|
|
55
130
|
*/
|
|
56
|
-
GroupNodeModel.prototype.
|
|
57
|
-
|
|
131
|
+
GroupNodeModel.prototype.foldEdge = function (nodeId, isFolded) {
|
|
132
|
+
var _this = this;
|
|
133
|
+
var inCommingEdges = this.graphModel.getNodeIncomingEdge(nodeId);
|
|
134
|
+
var outgoingEdges = this.graphModel.getNodeOutgoingEdge(nodeId);
|
|
135
|
+
inCommingEdges.concat(outgoingEdges).forEach(function (edgeModel, index) {
|
|
136
|
+
var _a;
|
|
137
|
+
edgeModel.visible = !isFolded;
|
|
138
|
+
var isCommingEdge = edgeModel.targetNodeId === nodeId;
|
|
139
|
+
if (isFolded) {
|
|
140
|
+
var data = edgeModel.getData();
|
|
141
|
+
data.id = data.id + "__" + index;
|
|
142
|
+
if (isCommingEdge) {
|
|
143
|
+
data.endPoint = undefined;
|
|
144
|
+
data.targetNodeId = _this.id;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
data.startPoint = undefined;
|
|
148
|
+
data.sourceNodeId = _this.id;
|
|
149
|
+
}
|
|
150
|
+
data.text = (_a = data.text) === null || _a === void 0 ? void 0 : _a.value;
|
|
151
|
+
data.pointsList = undefined;
|
|
152
|
+
var model = _this.graphModel.addEdge(data);
|
|
153
|
+
model.virtual = true;
|
|
154
|
+
// 强制不保存group连线数据
|
|
155
|
+
model.getData = function () { return null; };
|
|
156
|
+
model.text.editable = false;
|
|
157
|
+
model.isFoldedEdge = true;
|
|
158
|
+
}
|
|
159
|
+
});
|
|
58
160
|
};
|
|
59
161
|
GroupNodeModel.prototype.isInRange = function (_a) {
|
|
60
162
|
var x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;
|
|
@@ -63,39 +165,100 @@ var GroupNodeModel = /** @class */ (function (_super) {
|
|
|
63
165
|
&& y1 >= (this.y - this.height / 2)
|
|
64
166
|
&& y2 <= (this.y + this.height / 2);
|
|
65
167
|
};
|
|
66
|
-
// todo: 更好的方式定义分组的样式
|
|
67
168
|
GroupNodeModel.prototype.setAllowAppendChild = function (isAllow) {
|
|
68
|
-
|
|
69
|
-
this.stroke = 'red';
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
this.stroke = 'rgb(24, 125, 255)';
|
|
73
|
-
}
|
|
169
|
+
this.setProperty('groupAddable', isAllow);
|
|
74
170
|
};
|
|
171
|
+
/**
|
|
172
|
+
* 添加分组子节点
|
|
173
|
+
* @param id 节点id
|
|
174
|
+
*/
|
|
75
175
|
GroupNodeModel.prototype.addChild = function (id) {
|
|
76
176
|
this.children.add(id);
|
|
77
177
|
};
|
|
178
|
+
/**
|
|
179
|
+
* 删除分组子节点
|
|
180
|
+
* @param id 节点id
|
|
181
|
+
*/
|
|
78
182
|
GroupNodeModel.prototype.removeChild = function (id) {
|
|
79
183
|
this.children.delete(id);
|
|
80
184
|
};
|
|
185
|
+
GroupNodeModel.prototype.getAddableOutlineStyle = function () {
|
|
186
|
+
return {
|
|
187
|
+
stroke: '#FEB663',
|
|
188
|
+
strokeWidth: 2,
|
|
189
|
+
strokeDasharray: '4 4',
|
|
190
|
+
fill: 'transparent',
|
|
191
|
+
};
|
|
192
|
+
};
|
|
81
193
|
GroupNodeModel.prototype.getData = function () {
|
|
82
194
|
var data = _super.prototype.getData.call(this);
|
|
83
195
|
data.children = __spread(this.children);
|
|
196
|
+
var properties = data.properties;
|
|
197
|
+
delete properties.groupAddable;
|
|
198
|
+
delete properties.isFolded;
|
|
84
199
|
return data;
|
|
85
200
|
};
|
|
86
201
|
return GroupNodeModel;
|
|
87
|
-
}(
|
|
202
|
+
}(NodeResize_1.RectResize.model));
|
|
88
203
|
var GroupNode = /** @class */ (function (_super) {
|
|
89
204
|
__extends(GroupNode, _super);
|
|
90
205
|
function GroupNode() {
|
|
91
206
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
92
207
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
GroupNode.prototype.
|
|
208
|
+
GroupNode.prototype.getControlGroup = function () {
|
|
209
|
+
return this.props.model.resizable ? _super.prototype.getControlGroup.call(this) : null;
|
|
210
|
+
};
|
|
211
|
+
GroupNode.prototype.getAddedableShape = function () {
|
|
212
|
+
var _a = this.props.model, width = _a.width, height = _a.height, x = _a.x, y = _a.y, radius = _a.radius, properties = _a.properties;
|
|
213
|
+
if (!properties.groupAddable)
|
|
214
|
+
return null;
|
|
215
|
+
var strokeWidth = this.props.model.getNodeStyle().strokeWidth;
|
|
216
|
+
var style = this.props.model.getAddableOutlineStyle();
|
|
217
|
+
var newWidth = width + strokeWidth + 8;
|
|
218
|
+
var newHeight = height + strokeWidth + 8;
|
|
219
|
+
return core_1.h('rect', __assign(__assign({}, style), { width: newWidth, height: newHeight, x: x - newWidth / 2, y: y - newHeight / 2, rx: radius, ry: radius }));
|
|
220
|
+
};
|
|
221
|
+
GroupNode.prototype.getFoldIcon = function () {
|
|
222
|
+
var model = this.props.model;
|
|
223
|
+
var foldX = model.x - model.width / 2 + 5;
|
|
224
|
+
var foldY = model.y - model.height / 2 + 5;
|
|
225
|
+
var iconIcon = core_1.h('path', {
|
|
226
|
+
fill: 'none',
|
|
227
|
+
stroke: '#818281',
|
|
228
|
+
strokeWidth: 2,
|
|
229
|
+
'pointer-events': 'none',
|
|
230
|
+
d: model.properties.isFolded
|
|
231
|
+
? "M " + (foldX + 3) + "," + (foldY + 6) + " " + (foldX + 11) + "," + (foldY + 6) + " M" + (foldX + 7) + "," + (foldY + 2) + " " + (foldX + 7) + "," + (foldY + 10)
|
|
232
|
+
: "M " + (foldX + 3) + "," + (foldY + 6) + " " + (foldX + 11) + "," + (foldY + 6) + " ",
|
|
233
|
+
});
|
|
234
|
+
return core_1.h('g', {}, [
|
|
235
|
+
core_1.h('rect', {
|
|
236
|
+
height: 12,
|
|
237
|
+
width: 14,
|
|
238
|
+
rx: 2,
|
|
239
|
+
ry: 2,
|
|
240
|
+
strokeWidth: 1,
|
|
241
|
+
fill: '#F4F5F6',
|
|
242
|
+
stroke: '#CECECE',
|
|
243
|
+
cursor: 'pointer',
|
|
244
|
+
x: model.x - model.width / 2 + 5,
|
|
245
|
+
y: model.y - model.height / 2 + 5,
|
|
246
|
+
onClick: function () {
|
|
247
|
+
model.foldGroup(!model.properties.isFolded);
|
|
248
|
+
},
|
|
249
|
+
}),
|
|
250
|
+
iconIcon,
|
|
251
|
+
]);
|
|
252
|
+
};
|
|
253
|
+
GroupNode.prototype.getResizeShape = function () {
|
|
254
|
+
return core_1.h('g', {}, [
|
|
255
|
+
this.getAddedableShape(),
|
|
256
|
+
_super.prototype.getResizeShape.call(this),
|
|
257
|
+
this.getFoldIcon(),
|
|
258
|
+
]);
|
|
259
|
+
};
|
|
97
260
|
return GroupNode;
|
|
98
|
-
}(
|
|
261
|
+
}(NodeResize_1.RectResize.view));
|
|
99
262
|
exports.default = {
|
|
100
263
|
type: 'group',
|
|
101
264
|
view: GroupNode,
|