@react-fabric/data 1.0.0-beta.9 → 1.0.1
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 +59 -33
- package/dist/cjs/histogram/Histogram.js +41 -26
- package/dist/cjs/hooks/useFilteredList.js +100 -17
- package/dist/cjs/hooks/usePagination.js +29 -8
- package/dist/cjs/hooks/useSelectableList.js +30 -5
- package/dist/cjs/i18n/{ar.json.js → ar/data.json.js} +8 -1
- package/dist/cjs/i18n/{en.json.js → en/data.json.js} +8 -1
- package/dist/cjs/i18n/index.js +4 -4
- package/dist/cjs/index.js +30 -0
- package/dist/cjs/json/JsonViewer.js +80 -43
- package/dist/cjs/pagination/Pagination.js +24 -15
- package/dist/cjs/table/AddColumn.js +5 -5
- package/dist/cjs/table/BodyCell.js +20 -13
- package/dist/cjs/table/BodyRow.js +41 -28
- package/dist/cjs/table/CheckboxCell.js +10 -9
- package/dist/cjs/table/ColumnFilters.js +100 -0
- package/dist/cjs/table/EmptyCell.js +4 -4
- package/dist/cjs/table/HeaderCell.js +79 -53
- package/dist/cjs/table/HtmlTable.js +84 -0
- package/dist/cjs/table/{Context.js → Provider.js} +8 -10
- package/dist/cjs/table/Table.js +99 -33
- package/dist/cjs/{tree/types.js → table/context.js} +9 -5
- package/dist/cjs/table/types.js +29 -0
- package/dist/cjs/table/useResizer.js +10 -10
- package/dist/cjs/table/useTableColumns.js +4 -4
- package/dist/cjs/table/useVirtualTable.js +129 -22
- package/dist/cjs/tree/TreeNode.js +66 -46
- package/dist/cjs/tree/TreePanel.js +60 -24
- package/dist/cjs/tree/useTree.js +212 -47
- package/dist/cjs/tree/utils.js +63 -34
- package/dist/cjs/utils/getColor.js +58 -0
- package/dist/cjs/virtual/Gallery.js +119 -61
- package/dist/cjs/virtual/List.js +116 -55
- package/dist/cjs/virtual/Scroller.js +16 -8
- package/dist/esm/checklist/CheckList.js +61 -35
- package/dist/esm/histogram/Histogram.js +43 -28
- package/dist/esm/hooks/useFilteredList.js +101 -18
- package/dist/esm/hooks/usePagination.js +29 -8
- package/dist/esm/hooks/useSelectableList.js +30 -5
- package/dist/esm/i18n/{ar.json.js → ar/data.json.js} +8 -2
- package/dist/esm/i18n/{en.json.js → en/data.json.js} +8 -2
- package/dist/esm/i18n/index.js +2 -2
- package/dist/esm/index.js +31 -0
- package/dist/esm/json/JsonViewer.js +82 -45
- package/dist/esm/pagination/Pagination.js +25 -16
- package/dist/esm/table/AddColumn.js +6 -6
- package/dist/esm/table/BodyCell.js +21 -14
- package/dist/esm/table/BodyRow.js +41 -28
- package/dist/esm/table/CheckboxCell.js +11 -10
- package/dist/esm/table/ColumnFilters.js +100 -0
- package/dist/esm/table/EmptyCell.js +4 -4
- package/dist/esm/table/HeaderCell.js +80 -54
- package/dist/esm/table/HtmlTable.js +84 -0
- package/dist/esm/table/{Context.js → Provider.js} +11 -12
- package/dist/esm/table/Table.js +100 -34
- package/dist/esm/{tree/types.js → table/context.js} +8 -4
- package/dist/esm/table/types.js +29 -0
- package/dist/esm/table/useResizer.js +10 -10
- package/dist/esm/table/useTableColumns.js +4 -4
- package/dist/esm/table/useVirtualTable.js +131 -24
- package/dist/esm/tree/TreeNode.js +69 -49
- package/dist/esm/tree/TreePanel.js +62 -26
- package/dist/esm/tree/useTree.js +215 -50
- package/dist/esm/tree/utils.js +64 -35
- package/dist/esm/utils/getColor.js +58 -0
- package/dist/esm/virtual/Gallery.js +121 -63
- package/dist/esm/virtual/List.js +118 -57
- package/dist/esm/virtual/Scroller.js +17 -9
- package/dist/types/checklist/CheckList.d.ts +25 -6
- package/dist/types/histogram/Histogram.d.ts +28 -6
- package/dist/types/hooks/useFilteredList.d.ts +62 -5
- package/dist/types/hooks/usePagination.d.ts +18 -2
- package/dist/types/hooks/useSelectableList.d.ts +24 -1
- package/dist/types/index.d.ts +27 -0
- package/dist/types/json/JsonViewer.d.ts +23 -3
- package/dist/types/pagination/Pagination.d.ts +8 -2
- package/dist/types/table/AddColumn.d.ts +2 -2
- package/dist/types/table/BodyCell.d.ts +2 -2
- package/dist/types/table/BodyRow.d.ts +9 -9
- package/dist/types/table/CheckboxCell.d.ts +3 -3
- package/dist/types/table/ColumnFilters.d.ts +12 -0
- package/dist/types/table/EmptyCell.d.ts +1 -1
- package/dist/types/table/HeaderCell.d.ts +1 -1
- package/dist/types/table/HtmlTable.d.ts +21 -0
- package/dist/types/table/Provider.d.ts +2 -0
- package/dist/types/table/Table.d.ts +10 -1
- package/dist/types/table/context.d.ts +7 -0
- package/dist/types/table/types.d.ts +52 -10
- package/dist/types/table/useResizer.d.ts +1 -1
- package/dist/types/table/useTableColumns.d.ts +1 -1
- package/dist/types/table/useVirtualTable.d.ts +31 -12
- package/dist/types/tree/TreeNode.d.ts +1 -1
- package/dist/types/tree/TreePanel.d.ts +36 -1
- package/dist/types/tree/types.d.ts +75 -28
- package/dist/types/tree/useTree.d.ts +8 -12
- package/dist/types/tree/utils.d.ts +15 -8
- package/dist/types/utils/getColor.d.ts +43 -0
- package/dist/types/virtual/Gallery.d.ts +37 -6
- package/dist/types/virtual/List.d.ts +38 -6
- package/dist/types/virtual/Scroller.d.ts +1 -1
- package/package.json +17 -19
- package/src/checklist/CheckList.tsx +68 -71
- package/src/histogram/Histogram.tsx +47 -48
- package/src/hooks/useFilteredList.tsx +111 -28
- package/src/hooks/usePagination.tsx +39 -39
- package/src/hooks/useSelectableList.ts +45 -33
- package/src/i18n/{ar.json → ar/data.json} +5 -0
- package/src/i18n/{en.json → en/data.json} +5 -0
- package/src/i18n/index.ts +2 -2
- package/src/index.ts +23 -17
- package/src/json/JsonViewer.tsx +89 -120
- package/src/pagination/Pagination.tsx +104 -105
- package/src/table/AddColumn.tsx +6 -15
- package/src/table/BodyCell.tsx +27 -36
- package/src/table/BodyRow.tsx +36 -59
- package/src/table/CheckboxCell.tsx +12 -15
- package/src/table/ColumnFilters.tsx +93 -0
- package/src/table/EmptyCell.tsx +5 -18
- package/src/table/HeaderCell.tsx +72 -53
- package/src/table/HtmlTable.tsx +106 -0
- package/src/table/{Context.tsx → Provider.tsx} +11 -28
- package/src/table/Table.tsx +98 -83
- package/src/table/context.ts +33 -0
- package/src/table/types.ts +53 -27
- package/src/table/useResizer.ts +5 -9
- package/src/table/useTableColumns.ts +4 -6
- package/src/table/useVirtualTable.ts +136 -37
- package/src/tree/TreeNode.tsx +91 -86
- package/src/tree/TreePanel.tsx +87 -51
- package/src/tree/types.ts +85 -46
- package/src/tree/useTree.ts +210 -65
- package/src/tree/utils.ts +81 -62
- package/src/utils/getColor.ts +55 -0
- package/src/virtual/Gallery.tsx +129 -120
- package/src/virtual/List.tsx +124 -91
- package/src/virtual/Scroller.tsx +25 -9
- package/dist/cjs/histogram/Histogram.module.css +0 -1
- package/dist/esm/histogram/Histogram.module.css +0 -1
- package/dist/types/table/Context.d.ts +0 -8
package/dist/esm/tree/useTree.js
CHANGED
|
@@ -2,98 +2,240 @@
|
|
|
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
|
|
8
|
-
import { useRef, useReducer, useEffect
|
|
9
|
-
import { refactorTree, makeTreeMap, flattenTree,
|
|
7
|
+
import { EMPTY_ARRAY, isEmpty } from '@react-fabric/utilities';
|
|
8
|
+
import memoize from 'memoize-one';
|
|
9
|
+
import { 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
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t),
|
|
13
|
-
var createItemList =
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).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; }
|
|
14
|
+
var createItemList = memoize(function (items) {
|
|
14
15
|
return items;
|
|
15
16
|
});
|
|
16
|
-
|
|
17
|
+
function useTree(_ref) {
|
|
17
18
|
var _ref$items = _ref.items,
|
|
18
19
|
items = _ref$items === void 0 ? EMPTY_ARRAY : _ref$items,
|
|
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
|
-
|
|
28
|
-
|
|
29
|
+
onChecked = _ref.onChecked,
|
|
30
|
+
defaultExpanded = _ref.defaultExpanded,
|
|
31
|
+
onExpandToggle = _ref.onExpandToggle;
|
|
32
|
+
var eventSelect = onSelect !== null && onSelect !== void 0 ? onSelect : function () {
|
|
33
|
+
return undefined;
|
|
34
|
+
};
|
|
35
|
+
var eventChecked = onChecked !== null && onChecked !== void 0 ? onChecked : function () {
|
|
36
|
+
return undefined;
|
|
37
|
+
};
|
|
38
|
+
var intialExpandRef = 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 _intialExpandRef$curr;
|
|
67
|
+
node.loading = false;
|
|
68
|
+
dispatch({
|
|
69
|
+
type: "loaded"
|
|
70
|
+
});
|
|
71
|
+
if (((_intialExpandRef$curr = intialExpandRef.current) === null || _intialExpandRef$curr === void 0 ? void 0 : _intialExpandRef$curr.length) > 0) dispatch({
|
|
72
|
+
type: "expand",
|
|
73
|
+
id: intialExpandRef.current.shift()
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}, 100);
|
|
77
|
+
} else {
|
|
78
|
+
var _intialExpandRef$curr2;
|
|
79
|
+
dispatch({
|
|
80
|
+
type: "loaded"
|
|
81
|
+
});
|
|
82
|
+
if (((_intialExpandRef$curr2 = intialExpandRef.current) === null || _intialExpandRef$curr2 === void 0 ? void 0 : _intialExpandRef$curr2.length) > 0) dispatch({
|
|
83
|
+
type: "expand",
|
|
84
|
+
id: intialExpandRef.current.shift()
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
// eslint-disable-next-line @eslint-react/exhaustive-deps
|
|
89
|
+
[onLoad]);
|
|
90
|
+
var fireSelected = useDebounce(function (nodeId, data) {
|
|
91
|
+
eventSelect(nodeId, data);
|
|
92
|
+
}, []);
|
|
93
|
+
var fireChecked = useDebounce(function (leafs, nodes, partials) {
|
|
94
|
+
eventChecked(leafs, nodes, partials);
|
|
95
|
+
}, []);
|
|
96
|
+
var fireQuery = useDebounce(function (query) {
|
|
97
|
+
onQuery === null || onQuery === void 0 || onQuery(query);
|
|
98
|
+
}, [onQuery]);
|
|
30
99
|
var _useReducer = useReducer(function (state, action) {
|
|
31
100
|
if (action.type === "load") {
|
|
32
|
-
state.items = refactorTree(action.items
|
|
101
|
+
state.items = refactorTree(action.items, {
|
|
102
|
+
sorter: sorter,
|
|
103
|
+
defaultExpanded: defaultExpanded
|
|
104
|
+
});
|
|
33
105
|
state.itemMap = makeTreeMap(state.items);
|
|
34
106
|
state.tree = flattenTree(state.items);
|
|
107
|
+
state.selected = undefined;
|
|
108
|
+
state.checked = undefined;
|
|
109
|
+
state.query = "";
|
|
35
110
|
return _objectSpread({}, state);
|
|
36
111
|
}
|
|
37
112
|
if (action.type === "toggleExpand") {
|
|
38
113
|
var node = state.itemMap.get(action.id);
|
|
39
|
-
|
|
114
|
+
if (node && !node.leaf) {
|
|
115
|
+
if (node) node.open = !node.open;
|
|
116
|
+
loadChildren(node);
|
|
117
|
+
return _objectSpread({}, state);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (action.type === "loaded") {
|
|
121
|
+
var _state$checked;
|
|
122
|
+
state.itemMap = makeTreeMap(state.items);
|
|
123
|
+
fireExpandToggle(Array.from(state.itemMap.values()));
|
|
40
124
|
state.tree = flattenTree(state.items);
|
|
125
|
+
state.selected = selected;
|
|
126
|
+
updateSelection({
|
|
127
|
+
nodes: state.itemMap,
|
|
128
|
+
multiple: multiple,
|
|
129
|
+
selected: selected
|
|
130
|
+
});
|
|
131
|
+
(_state$checked = state.checked) === null || _state$checked === void 0 || _state$checked.forEach(function (id) {
|
|
132
|
+
return updateChecked(state.itemMap, id, 1);
|
|
133
|
+
});
|
|
41
134
|
return _objectSpread({}, state);
|
|
42
135
|
}
|
|
43
136
|
if (action.type === "expand") {
|
|
44
|
-
// TODO: check if children available, if not call onLoad to fetch node children
|
|
45
137
|
var _node = state.itemMap.get(action.id);
|
|
46
|
-
_node &&
|
|
47
|
-
|
|
48
|
-
|
|
138
|
+
if (_node && !_node.leaf) {
|
|
139
|
+
_node.open = true;
|
|
140
|
+
var parentId = _node.parent;
|
|
141
|
+
while (parentId) {
|
|
142
|
+
var _node2 = state.itemMap.get(parentId);
|
|
143
|
+
if (_node2) _node2.open = true;
|
|
144
|
+
parentId = _node2 === null || _node2 === void 0 ? void 0 : _node2.parent;
|
|
145
|
+
}
|
|
146
|
+
loadChildren(_node);
|
|
147
|
+
return _objectSpread({}, state);
|
|
148
|
+
}
|
|
49
149
|
}
|
|
50
150
|
if (action.type === "expandAll") {
|
|
51
|
-
// TODO: prevent opening dynamic nodes that dont have children
|
|
52
151
|
state.itemMap.forEach(function (node) {
|
|
53
|
-
|
|
152
|
+
var _node$children2;
|
|
153
|
+
if (!node.leaf && (_node$children2 = node.children) !== null && _node$children2 !== void 0 && _node$children2.length) node.open = true;
|
|
54
154
|
});
|
|
155
|
+
fireExpandToggle(Array.from(state.itemMap.values()));
|
|
55
156
|
state.tree = flattenTree(state.items);
|
|
56
157
|
return _objectSpread({}, state);
|
|
57
158
|
}
|
|
58
159
|
if (action.type === "collapseAll") {
|
|
59
160
|
state.itemMap.forEach(function (node) {
|
|
60
|
-
!node.leaf
|
|
161
|
+
if (!node.leaf) node.open = false;
|
|
61
162
|
});
|
|
163
|
+
fireExpandToggle([]);
|
|
62
164
|
state.tree = flattenTree(state.items);
|
|
63
165
|
return _objectSpread({}, state);
|
|
64
166
|
}
|
|
65
167
|
if (action.type === "filter") {
|
|
66
|
-
|
|
168
|
+
if (onQuery) {
|
|
169
|
+
// TODO: onQuery should provide new tree listing
|
|
170
|
+
// save current tree state as preQueryState
|
|
171
|
+
// on clearing filter restore preQueryState
|
|
172
|
+
if (!isEmpty(action.query)) {
|
|
173
|
+
// state.prevItems = state.items;
|
|
174
|
+
fireQuery(action.query);
|
|
175
|
+
}
|
|
176
|
+
} else {
|
|
177
|
+
filterTree(state.itemMap, action.query, matcher);
|
|
178
|
+
state.tree = flattenTree(state.items);
|
|
179
|
+
}
|
|
180
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
181
|
+
query: action.query
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
if (action.type === "toggleSelect") {
|
|
185
|
+
var _state$itemMap$get;
|
|
186
|
+
if (multiple) {
|
|
187
|
+
var _state$selected, _state$selected$filte, _state$selected2, _state$selected3;
|
|
188
|
+
var isSelected = (_state$selected = state.selected) === null || _state$selected === void 0 ? void 0 : _state$selected.includes(action.id);
|
|
189
|
+
// @ts-expect-error ignore
|
|
190
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
|
191
|
+
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) {
|
|
192
|
+
return id !== action.id;
|
|
193
|
+
})) !== 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];
|
|
194
|
+
} else {
|
|
195
|
+
state.selected = action.id;
|
|
196
|
+
}
|
|
197
|
+
updateSelection({
|
|
198
|
+
nodes: state.itemMap,
|
|
199
|
+
selected: state.selected,
|
|
200
|
+
multiple: multiple
|
|
201
|
+
});
|
|
67
202
|
state.tree = flattenTree(state.items);
|
|
203
|
+
fireSelected(state.selected, (_state$itemMap$get = state.itemMap.get(action.id)) === null || _state$itemMap$get === void 0 ? void 0 : _state$itemMap$get.data);
|
|
68
204
|
return _objectSpread({}, state);
|
|
69
205
|
}
|
|
70
206
|
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), {}, {
|
|
207
|
+
state.selected = action.id;
|
|
208
|
+
updateSelection({
|
|
209
|
+
nodes: state.itemMap,
|
|
210
|
+
multiple: multiple,
|
|
79
211
|
selected: action.id
|
|
80
212
|
});
|
|
213
|
+
state.tree = flattenTree(state.items);
|
|
214
|
+
return _objectSpread({}, state);
|
|
81
215
|
}
|
|
82
216
|
if (action.type === "toggleCheck") {
|
|
83
|
-
var _componentEvents$curr3, _componentEvents$curr4;
|
|
84
217
|
updateChecked(state.itemMap, action.id);
|
|
85
|
-
var checkList = [[], []];
|
|
218
|
+
var checkList = [[], [], []];
|
|
86
219
|
Array.from(state.itemMap.values()).filter(function (node) {
|
|
87
|
-
return node.checked
|
|
220
|
+
return node.checked !== 0;
|
|
88
221
|
}).forEach(function (node) {
|
|
89
|
-
return checkList[node.leaf ? 0 :
|
|
222
|
+
return checkList[node.leaf ? 0 : node.checked].push(node.id);
|
|
223
|
+
});
|
|
224
|
+
fireChecked(checkList[0],
|
|
225
|
+
// leafs
|
|
226
|
+
checkList[1],
|
|
227
|
+
// nodes
|
|
228
|
+
checkList[2]);
|
|
229
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
230
|
+
checked: checkList[0]
|
|
90
231
|
});
|
|
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
232
|
}
|
|
94
233
|
if (action.type === "checked") {
|
|
234
|
+
state.itemMap.forEach(function (item) {
|
|
235
|
+
return item.checked = 0;
|
|
236
|
+
});
|
|
95
237
|
action.id.forEach(function (id) {
|
|
96
|
-
return updateChecked(state.itemMap, id);
|
|
238
|
+
return updateChecked(state.itemMap, id, 1);
|
|
97
239
|
});
|
|
98
240
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
99
241
|
checked: action.id
|
|
@@ -104,31 +246,40 @@ var useTree = function useTree(_ref) {
|
|
|
104
246
|
itemMap: new Map(),
|
|
105
247
|
items: [],
|
|
106
248
|
tree: [],
|
|
107
|
-
checked: []
|
|
249
|
+
checked: [],
|
|
250
|
+
query: ""
|
|
108
251
|
}),
|
|
109
252
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
110
253
|
state = _useReducer2[0],
|
|
111
254
|
dispatch = _useReducer2[1];
|
|
112
255
|
useEffect(function () {
|
|
113
|
-
|
|
114
|
-
onSelect: onSelect,
|
|
115
|
-
onChecked: onChecked
|
|
116
|
-
};
|
|
117
|
-
}, [onSelect, onChecked]);
|
|
118
|
-
useEffect(function () {
|
|
256
|
+
var _intialExpandRef$curr3;
|
|
119
257
|
dispatch({
|
|
120
258
|
type: "load",
|
|
121
259
|
items: itemList
|
|
122
260
|
});
|
|
261
|
+
if (itemList.length && ((_intialExpandRef$curr3 = intialExpandRef.current) === null || _intialExpandRef$curr3 === void 0 ? void 0 : _intialExpandRef$curr3.length) > 0) dispatch({
|
|
262
|
+
type: "expand",
|
|
263
|
+
id: intialExpandRef.current.shift()
|
|
264
|
+
});
|
|
265
|
+
if (selected) dispatch({
|
|
266
|
+
type: "select",
|
|
267
|
+
id: selected
|
|
268
|
+
});
|
|
269
|
+
if (checked) dispatch({
|
|
270
|
+
type: "checked",
|
|
271
|
+
id: checked
|
|
272
|
+
});
|
|
273
|
+
// eslint-disable-next-line @eslint-react/exhaustive-deps
|
|
123
274
|
}, [itemList]);
|
|
124
275
|
useEffect(function () {
|
|
125
|
-
selected
|
|
276
|
+
if (selected) dispatch({
|
|
126
277
|
type: "select",
|
|
127
278
|
id: selected
|
|
128
279
|
});
|
|
129
280
|
}, [selected]);
|
|
130
281
|
useEffect(function () {
|
|
131
|
-
checked
|
|
282
|
+
if (checked) dispatch({
|
|
132
283
|
type: "checked",
|
|
133
284
|
id: checked
|
|
134
285
|
});
|
|
@@ -146,9 +297,11 @@ var useTree = function useTree(_ref) {
|
|
|
146
297
|
});
|
|
147
298
|
}, []);
|
|
148
299
|
var select = useCallback(function (id) {
|
|
300
|
+
var shiftKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
149
301
|
dispatch({
|
|
150
|
-
type: "
|
|
151
|
-
id: id
|
|
302
|
+
type: "toggleSelect",
|
|
303
|
+
id: id,
|
|
304
|
+
shiftKey: shiftKey
|
|
152
305
|
});
|
|
153
306
|
}, []);
|
|
154
307
|
var expand = useCallback(function (id) {
|
|
@@ -157,6 +310,15 @@ var useTree = function useTree(_ref) {
|
|
|
157
310
|
id: id
|
|
158
311
|
});
|
|
159
312
|
}, []);
|
|
313
|
+
var expandAndLoad = useCallback(function (expandList) {
|
|
314
|
+
if (expandList.length > 0) {
|
|
315
|
+
intialExpandRef.current = _toConsumableArray(expandList);
|
|
316
|
+
dispatch({
|
|
317
|
+
type: "expand",
|
|
318
|
+
id: intialExpandRef.current.shift()
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
}, []);
|
|
160
322
|
var expandAll = useCallback(function () {
|
|
161
323
|
dispatch({
|
|
162
324
|
type: "expandAll"
|
|
@@ -172,17 +334,20 @@ var useTree = function useTree(_ref) {
|
|
|
172
334
|
type: "filter",
|
|
173
335
|
query: query
|
|
174
336
|
});
|
|
175
|
-
}, []);
|
|
337
|
+
}, [], 300);
|
|
176
338
|
return {
|
|
177
339
|
tree: state.tree,
|
|
340
|
+
query: state.query,
|
|
341
|
+
selected: state.selected,
|
|
178
342
|
toggleExpand: toggleExpand,
|
|
179
343
|
expandAll: expandAll,
|
|
180
344
|
collapseAll: collapseAll,
|
|
181
345
|
toggleCheck: toggleCheck,
|
|
346
|
+
expandAndLoad: expandAndLoad,
|
|
182
347
|
select: select,
|
|
183
348
|
expand: expand,
|
|
184
349
|
onFilter: onFilter
|
|
185
350
|
};
|
|
186
|
-
}
|
|
351
|
+
}
|
|
187
352
|
|
|
188
353
|
export { useTree };
|
package/dist/esm/tree/utils.js
CHANGED
|
@@ -2,21 +2,21 @@
|
|
|
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
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t),
|
|
9
|
-
|
|
8
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).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
|
+
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
|
-
}
|
|
13
|
-
|
|
12
|
+
}
|
|
13
|
+
function getChildren() {
|
|
14
14
|
var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
15
15
|
return list.map(function (item) {
|
|
16
16
|
return [item].concat(_toConsumableArray(getChildren(item.children)));
|
|
17
17
|
}).flat(99).filter(Boolean);
|
|
18
|
-
}
|
|
19
|
-
|
|
18
|
+
}
|
|
19
|
+
function getIntermediate() {
|
|
20
20
|
var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
21
21
|
var checks = list.map(function (item) {
|
|
22
22
|
return item.checked;
|
|
@@ -25,18 +25,24 @@ var getIntermediate = function getIntermediate() {
|
|
|
25
25
|
var someInt = checks.includes(2);
|
|
26
26
|
var someOn = checks.includes(1);
|
|
27
27
|
return someOff && someOn || someInt ? 2 : someOn ? 1 : 0;
|
|
28
|
-
}
|
|
28
|
+
}
|
|
29
29
|
|
|
30
30
|
// convert node item to internal node used by the tree
|
|
31
|
-
|
|
32
|
-
var
|
|
31
|
+
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,71 +53,92 @@ 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
|
})
|
|
53
62
|
}));
|
|
54
63
|
});
|
|
55
64
|
return list;
|
|
56
|
-
}
|
|
57
|
-
|
|
65
|
+
}
|
|
66
|
+
function makeTreeMap(nodes) {
|
|
58
67
|
var map = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Map();
|
|
59
68
|
nodes.forEach(function (node) {
|
|
60
69
|
if (map.has(node.id)) throw new Error("Node with id [".concat(node.id, "] already exists, please make sure all ids are unique"));
|
|
61
70
|
map.set(node.id, node);
|
|
62
|
-
node.children
|
|
71
|
+
if (node.children) makeTreeMap(node.children, map);
|
|
63
72
|
});
|
|
64
73
|
return map;
|
|
65
|
-
}
|
|
74
|
+
}
|
|
66
75
|
|
|
67
76
|
// make flat list to be rendered by virtual list
|
|
68
|
-
|
|
77
|
+
function flattenTree(nodes) {
|
|
69
78
|
var lines = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
70
79
|
var list = [];
|
|
71
80
|
var filtered = nodes.filter(function (node) {
|
|
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
|
-
(node.open || node.childFiltered) && node.children
|
|
87
|
+
if ((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
|
+
if (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
|
-
}
|
|
83
|
-
|
|
84
|
-
var node = nodes.get(id);
|
|
97
|
+
}
|
|
98
|
+
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
|
-
|
|
93
|
-
selected && parentNode && (parentNode.open = true);
|
|
107
|
+
if (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
|
-
}
|
|
98
|
-
|
|
112
|
+
}
|
|
113
|
+
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
|
+
if (multiple && isArray(selected)) selected === null || selected === void 0 || selected.forEach(function (id) {
|
|
122
|
+
return selectNode(nodes, id);
|
|
123
|
+
});else selectNode(nodes, selected);
|
|
124
|
+
}
|
|
125
|
+
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
|
-
node.children
|
|
130
|
+
if (node.children) getChildren(node.children).forEach(function (child) {
|
|
104
131
|
return child.checked = node.checked;
|
|
105
132
|
});
|
|
106
133
|
var parent = node.parent;
|
|
107
134
|
while (parent) {
|
|
108
135
|
var parentNode = list.get(parent);
|
|
109
|
-
|
|
136
|
+
if (parentNode) parentNode.checked = getIntermediate(parentNode.children);
|
|
110
137
|
parent = parentNode === null || parentNode === void 0 ? void 0 : parentNode.parent;
|
|
111
138
|
}
|
|
112
139
|
}
|
|
113
|
-
}
|
|
114
|
-
|
|
140
|
+
}
|
|
141
|
+
function filterTree(nodes, query, matcher) {
|
|
115
142
|
nodes.forEach(function (node) {
|
|
116
143
|
if (query) {
|
|
117
144
|
if (node.parentFiltered) return;
|
|
@@ -120,11 +147,13 @@ var filterTree = function filterTree(nodes, query, matcher) {
|
|
|
120
147
|
var parent = node.parent;
|
|
121
148
|
while (parent) {
|
|
122
149
|
var parentNode = nodes.get(parent);
|
|
123
|
-
|
|
124
|
-
|
|
150
|
+
if (parentNode) {
|
|
151
|
+
parentNode.filtered = false;
|
|
152
|
+
parentNode.childFiltered = true;
|
|
153
|
+
}
|
|
125
154
|
parent = parentNode === null || parentNode === void 0 ? void 0 : parentNode.parent;
|
|
126
155
|
}
|
|
127
|
-
node.children
|
|
156
|
+
if (node.children) getChildren(node.children).forEach(function (child) {
|
|
128
157
|
child.parentFiltered = true;
|
|
129
158
|
child.filtered = false;
|
|
130
159
|
});
|
|
@@ -135,6 +164,6 @@ var filterTree = function filterTree(nodes, query, matcher) {
|
|
|
135
164
|
node.parentFiltered = undefined;
|
|
136
165
|
}
|
|
137
166
|
});
|
|
138
|
-
}
|
|
167
|
+
}
|
|
139
168
|
|
|
140
169
|
export { filterTree, flattenTree, makeTreeMap, refactorTree, updateChecked, updateSelection };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { isColor } from '@react-fabric/utilities';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* React Fabric
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
* @license MIT
|
|
9
|
+
* @copyright 2024 Adarsh Pastakia
|
|
10
|
+
*
|
|
11
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
12
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
13
|
+
* in the Software without restriction, including without limitation the rights
|
|
14
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
15
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
16
|
+
* furnished to do so, subject to the following conditions:
|
|
17
|
+
*
|
|
18
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
19
|
+
* copies or substantial portions of the Software.
|
|
20
|
+
*
|
|
21
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
22
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
23
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
24
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
25
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
26
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
27
|
+
* SOFTWARE.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Resolves a color value to a CSS color string.
|
|
33
|
+
*
|
|
34
|
+
* If the input is a valid CSS color (e.g., `"#ff0000"`, `"rgb(255,0,0)"`), it is returned as-is.
|
|
35
|
+
* Otherwise, it is treated as a design token name and resolved to a CSS custom property
|
|
36
|
+
* (e.g., `"primary-500"` → `"var(--color-primary-500)"`).
|
|
37
|
+
*
|
|
38
|
+
* @param {ColorUnion} color - The color value to resolve. Accepts CSS color strings or design token names.
|
|
39
|
+
* @returns The resolved CSS color string, or `undefined` if color is falsy.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* getColor("primary-500"); // "var(--color-primary-500)"
|
|
44
|
+
* getColor("#ff0000"); // "#ff0000"
|
|
45
|
+
* getColor("red"); // "var(--color-red)"
|
|
46
|
+
* getColor(undefined); // undefined
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
function getColor(color) {
|
|
50
|
+
if (!color) return undefined;
|
|
51
|
+
if (color && isColor(color)) {
|
|
52
|
+
return color;
|
|
53
|
+
}
|
|
54
|
+
if (color.startsWith("--")) return "var(".concat(color, ")");
|
|
55
|
+
return "var(--color-".concat(color, ")");
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { getColor };
|