@react-fabric/data 1.0.0-beta.6 → 1.0.0-beta.60
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/{src/histogram/Histogram.module.css → css/_histogram.css} +16 -13
- package/css/styles.css +24 -0
- package/dist/cjs/checklist/CheckList.js +23 -0
- package/dist/cjs/histogram/Histogram.js +37 -7
- package/dist/cjs/hooks/useFilteredList.js +88 -10
- package/dist/cjs/hooks/usePagination.js +27 -4
- package/dist/cjs/hooks/useSelectableList.js +29 -0
- package/dist/cjs/i18n/ar.json.js +8 -1
- package/dist/cjs/i18n/en.json.js +8 -1
- package/dist/cjs/json/JsonViewer.js +67 -27
- package/dist/cjs/pagination/Pagination.js +10 -0
- package/dist/cjs/table/AddColumn.js +1 -1
- package/dist/cjs/table/BodyCell.js +5 -4
- package/dist/cjs/table/BodyRow.js +2 -2
- package/dist/cjs/table/CheckboxCell.js +1 -1
- package/dist/cjs/table/ColumnFilters.js +97 -0
- package/dist/cjs/table/HeaderCell.js +71 -43
- package/dist/cjs/table/Table.js +58 -12
- package/dist/cjs/table/types.js +29 -0
- package/dist/cjs/table/useResizer.js +4 -4
- package/dist/cjs/table/useVirtualTable.js +127 -19
- package/dist/cjs/tree/TreeNode.js +48 -30
- package/dist/cjs/tree/TreePanel.js +45 -11
- package/dist/cjs/tree/useTree.js +199 -38
- package/dist/cjs/tree/utils.js +39 -12
- package/dist/cjs/virtual/Gallery.js +97 -45
- package/dist/cjs/virtual/List.js +93 -39
- package/dist/cjs/virtual/Scroller.js +16 -8
- package/dist/esm/checklist/CheckList.js +23 -0
- package/dist/esm/histogram/Histogram.js +38 -8
- package/dist/esm/hooks/useFilteredList.js +89 -11
- package/dist/esm/hooks/usePagination.js +27 -4
- package/dist/esm/hooks/useSelectableList.js +29 -0
- package/dist/esm/i18n/ar.json.js +8 -2
- package/dist/esm/i18n/en.json.js +8 -2
- package/dist/esm/json/JsonViewer.js +68 -28
- package/dist/esm/pagination/Pagination.js +10 -0
- package/dist/esm/table/AddColumn.js +1 -1
- package/dist/esm/table/BodyCell.js +5 -4
- package/dist/esm/table/BodyRow.js +2 -2
- package/dist/esm/table/CheckboxCell.js +1 -1
- package/dist/esm/table/ColumnFilters.js +97 -0
- package/dist/esm/table/HeaderCell.js +72 -44
- package/dist/esm/table/Table.js +59 -13
- package/dist/esm/table/types.js +29 -0
- package/dist/esm/table/useResizer.js +4 -4
- package/dist/esm/table/useVirtualTable.js +129 -21
- package/dist/esm/tree/TreeNode.js +51 -33
- package/dist/esm/tree/TreePanel.js +46 -12
- package/dist/esm/tree/useTree.js +202 -41
- package/dist/esm/tree/utils.js +40 -13
- package/dist/esm/virtual/Gallery.js +97 -45
- package/dist/esm/virtual/List.js +93 -39
- package/dist/esm/virtual/Scroller.js +16 -8
- package/dist/types/checklist/CheckList.d.ts +22 -0
- package/dist/types/histogram/Histogram.d.ts +28 -1
- package/dist/types/hooks/useFilteredList.d.ts +66 -5
- package/dist/types/hooks/usePagination.d.ts +19 -0
- package/dist/types/hooks/useSelectableList.d.ts +29 -0
- package/dist/types/json/JsonViewer.d.ts +27 -2
- package/dist/types/pagination/Pagination.d.ts +10 -1
- package/dist/types/table/ColumnFilters.d.ts +9 -0
- package/dist/types/table/HeaderCell.d.ts +1 -1
- package/dist/types/table/Table.d.ts +14 -1
- package/dist/types/table/types.d.ts +44 -5
- package/dist/types/table/useVirtualTable.d.ts +23 -9
- package/dist/types/tree/TreeNode.d.ts +1 -1
- package/dist/types/tree/TreePanel.d.ts +42 -1
- package/dist/types/tree/types.d.ts +65 -19
- package/dist/types/tree/useTree.d.ts +9 -10
- package/dist/types/tree/utils.d.ts +10 -3
- package/dist/types/virtual/Gallery.d.ts +42 -3
- package/dist/types/virtual/List.d.ts +42 -3
- package/package.json +16 -14
- package/src/checklist/CheckList.tsx +22 -0
- package/src/histogram/Histogram.tsx +40 -10
- package/src/hooks/useFilteredList.tsx +109 -9
- package/src/hooks/usePagination.tsx +32 -7
- package/src/hooks/useSelectableList.ts +29 -0
- package/src/i18n/ar.json +5 -0
- package/src/i18n/en.json +5 -0
- package/src/json/JsonViewer.tsx +71 -35
- package/src/pagination/Pagination.tsx +10 -0
- package/src/table/AddColumn.tsx +1 -1
- package/src/table/BodyCell.tsx +6 -4
- package/src/table/BodyRow.tsx +3 -2
- package/src/table/CheckboxCell.tsx +1 -1
- package/src/table/ColumnFilters.tsx +105 -0
- package/src/table/HeaderCell.tsx +72 -18
- package/src/table/Table.tsx +99 -11
- package/src/table/types.ts +46 -8
- package/src/table/useResizer.ts +5 -3
- package/src/table/useVirtualTable.ts +158 -27
- package/src/tree/TreeNode.tsx +98 -58
- package/src/tree/TreePanel.tsx +77 -6
- package/src/tree/types.ts +73 -18
- package/src/tree/useTree.ts +220 -44
- package/src/tree/utils.ts +58 -20
- package/src/virtual/Gallery.tsx +118 -54
- package/src/virtual/List.tsx +99 -39
- package/src/virtual/Scroller.tsx +16 -8
- package/dist/cjs/histogram/Histogram.module.css +0 -1
- package/dist/esm/histogram/Histogram.module.css +0 -1
package/dist/esm/tree/useTree.js
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
4
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
5
|
+
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
5
6
|
import { useDebounce } from '@react-fabric/core';
|
|
6
|
-
import { EMPTY_ARRAY } from '@react-fabric/utilities';
|
|
7
|
+
import { EMPTY_ARRAY, isEmpty } from '@react-fabric/utilities';
|
|
7
8
|
import memoizeOne from 'memoize-one';
|
|
8
|
-
import { useRef, useReducer, useEffect
|
|
9
|
-
import { refactorTree, makeTreeMap, flattenTree,
|
|
9
|
+
import { useEffectEvent, useRef, useCallback, useReducer, useEffect } from 'react';
|
|
10
|
+
import { refactorTree, makeTreeMap, flattenTree, updateSelection, updateChecked, filterTree } from './utils.js';
|
|
10
11
|
|
|
11
12
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
12
13
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -19,39 +20,137 @@ var useTree = function useTree(_ref) {
|
|
|
19
20
|
_ref$checked = _ref.checked,
|
|
20
21
|
checked = _ref$checked === void 0 ? EMPTY_ARRAY : _ref$checked,
|
|
21
22
|
selected = _ref.selected,
|
|
23
|
+
multiple = _ref.multiple,
|
|
24
|
+
sorter = _ref.sorter,
|
|
22
25
|
matcher = _ref.matcher,
|
|
26
|
+
onLoad = _ref.onLoad,
|
|
27
|
+
onQuery = _ref.onQuery,
|
|
23
28
|
onSelect = _ref.onSelect,
|
|
24
|
-
onChecked = _ref.onChecked
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
29
|
+
onChecked = _ref.onChecked,
|
|
30
|
+
defaultExpanded = _ref.defaultExpanded,
|
|
31
|
+
onExpandToggle = _ref.onExpandToggle;
|
|
32
|
+
var eventSelect = useEffectEvent(onSelect !== null && onSelect !== void 0 ? onSelect : function () {
|
|
33
|
+
return undefined;
|
|
28
34
|
});
|
|
35
|
+
var eventChecked = useEffectEvent(onChecked !== null && onChecked !== void 0 ? onChecked : function () {
|
|
36
|
+
return undefined;
|
|
37
|
+
});
|
|
38
|
+
var intialExpand = useRef(_toConsumableArray(defaultExpanded !== null && defaultExpanded !== void 0 ? defaultExpanded : EMPTY_ARRAY));
|
|
29
39
|
var itemList = createItemList(items);
|
|
40
|
+
var fireExpandToggle = useCallback(function (itemMap) {
|
|
41
|
+
var expandedList = itemMap.filter(function (node) {
|
|
42
|
+
return node.open;
|
|
43
|
+
}).map(function (node) {
|
|
44
|
+
return node.id;
|
|
45
|
+
});
|
|
46
|
+
setTimeout(function () {
|
|
47
|
+
return onExpandToggle === null || onExpandToggle === void 0 ? void 0 : onExpandToggle(expandedList);
|
|
48
|
+
}, 100);
|
|
49
|
+
}, [onExpandToggle]);
|
|
50
|
+
var loadChildren = useCallback(function (node) {
|
|
51
|
+
var _node$children;
|
|
52
|
+
if (node.open && !node.leaf && !((_node$children = node.children) !== null && _node$children !== void 0 && _node$children.length)) {
|
|
53
|
+
node.loading = true;
|
|
54
|
+
// delay onload callback to avoid state issues
|
|
55
|
+
setTimeout(function () {
|
|
56
|
+
void Promise.resolve(onLoad === null || onLoad === void 0 ? void 0 : onLoad(node.id)).then(function () {
|
|
57
|
+
var resp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : EMPTY_ARRAY;
|
|
58
|
+
node.children = refactorTree(resp, {
|
|
59
|
+
sorter: sorter,
|
|
60
|
+
defaultExpanded: defaultExpanded
|
|
61
|
+
}, {
|
|
62
|
+
level: node.level + 1,
|
|
63
|
+
parent: node.id
|
|
64
|
+
});
|
|
65
|
+
})["finally"](function () {
|
|
66
|
+
var _intialExpand$current;
|
|
67
|
+
node.loading = false;
|
|
68
|
+
dispatch({
|
|
69
|
+
type: "loaded"
|
|
70
|
+
});
|
|
71
|
+
((_intialExpand$current = intialExpand.current) === null || _intialExpand$current === void 0 ? void 0 : _intialExpand$current.length) > 0 && dispatch({
|
|
72
|
+
type: "expand",
|
|
73
|
+
id: intialExpand.current.shift()
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}, 100);
|
|
77
|
+
} else {
|
|
78
|
+
var _intialExpand$current2;
|
|
79
|
+
dispatch({
|
|
80
|
+
type: "loaded"
|
|
81
|
+
});
|
|
82
|
+
((_intialExpand$current2 = intialExpand.current) === null || _intialExpand$current2 === void 0 ? void 0 : _intialExpand$current2.length) > 0 && dispatch({
|
|
83
|
+
type: "expand",
|
|
84
|
+
id: intialExpand.current.shift()
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}, [onLoad]);
|
|
88
|
+
var fireSelected = useDebounce(function (nodeId, data) {
|
|
89
|
+
eventSelect(nodeId, data);
|
|
90
|
+
}, []);
|
|
91
|
+
var fireChecked = useDebounce(function (leafs, nodes, partials) {
|
|
92
|
+
eventChecked(leafs, nodes, partials);
|
|
93
|
+
}, []);
|
|
94
|
+
var fireQuery = useDebounce(function (query) {
|
|
95
|
+
onQuery === null || onQuery === void 0 || onQuery(query);
|
|
96
|
+
}, [onQuery]);
|
|
30
97
|
var _useReducer = useReducer(function (state, action) {
|
|
31
98
|
if (action.type === "load") {
|
|
32
|
-
state.items = refactorTree(action.items
|
|
99
|
+
state.items = refactorTree(action.items, {
|
|
100
|
+
sorter: sorter,
|
|
101
|
+
defaultExpanded: defaultExpanded
|
|
102
|
+
});
|
|
33
103
|
state.itemMap = makeTreeMap(state.items);
|
|
34
104
|
state.tree = flattenTree(state.items);
|
|
105
|
+
state.selected = undefined;
|
|
106
|
+
state.checked = undefined;
|
|
107
|
+
state.query = "";
|
|
35
108
|
return _objectSpread({}, state);
|
|
36
109
|
}
|
|
37
110
|
if (action.type === "toggleExpand") {
|
|
38
111
|
var node = state.itemMap.get(action.id);
|
|
39
|
-
|
|
112
|
+
if (node && !node.leaf) {
|
|
113
|
+
node && (node.open = !node.open);
|
|
114
|
+
loadChildren(node);
|
|
115
|
+
return _objectSpread({}, state);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (action.type === "loaded") {
|
|
119
|
+
var _state$checked;
|
|
120
|
+
state.itemMap = makeTreeMap(state.items);
|
|
121
|
+
fireExpandToggle(Array.from(state.itemMap.values()));
|
|
40
122
|
state.tree = flattenTree(state.items);
|
|
123
|
+
state.selected = selected;
|
|
124
|
+
updateSelection({
|
|
125
|
+
nodes: state.itemMap,
|
|
126
|
+
multiple: multiple,
|
|
127
|
+
selected: selected
|
|
128
|
+
});
|
|
129
|
+
(_state$checked = state.checked) === null || _state$checked === void 0 || _state$checked.forEach(function (id) {
|
|
130
|
+
return updateChecked(state.itemMap, id, 1);
|
|
131
|
+
});
|
|
41
132
|
return _objectSpread({}, state);
|
|
42
133
|
}
|
|
43
134
|
if (action.type === "expand") {
|
|
44
|
-
// TODO: check if children available, if not call onLoad to fetch node children
|
|
45
135
|
var _node = state.itemMap.get(action.id);
|
|
46
|
-
_node &&
|
|
47
|
-
|
|
48
|
-
|
|
136
|
+
if (_node && !_node.leaf) {
|
|
137
|
+
_node.open = true;
|
|
138
|
+
var parentId = _node.parent;
|
|
139
|
+
while (parentId) {
|
|
140
|
+
var _node2 = state.itemMap.get(parentId);
|
|
141
|
+
_node2 && (_node2.open = true);
|
|
142
|
+
parentId = _node2 === null || _node2 === void 0 ? void 0 : _node2.parent;
|
|
143
|
+
}
|
|
144
|
+
loadChildren(_node);
|
|
145
|
+
return _objectSpread({}, state);
|
|
146
|
+
}
|
|
49
147
|
}
|
|
50
148
|
if (action.type === "expandAll") {
|
|
51
|
-
// TODO: prevent opening dynamic nodes that dont have children
|
|
52
149
|
state.itemMap.forEach(function (node) {
|
|
53
|
-
|
|
150
|
+
var _node$children2;
|
|
151
|
+
!node.leaf && ((_node$children2 = node.children) === null || _node$children2 === void 0 ? void 0 : _node$children2.length) && (node.open = true);
|
|
54
152
|
});
|
|
153
|
+
fireExpandToggle(Array.from(state.itemMap.values()));
|
|
55
154
|
state.tree = flattenTree(state.items);
|
|
56
155
|
return _objectSpread({}, state);
|
|
57
156
|
}
|
|
@@ -59,41 +158,81 @@ var useTree = function useTree(_ref) {
|
|
|
59
158
|
state.itemMap.forEach(function (node) {
|
|
60
159
|
!node.leaf && (node.open = false);
|
|
61
160
|
});
|
|
161
|
+
fireExpandToggle([]);
|
|
62
162
|
state.tree = flattenTree(state.items);
|
|
63
163
|
return _objectSpread({}, state);
|
|
64
164
|
}
|
|
65
165
|
if (action.type === "filter") {
|
|
66
|
-
|
|
166
|
+
if (onQuery) {
|
|
167
|
+
// TODO: onQuery should provide new tree listing
|
|
168
|
+
// save current tree state as preQueryState
|
|
169
|
+
// on clearing filter restore preQueryState
|
|
170
|
+
if (!isEmpty(action.query)) {
|
|
171
|
+
// state.prevItems = state.items;
|
|
172
|
+
fireQuery(action.query);
|
|
173
|
+
}
|
|
174
|
+
} else {
|
|
175
|
+
filterTree(state.itemMap, action.query, matcher);
|
|
176
|
+
state.tree = flattenTree(state.items);
|
|
177
|
+
}
|
|
178
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
179
|
+
query: action.query
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
if (action.type === "toggleSelect") {
|
|
183
|
+
var _state$itemMap$get;
|
|
184
|
+
if (multiple) {
|
|
185
|
+
var _state$selected, _state$selected$filte, _state$selected2, _state$selected3;
|
|
186
|
+
var isSelected = (_state$selected = state.selected) === null || _state$selected === void 0 ? void 0 : _state$selected.includes(action.id);
|
|
187
|
+
if (action.shiftKey && isSelected) state.selected = (_state$selected$filte = (_state$selected2 = state.selected) === null || _state$selected2 === void 0 ? void 0 : _state$selected2.filter(function (id) {
|
|
188
|
+
return id !== action.id;
|
|
189
|
+
})) !== null && _state$selected$filte !== void 0 ? _state$selected$filte : [];else if (action.shiftKey && !isSelected) state.selected = [].concat(_toConsumableArray((_state$selected3 = state.selected) !== null && _state$selected3 !== void 0 ? _state$selected3 : []), [action.id]);else state.selected = [action.id];
|
|
190
|
+
} else {
|
|
191
|
+
state.selected = action.id;
|
|
192
|
+
}
|
|
193
|
+
updateSelection({
|
|
194
|
+
nodes: state.itemMap,
|
|
195
|
+
selected: state.selected,
|
|
196
|
+
multiple: multiple
|
|
197
|
+
});
|
|
67
198
|
state.tree = flattenTree(state.items);
|
|
199
|
+
fireSelected(state.selected, (_state$itemMap$get = state.itemMap.get(action.id)) === null || _state$itemMap$get === void 0 ? void 0 : _state$itemMap$get.data);
|
|
68
200
|
return _objectSpread({}, state);
|
|
69
201
|
}
|
|
70
202
|
if (action.type === "select") {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
updateSelection(state.itemMap, action.id, true);
|
|
76
|
-
state.tree = flattenTree(state.items);
|
|
77
|
-
(_componentEvents$curr = (_componentEvents$curr2 = componentEvents.current).onSelect) === null || _componentEvents$curr === void 0 || _componentEvents$curr.call(_componentEvents$curr2, action.id);
|
|
78
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
203
|
+
state.selected = action.id;
|
|
204
|
+
updateSelection({
|
|
205
|
+
nodes: state.itemMap,
|
|
206
|
+
multiple: multiple,
|
|
79
207
|
selected: action.id
|
|
80
208
|
});
|
|
209
|
+
state.tree = flattenTree(state.items);
|
|
210
|
+
return _objectSpread({}, state);
|
|
81
211
|
}
|
|
82
212
|
if (action.type === "toggleCheck") {
|
|
83
|
-
var _componentEvents$curr3, _componentEvents$curr4;
|
|
84
213
|
updateChecked(state.itemMap, action.id);
|
|
85
|
-
var checkList = [[], []];
|
|
214
|
+
var checkList = [[], [], []];
|
|
86
215
|
Array.from(state.itemMap.values()).filter(function (node) {
|
|
87
|
-
return node.checked
|
|
216
|
+
return node.checked !== 0;
|
|
88
217
|
}).forEach(function (node) {
|
|
89
|
-
return checkList[node.leaf ? 0 :
|
|
218
|
+
return checkList[node.leaf ? 0 : node.checked].push(node.id);
|
|
219
|
+
});
|
|
220
|
+
fireChecked(checkList[0],
|
|
221
|
+
// leafs
|
|
222
|
+
checkList[1],
|
|
223
|
+
// nodes
|
|
224
|
+
checkList[2] // partials
|
|
225
|
+
);
|
|
226
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
227
|
+
checked: checkList[0]
|
|
90
228
|
});
|
|
91
|
-
(_componentEvents$curr3 = (_componentEvents$curr4 = componentEvents.current).onChecked) === null || _componentEvents$curr3 === void 0 || _componentEvents$curr3.call(_componentEvents$curr4, checkList[0], checkList[1]);
|
|
92
|
-
return _objectSpread({}, state);
|
|
93
229
|
}
|
|
94
230
|
if (action.type === "checked") {
|
|
231
|
+
state.itemMap.forEach(function (item) {
|
|
232
|
+
return item.checked = 0;
|
|
233
|
+
});
|
|
95
234
|
action.id.forEach(function (id) {
|
|
96
|
-
return updateChecked(state.itemMap, id);
|
|
235
|
+
return updateChecked(state.itemMap, id, 1);
|
|
97
236
|
});
|
|
98
237
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
99
238
|
checked: action.id
|
|
@@ -104,22 +243,30 @@ var useTree = function useTree(_ref) {
|
|
|
104
243
|
itemMap: new Map(),
|
|
105
244
|
items: [],
|
|
106
245
|
tree: [],
|
|
107
|
-
checked: []
|
|
246
|
+
checked: [],
|
|
247
|
+
query: ""
|
|
108
248
|
}),
|
|
109
249
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
110
250
|
state = _useReducer2[0],
|
|
111
251
|
dispatch = _useReducer2[1];
|
|
112
252
|
useEffect(function () {
|
|
113
|
-
|
|
114
|
-
onSelect: onSelect,
|
|
115
|
-
onChecked: onChecked
|
|
116
|
-
};
|
|
117
|
-
}, [onSelect, onChecked]);
|
|
118
|
-
useEffect(function () {
|
|
253
|
+
var _intialExpand$current3;
|
|
119
254
|
dispatch({
|
|
120
255
|
type: "load",
|
|
121
256
|
items: itemList
|
|
122
257
|
});
|
|
258
|
+
itemList.length && ((_intialExpand$current3 = intialExpand.current) === null || _intialExpand$current3 === void 0 ? void 0 : _intialExpand$current3.length) > 0 && dispatch({
|
|
259
|
+
type: "expand",
|
|
260
|
+
id: intialExpand.current.shift()
|
|
261
|
+
});
|
|
262
|
+
selected && dispatch({
|
|
263
|
+
type: "select",
|
|
264
|
+
id: selected
|
|
265
|
+
});
|
|
266
|
+
checked && dispatch({
|
|
267
|
+
type: "checked",
|
|
268
|
+
id: checked
|
|
269
|
+
});
|
|
123
270
|
}, [itemList]);
|
|
124
271
|
useEffect(function () {
|
|
125
272
|
selected && dispatch({
|
|
@@ -146,9 +293,11 @@ var useTree = function useTree(_ref) {
|
|
|
146
293
|
});
|
|
147
294
|
}, []);
|
|
148
295
|
var select = useCallback(function (id) {
|
|
296
|
+
var shiftKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
149
297
|
dispatch({
|
|
150
|
-
type: "
|
|
151
|
-
id: id
|
|
298
|
+
type: "toggleSelect",
|
|
299
|
+
id: id,
|
|
300
|
+
shiftKey: shiftKey
|
|
152
301
|
});
|
|
153
302
|
}, []);
|
|
154
303
|
var expand = useCallback(function (id) {
|
|
@@ -157,6 +306,15 @@ var useTree = function useTree(_ref) {
|
|
|
157
306
|
id: id
|
|
158
307
|
});
|
|
159
308
|
}, []);
|
|
309
|
+
var expandAndLoad = useCallback(function (expandList) {
|
|
310
|
+
if (expandList.length > 0) {
|
|
311
|
+
intialExpand.current = _toConsumableArray(expandList);
|
|
312
|
+
dispatch({
|
|
313
|
+
type: "expand",
|
|
314
|
+
id: intialExpand.current.shift()
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
}, []);
|
|
160
318
|
var expandAll = useCallback(function () {
|
|
161
319
|
dispatch({
|
|
162
320
|
type: "expandAll"
|
|
@@ -172,13 +330,16 @@ var useTree = function useTree(_ref) {
|
|
|
172
330
|
type: "filter",
|
|
173
331
|
query: query
|
|
174
332
|
});
|
|
175
|
-
}, []);
|
|
333
|
+
}, [], 300);
|
|
176
334
|
return {
|
|
177
335
|
tree: state.tree,
|
|
336
|
+
query: state.query,
|
|
337
|
+
selected: state.selected,
|
|
178
338
|
toggleExpand: toggleExpand,
|
|
179
339
|
expandAll: expandAll,
|
|
180
340
|
collapseAll: collapseAll,
|
|
181
341
|
toggleCheck: toggleCheck,
|
|
342
|
+
expandAndLoad: expandAndLoad,
|
|
182
343
|
select: select,
|
|
183
344
|
expand: expand,
|
|
184
345
|
onFilter: onFilter
|
package/dist/esm/tree/utils.js
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
4
|
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
5
|
-
import { isString, matchString, compareValues } from '@react-fabric/utilities';
|
|
5
|
+
import { isArray, isString, matchString, compareValues } from '@react-fabric/utilities';
|
|
6
6
|
|
|
7
7
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
8
8
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
9
|
-
var
|
|
9
|
+
var defaultSorter = function defaultSorter(a, b) {
|
|
10
10
|
if (!!a.leaf !== !!b.leaf) return a.leaf ? 1 : -1;
|
|
11
11
|
return compareValues()(a.label, b.label);
|
|
12
12
|
};
|
|
@@ -28,15 +28,21 @@ var getIntermediate = function getIntermediate() {
|
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
// convert node item to internal node used by the tree
|
|
31
|
-
var refactorTree = function refactorTree(nodes) {
|
|
32
|
-
var
|
|
31
|
+
var refactorTree = function refactorTree(nodes, _ref) {
|
|
32
|
+
var _ref$sorter = _ref.sorter,
|
|
33
|
+
sorter = _ref$sorter === void 0 ? defaultSorter : _ref$sorter,
|
|
34
|
+
_ref$defaultExpanded = _ref.defaultExpanded,
|
|
35
|
+
defaultExpanded = _ref$defaultExpanded === void 0 ? [] : _ref$defaultExpanded;
|
|
36
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
|
33
37
|
level: 0,
|
|
34
38
|
parent: undefined
|
|
35
39
|
};
|
|
36
40
|
var list = [];
|
|
37
|
-
nodes.sort(sorter)
|
|
41
|
+
if (sorter !== false) nodes = nodes.sort(sorter);
|
|
42
|
+
nodes.forEach(function (node) {
|
|
43
|
+
var _node$children;
|
|
38
44
|
list.push(_objectSpread(_objectSpread({
|
|
39
|
-
open:
|
|
45
|
+
open: defaultExpanded.includes(node.id) && !!((_node$children = node.children) !== null && _node$children !== void 0 && _node$children.length),
|
|
40
46
|
level: options.level,
|
|
41
47
|
parent: options.parent,
|
|
42
48
|
checked: 0,
|
|
@@ -47,6 +53,9 @@ var refactorTree = function refactorTree(nodes) {
|
|
|
47
53
|
}, node), {}, {
|
|
48
54
|
leaf: !!node.leaf,
|
|
49
55
|
children: node.children && refactorTree(node.children, {
|
|
56
|
+
sorter: sorter,
|
|
57
|
+
defaultExpanded: defaultExpanded
|
|
58
|
+
}, {
|
|
50
59
|
level: options.level + 1,
|
|
51
60
|
parent: node.id
|
|
52
61
|
})
|
|
@@ -72,33 +81,51 @@ var flattenTree = function flattenTree(nodes) {
|
|
|
72
81
|
return !node.filtered;
|
|
73
82
|
});
|
|
74
83
|
filtered.forEach(function (node, idx) {
|
|
84
|
+
var _node$children2;
|
|
75
85
|
node.lines = [].concat(_toConsumableArray(lines), [idx === filtered.length - 1 ? 2 : 3]);
|
|
76
86
|
list.push(node);
|
|
77
87
|
(node.open || node.childFiltered) && node.children && list.push.apply(list, _toConsumableArray(flattenTree(node.children.filter(function (child) {
|
|
78
88
|
return !child.filtered;
|
|
79
89
|
}), [].concat(_toConsumableArray(lines), [idx === filtered.length - 1 ? 0 : 1]))));
|
|
90
|
+
node.open && ((_node$children2 = node.children) === null || _node$children2 === void 0 ? void 0 : _node$children2.length) === 0 && list.push({
|
|
91
|
+
empty: true,
|
|
92
|
+
leaf: true,
|
|
93
|
+
lines: [].concat(_toConsumableArray(lines), [idx === filtered.length - 1 ? 0 : 1, 2])
|
|
94
|
+
});
|
|
80
95
|
});
|
|
81
96
|
return list;
|
|
82
97
|
};
|
|
83
|
-
var
|
|
84
|
-
var node = nodes.get(id);
|
|
98
|
+
var selectNode = function selectNode(nodes, id) {
|
|
99
|
+
var node = nodes.get(id !== null && id !== void 0 ? id : "");
|
|
85
100
|
if (node) {
|
|
86
101
|
// change selection
|
|
87
|
-
node.selected =
|
|
102
|
+
node.selected = true;
|
|
88
103
|
// update all parent childSelected flag
|
|
89
104
|
var parent = node.parent;
|
|
90
105
|
while (parent) {
|
|
91
106
|
var parentNode = nodes.get(parent);
|
|
92
|
-
parentNode && (parentNode.childSelected =
|
|
93
|
-
selected && parentNode && (parentNode.open = true);
|
|
107
|
+
parentNode && (parentNode.childSelected = true);
|
|
108
|
+
// selected && parentNode && (parentNode.open = true);
|
|
94
109
|
parent = parentNode === null || parentNode === void 0 ? void 0 : parentNode.parent;
|
|
95
110
|
}
|
|
96
111
|
}
|
|
97
112
|
};
|
|
98
|
-
var
|
|
113
|
+
var updateSelection = function updateSelection(_ref2) {
|
|
114
|
+
var nodes = _ref2.nodes,
|
|
115
|
+
multiple = _ref2.multiple,
|
|
116
|
+
selected = _ref2.selected;
|
|
117
|
+
nodes.forEach(function (node) {
|
|
118
|
+
node.selected = undefined;
|
|
119
|
+
node.childSelected = undefined;
|
|
120
|
+
});
|
|
121
|
+
multiple && isArray(selected) ? selected === null || selected === void 0 ? void 0 : selected.forEach(function (id) {
|
|
122
|
+
return selectNode(nodes, id);
|
|
123
|
+
}) : selectNode(nodes, selected);
|
|
124
|
+
};
|
|
125
|
+
var updateChecked = function updateChecked(list, id, checked) {
|
|
99
126
|
var node = list.get(id);
|
|
100
127
|
if (node) {
|
|
101
|
-
node.checked = node.checked ===
|
|
128
|
+
node.checked = (checked !== null && checked !== void 0 ? checked : node.checked === 0) ? 1 : 0;
|
|
102
129
|
// check all children
|
|
103
130
|
node.children && getChildren(node.children).forEach(function (child) {
|
|
104
131
|
return child.checked = node.checked;
|