@react-fabric/data 1.0.0-beta.6 → 1.0.0-beta.61
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/{dist/esm/tree/types.js → css/styles.css} +2 -7
- package/dist/cjs/checklist/CheckList.js +27 -4
- package/dist/cjs/histogram/Histogram.js +39 -9
- 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 +68 -28
- package/dist/cjs/pagination/Pagination.js +14 -4
- package/dist/cjs/table/AddColumn.js +3 -3
- package/dist/cjs/table/BodyCell.js +14 -6
- package/dist/cjs/table/BodyRow.js +4 -4
- package/dist/cjs/table/CheckboxCell.js +2 -2
- package/dist/cjs/table/ColumnFilters.js +97 -0
- package/dist/cjs/table/HeaderCell.js +71 -43
- package/dist/cjs/table/Table.js +62 -13
- 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 +50 -32
- package/dist/cjs/tree/TreePanel.js +52 -19
- 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 +28 -5
- package/dist/esm/histogram/Histogram.js +41 -11
- 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 +69 -29
- package/dist/esm/pagination/Pagination.js +15 -5
- package/dist/esm/table/AddColumn.js +4 -4
- package/dist/esm/table/BodyCell.js +15 -7
- package/dist/esm/table/BodyRow.js +4 -4
- package/dist/esm/table/CheckboxCell.js +3 -3
- package/dist/esm/table/ColumnFilters.js +97 -0
- package/dist/esm/table/HeaderCell.js +72 -44
- package/dist/esm/table/Table.js +63 -14
- 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 +53 -35
- package/dist/esm/tree/TreePanel.js +54 -21
- 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 +17 -9
- 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 +46 -7
- 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 -21
- 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 +39 -7
- package/src/histogram/Histogram.tsx +43 -19
- 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 +76 -37
- package/src/pagination/Pagination.tsx +15 -5
- package/src/table/AddColumn.tsx +4 -4
- package/src/table/BodyCell.tsx +24 -7
- package/src/table/BodyRow.tsx +7 -4
- package/src/table/CheckboxCell.tsx +5 -5
- package/src/table/ColumnFilters.tsx +105 -0
- package/src/table/HeaderCell.tsx +74 -21
- package/src/table/Table.tsx +107 -12
- package/src/table/types.ts +49 -10
- package/src/table/useResizer.ts +5 -3
- package/src/table/useVirtualTable.ts +158 -27
- package/src/tree/TreeNode.tsx +96 -62
- package/src/tree/TreePanel.tsx +88 -22
- package/src/tree/types.ts +73 -23
- 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 +25 -9
- package/dist/cjs/histogram/Histogram.module.css +0 -1
- package/dist/cjs/tree/types.js +0 -30
- package/dist/esm/histogram/Histogram.module.css +0 -1
|
@@ -7,11 +7,10 @@ var form = require('@react-fabric/form');
|
|
|
7
7
|
var reactVirtual = require('@tanstack/react-virtual');
|
|
8
8
|
var react = require('react');
|
|
9
9
|
var TreeNode = require('./TreeNode.js');
|
|
10
|
-
var types = require('./types.js');
|
|
11
10
|
var useTree = require('./useTree.js');
|
|
12
11
|
var jsxRuntime = require('react/jsx-runtime');
|
|
13
12
|
|
|
14
|
-
var _excluded = ["ref", "items", "selected", "checked", "checkable", "noLines", "
|
|
13
|
+
var _excluded = ["ref", "items", "selected", "checked", "checkable", "noLines", "searchable", "selectable", "multiple", "matcher", "filterPlaceholder", "defaultLeafIcon", "defaultNodeIcon", "expander", "onChecked", "onLoad", "onQuery", "onSelect", "onClick", "sorter", "makeLabel", "makeIcon", "defaultExpanded", "onExpandToggle", "leafClassName", "nodeClassName"];
|
|
15
14
|
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; }
|
|
16
15
|
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; }
|
|
17
16
|
var TreePanel = function TreePanel(_ref) {
|
|
@@ -22,33 +21,51 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
22
21
|
checked = _ref.checked,
|
|
23
22
|
checkable = _ref.checkable,
|
|
24
23
|
noLines = _ref.noLines,
|
|
25
|
-
renderer = _ref.renderer,
|
|
26
24
|
searchable = _ref.searchable,
|
|
27
25
|
selectable = _ref.selectable,
|
|
26
|
+
multiple = _ref.multiple,
|
|
28
27
|
matcher = _ref.matcher,
|
|
29
28
|
filterPlaceholder = _ref.filterPlaceholder,
|
|
30
29
|
defaultLeafIcon = _ref.defaultLeafIcon,
|
|
31
30
|
defaultNodeIcon = _ref.defaultNodeIcon,
|
|
32
31
|
_ref$expander = _ref.expander,
|
|
33
32
|
expander = _ref$expander === void 0 ? "box" : _ref$expander,
|
|
34
|
-
onChecked = _ref.onChecked
|
|
35
|
-
_ref.onLoad
|
|
36
|
-
|
|
33
|
+
onChecked = _ref.onChecked,
|
|
34
|
+
onLoad = _ref.onLoad,
|
|
35
|
+
onQuery = _ref.onQuery,
|
|
36
|
+
onSelect = _ref.onSelect,
|
|
37
|
+
onClick = _ref.onClick,
|
|
38
|
+
sorter = _ref.sorter,
|
|
39
|
+
makeLabel = _ref.makeLabel,
|
|
40
|
+
makeIcon = _ref.makeIcon,
|
|
41
|
+
defaultExpanded = _ref.defaultExpanded,
|
|
42
|
+
onExpandToggle = _ref.onExpandToggle,
|
|
43
|
+
leafClassName = _ref.leafClassName,
|
|
44
|
+
nodeClassName = _ref.nodeClassName,
|
|
37
45
|
aria = _objectWithoutProperties(_ref, _excluded);
|
|
38
46
|
var _useTree = useTree.useTree({
|
|
39
47
|
items: items,
|
|
40
48
|
checked: checked,
|
|
41
49
|
selected: selected,
|
|
50
|
+
multiple: multiple,
|
|
42
51
|
matcher: matcher,
|
|
52
|
+
sorter: sorter,
|
|
53
|
+
onLoad: onLoad,
|
|
54
|
+
onQuery: onQuery,
|
|
43
55
|
onSelect: onSelect,
|
|
44
|
-
onChecked: onChecked
|
|
56
|
+
onChecked: onChecked,
|
|
57
|
+
defaultExpanded: defaultExpanded,
|
|
58
|
+
onExpandToggle: onExpandToggle
|
|
45
59
|
}),
|
|
46
60
|
tree = _useTree.tree,
|
|
61
|
+
query = _useTree.query,
|
|
62
|
+
currentSelected = _useTree.selected,
|
|
47
63
|
toggleExpand = _useTree.toggleExpand,
|
|
48
64
|
toggleCheck = _useTree.toggleCheck,
|
|
49
65
|
expandAll = _useTree.expandAll,
|
|
50
66
|
collapseAll = _useTree.collapseAll,
|
|
51
|
-
|
|
67
|
+
expandAndLoad = _useTree.expandAndLoad,
|
|
68
|
+
_select = _useTree.select,
|
|
52
69
|
expand = _useTree.expand,
|
|
53
70
|
onFilter = _useTree.onFilter;
|
|
54
71
|
var scrollerRef = react.useRef(null);
|
|
@@ -63,32 +80,44 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
63
80
|
});
|
|
64
81
|
var virtualItems = virtualizer.getVirtualItems();
|
|
65
82
|
var expanders = react.useMemo(function () {
|
|
66
|
-
if (expander === "caret") return [
|
|
67
|
-
if (expander === "chevron") return [
|
|
68
|
-
if (expander === "folder") return [
|
|
69
|
-
return [
|
|
83
|
+
if (expander === "caret") return ["icon-[mdi--menu-right]", "icon-[mdi--menu-down]"];
|
|
84
|
+
if (expander === "chevron") return ["icon-[mdi--chevron-right]", "icon-[mdi--chevron-down]"];
|
|
85
|
+
if (expander === "folder") return ["icon-[mdi--folder-outline]", "icon-[mdi--folder-open-outline]"];
|
|
86
|
+
return ["icon-[mdi--plus-box-outline]", "icon-[mdi--minus-box-outline]"];
|
|
70
87
|
}, [expander]);
|
|
71
88
|
react.useImperativeHandle(ref, function () {
|
|
72
89
|
return {
|
|
73
90
|
open: function open(id) {
|
|
74
91
|
return expand(id);
|
|
75
92
|
},
|
|
93
|
+
openAndLoad: function openAndLoad(list) {
|
|
94
|
+
return expandAndLoad(list);
|
|
95
|
+
},
|
|
76
96
|
select: function select(id) {
|
|
77
|
-
return
|
|
97
|
+
return _select(id);
|
|
78
98
|
}
|
|
79
99
|
};
|
|
80
100
|
}, []);
|
|
101
|
+
react.useEffect(function () {
|
|
102
|
+
var index = tree.findIndex(function (n) {
|
|
103
|
+
return n.id === currentSelected;
|
|
104
|
+
});
|
|
105
|
+
virtualizer.scrollToIndex(index, {
|
|
106
|
+
align: "auto"
|
|
107
|
+
});
|
|
108
|
+
}, [currentSelected]);
|
|
81
109
|
return /*#__PURE__*/jsxRuntime.jsxs(core.Section, {
|
|
82
110
|
children: [/*#__PURE__*/jsxRuntime.jsxs(core.Header, {
|
|
83
111
|
flex: true,
|
|
84
112
|
className: "items-center p-px justify-end overflow-hidden border-b",
|
|
85
113
|
children: [searchable && /*#__PURE__*/jsxRuntime.jsx(form.Search, {
|
|
114
|
+
value: query,
|
|
86
115
|
onSearch: onFilter,
|
|
87
116
|
allowClear: true,
|
|
88
117
|
placeholder: filterPlaceholder,
|
|
89
118
|
noBorder: true,
|
|
90
119
|
decorateStart: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
91
|
-
icon:
|
|
120
|
+
icon: "icon-[mdi--filter-variant]",
|
|
92
121
|
className: "p-1"
|
|
93
122
|
})
|
|
94
123
|
}), /*#__PURE__*/jsxRuntime.jsxs(core.ButtonGroup, {
|
|
@@ -97,12 +126,12 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
97
126
|
children: [/*#__PURE__*/jsxRuntime.jsx(core.Button, {
|
|
98
127
|
size: "sm",
|
|
99
128
|
"aria-label": "expand all",
|
|
100
|
-
icon:
|
|
129
|
+
icon: "icon-[mdi--arrow-expand-vertical]",
|
|
101
130
|
onClick: expandAll
|
|
102
131
|
}), /*#__PURE__*/jsxRuntime.jsx(core.Button, {
|
|
103
132
|
size: "sm",
|
|
104
133
|
"aria-label": "collapse all",
|
|
105
|
-
icon:
|
|
134
|
+
icon: "icon-[mdi--arrow-collapse-vertical]",
|
|
106
135
|
onClick: collapseAll
|
|
107
136
|
})]
|
|
108
137
|
})]
|
|
@@ -120,6 +149,7 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
120
149
|
height: (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.start
|
|
121
150
|
}
|
|
122
151
|
}), virtualItems.map(function (_ref2) {
|
|
152
|
+
var _makeIcon, _ref3;
|
|
123
153
|
var index = _ref2.index,
|
|
124
154
|
key = _ref2.key;
|
|
125
155
|
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
@@ -132,11 +162,14 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
132
162
|
checkable: checkable,
|
|
133
163
|
selectable: selectable,
|
|
134
164
|
defaultLeafIcon: defaultLeafIcon,
|
|
135
|
-
defaultNodeIcon: defaultNodeIcon,
|
|
165
|
+
defaultNodeIcon: (_makeIcon = makeIcon === null || makeIcon === void 0 ? void 0 : makeIcon(tree[index].data)) !== null && _makeIcon !== void 0 ? _makeIcon : defaultNodeIcon,
|
|
136
166
|
onToggle: toggleExpand,
|
|
137
167
|
onChecked: toggleCheck,
|
|
138
|
-
onSelect:
|
|
139
|
-
|
|
168
|
+
onSelect: _select,
|
|
169
|
+
onClick: onClick,
|
|
170
|
+
leafClassName: leafClassName,
|
|
171
|
+
nodeClassName: nodeClassName,
|
|
172
|
+
children: (_ref3 = tree[index].data && (makeLabel === null || makeLabel === void 0 ? void 0 : makeLabel(tree[index].data))) !== null && _ref3 !== void 0 ? _ref3 : tree[index].label
|
|
140
173
|
})
|
|
141
174
|
}, key);
|
|
142
175
|
})]
|
package/dist/cjs/tree/useTree.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
4
|
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
5
|
+
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
|
|
5
6
|
var core = require('@react-fabric/core');
|
|
6
7
|
var utilities = require('@react-fabric/utilities');
|
|
7
8
|
var memoizeOne = require('memoize-one');
|
|
@@ -19,39 +20,137 @@ var useTree = function useTree(_ref) {
|
|
|
19
20
|
_ref$checked = _ref.checked,
|
|
20
21
|
checked = _ref$checked === void 0 ? utilities.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 = react.useEffectEvent(onSelect !== null && onSelect !== void 0 ? onSelect : function () {
|
|
33
|
+
return undefined;
|
|
28
34
|
});
|
|
35
|
+
var eventChecked = react.useEffectEvent(onChecked !== null && onChecked !== void 0 ? onChecked : function () {
|
|
36
|
+
return undefined;
|
|
37
|
+
});
|
|
38
|
+
var intialExpand = react.useRef(_toConsumableArray(defaultExpanded !== null && defaultExpanded !== void 0 ? defaultExpanded : utilities.EMPTY_ARRAY));
|
|
29
39
|
var itemList = createItemList(items);
|
|
40
|
+
var fireExpandToggle = react.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 = react.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] : utilities.EMPTY_ARRAY;
|
|
58
|
+
node.children = utils.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 = core.useDebounce(function (nodeId, data) {
|
|
89
|
+
eventSelect(nodeId, data);
|
|
90
|
+
}, []);
|
|
91
|
+
var fireChecked = core.useDebounce(function (leafs, nodes, partials) {
|
|
92
|
+
eventChecked(leafs, nodes, partials);
|
|
93
|
+
}, []);
|
|
94
|
+
var fireQuery = core.useDebounce(function (query) {
|
|
95
|
+
onQuery === null || onQuery === void 0 || onQuery(query);
|
|
96
|
+
}, [onQuery]);
|
|
30
97
|
var _useReducer = react.useReducer(function (state, action) {
|
|
31
98
|
if (action.type === "load") {
|
|
32
|
-
state.items = utils.refactorTree(action.items
|
|
99
|
+
state.items = utils.refactorTree(action.items, {
|
|
100
|
+
sorter: sorter,
|
|
101
|
+
defaultExpanded: defaultExpanded
|
|
102
|
+
});
|
|
33
103
|
state.itemMap = utils.makeTreeMap(state.items);
|
|
34
104
|
state.tree = utils.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 = utils.makeTreeMap(state.items);
|
|
121
|
+
fireExpandToggle(Array.from(state.itemMap.values()));
|
|
40
122
|
state.tree = utils.flattenTree(state.items);
|
|
123
|
+
state.selected = selected;
|
|
124
|
+
utils.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 utils.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 = utils.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 = utils.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 (!utilities.isEmpty(action.query)) {
|
|
171
|
+
// state.prevItems = state.items;
|
|
172
|
+
fireQuery(action.query);
|
|
173
|
+
}
|
|
174
|
+
} else {
|
|
175
|
+
utils.filterTree(state.itemMap, action.query, matcher);
|
|
176
|
+
state.tree = utils.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
|
+
utils.updateSelection({
|
|
194
|
+
nodes: state.itemMap,
|
|
195
|
+
selected: state.selected,
|
|
196
|
+
multiple: multiple
|
|
197
|
+
});
|
|
67
198
|
state.tree = utils.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
|
-
utils.updateSelection(state.itemMap, action.id, true);
|
|
76
|
-
state.tree = utils.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
|
+
utils.updateSelection({
|
|
205
|
+
nodes: state.itemMap,
|
|
206
|
+
multiple: multiple,
|
|
79
207
|
selected: action.id
|
|
80
208
|
});
|
|
209
|
+
state.tree = utils.flattenTree(state.items);
|
|
210
|
+
return _objectSpread({}, state);
|
|
81
211
|
}
|
|
82
212
|
if (action.type === "toggleCheck") {
|
|
83
|
-
var _componentEvents$curr3, _componentEvents$curr4;
|
|
84
213
|
utils.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 utils.updateChecked(state.itemMap, id);
|
|
235
|
+
return utils.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
|
react.useEffect(function () {
|
|
113
|
-
|
|
114
|
-
onSelect: onSelect,
|
|
115
|
-
onChecked: onChecked
|
|
116
|
-
};
|
|
117
|
-
}, [onSelect, onChecked]);
|
|
118
|
-
react.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
|
react.useEffect(function () {
|
|
125
272
|
selected && dispatch({
|
|
@@ -146,9 +293,11 @@ var useTree = function useTree(_ref) {
|
|
|
146
293
|
});
|
|
147
294
|
}, []);
|
|
148
295
|
var select = react.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 = react.useCallback(function (id) {
|
|
@@ -157,6 +306,15 @@ var useTree = function useTree(_ref) {
|
|
|
157
306
|
id: id
|
|
158
307
|
});
|
|
159
308
|
}, []);
|
|
309
|
+
var expandAndLoad = react.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 = react.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/cjs/tree/utils.js
CHANGED
|
@@ -6,7 +6,7 @@ var utilities = require('@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 utilities.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 && utilities.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;
|