@logicflow/extension 2.0.10 → 2.0.11

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.
@@ -114,10 +114,6 @@ var DynamicGroupNodeModel = /** @class */ (function (_super) {
114
114
  };
115
115
  DynamicGroupNodeModel.prototype.setAttributes = function () {
116
116
  _super.prototype.setAttributes.call(this);
117
- // 初始化时,如果 this.isCollapsed 为 true,则主动触发一次折叠操作
118
- if (this.isCollapsed) {
119
- this.toggleCollapse(true);
120
- }
121
117
  };
122
118
  DynamicGroupNodeModel.prototype.getData = function () {
123
119
  var _this = this;
@@ -342,8 +338,8 @@ var DynamicGroupNodeModel = /** @class */ (function (_super) {
342
338
  * TODO: 如何重写该方法呢?
343
339
  * @param _nodeData
344
340
  */
341
+ // eslint-disable-next-line
345
342
  DynamicGroupNodeModel.prototype.isAllowAppendIn = function (_nodeData) {
346
- console.info('_nodeData', _nodeData);
347
343
  // TODO: 此处使用 this.properties.groupAddable 还是 this.groupAddable
348
344
  // this.groupAddable 是否存在更新不及时的问题
349
345
  return true;
@@ -1,11 +1,18 @@
1
- import { GraphModel, h, RectNode } from '@logicflow/core';
1
+ import LogicFlow, { GraphModel, h, RectNode, CallbackArgs } from '@logicflow/core';
2
2
  import { DynamicGroupNodeModel } from './model';
3
+ import Position = LogicFlow.Position;
3
4
  export interface IDynamicGroupNodeProps {
4
5
  model: DynamicGroupNodeModel;
5
6
  graphModel: GraphModel;
6
7
  }
7
8
  export declare class DynamicGroupNode<P extends IDynamicGroupNodeProps = IDynamicGroupNodeProps> extends RectNode<P> {
9
+ childrenPositionMap: Map<string, Position>;
10
+ onNodeRotate: ({ model, }: Omit<CallbackArgs<'node:rotate'>, 'e' | 'position'>) => void;
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;
13
+ graphRendered: () => void;
8
14
  componentDidMount(): void;
15
+ componentWillUnmount(): void;
9
16
  /**
10
17
  * 获取分组内的节点
11
18
  * @param groupModel
@@ -24,24 +24,44 @@ var __assign = (this && this.__assign) || function () {
24
24
  };
25
25
  return __assign.apply(this, arguments);
26
26
  };
27
+ var __read = (this && this.__read) || function (o, n) {
28
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
29
+ if (!m) return o;
30
+ var i = m.call(o), r, ar = [], e;
31
+ try {
32
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
33
+ }
34
+ catch (error) { e = { error: error }; }
35
+ finally {
36
+ try {
37
+ if (r && !r.done && (m = i["return"])) m.call(i);
38
+ }
39
+ finally { if (e) throw e.error; }
40
+ }
41
+ return ar;
42
+ };
43
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
44
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
45
+ if (ar || !(i in from)) {
46
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
47
+ ar[i] = from[i];
48
+ }
49
+ }
50
+ return to.concat(ar || Array.prototype.slice.call(from));
51
+ };
27
52
  import { h, RectNode, handleResize, } from '@logicflow/core';
28
53
  import { forEach } from 'lodash-es';
29
54
  import { rotatePointAroundCenter } from '../tools/label/utils';
30
55
  var DynamicGroupNode = /** @class */ (function (_super) {
31
56
  __extends(DynamicGroupNode, _super);
32
57
  function DynamicGroupNode() {
33
- return _super !== null && _super.apply(this, arguments) || this;
34
- }
35
- DynamicGroupNode.prototype.componentDidMount = function () {
36
- var _this = this;
37
- _super.prototype.componentDidMount.call(this);
38
- var _a = this.props, curGroup = _a.model, graphModel = _a.graphModel;
39
- var eventCenter = graphModel.eventCenter;
40
- var childrenPositionMap = new Map();
41
- // 在 group 旋转时,对组内的所有子节点也进行对应的旋转计算
42
- eventCenter.on('node:rotate', function (_a) {
58
+ var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;
59
+ _this.childrenPositionMap = new Map();
60
+ _this.onNodeRotate = function (_a) {
43
61
  var model = _a.model;
44
- var _b = _this.props.model, transformWithContainer = _b.transformWithContainer, isRestrict = _b.isRestrict;
62
+ var _b = _this.props, curGroup = _b.model, graphModel = _b.graphModel;
63
+ var transformWithContainer = curGroup.transformWithContainer, isRestrict = curGroup.isRestrict;
64
+ var childrenPositionMap = _this.childrenPositionMap;
45
65
  if (!transformWithContainer || isRestrict) {
46
66
  // isRestrict限制模式下,当前model resize时不能小于占地面积
47
67
  // 由于parent:resize=>child:resize计算复杂,需要根据child:resize的判定结果来递归判断parent能否resize
@@ -75,11 +95,11 @@ var DynamicGroupNode = /** @class */ (function (_super) {
75
95
  }
76
96
  });
77
97
  }
78
- });
79
- // group 缩放时,对组内的所有子节点也进行对应的缩放计算
80
- eventCenter.on('node:resize', function (_a) {
98
+ };
99
+ _this.onNodeResize = function (_a) {
81
100
  var deltaX = _a.deltaX, deltaY = _a.deltaY, index = _a.index, model = _a.model, preData = _a.preData;
82
- var _b = _this.props.model, transformWithContainer = _b.transformWithContainer, isRestrict = _b.isRestrict;
101
+ var _b = _this.props, curGroup = _b.model, graphModel = _b.graphModel;
102
+ var transformWithContainer = curGroup.transformWithContainer, isRestrict = curGroup.isRestrict;
83
103
  if (!transformWithContainer || isRestrict) {
84
104
  // isRestrict限制模式下,当前model resize时不能小于占地面积
85
105
  // 由于parent:resize=>child:resize计算复杂,需要根据child:resize的判定结果来递归判断parent能否resize
@@ -110,16 +130,61 @@ var DynamicGroupNode = /** @class */ (function (_super) {
110
130
  }
111
131
  });
112
132
  }
113
- });
114
- // group 移动时,对组内的所有子节点也进行对应的移动计算
115
- eventCenter.on('node:mousemove', function (_a) {
133
+ };
134
+ _this.onNodeMouseMove = function (_a) {
116
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;
117
139
  if (data.id === curGroup.id) {
118
- var _b = _this.props, curGroup_1 = _b.model, graphModel_1 = _b.graphModel;
119
- var nodeIds = _this.getNodesInGroup(curGroup_1, graphModel_1);
120
- graphModel_1.moveNodes(nodeIds, deltaX, deltaY, true);
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);
121
147
  }
122
- });
148
+ };
149
+ _this.graphRendered = function () {
150
+ var model = _this.props.model;
151
+ // 初始化时,如果 this.isCollapsed 为 true,则主动触发一次折叠操作
152
+ if (model.isCollapsed) {
153
+ // https://github.com/didi/LogicFlow/issues/1918
154
+ // 当lf.render({nodes:[{分组节点}, {普通节点}]})时,由于是顺序遍历
155
+ // 会先触发分组Group节点的new Model => toggleCollapse()
156
+ // => 此时在graphModel.elementsModelMap找不到它的children,因为还没初始化,因此无法正确折叠子元素
157
+ // --------------------
158
+ // 当lf.render({nodes:[{普通节点}, {分组节点}]})时,
159
+ // 会先触发普通节点的new Model => graphModel.elementsModelMap.set(id, new Model())
160
+ // 然后再触发分组Group节点的new Model => toggleCollapse() =>
161
+ // 此时在graphModel.elementsModelMap能找到它的children了,因此可以正确折叠子元素
162
+ // --------------------
163
+ // 因此将整个初始化判断是否【主动触发一次折叠操作】放在"graph:rendered"全部渲染完成后再执行
164
+ model.toggleCollapse(true);
165
+ }
166
+ };
167
+ return _this;
168
+ }
169
+ DynamicGroupNode.prototype.componentDidMount = function () {
170
+ _super.prototype.componentDidMount.call(this);
171
+ var eventCenter = this.props.graphModel.eventCenter;
172
+ // 在 group 旋转时,对组内的所有子节点也进行对应的旋转计算
173
+ eventCenter.on('node:rotate', this.onNodeRotate);
174
+ // 在 group 缩放时,对组内的所有子节点也进行对应的缩放计算
175
+ eventCenter.on('node:resize', this.onNodeResize);
176
+ // 在 group 移动时,对组内的所有子节点也进行对应的移动计算
177
+ eventCenter.on('node:mousemove', this.onNodeMouseMove);
178
+ // 全部渲染完成后,判断是否【主动触发一次折叠操作】
179
+ eventCenter.on('graph:rendered', this.graphRendered);
180
+ };
181
+ DynamicGroupNode.prototype.componentWillUnmount = function () {
182
+ _super.prototype.componentWillUnmount.call(this);
183
+ var eventCenter = this.props.graphModel.eventCenter;
184
+ eventCenter.off('node:rotate', this.onNodeRotate);
185
+ eventCenter.off('node:resize', this.onNodeResize);
186
+ eventCenter.off('node:mousemove', this.onNodeMouseMove);
187
+ eventCenter.off('graph:rendered', this.graphRendered);
123
188
  };
124
189
  /**
125
190
  * 获取分组内的节点
@@ -117,10 +117,6 @@ var DynamicGroupNodeModel = /** @class */ (function (_super) {
117
117
  };
118
118
  DynamicGroupNodeModel.prototype.setAttributes = function () {
119
119
  _super.prototype.setAttributes.call(this);
120
- // 初始化时,如果 this.isCollapsed 为 true,则主动触发一次折叠操作
121
- if (this.isCollapsed) {
122
- this.toggleCollapse(true);
123
- }
124
120
  };
125
121
  DynamicGroupNodeModel.prototype.getData = function () {
126
122
  var _this = this;
@@ -345,8 +341,8 @@ var DynamicGroupNodeModel = /** @class */ (function (_super) {
345
341
  * TODO: 如何重写该方法呢?
346
342
  * @param _nodeData
347
343
  */
344
+ // eslint-disable-next-line
348
345
  DynamicGroupNodeModel.prototype.isAllowAppendIn = function (_nodeData) {
349
- console.info('_nodeData', _nodeData);
350
346
  // TODO: 此处使用 this.properties.groupAddable 还是 this.groupAddable
351
347
  // this.groupAddable 是否存在更新不及时的问题
352
348
  return true;
@@ -1,11 +1,18 @@
1
- import { GraphModel, h, RectNode } from '@logicflow/core';
1
+ import LogicFlow, { GraphModel, h, RectNode, CallbackArgs } from '@logicflow/core';
2
2
  import { DynamicGroupNodeModel } from './model';
3
+ import Position = LogicFlow.Position;
3
4
  export interface IDynamicGroupNodeProps {
4
5
  model: DynamicGroupNodeModel;
5
6
  graphModel: GraphModel;
6
7
  }
7
8
  export declare class DynamicGroupNode<P extends IDynamicGroupNodeProps = IDynamicGroupNodeProps> extends RectNode<P> {
9
+ childrenPositionMap: Map<string, Position>;
10
+ onNodeRotate: ({ model, }: Omit<CallbackArgs<'node:rotate'>, 'e' | 'position'>) => void;
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;
13
+ graphRendered: () => void;
8
14
  componentDidMount(): void;
15
+ componentWillUnmount(): void;
9
16
  /**
10
17
  * 获取分组内的节点
11
18
  * @param groupModel
@@ -25,6 +25,31 @@ var __assign = (this && this.__assign) || function () {
25
25
  };
26
26
  return __assign.apply(this, arguments);
27
27
  };
28
+ var __read = (this && this.__read) || function (o, n) {
29
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
30
+ if (!m) return o;
31
+ var i = m.call(o), r, ar = [], e;
32
+ try {
33
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
34
+ }
35
+ catch (error) { e = { error: error }; }
36
+ finally {
37
+ try {
38
+ if (r && !r.done && (m = i["return"])) m.call(i);
39
+ }
40
+ finally { if (e) throw e.error; }
41
+ }
42
+ return ar;
43
+ };
44
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
45
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
46
+ if (ar || !(i in from)) {
47
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
48
+ ar[i] = from[i];
49
+ }
50
+ }
51
+ return to.concat(ar || Array.prototype.slice.call(from));
52
+ };
28
53
  Object.defineProperty(exports, "__esModule", { value: true });
29
54
  exports.DynamicGroupNode = void 0;
30
55
  var core_1 = require("@logicflow/core");
@@ -33,18 +58,13 @@ var utils_1 = require("../tools/label/utils");
33
58
  var DynamicGroupNode = /** @class */ (function (_super) {
34
59
  __extends(DynamicGroupNode, _super);
35
60
  function DynamicGroupNode() {
36
- return _super !== null && _super.apply(this, arguments) || this;
37
- }
38
- DynamicGroupNode.prototype.componentDidMount = function () {
39
- var _this = this;
40
- _super.prototype.componentDidMount.call(this);
41
- var _a = this.props, curGroup = _a.model, graphModel = _a.graphModel;
42
- var eventCenter = graphModel.eventCenter;
43
- var childrenPositionMap = new Map();
44
- // 在 group 旋转时,对组内的所有子节点也进行对应的旋转计算
45
- eventCenter.on('node:rotate', function (_a) {
61
+ var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;
62
+ _this.childrenPositionMap = new Map();
63
+ _this.onNodeRotate = function (_a) {
46
64
  var model = _a.model;
47
- var _b = _this.props.model, transformWithContainer = _b.transformWithContainer, isRestrict = _b.isRestrict;
65
+ var _b = _this.props, curGroup = _b.model, graphModel = _b.graphModel;
66
+ var transformWithContainer = curGroup.transformWithContainer, isRestrict = curGroup.isRestrict;
67
+ var childrenPositionMap = _this.childrenPositionMap;
48
68
  if (!transformWithContainer || isRestrict) {
49
69
  // isRestrict限制模式下,当前model resize时不能小于占地面积
50
70
  // 由于parent:resize=>child:resize计算复杂,需要根据child:resize的判定结果来递归判断parent能否resize
@@ -78,11 +98,11 @@ var DynamicGroupNode = /** @class */ (function (_super) {
78
98
  }
79
99
  });
80
100
  }
81
- });
82
- // group 缩放时,对组内的所有子节点也进行对应的缩放计算
83
- eventCenter.on('node:resize', function (_a) {
101
+ };
102
+ _this.onNodeResize = function (_a) {
84
103
  var deltaX = _a.deltaX, deltaY = _a.deltaY, index = _a.index, model = _a.model, preData = _a.preData;
85
- var _b = _this.props.model, transformWithContainer = _b.transformWithContainer, isRestrict = _b.isRestrict;
104
+ var _b = _this.props, curGroup = _b.model, graphModel = _b.graphModel;
105
+ var transformWithContainer = curGroup.transformWithContainer, isRestrict = curGroup.isRestrict;
86
106
  if (!transformWithContainer || isRestrict) {
87
107
  // isRestrict限制模式下,当前model resize时不能小于占地面积
88
108
  // 由于parent:resize=>child:resize计算复杂,需要根据child:resize的判定结果来递归判断parent能否resize
@@ -113,16 +133,61 @@ var DynamicGroupNode = /** @class */ (function (_super) {
113
133
  }
114
134
  });
115
135
  }
116
- });
117
- // group 移动时,对组内的所有子节点也进行对应的移动计算
118
- eventCenter.on('node:mousemove', function (_a) {
136
+ };
137
+ _this.onNodeMouseMove = function (_a) {
119
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;
120
142
  if (data.id === curGroup.id) {
121
- var _b = _this.props, curGroup_1 = _b.model, graphModel_1 = _b.graphModel;
122
- var nodeIds = _this.getNodesInGroup(curGroup_1, graphModel_1);
123
- graphModel_1.moveNodes(nodeIds, deltaX, deltaY, true);
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);
124
150
  }
125
- });
151
+ };
152
+ _this.graphRendered = function () {
153
+ var model = _this.props.model;
154
+ // 初始化时,如果 this.isCollapsed 为 true,则主动触发一次折叠操作
155
+ if (model.isCollapsed) {
156
+ // https://github.com/didi/LogicFlow/issues/1918
157
+ // 当lf.render({nodes:[{分组节点}, {普通节点}]})时,由于是顺序遍历
158
+ // 会先触发分组Group节点的new Model => toggleCollapse()
159
+ // => 此时在graphModel.elementsModelMap找不到它的children,因为还没初始化,因此无法正确折叠子元素
160
+ // --------------------
161
+ // 当lf.render({nodes:[{普通节点}, {分组节点}]})时,
162
+ // 会先触发普通节点的new Model => graphModel.elementsModelMap.set(id, new Model())
163
+ // 然后再触发分组Group节点的new Model => toggleCollapse() =>
164
+ // 此时在graphModel.elementsModelMap能找到它的children了,因此可以正确折叠子元素
165
+ // --------------------
166
+ // 因此将整个初始化判断是否【主动触发一次折叠操作】放在"graph:rendered"全部渲染完成后再执行
167
+ model.toggleCollapse(true);
168
+ }
169
+ };
170
+ return _this;
171
+ }
172
+ DynamicGroupNode.prototype.componentDidMount = function () {
173
+ _super.prototype.componentDidMount.call(this);
174
+ var eventCenter = this.props.graphModel.eventCenter;
175
+ // 在 group 旋转时,对组内的所有子节点也进行对应的旋转计算
176
+ eventCenter.on('node:rotate', this.onNodeRotate);
177
+ // 在 group 缩放时,对组内的所有子节点也进行对应的缩放计算
178
+ eventCenter.on('node:resize', this.onNodeResize);
179
+ // 在 group 移动时,对组内的所有子节点也进行对应的移动计算
180
+ eventCenter.on('node:mousemove', this.onNodeMouseMove);
181
+ // 全部渲染完成后,判断是否【主动触发一次折叠操作】
182
+ eventCenter.on('graph:rendered', this.graphRendered);
183
+ };
184
+ DynamicGroupNode.prototype.componentWillUnmount = function () {
185
+ _super.prototype.componentWillUnmount.call(this);
186
+ var eventCenter = this.props.graphModel.eventCenter;
187
+ eventCenter.off('node:rotate', this.onNodeRotate);
188
+ eventCenter.off('node:resize', this.onNodeResize);
189
+ eventCenter.off('node:mousemove', this.onNodeMouseMove);
190
+ eventCenter.off('graph:rendered', this.graphRendered);
126
191
  };
127
192
  /**
128
193
  * 获取分组内的节点
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logicflow/extension",
3
- "version": "2.0.10",
3
+ "version": "2.0.11",
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.6"
23
+ "@logicflow/core": "2.0.7"
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.6"
34
+ "@logicflow/core": "2.0.7"
35
35
  },
36
36
  "devDependencies": {
37
37
  "less": "^4.1.1",
@@ -159,11 +159,6 @@ export class DynamicGroupNodeModel extends RectNodeModel<IGroupNodeProperties> {
159
159
 
160
160
  setAttributes() {
161
161
  super.setAttributes()
162
-
163
- // 初始化时,如果 this.isCollapsed 为 true,则主动触发一次折叠操作
164
- if (this.isCollapsed) {
165
- this.toggleCollapse(true)
166
- }
167
162
  }
168
163
 
169
164
  getData(): NodeData {
@@ -445,8 +440,8 @@ export class DynamicGroupNodeModel extends RectNodeModel<IGroupNodeProperties> {
445
440
  * TODO: 如何重写该方法呢?
446
441
  * @param _nodeData
447
442
  */
443
+ // eslint-disable-next-line
448
444
  isAllowAppendIn(_nodeData: NodeData) {
449
- console.info('_nodeData', _nodeData)
450
445
  // TODO: 此处使用 this.properties.groupAddable 还是 this.groupAddable
451
446
  // this.groupAddable 是否存在更新不及时的问题
452
447
  return true