@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
|
@@ -1,49 +1,85 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
|
+
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
4
5
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
6
|
+
import { groupBy, compareValues, debounce } from '@react-fabric/utilities';
|
|
7
|
+
import { useVirtualizer, defaultRangeExtractor } from '@tanstack/react-virtual';
|
|
8
|
+
import { useReducer, useRef, useMemo, useState, useCallback, useEffect } from 'react';
|
|
7
9
|
|
|
8
10
|
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; }
|
|
9
11
|
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; }
|
|
10
|
-
var useVirtualTable = function useVirtualTable(data,
|
|
12
|
+
var useVirtualTable = function useVirtualTable(data, options) {
|
|
11
13
|
var _virtualizer$range;
|
|
12
14
|
// TODO: refactor data into item list, apply grouping if groupColumn provided
|
|
13
15
|
// TODO: when grouping maintain map of group with children, {___GROUP___:true, label, items, open}
|
|
14
16
|
|
|
15
|
-
var scrollerRef = useRef(null);
|
|
16
|
-
var virtualizer = useVirtualizer({
|
|
17
|
-
count: data.length,
|
|
18
|
-
getScrollElement: function getScrollElement() {
|
|
19
|
-
return scrollerRef.current;
|
|
20
|
-
},
|
|
21
|
-
estimateSize: function estimateSize() {
|
|
22
|
-
return 24;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
17
|
var _useReducer = useReducer(function (state, action) {
|
|
18
|
+
if (action.type === "updateState") {
|
|
19
|
+
state.checked = action.checked;
|
|
20
|
+
}
|
|
26
21
|
if (action.type === "expand") {
|
|
27
22
|
if (state.expanded.includes(action.key)) state.expanded.splice(state.expanded.indexOf(action.key), 1);else state.expanded.push(action.key);
|
|
28
23
|
}
|
|
29
24
|
if (action.type === "check") {
|
|
25
|
+
var _options$onCheckChang;
|
|
30
26
|
if (state.checked.includes(action.key)) state.checked.splice(state.checked.indexOf(action.key), 1);else state.checked.push(action.key);
|
|
31
|
-
onCheckChanged === null ||
|
|
27
|
+
(_options$onCheckChang = options.onCheckChanged) === null || _options$onCheckChang === void 0 || _options$onCheckChang.call(options, state.checked);
|
|
32
28
|
}
|
|
33
29
|
if (action.type === "checkall") {
|
|
30
|
+
var _options$onCheckChang2;
|
|
34
31
|
if (state.allChecked !== 0) {
|
|
35
32
|
state.checked = [];
|
|
36
|
-
} else if (keyProperty) {
|
|
37
|
-
state.checked = data.map(function (item) {
|
|
38
|
-
return item[keyProperty];
|
|
33
|
+
} else if (options.keyProperty) {
|
|
34
|
+
state.checked = state.data.map(function (item) {
|
|
35
|
+
return item[options.keyProperty];
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
(_options$onCheckChang2 = options.onCheckChanged) === null || _options$onCheckChang2 === void 0 || _options$onCheckChang2.call(options, state.checked);
|
|
39
|
+
}
|
|
40
|
+
var checkList = state.data.filter(function (hit) {
|
|
41
|
+
return state.checked.includes(hit[options.keyProperty]);
|
|
42
|
+
});
|
|
43
|
+
if (action.type === "groupExpand") {
|
|
44
|
+
var group = state.groups.find(function (group) {
|
|
45
|
+
return group.key === action.key;
|
|
46
|
+
});
|
|
47
|
+
if (group) {
|
|
48
|
+
group.open = !group.open;
|
|
49
|
+
state.groups = state.groups.slice();
|
|
50
|
+
state.items = state.groups.map(function (group) {
|
|
51
|
+
return [group, group.open ? state.grouped[group.key] : undefined];
|
|
52
|
+
}).flat(2).filter(Boolean);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (action.type === "reset") {
|
|
56
|
+
state.data = action.data;
|
|
57
|
+
if (action.key) {
|
|
58
|
+
state.grouped = groupBy(state.data, action.key);
|
|
59
|
+
state.groups = Object.keys(state.grouped).sort(compareValues("asc")).map(function (group) {
|
|
60
|
+
return {
|
|
61
|
+
__GROUP__: true,
|
|
62
|
+
open: true,
|
|
63
|
+
key: group,
|
|
64
|
+
items: state.grouped[group],
|
|
65
|
+
itemCount: state.grouped[group].length
|
|
66
|
+
};
|
|
39
67
|
});
|
|
68
|
+
state.items = state.groups.map(function (group) {
|
|
69
|
+
return [group].concat(_toConsumableArray(state.grouped[group.key]));
|
|
70
|
+
}).flat();
|
|
71
|
+
} else {
|
|
72
|
+
state.items = state.data;
|
|
40
73
|
}
|
|
41
|
-
onCheckChanged === null || onCheckChanged === void 0 || onCheckChanged(state.checked);
|
|
42
74
|
}
|
|
43
75
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
44
|
-
allChecked:
|
|
76
|
+
allChecked: checkList.length === state.data.length ? 1 : state.checked.length ? 2 : 0
|
|
45
77
|
});
|
|
46
78
|
}, {
|
|
79
|
+
data: data,
|
|
80
|
+
items: [],
|
|
81
|
+
grouped: {},
|
|
82
|
+
groups: [],
|
|
47
83
|
checked: [],
|
|
48
84
|
expanded: [],
|
|
49
85
|
allChecked: 0
|
|
@@ -51,19 +87,91 @@ var useVirtualTable = function useVirtualTable(data, keyProperty, onCheckChanged
|
|
|
51
87
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
52
88
|
state = _useReducer2[0],
|
|
53
89
|
dispatch = _useReducer2[1];
|
|
90
|
+
var activeStickyIndexRef = useRef(0);
|
|
91
|
+
var stickyIndexes = useMemo(function () {
|
|
92
|
+
return state.items.map(function (hit, idx) {
|
|
93
|
+
return "__GROUP__" in hit ? idx : undefined;
|
|
94
|
+
}).filter(Boolean);
|
|
95
|
+
}, [state.items]);
|
|
96
|
+
var isActiveSticky = function isActiveSticky(index) {
|
|
97
|
+
return activeStickyIndexRef.current === index;
|
|
98
|
+
};
|
|
99
|
+
var _useState = useState(false),
|
|
100
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
101
|
+
hasActiveSticky = _useState2[0],
|
|
102
|
+
setHasActiveSticky = _useState2[1];
|
|
103
|
+
var scrollerRef = useRef(null);
|
|
104
|
+
var virtualizer = useVirtualizer({
|
|
105
|
+
count: state.items.length,
|
|
106
|
+
getScrollElement: function getScrollElement() {
|
|
107
|
+
return scrollerRef.current;
|
|
108
|
+
},
|
|
109
|
+
estimateSize: function estimateSize() {
|
|
110
|
+
return 32;
|
|
111
|
+
},
|
|
112
|
+
rangeExtractor: useCallback(function (range) {
|
|
113
|
+
var _reverse$find;
|
|
114
|
+
activeStickyIndexRef.current = (_reverse$find = _toConsumableArray(stickyIndexes).reverse().find(function (index) {
|
|
115
|
+
return range.startIndex > index;
|
|
116
|
+
})) !== null && _reverse$find !== void 0 ? _reverse$find : 0;
|
|
117
|
+
setHasActiveSticky(range.startIndex !== activeStickyIndexRef.current);
|
|
118
|
+
var next = new Set([activeStickyIndexRef.current].concat(_toConsumableArray(defaultRangeExtractor(range))));
|
|
119
|
+
return _toConsumableArray(next);
|
|
120
|
+
}, [stickyIndexes])
|
|
121
|
+
});
|
|
54
122
|
var virtualItems = virtualizer.getVirtualItems();
|
|
55
123
|
var getData = useCallback(function (index) {
|
|
56
|
-
return
|
|
57
|
-
}, [
|
|
124
|
+
return state.items[index];
|
|
125
|
+
}, [state.items]);
|
|
126
|
+
useEffect(function () {
|
|
127
|
+
dispatch({
|
|
128
|
+
type: "reset",
|
|
129
|
+
key: options.groupProperty,
|
|
130
|
+
data: data
|
|
131
|
+
});
|
|
132
|
+
}, [data, options.groupProperty]);
|
|
133
|
+
useEffect(function () {
|
|
134
|
+
var _options$checked;
|
|
135
|
+
dispatch({
|
|
136
|
+
type: "updateState",
|
|
137
|
+
checked: (_options$checked = options.checked) !== null && _options$checked !== void 0 ? _options$checked : []
|
|
138
|
+
});
|
|
139
|
+
}, [options.checked]);
|
|
140
|
+
useEffect(function () {
|
|
141
|
+
if (options.onLoadMore) {
|
|
142
|
+
var _virtualItems$, _virtualItems$slice$p;
|
|
143
|
+
var firstItem = (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.index;
|
|
144
|
+
var lastItem = virtualItems === null || virtualItems === void 0 || (_virtualItems$slice$p = virtualItems.slice(-1).pop()) === null || _virtualItems$slice$p === void 0 ? void 0 : _virtualItems$slice$p.index;
|
|
145
|
+
var canLoadPrevPage = firstItem !== undefined && state.items[firstItem] === null;
|
|
146
|
+
var canLoadNextPage = lastItem !== undefined && lastItem === state.items.length - 1 && state.items.length < options.total;
|
|
147
|
+
var db = debounce(options.onLoadMore);
|
|
148
|
+
if (canLoadPrevPage) {
|
|
149
|
+
db(firstItem);
|
|
150
|
+
} else if (!options.loading && canLoadNextPage) {
|
|
151
|
+
db(lastItem + 1);
|
|
152
|
+
}
|
|
153
|
+
return function () {
|
|
154
|
+
return db.cancel();
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}, [options.onLoadMore, virtualItems]);
|
|
58
158
|
return {
|
|
59
159
|
scrollerRef: scrollerRef,
|
|
60
160
|
items: virtualItems,
|
|
61
161
|
checkState: state,
|
|
62
162
|
getData: getData,
|
|
63
163
|
virtualizer: virtualizer,
|
|
164
|
+
hasActiveSticky: hasActiveSticky,
|
|
165
|
+
isActiveSticky: isActiveSticky,
|
|
64
166
|
top: (_virtualizer$range = virtualizer.range) === null || _virtualizer$range === void 0 ? void 0 : _virtualizer$range.startIndex,
|
|
65
167
|
totalSize: virtualizer.getTotalSize,
|
|
66
168
|
measureElement: virtualizer.measureElement,
|
|
169
|
+
toggleGroupExpand: function toggleGroupExpand(key) {
|
|
170
|
+
return dispatch({
|
|
171
|
+
type: "groupExpand",
|
|
172
|
+
key: key
|
|
173
|
+
});
|
|
174
|
+
},
|
|
67
175
|
toggleExpand: function toggleExpand(key) {
|
|
68
176
|
return dispatch({
|
|
69
177
|
type: "expand",
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
|
-
import { getBadgeProps, Icon, CoreIcons, Badge } from '@react-fabric/core';
|
|
4
|
+
import { getBadgeProps, Icon, CoreIcons, getIconProps, Badge } from '@react-fabric/core';
|
|
5
|
+
import { isString, isEmpty } from '@react-fabric/utilities';
|
|
5
6
|
import classNames from 'classnames';
|
|
6
|
-
import { useMemo } from 'react';
|
|
7
|
-
import {
|
|
7
|
+
import { useMemo, isValidElement } from 'react';
|
|
8
|
+
import { useTranslation } from 'react-i18next';
|
|
9
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
8
10
|
|
|
9
11
|
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; }
|
|
10
12
|
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,32 +19,42 @@ var TreeNode = function TreeNode(_ref) {
|
|
|
17
19
|
defaultLeafIcon = _ref.defaultLeafIcon,
|
|
18
20
|
defaultNodeIcon = _ref.defaultNodeIcon,
|
|
19
21
|
onToggle = _ref.onToggle,
|
|
22
|
+
onClick = _ref.onClick,
|
|
20
23
|
onSelect = _ref.onSelect,
|
|
21
24
|
onChecked = _ref.onChecked,
|
|
22
|
-
children = _ref.children
|
|
25
|
+
children = _ref.children,
|
|
26
|
+
leafClassName = _ref.leafClassName,
|
|
27
|
+
nodeClassName = _ref.nodeClassName;
|
|
28
|
+
var _useTranslation = useTranslation("data"),
|
|
29
|
+
t = _useTranslation.t;
|
|
23
30
|
var badgeProps = useMemo(function () {
|
|
24
31
|
return getBadgeProps(node.badge);
|
|
25
32
|
}, [node.badge]);
|
|
26
33
|
var filler = useMemo(function () {
|
|
27
|
-
return node.lines.slice(
|
|
28
|
-
return /*#__PURE__*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
return node.lines.slice(1).map(function (line, idx) {
|
|
35
|
+
return /*#__PURE__*/jsx("div", {
|
|
36
|
+
className: classNames("flex-initial self-stretch flex items-center w-6 relative", !noLines && line > 0 && "before:absolute before:top-0 before:start-[7px] before:bg-tint-200 before:min-h-[50%] before:w-0.5 before:scale-x-[.625]", !noLines && line !== 2 && "before:h-full"),
|
|
37
|
+
children: /*#__PURE__*/jsxs("svg", {
|
|
38
|
+
viewBox: "0 0 24 24",
|
|
39
|
+
className: "fill-tint-200 rtl:-scale-x-100",
|
|
40
|
+
children: [line === 0 && /*#__PURE__*/jsx("path", {
|
|
41
|
+
d: ""
|
|
42
|
+
}), !noLines && line === 1 && /*#__PURE__*/jsx("path", {
|
|
43
|
+
d: "M7.45 26.1v-28.2h1.1v28.2h-1.1z"
|
|
44
|
+
}), !noLines && line === 2 && /*#__PURE__*/jsx("path", {
|
|
45
|
+
d: "M14.989 12.389l0.161-0.389-0.161-0.389-0.389-0.161h-6.050v-13.55h-1.1v14.1l0.161 0.389 0.389 0.161h6.6z"
|
|
46
|
+
}), !noLines && line === 3 && /*#__PURE__*/jsx("path", {
|
|
47
|
+
d: "M8.55 12.55h6.050l0.389-0.161 0.161-0.389-0.161-0.389-0.389-0.161h-6.050v-13.55h-1.1v28.2h1.1z"
|
|
48
|
+
})]
|
|
49
|
+
})
|
|
40
50
|
}, idx);
|
|
41
51
|
});
|
|
42
52
|
}, [noLines, node.lines]);
|
|
43
53
|
var nodeIcon = useMemo(function () {
|
|
44
54
|
if (node.icon) return node.icon;
|
|
45
|
-
return
|
|
55
|
+
return {
|
|
56
|
+
icon: node.leaf ? defaultLeafIcon : defaultNodeIcon
|
|
57
|
+
};
|
|
46
58
|
}, [defaultLeafIcon, defaultNodeIcon, node.icon]);
|
|
47
59
|
var canCheck = useMemo(function () {
|
|
48
60
|
return checkable === true || checkable === "leafOnly" && node.leaf;
|
|
@@ -53,10 +65,17 @@ var TreeNode = function TreeNode(_ref) {
|
|
|
53
65
|
return /*#__PURE__*/jsxs("div", {
|
|
54
66
|
role: "treeitem",
|
|
55
67
|
"aria-selected": node.selected,
|
|
56
|
-
className: "flex flex-nowrap",
|
|
68
|
+
className: classNames("flex flex-nowrap items-center"),
|
|
57
69
|
"data-testid": node["data-testid"],
|
|
58
70
|
"data-test-value": node["data-test-value"],
|
|
59
|
-
|
|
71
|
+
"data-id": node.id,
|
|
72
|
+
children: [filler, node.loading && /*#__PURE__*/jsx("div", {
|
|
73
|
+
className: "flex-initial w-6",
|
|
74
|
+
children: /*#__PURE__*/jsx(Icon, {
|
|
75
|
+
icon: CoreIcons.spinner,
|
|
76
|
+
className: "animate-spin text-muted"
|
|
77
|
+
})
|
|
78
|
+
}), !node.leaf && !node.childFiltered && !node.loading && /*#__PURE__*/jsx("div", {
|
|
60
79
|
className: "flex-initial w-6",
|
|
61
80
|
children: /*#__PURE__*/jsx(Icon, {
|
|
62
81
|
rtlFlip: true,
|
|
@@ -75,21 +94,17 @@ var TreeNode = function TreeNode(_ref) {
|
|
|
75
94
|
icon: node.checked === 2 ? CoreIcons.checkboxInt : node.checked === 1 ? CoreIcons.checkboxOn : CoreIcons.checkboxOff,
|
|
76
95
|
className: classNames(node.disabled ? "text-muted" : "text-primary-500 hover:text-primary-600")
|
|
77
96
|
})
|
|
78
|
-
}), /*#__PURE__*/jsxs("div", {
|
|
97
|
+
}), !node.empty && /*#__PURE__*/jsxs("div", {
|
|
79
98
|
role: "none",
|
|
80
|
-
className: classNames("group data-
|
|
99
|
+
className: classNames("group/tool data-selected:bg-primary-100 flex flex-nowrap flex-1 overflow-hidden select-none", node.childSelected && "font-medium", node.disabled && "text-muted opacity-65", node.className, node.leaf ? leafClassName : nodeClassName, !node.disabled && (canSelect || onClick) && "hover:bg-primary-50 cursor-pointer"),
|
|
81
100
|
"data-selected": node.selected,
|
|
82
|
-
onClick: function
|
|
83
|
-
|
|
101
|
+
onClick: node.disabled ? undefined : function (e) {
|
|
102
|
+
onClick === null || onClick === void 0 || onClick(node.id, node.data);
|
|
103
|
+
canSelect ? onSelect(node.id, e.shiftKey) : canCheck ? onChecked(node.id) : onToggle(node.id);
|
|
84
104
|
},
|
|
85
|
-
children: [nodeIcon && /*#__PURE__*/
|
|
86
|
-
className: "flex-content w-6",
|
|
87
|
-
children: /*#__PURE__*/jsx(Icon, {
|
|
88
|
-
icon: nodeIcon,
|
|
89
|
-
bg: node.iconBg,
|
|
90
|
-
color: node.iconColor,
|
|
91
|
-
rtlFlip: node.rtlFlip
|
|
92
|
-
})
|
|
105
|
+
children: [nodeIcon && /*#__PURE__*/jsxs("div", {
|
|
106
|
+
className: "flex-content max-w-6 me-1 self-center leading-none",
|
|
107
|
+
children: [/*#__PURE__*/isValidElement(nodeIcon) && nodeIcon, isString(nodeIcon) && /*#__PURE__*/jsx(Icon, _objectSpread({}, getIconProps(nodeIcon)))]
|
|
93
108
|
}), node.childSelected && !node.open && /*#__PURE__*/jsx("span", {
|
|
94
109
|
className: " flex-content text-primary-500",
|
|
95
110
|
children: "\u2022"
|
|
@@ -97,9 +112,12 @@ var TreeNode = function TreeNode(_ref) {
|
|
|
97
112
|
role: "none",
|
|
98
113
|
className: "flex-1 truncate",
|
|
99
114
|
children: children
|
|
100
|
-
}), node.badge && /*#__PURE__*/jsx(Badge, _objectSpread(_objectSpread({}, badgeProps), {}, {
|
|
115
|
+
}), !isEmpty(node.badge) && /*#__PURE__*/jsx(Badge, _objectSpread(_objectSpread({}, badgeProps), {}, {
|
|
101
116
|
className: classNames("me-1 self-center flex-content bg-opacity-50", badgeProps.className)
|
|
102
117
|
}))]
|
|
118
|
+
}), node.empty && /*#__PURE__*/jsx("div", {
|
|
119
|
+
className: "text-muted text-sm select-none",
|
|
120
|
+
children: t("tree.noItems")
|
|
103
121
|
})]
|
|
104
122
|
});
|
|
105
123
|
};
|
|
@@ -5,13 +5,13 @@ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProper
|
|
|
5
5
|
import { CoreIcons, Section, Header, Icon, ButtonGroup, Button } from '@react-fabric/core';
|
|
6
6
|
import { Search } from '@react-fabric/form';
|
|
7
7
|
import { useVirtualizer } from '@tanstack/react-virtual';
|
|
8
|
-
import { useRef, useMemo, useImperativeHandle } from 'react';
|
|
8
|
+
import { useRef, useMemo, useImperativeHandle, useEffect } from 'react';
|
|
9
9
|
import { TreeNode } from './TreeNode.js';
|
|
10
10
|
import { iconExpandAll, iconCollapseAll } from './types.js';
|
|
11
11
|
import { useTree } from './useTree.js';
|
|
12
12
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
13
13
|
|
|
14
|
-
var _excluded = ["ref", "items", "selected", "checked", "checkable", "noLines", "
|
|
14
|
+
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
15
|
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
16
|
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
17
|
var TreePanel = function TreePanel(_ref) {
|
|
@@ -22,33 +22,51 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
22
22
|
checked = _ref.checked,
|
|
23
23
|
checkable = _ref.checkable,
|
|
24
24
|
noLines = _ref.noLines,
|
|
25
|
-
renderer = _ref.renderer,
|
|
26
25
|
searchable = _ref.searchable,
|
|
27
26
|
selectable = _ref.selectable,
|
|
27
|
+
multiple = _ref.multiple,
|
|
28
28
|
matcher = _ref.matcher,
|
|
29
29
|
filterPlaceholder = _ref.filterPlaceholder,
|
|
30
30
|
defaultLeafIcon = _ref.defaultLeafIcon,
|
|
31
31
|
defaultNodeIcon = _ref.defaultNodeIcon,
|
|
32
32
|
_ref$expander = _ref.expander,
|
|
33
33
|
expander = _ref$expander === void 0 ? "box" : _ref$expander,
|
|
34
|
-
onChecked = _ref.onChecked
|
|
35
|
-
_ref.onLoad
|
|
36
|
-
|
|
34
|
+
onChecked = _ref.onChecked,
|
|
35
|
+
onLoad = _ref.onLoad,
|
|
36
|
+
onQuery = _ref.onQuery,
|
|
37
|
+
onSelect = _ref.onSelect,
|
|
38
|
+
onClick = _ref.onClick,
|
|
39
|
+
sorter = _ref.sorter,
|
|
40
|
+
makeLabel = _ref.makeLabel,
|
|
41
|
+
makeIcon = _ref.makeIcon,
|
|
42
|
+
defaultExpanded = _ref.defaultExpanded,
|
|
43
|
+
onExpandToggle = _ref.onExpandToggle,
|
|
44
|
+
leafClassName = _ref.leafClassName,
|
|
45
|
+
nodeClassName = _ref.nodeClassName,
|
|
37
46
|
aria = _objectWithoutProperties(_ref, _excluded);
|
|
38
47
|
var _useTree = useTree({
|
|
39
48
|
items: items,
|
|
40
49
|
checked: checked,
|
|
41
50
|
selected: selected,
|
|
51
|
+
multiple: multiple,
|
|
42
52
|
matcher: matcher,
|
|
53
|
+
sorter: sorter,
|
|
54
|
+
onLoad: onLoad,
|
|
55
|
+
onQuery: onQuery,
|
|
43
56
|
onSelect: onSelect,
|
|
44
|
-
onChecked: onChecked
|
|
57
|
+
onChecked: onChecked,
|
|
58
|
+
defaultExpanded: defaultExpanded,
|
|
59
|
+
onExpandToggle: onExpandToggle
|
|
45
60
|
}),
|
|
46
61
|
tree = _useTree.tree,
|
|
62
|
+
query = _useTree.query,
|
|
63
|
+
currentSelected = _useTree.selected,
|
|
47
64
|
toggleExpand = _useTree.toggleExpand,
|
|
48
65
|
toggleCheck = _useTree.toggleCheck,
|
|
49
66
|
expandAll = _useTree.expandAll,
|
|
50
67
|
collapseAll = _useTree.collapseAll,
|
|
51
|
-
|
|
68
|
+
expandAndLoad = _useTree.expandAndLoad,
|
|
69
|
+
_select = _useTree.select,
|
|
52
70
|
expand = _useTree.expand,
|
|
53
71
|
onFilter = _useTree.onFilter;
|
|
54
72
|
var scrollerRef = useRef(null);
|
|
@@ -73,16 +91,28 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
73
91
|
open: function open(id) {
|
|
74
92
|
return expand(id);
|
|
75
93
|
},
|
|
94
|
+
openAndLoad: function openAndLoad(list) {
|
|
95
|
+
return expandAndLoad(list);
|
|
96
|
+
},
|
|
76
97
|
select: function select(id) {
|
|
77
|
-
return
|
|
98
|
+
return _select(id);
|
|
78
99
|
}
|
|
79
100
|
};
|
|
80
101
|
}, []);
|
|
102
|
+
useEffect(function () {
|
|
103
|
+
var index = tree.findIndex(function (n) {
|
|
104
|
+
return n.id === currentSelected;
|
|
105
|
+
});
|
|
106
|
+
virtualizer.scrollToIndex(index, {
|
|
107
|
+
align: "auto"
|
|
108
|
+
});
|
|
109
|
+
}, [currentSelected]);
|
|
81
110
|
return /*#__PURE__*/jsxs(Section, {
|
|
82
111
|
children: [/*#__PURE__*/jsxs(Header, {
|
|
83
112
|
flex: true,
|
|
84
113
|
className: "items-center p-px justify-end overflow-hidden border-b",
|
|
85
114
|
children: [searchable && /*#__PURE__*/jsx(Search, {
|
|
115
|
+
value: query,
|
|
86
116
|
onSearch: onFilter,
|
|
87
117
|
allowClear: true,
|
|
88
118
|
placeholder: filterPlaceholder,
|
|
@@ -120,6 +150,7 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
120
150
|
height: (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.start
|
|
121
151
|
}
|
|
122
152
|
}), virtualItems.map(function (_ref2) {
|
|
153
|
+
var _makeIcon, _ref3;
|
|
123
154
|
var index = _ref2.index,
|
|
124
155
|
key = _ref2.key;
|
|
125
156
|
return /*#__PURE__*/jsx("div", {
|
|
@@ -132,11 +163,14 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
132
163
|
checkable: checkable,
|
|
133
164
|
selectable: selectable,
|
|
134
165
|
defaultLeafIcon: defaultLeafIcon,
|
|
135
|
-
defaultNodeIcon: defaultNodeIcon,
|
|
166
|
+
defaultNodeIcon: (_makeIcon = makeIcon === null || makeIcon === void 0 ? void 0 : makeIcon(tree[index].data)) !== null && _makeIcon !== void 0 ? _makeIcon : defaultNodeIcon,
|
|
136
167
|
onToggle: toggleExpand,
|
|
137
168
|
onChecked: toggleCheck,
|
|
138
|
-
onSelect:
|
|
139
|
-
|
|
169
|
+
onSelect: _select,
|
|
170
|
+
onClick: onClick,
|
|
171
|
+
leafClassName: leafClassName,
|
|
172
|
+
nodeClassName: nodeClassName,
|
|
173
|
+
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
174
|
})
|
|
141
175
|
}, key);
|
|
142
176
|
})]
|