@react-fabric/data 1.0.0-beta.5 → 1.0.0-beta.51
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 +25 -16
- package/dist/cjs/histogram/Histogram.js +20 -10
- package/dist/cjs/hooks/usePagination.js +7 -4
- package/dist/cjs/json/JsonViewer.js +40 -27
- package/dist/cjs/table/AddColumn.js +1 -1
- package/dist/cjs/table/BodyCell.js +38 -5
- package/dist/cjs/table/BodyRow.js +107 -0
- package/dist/cjs/table/CheckboxCell.js +1 -1
- package/dist/cjs/table/ColumnFilters.js +97 -0
- package/dist/cjs/table/HeaderCell.js +70 -37
- package/dist/cjs/table/Table.js +113 -71
- package/dist/cjs/table/useResizer.js +4 -4
- package/dist/cjs/table/useVirtualTable.js +122 -18
- package/dist/cjs/tree/TreeNode.js +45 -25
- package/dist/cjs/tree/TreePanel.js +28 -10
- package/dist/cjs/tree/useTree.js +97 -15
- package/dist/cjs/tree/utils.js +20 -5
- package/dist/cjs/virtual/Gallery.js +51 -35
- package/dist/cjs/virtual/List.js +44 -31
- package/dist/esm/checklist/CheckList.js +27 -18
- package/dist/esm/histogram/Histogram.js +21 -11
- package/dist/esm/hooks/usePagination.js +7 -4
- package/dist/esm/json/JsonViewer.js +41 -28
- package/dist/esm/table/AddColumn.js +1 -1
- package/dist/esm/table/BodyCell.js +38 -5
- package/dist/esm/table/BodyRow.js +107 -0
- package/dist/esm/table/CheckboxCell.js +1 -1
- package/dist/esm/table/ColumnFilters.js +97 -0
- package/dist/esm/table/HeaderCell.js +71 -38
- package/dist/esm/table/Table.js +115 -73
- package/dist/esm/table/useResizer.js +4 -4
- package/dist/esm/table/useVirtualTable.js +124 -20
- package/dist/esm/tree/TreeNode.js +47 -27
- package/dist/esm/tree/TreePanel.js +28 -10
- package/dist/esm/tree/useTree.js +99 -17
- package/dist/esm/tree/utils.js +20 -5
- package/dist/esm/virtual/Gallery.js +51 -35
- package/dist/esm/virtual/List.js +44 -31
- package/dist/types/checklist/CheckList.d.ts +2 -2
- package/dist/types/histogram/Histogram.d.ts +3 -4
- package/dist/types/index.d.ts +1 -1
- package/dist/types/json/JsonViewer.d.ts +0 -1
- package/dist/types/table/AddColumn.d.ts +2 -2
- package/dist/types/table/BodyCell.d.ts +4 -3
- package/dist/types/table/BodyRow.d.ts +20 -0
- package/dist/types/table/ColumnFilters.d.ts +9 -0
- package/dist/types/table/EmptyCell.d.ts +2 -2
- package/dist/types/table/HeaderCell.d.ts +2 -2
- package/dist/types/table/Table.d.ts +1 -1
- package/dist/types/table/types.d.ts +20 -7
- package/dist/types/table/useTableColumns.d.ts +6 -6
- package/dist/types/table/useVirtualTable.d.ts +23 -7
- package/dist/types/tree/TreeNode.d.ts +1 -1
- package/dist/types/tree/TreePanel.d.ts +1 -1
- package/dist/types/tree/types.d.ts +25 -5
- package/dist/types/tree/useTree.d.ts +2 -9
- package/dist/types/tree/utils.d.ts +4 -1
- package/dist/types/virtual/Gallery.d.ts +12 -4
- package/dist/types/virtual/List.d.ts +8 -4
- package/package.json +13 -10
- package/src/checklist/CheckList.tsx +81 -77
- package/src/histogram/Histogram.tsx +17 -11
- package/src/hooks/usePagination.tsx +13 -7
- package/src/index.ts +1 -1
- package/src/json/JsonViewer.tsx +45 -35
- package/src/table/AddColumn.tsx +3 -3
- package/src/table/BodyCell.tsx +34 -5
- package/src/table/BodyRow.tsx +143 -0
- package/src/table/CheckboxCell.tsx +1 -1
- package/src/table/ColumnFilters.tsx +105 -0
- package/src/table/EmptyCell.tsx +2 -2
- package/src/table/HeaderCell.tsx +72 -14
- package/src/table/Table.tsx +164 -77
- package/src/table/types.ts +24 -6
- package/src/table/useResizer.ts +5 -3
- package/src/table/useTableColumns.ts +7 -7
- package/src/table/useVirtualTable.ts +146 -24
- package/src/tree/TreeNode.tsx +98 -56
- package/src/tree/TreePanel.tsx +23 -3
- package/src/tree/types.ts +32 -4
- package/src/tree/useTree.ts +109 -26
- package/src/tree/utils.ts +23 -8
- package/src/virtual/Gallery.tsx +63 -42
- package/src/virtual/List.tsx +44 -32
- package/dist/cjs/histogram/Histogram.module.css +0 -1
- package/dist/esm/histogram/Histogram.module.css +0 -1
|
@@ -11,7 +11,7 @@ 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", "renderer", "searchable", "selectable", "matcher", "filterPlaceholder", "defaultLeafIcon", "defaultNodeIcon", "expander", "onChecked", "onLoad", "onSelect"];
|
|
14
|
+
var _excluded = ["ref", "items", "selected", "checked", "checkable", "noLines", "renderer", "searchable", "selectable", "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) {
|
|
@@ -31,24 +31,38 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
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,
|
|
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,
|
|
47
61
|
toggleExpand = _useTree.toggleExpand,
|
|
48
62
|
toggleCheck = _useTree.toggleCheck,
|
|
49
63
|
expandAll = _useTree.expandAll,
|
|
50
64
|
collapseAll = _useTree.collapseAll,
|
|
51
|
-
|
|
65
|
+
_select = _useTree.select,
|
|
52
66
|
expand = _useTree.expand,
|
|
53
67
|
onFilter = _useTree.onFilter;
|
|
54
68
|
var scrollerRef = useRef(null);
|
|
@@ -74,7 +88,7 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
74
88
|
return expand(id);
|
|
75
89
|
},
|
|
76
90
|
select: function select(id) {
|
|
77
|
-
return
|
|
91
|
+
return _select(id);
|
|
78
92
|
}
|
|
79
93
|
};
|
|
80
94
|
}, []);
|
|
@@ -120,6 +134,7 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
120
134
|
height: (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.start
|
|
121
135
|
}
|
|
122
136
|
}), virtualItems.map(function (_ref2) {
|
|
137
|
+
var _makeIcon, _ref3, _ref4;
|
|
123
138
|
var index = _ref2.index,
|
|
124
139
|
key = _ref2.key;
|
|
125
140
|
return /*#__PURE__*/jsx("div", {
|
|
@@ -132,11 +147,14 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
132
147
|
checkable: checkable,
|
|
133
148
|
selectable: selectable,
|
|
134
149
|
defaultLeafIcon: defaultLeafIcon,
|
|
135
|
-
defaultNodeIcon: defaultNodeIcon,
|
|
150
|
+
defaultNodeIcon: (_makeIcon = makeIcon === null || makeIcon === void 0 ? void 0 : makeIcon(tree[index].data)) !== null && _makeIcon !== void 0 ? _makeIcon : defaultNodeIcon,
|
|
136
151
|
onToggle: toggleExpand,
|
|
137
152
|
onChecked: toggleCheck,
|
|
138
|
-
onSelect:
|
|
139
|
-
|
|
153
|
+
onSelect: _select,
|
|
154
|
+
onClick: onClick,
|
|
155
|
+
leafClassName: leafClassName,
|
|
156
|
+
nodeClassName: nodeClassName,
|
|
157
|
+
children: (_ref3 = (_ref4 = tree[index].data && (renderer === null || renderer === void 0 ? void 0 : renderer(tree[index].data))) !== null && _ref4 !== void 0 ? _ref4 : makeLabel === null || makeLabel === void 0 ? void 0 : makeLabel(tree[index].data)) !== null && _ref3 !== void 0 ? _ref3 : tree[index].label
|
|
140
158
|
})
|
|
141
159
|
}, key);
|
|
142
160
|
})]
|
package/dist/esm/tree/useTree.js
CHANGED
|
@@ -5,8 +5,8 @@ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
|
5
5
|
import { useDebounce } from '@react-fabric/core';
|
|
6
6
|
import { EMPTY_ARRAY } from '@react-fabric/utilities';
|
|
7
7
|
import memoizeOne from 'memoize-one';
|
|
8
|
-
import { useRef, useReducer, useEffect
|
|
9
|
-
import { refactorTree, makeTreeMap, flattenTree,
|
|
8
|
+
import { useRef, useCallback, useReducer, useEffect } from 'react';
|
|
9
|
+
import { refactorTree, makeTreeMap, flattenTree, updateSelection, filterTree, updateChecked } from './utils.js';
|
|
10
10
|
|
|
11
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; }
|
|
12
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; }
|
|
@@ -19,39 +19,110 @@ var useTree = function useTree(_ref) {
|
|
|
19
19
|
_ref$checked = _ref.checked,
|
|
20
20
|
checked = _ref$checked === void 0 ? EMPTY_ARRAY : _ref$checked,
|
|
21
21
|
selected = _ref.selected,
|
|
22
|
+
sorter = _ref.sorter,
|
|
22
23
|
matcher = _ref.matcher,
|
|
24
|
+
onLoad = _ref.onLoad,
|
|
25
|
+
onQuery = _ref.onQuery,
|
|
23
26
|
onSelect = _ref.onSelect,
|
|
24
|
-
onChecked = _ref.onChecked
|
|
27
|
+
onChecked = _ref.onChecked,
|
|
28
|
+
defaultExpanded = _ref.defaultExpanded,
|
|
29
|
+
onExpandToggle = _ref.onExpandToggle;
|
|
25
30
|
var componentEvents = useRef({
|
|
26
31
|
onSelect: onSelect,
|
|
27
32
|
onChecked: onChecked
|
|
28
33
|
});
|
|
34
|
+
var intialExpand = useRef(defaultExpanded !== null && defaultExpanded !== void 0 ? defaultExpanded : EMPTY_ARRAY);
|
|
29
35
|
var itemList = createItemList(items);
|
|
36
|
+
var fireExpandToggle = useCallback(function (itemMap) {
|
|
37
|
+
var expandedList = itemMap.filter(function (node) {
|
|
38
|
+
return node.open;
|
|
39
|
+
}).map(function (node) {
|
|
40
|
+
return node.id;
|
|
41
|
+
});
|
|
42
|
+
setTimeout(function () {
|
|
43
|
+
return onExpandToggle === null || onExpandToggle === void 0 ? void 0 : onExpandToggle(expandedList);
|
|
44
|
+
}, 100);
|
|
45
|
+
}, [onExpandToggle]);
|
|
46
|
+
var loadChildren = useCallback(function (node) {
|
|
47
|
+
var _node$children;
|
|
48
|
+
if (node.open && !node.leaf && !((_node$children = node.children) !== null && _node$children !== void 0 && _node$children.length)) {
|
|
49
|
+
node.loading = true;
|
|
50
|
+
void Promise.resolve(onLoad === null || onLoad === void 0 ? void 0 : onLoad(node.id)).then(function () {
|
|
51
|
+
var resp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : EMPTY_ARRAY;
|
|
52
|
+
node.children = refactorTree(resp, {
|
|
53
|
+
sorter: sorter,
|
|
54
|
+
defaultExpanded: defaultExpanded
|
|
55
|
+
}, {
|
|
56
|
+
level: node.level + 1,
|
|
57
|
+
parent: node.id
|
|
58
|
+
});
|
|
59
|
+
})["finally"](function () {
|
|
60
|
+
var _intialExpand$current;
|
|
61
|
+
node.loading = false;
|
|
62
|
+
dispatch({
|
|
63
|
+
type: "loaded"
|
|
64
|
+
});
|
|
65
|
+
((_intialExpand$current = intialExpand.current) === null || _intialExpand$current === void 0 ? void 0 : _intialExpand$current.length) > 0 && dispatch({
|
|
66
|
+
type: "expand",
|
|
67
|
+
id: intialExpand.current.shift()
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
} else {
|
|
71
|
+
var _intialExpand$current2;
|
|
72
|
+
dispatch({
|
|
73
|
+
type: "loaded"
|
|
74
|
+
});
|
|
75
|
+
((_intialExpand$current2 = intialExpand.current) === null || _intialExpand$current2 === void 0 ? void 0 : _intialExpand$current2.length) > 0 && dispatch({
|
|
76
|
+
type: "expand",
|
|
77
|
+
id: intialExpand.current.shift()
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}, [onLoad]);
|
|
30
81
|
var _useReducer = useReducer(function (state, action) {
|
|
31
82
|
if (action.type === "load") {
|
|
32
|
-
state.items = refactorTree(action.items
|
|
83
|
+
state.items = refactorTree(action.items, {
|
|
84
|
+
sorter: sorter,
|
|
85
|
+
defaultExpanded: defaultExpanded
|
|
86
|
+
});
|
|
33
87
|
state.itemMap = makeTreeMap(state.items);
|
|
34
88
|
state.tree = flattenTree(state.items);
|
|
35
89
|
return _objectSpread({}, state);
|
|
36
90
|
}
|
|
37
91
|
if (action.type === "toggleExpand") {
|
|
38
92
|
var node = state.itemMap.get(action.id);
|
|
39
|
-
|
|
93
|
+
if (node && !node.leaf) {
|
|
94
|
+
node && (node.open = !node.open);
|
|
95
|
+
loadChildren(node);
|
|
96
|
+
return _objectSpread({}, state);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (action.type === "loaded") {
|
|
100
|
+
state.itemMap = makeTreeMap(state.items);
|
|
101
|
+
fireExpandToggle(Array.from(state.itemMap.values()));
|
|
40
102
|
state.tree = flattenTree(state.items);
|
|
103
|
+
state.selected && updateSelection(state.itemMap, state.selected, true);
|
|
41
104
|
return _objectSpread({}, state);
|
|
42
105
|
}
|
|
43
106
|
if (action.type === "expand") {
|
|
44
|
-
// TODO: check if children available, if not call onLoad to fetch node children
|
|
45
107
|
var _node = state.itemMap.get(action.id);
|
|
46
|
-
_node &&
|
|
47
|
-
|
|
48
|
-
|
|
108
|
+
if (_node && !_node.leaf) {
|
|
109
|
+
_node.open = true;
|
|
110
|
+
var parentId = _node.parent;
|
|
111
|
+
while (parentId) {
|
|
112
|
+
var _node2 = state.itemMap.get(parentId);
|
|
113
|
+
_node2 && (_node2.open = true);
|
|
114
|
+
parentId = _node2 === null || _node2 === void 0 ? void 0 : _node2.parent;
|
|
115
|
+
}
|
|
116
|
+
loadChildren(_node);
|
|
117
|
+
return _objectSpread({}, state);
|
|
118
|
+
}
|
|
49
119
|
}
|
|
50
120
|
if (action.type === "expandAll") {
|
|
51
|
-
// TODO: prevent opening dynamic nodes that dont have children
|
|
52
121
|
state.itemMap.forEach(function (node) {
|
|
53
|
-
|
|
122
|
+
var _node$children2;
|
|
123
|
+
!node.leaf && ((_node$children2 = node.children) === null || _node$children2 === void 0 ? void 0 : _node$children2.length) && (node.open = true);
|
|
54
124
|
});
|
|
125
|
+
fireExpandToggle(Array.from(state.itemMap.values()));
|
|
55
126
|
state.tree = flattenTree(state.items);
|
|
56
127
|
return _objectSpread({}, state);
|
|
57
128
|
}
|
|
@@ -59,22 +130,28 @@ var useTree = function useTree(_ref) {
|
|
|
59
130
|
state.itemMap.forEach(function (node) {
|
|
60
131
|
!node.leaf && (node.open = false);
|
|
61
132
|
});
|
|
133
|
+
fireExpandToggle([]);
|
|
62
134
|
state.tree = flattenTree(state.items);
|
|
63
135
|
return _objectSpread({}, state);
|
|
64
136
|
}
|
|
65
137
|
if (action.type === "filter") {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
138
|
+
if (onQuery) {
|
|
139
|
+
var _action$query;
|
|
140
|
+
onQuery((_action$query = action.query) !== null && _action$query !== void 0 ? _action$query : "");
|
|
141
|
+
} else {
|
|
142
|
+
filterTree(state.itemMap, action.query, matcher);
|
|
143
|
+
state.tree = flattenTree(state.items);
|
|
144
|
+
return _objectSpread({}, state);
|
|
145
|
+
}
|
|
69
146
|
}
|
|
70
147
|
if (action.type === "select") {
|
|
71
|
-
var _componentEvents$curr, _componentEvents$curr2;
|
|
148
|
+
var _componentEvents$curr, _componentEvents$curr2, _state$itemMap$get;
|
|
72
149
|
if (state.selected) {
|
|
73
150
|
updateSelection(state.itemMap, state.selected);
|
|
74
151
|
}
|
|
75
152
|
updateSelection(state.itemMap, action.id, true);
|
|
76
153
|
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);
|
|
154
|
+
(_componentEvents$curr = (_componentEvents$curr2 = componentEvents.current).onSelect) === null || _componentEvents$curr === void 0 || _componentEvents$curr.call(_componentEvents$curr2, action.id, (_state$itemMap$get = state.itemMap.get(action.id)) === null || _state$itemMap$get === void 0 ? void 0 : _state$itemMap$get.data);
|
|
78
155
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
79
156
|
selected: action.id
|
|
80
157
|
});
|
|
@@ -116,10 +193,15 @@ var useTree = function useTree(_ref) {
|
|
|
116
193
|
};
|
|
117
194
|
}, [onSelect, onChecked]);
|
|
118
195
|
useEffect(function () {
|
|
196
|
+
var _intialExpand$current3;
|
|
119
197
|
dispatch({
|
|
120
198
|
type: "load",
|
|
121
199
|
items: itemList
|
|
122
200
|
});
|
|
201
|
+
itemList.length && ((_intialExpand$current3 = intialExpand.current) === null || _intialExpand$current3 === void 0 ? void 0 : _intialExpand$current3.length) > 0 && dispatch({
|
|
202
|
+
type: "expand",
|
|
203
|
+
id: intialExpand.current.shift()
|
|
204
|
+
});
|
|
123
205
|
}, [itemList]);
|
|
124
206
|
useEffect(function () {
|
|
125
207
|
selected && dispatch({
|
|
@@ -172,7 +254,7 @@ var useTree = function useTree(_ref) {
|
|
|
172
254
|
type: "filter",
|
|
173
255
|
query: query
|
|
174
256
|
});
|
|
175
|
-
}, []);
|
|
257
|
+
}, [], 300);
|
|
176
258
|
return {
|
|
177
259
|
tree: state.tree,
|
|
178
260
|
toggleExpand: toggleExpand,
|
package/dist/esm/tree/utils.js
CHANGED
|
@@ -6,7 +6,7 @@ import { isString, matchString, compareValues } from '@react-fabric/utilities';
|
|
|
6
6
|
|
|
7
7
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
8
8
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
9
|
-
var
|
|
9
|
+
var defaultSorter = function defaultSorter(a, b) {
|
|
10
10
|
if (!!a.leaf !== !!b.leaf) return a.leaf ? 1 : -1;
|
|
11
11
|
return compareValues()(a.label, b.label);
|
|
12
12
|
};
|
|
@@ -28,15 +28,21 @@ var getIntermediate = function getIntermediate() {
|
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
// convert node item to internal node used by the tree
|
|
31
|
-
var refactorTree = function refactorTree(nodes) {
|
|
32
|
-
var
|
|
31
|
+
var refactorTree = function refactorTree(nodes, _ref) {
|
|
32
|
+
var _ref$sorter = _ref.sorter,
|
|
33
|
+
sorter = _ref$sorter === void 0 ? defaultSorter : _ref$sorter,
|
|
34
|
+
_ref$defaultExpanded = _ref.defaultExpanded,
|
|
35
|
+
defaultExpanded = _ref$defaultExpanded === void 0 ? [] : _ref$defaultExpanded;
|
|
36
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
|
33
37
|
level: 0,
|
|
34
38
|
parent: undefined
|
|
35
39
|
};
|
|
36
40
|
var list = [];
|
|
37
|
-
nodes.sort(sorter)
|
|
41
|
+
if (sorter !== false) nodes = nodes.sort(sorter);
|
|
42
|
+
nodes.forEach(function (node) {
|
|
43
|
+
var _node$children;
|
|
38
44
|
list.push(_objectSpread(_objectSpread({
|
|
39
|
-
open:
|
|
45
|
+
open: defaultExpanded.includes(node.id) && !!((_node$children = node.children) !== null && _node$children !== void 0 && _node$children.length),
|
|
40
46
|
level: options.level,
|
|
41
47
|
parent: options.parent,
|
|
42
48
|
checked: 0,
|
|
@@ -47,6 +53,9 @@ var refactorTree = function refactorTree(nodes) {
|
|
|
47
53
|
}, node), {}, {
|
|
48
54
|
leaf: !!node.leaf,
|
|
49
55
|
children: node.children && refactorTree(node.children, {
|
|
56
|
+
sorter: sorter,
|
|
57
|
+
defaultExpanded: defaultExpanded
|
|
58
|
+
}, {
|
|
50
59
|
level: options.level + 1,
|
|
51
60
|
parent: node.id
|
|
52
61
|
})
|
|
@@ -72,11 +81,17 @@ 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
|
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
3
4
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
5
|
+
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
4
6
|
import { useEffectDebugger, useDebounce, Skeleton } from '@react-fabric/core';
|
|
5
7
|
import { debounce } from '@react-fabric/utilities';
|
|
6
8
|
import { useVirtualizer } from '@tanstack/react-virtual';
|
|
@@ -10,6 +12,9 @@ import { useDeferredValue, useMemo, useRef, useState, useEffect, useCallback, us
|
|
|
10
12
|
import { Scroller } from './Scroller.js';
|
|
11
13
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
12
14
|
|
|
15
|
+
var _excluded = ["items", "children", "columns", "fullWidth", "maxWidth", "minWidth", "total", "padding", "defaultHeight", "defaultWidth", "hideScroller", "initialScroll", "loading", "onLoadMore", "onScroll", "galleryRef"];
|
|
16
|
+
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; }
|
|
17
|
+
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; }
|
|
13
18
|
var createItemList = memoizeOne(function (items) {
|
|
14
19
|
return items;
|
|
15
20
|
});
|
|
@@ -18,6 +23,11 @@ var _VirtualGallery = function _VirtualGallery(_ref) {
|
|
|
18
23
|
var items = _ref.items,
|
|
19
24
|
children = _ref.children,
|
|
20
25
|
columns = _ref.columns,
|
|
26
|
+
fullWidth = _ref.fullWidth,
|
|
27
|
+
maxWidth = _ref.maxWidth,
|
|
28
|
+
minWidth = _ref.minWidth,
|
|
29
|
+
_ref$total = _ref.total,
|
|
30
|
+
total = _ref$total === void 0 ? 0 : _ref$total,
|
|
21
31
|
_ref$padding = _ref.padding,
|
|
22
32
|
padding = _ref$padding === void 0 ? "md" : _ref$padding,
|
|
23
33
|
_ref$defaultHeight = _ref.defaultHeight,
|
|
@@ -29,16 +39,17 @@ var _VirtualGallery = function _VirtualGallery(_ref) {
|
|
|
29
39
|
loading = _ref.loading,
|
|
30
40
|
onLoadMore = _ref.onLoadMore,
|
|
31
41
|
onScroll = _ref.onScroll,
|
|
32
|
-
galleryRef = _ref.galleryRef
|
|
42
|
+
galleryRef = _ref.galleryRef,
|
|
43
|
+
aria = _objectWithoutProperties(_ref, _excluded);
|
|
33
44
|
var count = useDeferredValue(items.length);
|
|
34
45
|
var extraSize = useMemo(function () {
|
|
35
|
-
return onLoadMore ?
|
|
46
|
+
return onLoadMore ? 8 : 0;
|
|
36
47
|
}, [onLoadMore]);
|
|
37
|
-
var itemList = createItemList(items.map(function (item,
|
|
48
|
+
var itemList = createItemList(items.map(function (item, index) {
|
|
38
49
|
return {
|
|
39
|
-
index:
|
|
40
|
-
|
|
41
|
-
isLast:
|
|
50
|
+
index: index,
|
|
51
|
+
item: item,
|
|
52
|
+
isLast: index + 1 === items.length
|
|
42
53
|
};
|
|
43
54
|
}));
|
|
44
55
|
var scrollerRef = useRef(null);
|
|
@@ -55,8 +66,9 @@ var _VirtualGallery = function _VirtualGallery(_ref) {
|
|
|
55
66
|
if (scrollerRef.current) {
|
|
56
67
|
var el = scrollerRef.current;
|
|
57
68
|
var handler = function handler() {
|
|
58
|
-
var _el$offsetWidth;
|
|
59
|
-
|
|
69
|
+
var _getComputedStyle$pad, _el$firstElementChild, _el$offsetWidth;
|
|
70
|
+
var pad = parseInt((_getComputedStyle$pad = getComputedStyle((_el$firstElementChild = el.firstElementChild) === null || _el$firstElementChild === void 0 ? void 0 : _el$firstElementChild.firstElementChild).padding) !== null && _getComputedStyle$pad !== void 0 ? _getComputedStyle$pad : 8);
|
|
71
|
+
setColumnCount(columns !== null && columns !== void 0 ? columns : Math.max(1, Math.floor((((_el$offsetWidth = el === null || el === void 0 ? void 0 : el.offsetWidth) !== null && _el$offsetWidth !== void 0 ? _el$offsetWidth : 800) - 32 - (isNaN(pad) ? 8 : pad) * 2) / width)));
|
|
60
72
|
};
|
|
61
73
|
var ob = new ResizeObserver(handler);
|
|
62
74
|
handler();
|
|
@@ -74,7 +86,8 @@ var _VirtualGallery = function _VirtualGallery(_ref) {
|
|
|
74
86
|
},
|
|
75
87
|
estimateSize: function estimateSize() {
|
|
76
88
|
return height;
|
|
77
|
-
}
|
|
89
|
+
},
|
|
90
|
+
overscan: 2
|
|
78
91
|
});
|
|
79
92
|
var virtualItems = virtualizer.getVirtualItems();
|
|
80
93
|
var currentIndex = useRef(0);
|
|
@@ -112,26 +125,25 @@ var _VirtualGallery = function _VirtualGallery(_ref) {
|
|
|
112
125
|
setScrollActive(calculateActiveScroll());
|
|
113
126
|
}, [count, calculateActiveScroll]);
|
|
114
127
|
useEffect(function () {
|
|
115
|
-
|
|
116
|
-
var
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}, [onLoadMore, loading, itemList, virtualItems, count, columnCount]);
|
|
124
|
-
useEffect(function () {
|
|
125
|
-
var _virtualItems$2;
|
|
126
|
-
var firstItem = (_virtualItems$2 = virtualItems[0]) === null || _virtualItems$2 === void 0 ? void 0 : _virtualItems$2.index;
|
|
127
|
-
if (onLoadMore && firstItem !== undefined && items[firstItem * columnCount] === null) {
|
|
128
|
+
if (onLoadMore) {
|
|
129
|
+
var _virtualItems$2, _virtualItems$slice$p;
|
|
130
|
+
var firstItem = (_virtualItems$2 = virtualItems[0]) === null || _virtualItems$2 === void 0 ? void 0 : _virtualItems$2.index;
|
|
131
|
+
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;
|
|
132
|
+
var firstIndex = firstItem * columnCount;
|
|
133
|
+
var lastIndex = (lastItem !== null && lastItem !== void 0 ? lastItem : 0) * columnCount + columnCount;
|
|
134
|
+
var canLoadPrevPage = firstItem !== undefined && items[firstIndex] === null;
|
|
135
|
+
var canLoadNextPage = lastItem !== undefined && lastIndex >= count - 1 && count < total;
|
|
128
136
|
var db = debounce(onLoadMore);
|
|
129
|
-
|
|
137
|
+
if (canLoadPrevPage) {
|
|
138
|
+
db(firstIndex);
|
|
139
|
+
} else if (!loading && canLoadNextPage) {
|
|
140
|
+
db(lastIndex + 1);
|
|
141
|
+
}
|
|
130
142
|
return function () {
|
|
131
143
|
return db.cancel();
|
|
132
144
|
};
|
|
133
145
|
}
|
|
134
|
-
}, [onLoadMore,
|
|
146
|
+
}, [onLoadMore, virtualItems]);
|
|
135
147
|
useLayoutEffect(function () {
|
|
136
148
|
setTimeout(function () {
|
|
137
149
|
initialScroll && virtualizer.scrollToIndex(Math.floor(initialScroll / columnCount), {
|
|
@@ -143,14 +155,14 @@ var _VirtualGallery = function _VirtualGallery(_ref) {
|
|
|
143
155
|
return {
|
|
144
156
|
scrollToItem: function scrollToItem(index) {
|
|
145
157
|
virtualizer.scrollToIndex(Math.floor(index / columnCount), {
|
|
146
|
-
align: "
|
|
158
|
+
align: "auto"
|
|
147
159
|
});
|
|
148
160
|
},
|
|
149
161
|
hilight: function hilight(index) {
|
|
150
162
|
var _scrollerRef$current2;
|
|
151
163
|
(_scrollerRef$current2 = scrollerRef.current) === null || _scrollerRef$current2 === void 0 || (_scrollerRef$current2 = _scrollerRef$current2.querySelector(".hilight")) === null || _scrollerRef$current2 === void 0 || _scrollerRef$current2.classList.remove("hilight", "ring-1");
|
|
152
164
|
virtualizer.scrollToIndex(Math.floor(index / columnCount), {
|
|
153
|
-
align: "
|
|
165
|
+
align: "auto"
|
|
154
166
|
});
|
|
155
167
|
setTimeout(function () {
|
|
156
168
|
var _scrollerRef$current3;
|
|
@@ -163,17 +175,22 @@ var _VirtualGallery = function _VirtualGallery(_ref) {
|
|
|
163
175
|
}
|
|
164
176
|
};
|
|
165
177
|
}, [virtualizer, columnCount]);
|
|
166
|
-
return /*#__PURE__*/jsx("div", {
|
|
178
|
+
return /*#__PURE__*/jsx("div", _objectSpread(_objectSpread({
|
|
167
179
|
ref: scrollerRef,
|
|
168
180
|
onScroll: handleScroll,
|
|
169
|
-
className: classNames("area-content bg-base overflow-auto
|
|
181
|
+
className: classNames("area-content bg-base overflow-auto")
|
|
182
|
+
}, aria), {}, {
|
|
170
183
|
children: /*#__PURE__*/jsxs("div", {
|
|
171
184
|
className: classNames("inline-flex flex-nowrap gap-2 justify-center min-h-full min-w-full"),
|
|
172
185
|
children: [/*#__PURE__*/jsx("div", {
|
|
173
|
-
className: classNames("box-content", padding === "sm" && "p-1", padding === "md" && "p-2", padding === "lg" && "p-4"),
|
|
186
|
+
className: classNames("box-content", fullWidth && "flex-1", padding === "sm" && "p-1", padding === "md" && "p-2", padding === "lg" && "p-4"),
|
|
187
|
+
style: {
|
|
188
|
+
minWidth: minWidth,
|
|
189
|
+
maxWidth: maxWidth
|
|
190
|
+
},
|
|
174
191
|
children: /*#__PURE__*/jsxs("div", {
|
|
175
192
|
style: {
|
|
176
|
-
height: virtualizer.getTotalSize()
|
|
193
|
+
height: virtualizer.getTotalSize() + extraSize
|
|
177
194
|
},
|
|
178
195
|
children: [/*#__PURE__*/jsx("div", {
|
|
179
196
|
style: {
|
|
@@ -181,12 +198,11 @@ var _VirtualGallery = function _VirtualGallery(_ref) {
|
|
|
181
198
|
}
|
|
182
199
|
}), virtualItems.map(function (_ref3) {
|
|
183
200
|
var key = _ref3.key,
|
|
184
|
-
index = _ref3.index
|
|
185
|
-
measureElement = _ref3.measureElement;
|
|
201
|
+
index = _ref3.index;
|
|
186
202
|
return /*#__PURE__*/jsx("div", {
|
|
187
|
-
className: "flex",
|
|
203
|
+
className: "flex justify-center",
|
|
188
204
|
"data-index": index,
|
|
189
|
-
ref: measureElement,
|
|
205
|
+
ref: virtualizer.measureElement,
|
|
190
206
|
children: columnMap.map(function (col) {
|
|
191
207
|
return /*#__PURE__*/jsx("div", {
|
|
192
208
|
"data-index": index * columnCount + col,
|
|
@@ -220,7 +236,7 @@ var _VirtualGallery = function _VirtualGallery(_ref) {
|
|
|
220
236
|
})
|
|
221
237
|
})]
|
|
222
238
|
})
|
|
223
|
-
});
|
|
239
|
+
}));
|
|
224
240
|
};
|
|
225
241
|
_VirtualGallery.displayName = "VirtualGallery";
|
|
226
242
|
var GenericMemo = memo;
|