@riil-frontend/component-topology 5.0.1 → 5.0.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.
@@ -5,7 +5,7 @@ import classnames from 'classnames';
5
5
  import TopoGraph, { TopoEvent } from '@riil-frontend/component-topology-graph';
6
6
  import rlog from '@riil-frontend/component-topology-utils/es/rlog';
7
7
  import useTopoEdit from "../../hooks/useTopoEdit";
8
- import useSelection from "../../hooks/useSelection";
8
+ import useSelectionListener from "../../hooks/useSelectionListener";
9
9
  import showMessage from "../../utils/showMessage";
10
10
  import EditorPlugin from "../../editor/components/EditorPlugin";
11
11
  import ViewerPlugin from "../../viewer/components/plugins/ViewerPlugin";
@@ -66,12 +66,7 @@ var Topology = function Topology(props) {
66
66
  setTData = _useState[1]; // TODO 临时放这里,当前监听内容较多
67
67
 
68
68
 
69
- var _useSelection = useSelection({
70
- topo: topo
71
- }),
72
- initSelection = _useSelection.initSelection,
73
- clearSelection = _useSelection.clearSelection;
74
-
69
+ useSelectionListener(props);
75
70
  useRouterAdapter(props);
76
71
  var topoEdit = useTopoEdit({
77
72
  topo: topo,
@@ -105,8 +100,6 @@ var Topology = function Topology(props) {
105
100
  setConfig: null
106
101
  });
107
102
  }
108
-
109
- clearSelection();
110
103
  }, [topoId, viewState]);
111
104
  useEffect(function () {
112
105
  // rlog.debug("TopoView.useEffect topoData", topoData);
@@ -115,13 +108,11 @@ var Topology = function Topology(props) {
115
108
  useEffect(function () {
116
109
  return function () {
117
110
  topoDispatchers.reset();
118
- clearSelection();
119
111
  };
120
112
  }, []);
121
113
  var onGraphCreated = useCallback(function (topoClient) {
122
114
  topo.view.onCreatedView(topoClient);
123
115
  rlog.info('TopoView.onGraphCreated');
124
- initSelection();
125
116
 
126
117
  if (onReady) {
127
118
  onReady();
@@ -216,10 +207,6 @@ var Topology = function Topology(props) {
216
207
  onRefresh(event.data);
217
208
  break;
218
209
 
219
- case TopoEvent.EVENT_EDIT_ENTER:
220
- initSelection();
221
- break;
222
-
223
210
  case TopoEvent.EVENT_EDIT_EXIT:
224
211
  onExitEdit(event.data);
225
212
  break;
@@ -4,12 +4,10 @@ export default function useHtDataPropertyChangeListener(props) {
4
4
  var topo = props.topo,
5
5
  onChange = props.onChange;
6
6
 
7
- var _topo$store$useModel = topo.store.useModel('topoMod'),
8
- topoState = _topo$store$useModel[0],
9
- topoDispatchers = _topo$store$useModel[1];
7
+ var _topo$store$useModelS = topo.store.useModelState('topoMod'),
8
+ graphLoaded = _topo$store$useModelS.graphLoaded,
9
+ graphLoaded2 = _topo$store$useModelS.graphLoaded2;
10
10
 
11
- var graphLoaded = topoState.graphLoaded,
12
- graphLoaded2 = topoState.graphLoaded2;
13
11
  useEffect(function () {
14
12
  var dm = topo.getDataModel();
15
13
  var inited = false;
@@ -1,13 +1,14 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- import { useCallback } from "react";
3
- import rlog from "@riil-frontend/component-topology-utils/es/rlog";
2
+ import { useCallback, useRef } from 'react';
3
+ import rlog from '@riil-frontend/component-topology-utils/es/rlog';
4
4
  /**
5
5
  * Selection
6
6
  */
7
7
 
8
8
  function useSelection(props) {
9
9
  var topo = props.topo;
10
- var selectionDispatchers = topo.store.useModelDispatchers("selection");
10
+ var selectionDispatchers = topo.store.useModelDispatchers('selection');
11
+ var removeListenerRef = useRef(null);
11
12
 
12
13
  var setSelection = function setSelection(selection) {
13
14
  selectionDispatchers.update({
@@ -24,23 +25,22 @@ function useSelection(props) {
24
25
 
25
26
  setSelection(selectionArr);
26
27
  } catch (e) {
27
- rlog.error("updateSelection error", e);
28
+ rlog.error('updateSelection error', e);
28
29
  }
29
30
  }, []);
30
- var initSelection = useCallback(function () {
31
- rlog.info("初始化Selection");
32
- var dataModel = topo.getDataModel();
33
- var selectionModel = topo.getSelectionModel();
34
- updateSelection();
35
- selectionModel.addSelectionChangeListener(function (e) {
36
- rlog.info("selectionChangeListener", e);
31
+ var initListener = useCallback(function () {
32
+ rlog.info('Selection initListener');
33
+
34
+ function handleSelectionChange(e) {
35
+ rlog.info('Selection handleSelectionChange', e);
37
36
  updateSelection();
38
- });
39
- dataModel.addDataPropertyChangeListener(function (e) {
37
+ }
38
+
39
+ function handleDataPropertyChange(e) {
40
40
  var property = e.property,
41
41
  data = e.data;
42
42
 
43
- if (["position", "childChange", "a:scale"].indexOf(property) !== -1) {
43
+ if (['position', 'childChange', 'a:scale'].indexOf(property) !== -1) {
44
44
  return;
45
45
  }
46
46
 
@@ -52,14 +52,48 @@ function useSelection(props) {
52
52
  // console.info('PropertyChangeListener', e);
53
53
  updateSelection();
54
54
  }
55
- });
55
+ }
56
+
57
+ var dataModel = topo.getDataModel();
58
+ var selectionModel = topo.getSelectionModel();
59
+ selectionModel.addSelectionChangeListener(handleSelectionChange);
60
+ dataModel.addDataPropertyChangeListener(handleDataPropertyChange);
61
+ return function () {
62
+ selectionModel.removeSelectionChangeListener(handleSelectionChange);
63
+ dataModel.removeDataPropertyChangeListener(handleDataPropertyChange);
64
+ };
65
+ }, []);
66
+ var removeListener = useCallback(function (data) {
67
+ rlog.info('Selection removeListener');
68
+
69
+ if (removeListenerRef.current) {
70
+ removeListenerRef.current();
71
+ removeListenerRef.current = null;
72
+ }
73
+ }, []);
74
+ var initSelection = useCallback(function () {
75
+ rlog.info('Selection init');
76
+
77
+ if (removeListenerRef.current) {
78
+ removeListener();
79
+ }
80
+
81
+ updateSelection();
82
+ removeListenerRef.current = initListener();
83
+ }, []);
84
+ var destroySelection = useCallback(function (data) {
85
+ rlog.info('Selection destroy');
86
+ removeListener();
87
+ setSelection([]);
56
88
  }, []);
57
- var clearSelection = useCallback(function (data) {
89
+ var resetSelection = useCallback(function (data) {
90
+ rlog.info('Selection reset');
58
91
  setSelection([]);
59
92
  }, []);
60
93
  return {
61
94
  initSelection: initSelection,
62
- clearSelection: clearSelection,
95
+ destroySelection: destroySelection,
96
+ resetSelection: resetSelection,
63
97
  updateSelection: updateSelection // destroy,
64
98
 
65
99
  };
@@ -79,15 +113,15 @@ var map = {
79
113
  styleMap: JSON.parse(JSON.stringify(element.getStyleMap() || {}))
80
114
  };
81
115
  },
82
- "ht.Edge": function htEdge(element) {
116
+ 'ht.Edge': function htEdge(element) {
83
117
  return _extends({}, map.common(element));
84
118
  },
85
- "ht.Group": function htGroup(element) {
86
- return _extends({}, map["ht.Node"](element), {
119
+ 'ht.Group': function htGroup(element) {
120
+ return _extends({}, map['ht.Node'](element), {
87
121
  expanded: element.isExpanded()
88
122
  });
89
123
  },
90
- "ht.Node": function htNode(element) {
124
+ 'ht.Node': function htNode(element) {
91
125
  return _extends({}, map.common(element), {
92
126
  image: element.getImage(),
93
127
  width: element.getWidth(),
@@ -0,0 +1,35 @@
1
+ import rlog from '@riil-frontend/component-topology-utils/es/rlog';
2
+ import { useEffect } from 'react';
3
+ import useSelection from "./useSelection";
4
+ export default function useSelectionListener(props) {
5
+ var topo = props.topo;
6
+
7
+ var _topo$store$useModelS = topo.store.useModelState('topoMod'),
8
+ graphLoaded = _topo$store$useModelS.graphLoaded,
9
+ graphLoaded2 = _topo$store$useModelS.graphLoaded2,
10
+ viewState = _topo$store$useModelS.viewState;
11
+
12
+ var isEditMode = viewState === 'edit'; // TODO 临时放这里,当前监听内容较多
13
+
14
+ var _useSelection = useSelection({
15
+ topo: topo
16
+ }),
17
+ initSelection = _useSelection.initSelection,
18
+ destroySelection = _useSelection.destroySelection;
19
+
20
+ useEffect(function () {
21
+ var inited = false;
22
+ var loaded = graphLoaded || graphLoaded2;
23
+
24
+ if (isEditMode && loaded) {
25
+ initSelection();
26
+ inited = true;
27
+ }
28
+
29
+ return function () {
30
+ if (inited) {
31
+ destroySelection();
32
+ }
33
+ };
34
+ }, [graphLoaded, graphLoaded2, isEditMode]);
35
+ }
@@ -21,7 +21,7 @@ import PluginManager from "./PluginManager";
21
21
  import topoFactory from "./topoFactory";
22
22
  import ElementTagTipConfig from "./tagstips/ElementTagTipConfig"; // eslint-disable-next-line no-undef
23
23
 
24
- var version = typeof "5.0.1" === 'string' ? "5.0.1" : null;
24
+ var version = typeof "5.0.3" === 'string' ? "5.0.3" : null;
25
25
  console.info("\u62D3\u6251\u7248\u672C: " + version);
26
26
  /**
27
27
  * 拓扑显示和编辑
@@ -1,6 +1,6 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
1
2
  import _Table from "@alifd/next/es/table";
2
3
  import _extends from "@babel/runtime/helpers/extends";
3
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
4
  import _regeneratorRuntime from "@babel/runtime/regenerator";
5
5
  import React from 'react';
6
6
  import TableLayout from '@riil-frontend/component-table-layout';
@@ -11,7 +11,80 @@ import { commonQueryCiDataByIds } from "../../../../../services/cmdb";
11
11
  import { queryLatestMetrics } from "../../../../../services/cmdb/metric";
12
12
  import styles from "./ClusterMemberTable.module.scss";
13
13
  import Link from "../../../../../../components/Link";
14
- export default function ClusterChildrenTable(props) {
14
+
15
+ function ClusterMemberTable(props) {
16
+ var tableProps = props.tableProps,
17
+ paginationProps = props.paginationProps; // url 处理,UICBB 的地址需截取前缀
18
+
19
+ function formatUrl(url) {
20
+ var _window, _window$location;
21
+
22
+ var prefix = '/default/pagecenter';
23
+
24
+ if (((_window = window) === null || _window === void 0 ? void 0 : (_window$location = _window.location) === null || _window$location === void 0 ? void 0 : _window$location.pathname.indexOf(prefix)) === 0 && (url === null || url === void 0 ? void 0 : url.indexOf(prefix)) === 0) {
25
+ return url.split(prefix)[1];
26
+ } else {
27
+ return url;
28
+ }
29
+ }
30
+ /**
31
+ * Table列数据
32
+ */
33
+
34
+
35
+ var columns = [{
36
+ id: '1',
37
+ title: '显示名称',
38
+ dataIndex: 'attributes.display_name',
39
+ // sortable: true,
40
+ lock: true,
41
+ width: 160,
42
+ cell: function cell(vallue, index, item) {
43
+ var link = "/default/pagecenter/resDetail/view/" + item.id + "?resId=" + item.id + "&domainCode=" + item.typeObject.domain + "&title=" + vallue + "&ciCode=" + item.typeCode; // 资源跳转链接
44
+
45
+ return /*#__PURE__*/React.createElement(Link, {
46
+ title: vallue || "",
47
+ to: formatUrl(link)
48
+ }, vallue || "-");
49
+ }
50
+ }, {
51
+ id: '2',
52
+ title: 'IP地址',
53
+ dataIndex: 'attributes.ipv4_address',
54
+ width: 120
55
+ }, {
56
+ id: '3',
57
+ title: '成员角色',
58
+ dataIndex: 'memberRole',
59
+ width: 120
60
+ }, {
61
+ id: '4',
62
+ title: '资源类型',
63
+ dataIndex: 'typeObject.displayName',
64
+ width: 120
65
+ }];
66
+ return /*#__PURE__*/React.createElement(TableLayout, {
67
+ wrapProps: {
68
+ style: {}
69
+ },
70
+ table: /*#__PURE__*/React.createElement(_Table, _extends({}, tableProps, {
71
+ hasBorder: false,
72
+ fixedHeader: true,
73
+ emptyContent: "\u6682\u65E0\u6570\u636E"
74
+ }), columns.map(function (columnItem) {
75
+ return /*#__PURE__*/React.createElement(_Table.Column, _extends({
76
+ key: columnItem.dataIndex
77
+ }, columnItem));
78
+ })),
79
+ pagination: /*#__PURE__*/React.createElement(Pagination, _extends({}, paginationProps, {
80
+ type: "simple",
81
+ useDefaultConfig: false,
82
+ showChecked: false
83
+ }))
84
+ });
85
+ }
86
+
87
+ export default function ClusterMemberTableContainer(props) {
15
88
  var data = props.data,
16
89
  topo = props.topo;
17
90
  var datas = topo.dataModel.useDatas();
@@ -56,12 +129,12 @@ export default function ClusterChildrenTable(props) {
56
129
  });
57
130
  return _extends({}, ci, {
58
131
  typeObject: ciTypeMap[ci.typeCode],
59
- memberRole: topo.dictCache.dictObject.member_role[memberRoleMetric.metricValue]
132
+ memberRole: topo.dictCache.dictObject.member_role[memberRoleMetric === null || memberRoleMetric === void 0 ? void 0 : memberRoleMetric.metricValue]
60
133
  });
61
134
  }),
62
135
  total: ciDataResult.totalRecord,
63
- current: 1,
64
- pageSize: 20
136
+ current: ciDataResult.pageIndex,
137
+ pageSize: pageSize
65
138
  }
66
139
  });
67
140
 
@@ -85,81 +158,11 @@ export default function ClusterChildrenTable(props) {
85
158
  }
86
159
  }) // useFilterPlugin(),
87
160
  ];
88
-
89
- var _useNextTable = useNextTable(getTableData, {
161
+ var tableProps = useNextTable(getTableData, {
90
162
  refreshDeps: [data],
91
163
  plugins: plugins
92
- }),
93
- tableProps = _useNextTable.tableProps,
94
- paginationProps = _useNextTable.paginationProps; // url 处理,UICBB 的地址需截取前缀
95
-
96
-
97
- function formatUrl(url) {
98
- var _window, _window$location;
99
-
100
- var prefix = '/default/pagecenter';
101
-
102
- if (((_window = window) === null || _window === void 0 ? void 0 : (_window$location = _window.location) === null || _window$location === void 0 ? void 0 : _window$location.pathname.indexOf(prefix)) === 0 && (url === null || url === void 0 ? void 0 : url.indexOf(prefix)) === 0) {
103
- return url.split(prefix)[1];
104
- } else {
105
- return url;
106
- }
107
- }
108
- /**
109
- * Table列数据
110
- */
111
-
112
-
113
- var columns = [{
114
- id: '1',
115
- title: '显示名称',
116
- dataIndex: 'attributes.display_name',
117
- // sortable: true,
118
- lock: true,
119
- width: 160,
120
- cell: function cell(vallue, index, item) {
121
- var link = "/default/pagecenter/resDetail/view/" + item.id + "?resId=" + item.id + "&domainCode=" + item.typeObject.domain + "&title=" + vallue + "&ciCode=" + item.typeCode; // 资源跳转链接
122
-
123
- return /*#__PURE__*/React.createElement(Link, {
124
- title: vallue || "",
125
- to: formatUrl(link)
126
- }, vallue || "-");
127
- }
128
- }, {
129
- id: '2',
130
- title: 'IP地址',
131
- dataIndex: 'attributes.ipv4_address',
132
- width: 120
133
- }, {
134
- id: '3',
135
- title: '成员角色',
136
- dataIndex: 'memberRole',
137
- width: 120
138
- }, {
139
- id: '4',
140
- title: '资源类型',
141
- dataIndex: 'typeObject.displayName',
142
- width: 120
143
- }];
164
+ });
144
165
  return /*#__PURE__*/React.createElement("div", {
145
166
  className: styles.container
146
- }, /*#__PURE__*/React.createElement(TableLayout, {
147
- wrapProps: {
148
- style: {}
149
- },
150
- table: /*#__PURE__*/React.createElement(_Table, _extends({}, tableProps, {
151
- hasBorder: false,
152
- fixedHeader: true,
153
- emptyContent: "\u6682\u65E0\u6570\u636E"
154
- }), columns.map(function (columnItem) {
155
- return /*#__PURE__*/React.createElement(_Table.Column, _extends({
156
- key: columnItem.dataIndex
157
- }, columnItem));
158
- })),
159
- pagination: /*#__PURE__*/React.createElement(Pagination, _extends({}, paginationProps, {
160
- type: "simple",
161
- useDefaultConfig: false,
162
- showChecked: false
163
- }))
164
- }));
167
+ }, /*#__PURE__*/React.createElement(ClusterMemberTable, tableProps));
165
168
  }
@@ -68,7 +68,6 @@ export default function ResourceOverviewMetric(props) {
68
68
  var code = itemData.code,
69
69
  metricItem = itemData.metricItem,
70
70
  list = itemData.list;
71
- console.log('formatValue', itemData);
72
71
  var format = metricValueFormat({
73
72
  value: (_list = list[list.length - 1]) === null || _list === void 0 ? void 0 : _list.metricValue,
74
73
  dataType: metricItem.dataType,
@@ -90,9 +89,9 @@ export default function ResourceOverviewMetric(props) {
90
89
  value: item.metricValue == -2 ? null : Number(item.metricValue)
91
90
  };
92
91
  });
93
- }
92
+ } // console.log('ResourceOverviewMetric', data);
93
+
94
94
 
95
- console.log('ResourceOverviewMetric', data);
96
95
  var content;
97
96
 
98
97
  if (data.length) {
@@ -19,7 +19,7 @@ var _rlog = _interopRequireDefault(require("@riil-frontend/component-topology-ut
19
19
 
20
20
  var _useTopoEdit = _interopRequireDefault(require("../../hooks/useTopoEdit"));
21
21
 
22
- var _useSelection2 = _interopRequireDefault(require("../../hooks/useSelection"));
22
+ var _useSelectionListener = _interopRequireDefault(require("../../hooks/useSelectionListener"));
23
23
 
24
24
  var _showMessage = _interopRequireDefault(require("../../utils/showMessage"));
25
25
 
@@ -99,12 +99,7 @@ var Topology = function Topology(props) {
99
99
  setTData = _useState[1]; // TODO 临时放这里,当前监听内容较多
100
100
 
101
101
 
102
- var _useSelection = (0, _useSelection2["default"])({
103
- topo: topo
104
- }),
105
- initSelection = _useSelection.initSelection,
106
- clearSelection = _useSelection.clearSelection;
107
-
102
+ (0, _useSelectionListener["default"])(props);
108
103
  (0, _useRouterAdapter["default"])(props);
109
104
  var topoEdit = (0, _useTopoEdit["default"])({
110
105
  topo: topo,
@@ -138,8 +133,6 @@ var Topology = function Topology(props) {
138
133
  setConfig: null
139
134
  });
140
135
  }
141
-
142
- clearSelection();
143
136
  }, [topoId, viewState]);
144
137
  (0, _react.useEffect)(function () {
145
138
  // rlog.debug("TopoView.useEffect topoData", topoData);
@@ -148,7 +141,6 @@ var Topology = function Topology(props) {
148
141
  (0, _react.useEffect)(function () {
149
142
  return function () {
150
143
  topoDispatchers.reset();
151
- clearSelection();
152
144
  };
153
145
  }, []);
154
146
  var onGraphCreated = (0, _react.useCallback)(function (topoClient) {
@@ -156,8 +148,6 @@ var Topology = function Topology(props) {
156
148
 
157
149
  _rlog["default"].info('TopoView.onGraphCreated');
158
150
 
159
- initSelection();
160
-
161
151
  if (onReady) {
162
152
  onReady();
163
153
  }
@@ -256,10 +246,6 @@ var Topology = function Topology(props) {
256
246
  onRefresh(event.data);
257
247
  break;
258
248
 
259
- case _componentTopologyGraph.TopoEvent.EVENT_EDIT_ENTER:
260
- initSelection();
261
- break;
262
-
263
249
  case _componentTopologyGraph.TopoEvent.EVENT_EDIT_EXIT:
264
250
  onExitEdit(event.data);
265
251
  break;
@@ -13,12 +13,10 @@ function useHtDataPropertyChangeListener(props) {
13
13
  var topo = props.topo,
14
14
  onChange = props.onChange;
15
15
 
16
- var _topo$store$useModel = topo.store.useModel('topoMod'),
17
- topoState = _topo$store$useModel[0],
18
- topoDispatchers = _topo$store$useModel[1];
16
+ var _topo$store$useModelS = topo.store.useModelState('topoMod'),
17
+ graphLoaded = _topo$store$useModelS.graphLoaded,
18
+ graphLoaded2 = _topo$store$useModelS.graphLoaded2;
19
19
 
20
- var graphLoaded = topoState.graphLoaded,
21
- graphLoaded2 = topoState.graphLoaded2;
22
20
  (0, _react.useEffect)(function () {
23
21
  var dm = topo.getDataModel();
24
22
  var inited = false;
@@ -16,7 +16,8 @@ var _rlog = _interopRequireDefault(require("@riil-frontend/component-topology-ut
16
16
  */
17
17
  function useSelection(props) {
18
18
  var topo = props.topo;
19
- var selectionDispatchers = topo.store.useModelDispatchers("selection");
19
+ var selectionDispatchers = topo.store.useModelDispatchers('selection');
20
+ var removeListenerRef = (0, _react.useRef)(null);
20
21
 
21
22
  var setSelection = function setSelection(selection) {
22
23
  selectionDispatchers.update({
@@ -33,25 +34,23 @@ function useSelection(props) {
33
34
 
34
35
  setSelection(selectionArr);
35
36
  } catch (e) {
36
- _rlog["default"].error("updateSelection error", e);
37
+ _rlog["default"].error('updateSelection error', e);
37
38
  }
38
39
  }, []);
39
- var initSelection = (0, _react.useCallback)(function () {
40
- _rlog["default"].info("初始化Selection");
40
+ var initListener = (0, _react.useCallback)(function () {
41
+ _rlog["default"].info('Selection initListener');
41
42
 
42
- var dataModel = topo.getDataModel();
43
- var selectionModel = topo.getSelectionModel();
44
- updateSelection();
45
- selectionModel.addSelectionChangeListener(function (e) {
46
- _rlog["default"].info("selectionChangeListener", e);
43
+ function handleSelectionChange(e) {
44
+ _rlog["default"].info('Selection handleSelectionChange', e);
47
45
 
48
46
  updateSelection();
49
- });
50
- dataModel.addDataPropertyChangeListener(function (e) {
47
+ }
48
+
49
+ function handleDataPropertyChange(e) {
51
50
  var property = e.property,
52
51
  data = e.data;
53
52
 
54
- if (["position", "childChange", "a:scale"].indexOf(property) !== -1) {
53
+ if (['position', 'childChange', 'a:scale'].indexOf(property) !== -1) {
55
54
  return;
56
55
  }
57
56
 
@@ -63,14 +62,50 @@ function useSelection(props) {
63
62
  // console.info('PropertyChangeListener', e);
64
63
  updateSelection();
65
64
  }
66
- });
65
+ }
66
+
67
+ var dataModel = topo.getDataModel();
68
+ var selectionModel = topo.getSelectionModel();
69
+ selectionModel.addSelectionChangeListener(handleSelectionChange);
70
+ dataModel.addDataPropertyChangeListener(handleDataPropertyChange);
71
+ return function () {
72
+ selectionModel.removeSelectionChangeListener(handleSelectionChange);
73
+ dataModel.removeDataPropertyChangeListener(handleDataPropertyChange);
74
+ };
67
75
  }, []);
68
- var clearSelection = (0, _react.useCallback)(function (data) {
76
+ var removeListener = (0, _react.useCallback)(function (data) {
77
+ _rlog["default"].info('Selection removeListener');
78
+
79
+ if (removeListenerRef.current) {
80
+ removeListenerRef.current();
81
+ removeListenerRef.current = null;
82
+ }
83
+ }, []);
84
+ var initSelection = (0, _react.useCallback)(function () {
85
+ _rlog["default"].info('Selection init');
86
+
87
+ if (removeListenerRef.current) {
88
+ removeListener();
89
+ }
90
+
91
+ updateSelection();
92
+ removeListenerRef.current = initListener();
93
+ }, []);
94
+ var destroySelection = (0, _react.useCallback)(function (data) {
95
+ _rlog["default"].info('Selection destroy');
96
+
97
+ removeListener();
98
+ setSelection([]);
99
+ }, []);
100
+ var resetSelection = (0, _react.useCallback)(function (data) {
101
+ _rlog["default"].info('Selection reset');
102
+
69
103
  setSelection([]);
70
104
  }, []);
71
105
  return {
72
106
  initSelection: initSelection,
73
- clearSelection: clearSelection,
107
+ destroySelection: destroySelection,
108
+ resetSelection: resetSelection,
74
109
  updateSelection: updateSelection // destroy,
75
110
 
76
111
  };
@@ -90,15 +125,15 @@ var map = {
90
125
  styleMap: JSON.parse(JSON.stringify(element.getStyleMap() || {}))
91
126
  };
92
127
  },
93
- "ht.Edge": function htEdge(element) {
128
+ 'ht.Edge': function htEdge(element) {
94
129
  return (0, _extends2["default"])({}, map.common(element));
95
130
  },
96
- "ht.Group": function htGroup(element) {
97
- return (0, _extends2["default"])({}, map["ht.Node"](element), {
131
+ 'ht.Group': function htGroup(element) {
132
+ return (0, _extends2["default"])({}, map['ht.Node'](element), {
98
133
  expanded: element.isExpanded()
99
134
  });
100
135
  },
101
- "ht.Node": function htNode(element) {
136
+ 'ht.Node': function htNode(element) {
102
137
  return (0, _extends2["default"])({}, map.common(element), {
103
138
  image: element.getImage(),
104
139
  width: element.getWidth(),