@react-fabric/data 1.0.0-beta.25 → 1.0.0-beta.27
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/dist/cjs/tree/TreeNode.js +24 -12
- package/dist/cjs/tree/TreePanel.js +26 -10
- package/dist/cjs/tree/useTree.js +85 -11
- package/dist/cjs/tree/utils.js +13 -4
- package/dist/esm/tree/TreeNode.js +25 -13
- package/dist/esm/tree/TreePanel.js +26 -10
- package/dist/esm/tree/useTree.js +87 -13
- package/dist/esm/tree/utils.js +13 -4
- 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 +21 -5
- package/dist/types/tree/useTree.d.ts +2 -9
- package/dist/types/tree/utils.d.ts +4 -1
- package/package.json +8 -8
- package/src/tree/TreeNode.tsx +41 -18
- package/src/tree/TreePanel.tsx +21 -3
- package/src/tree/types.ts +28 -4
- package/src/tree/useTree.ts +93 -20
- package/src/tree/utils.ts +16 -8
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
4
|
var core = require('@react-fabric/core');
|
|
5
|
+
var utilities = require('@react-fabric/utilities');
|
|
5
6
|
var classNames = require('classnames');
|
|
6
7
|
var react = require('react');
|
|
7
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -17,16 +18,19 @@ var TreeNode = function TreeNode(_ref) {
|
|
|
17
18
|
defaultLeafIcon = _ref.defaultLeafIcon,
|
|
18
19
|
defaultNodeIcon = _ref.defaultNodeIcon,
|
|
19
20
|
onToggle = _ref.onToggle,
|
|
21
|
+
_onClick = _ref.onClick,
|
|
20
22
|
onSelect = _ref.onSelect,
|
|
21
23
|
onChecked = _ref.onChecked,
|
|
22
|
-
children = _ref.children
|
|
24
|
+
children = _ref.children,
|
|
25
|
+
leafClassName = _ref.leafClassName,
|
|
26
|
+
nodeClassName = _ref.nodeClassName;
|
|
23
27
|
var badgeProps = react.useMemo(function () {
|
|
24
28
|
return core.getBadgeProps(node.badge);
|
|
25
29
|
}, [node.badge]);
|
|
26
30
|
var filler = react.useMemo(function () {
|
|
27
|
-
return node.lines.slice(
|
|
31
|
+
return node.lines.slice(1).map(function (line, idx) {
|
|
28
32
|
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
29
|
-
className: classNames("flex-initial self-stretch flex items-center w-6 relative before:absolute before:top-0 before:start-[7px] before:bg-tint-200 before:min-h-[50%] before:w-[2px] before:scale-x-[.625]", !noLines && line !== 2 && "before:h-full"),
|
|
33
|
+
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-[2px] before:scale-x-[.625]", !noLines && line !== 2 && "before:h-full"),
|
|
30
34
|
children: /*#__PURE__*/jsxRuntime.jsxs("svg", {
|
|
31
35
|
viewBox: "0 0 24 24",
|
|
32
36
|
className: "fill-tint-200",
|
|
@@ -56,10 +60,17 @@ var TreeNode = function TreeNode(_ref) {
|
|
|
56
60
|
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
57
61
|
role: "treeitem",
|
|
58
62
|
"aria-selected": node.selected,
|
|
59
|
-
className: "flex flex-nowrap items-center",
|
|
63
|
+
className: classNames("flex flex-nowrap items-center", node.leaf ? leafClassName : nodeClassName),
|
|
60
64
|
"data-testid": node["data-testid"],
|
|
61
65
|
"data-test-value": node["data-test-value"],
|
|
62
|
-
children: [filler,
|
|
66
|
+
children: [filler, node.loading && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
67
|
+
className: "flex-initial w-6",
|
|
68
|
+
children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
69
|
+
rtlFlip: true,
|
|
70
|
+
icon: core.CoreIcons.spinner,
|
|
71
|
+
className: "animate-spin text-muted"
|
|
72
|
+
})
|
|
73
|
+
}), !node.leaf && !node.childFiltered && !node.loading && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
63
74
|
className: "flex-initial w-6",
|
|
64
75
|
children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
65
76
|
rtlFlip: true,
|
|
@@ -80,19 +91,20 @@ var TreeNode = function TreeNode(_ref) {
|
|
|
80
91
|
})
|
|
81
92
|
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
82
93
|
role: "none",
|
|
83
|
-
className: classNames("group data-[selected]:bg-primary-100 flex flex-nowrap flex-1 overflow-hidden select-none", node.childSelected && "font-medium", canSelect && "hover:bg-primary-50 cursor-pointer"),
|
|
94
|
+
className: classNames("group/tool data-[selected]:bg-primary-100 flex flex-nowrap flex-1 overflow-hidden select-none", node.childSelected && "font-medium", (canSelect || _onClick) && "hover:bg-primary-50 cursor-pointer"),
|
|
84
95
|
"data-selected": node.selected,
|
|
85
96
|
onClick: function onClick() {
|
|
86
|
-
|
|
97
|
+
_onClick === null || _onClick === void 0 || _onClick(node.id, node.data);
|
|
98
|
+
canSelect ? onSelect(node.id) : canCheck ? onChecked(node.id) : onToggle(node.id);
|
|
87
99
|
},
|
|
88
|
-
children: [nodeIcon && /*#__PURE__*/jsxRuntime.
|
|
89
|
-
className: "flex-content w-6",
|
|
90
|
-
children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
100
|
+
children: [nodeIcon && /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
101
|
+
className: "flex-content w-6 self-center leading-none",
|
|
102
|
+
children: [/*#__PURE__*/react.isValidElement(nodeIcon) && nodeIcon, utilities.isString(nodeIcon) && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
91
103
|
icon: nodeIcon,
|
|
92
104
|
bg: node.iconBg,
|
|
93
105
|
color: node.iconColor,
|
|
94
106
|
rtlFlip: node.rtlFlip
|
|
95
|
-
})
|
|
107
|
+
})]
|
|
96
108
|
}), node.childSelected && !node.open && /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
97
109
|
className: " flex-content text-primary-500",
|
|
98
110
|
children: "\u2022"
|
|
@@ -100,7 +112,7 @@ var TreeNode = function TreeNode(_ref) {
|
|
|
100
112
|
role: "none",
|
|
101
113
|
className: "flex-1 truncate",
|
|
102
114
|
children: children
|
|
103
|
-
}), node.badge && /*#__PURE__*/jsxRuntime.jsx(core.Badge, _objectSpread(_objectSpread({}, badgeProps), {}, {
|
|
115
|
+
}), !utilities.isEmpty(node.badge) && /*#__PURE__*/jsxRuntime.jsx(core.Badge, _objectSpread(_objectSpread({}, badgeProps), {}, {
|
|
104
116
|
className: classNames("me-1 self-center flex-content bg-opacity-50", badgeProps.className)
|
|
105
117
|
}))]
|
|
106
118
|
})]
|
|
@@ -11,7 +11,7 @@ var types = require('./types.js');
|
|
|
11
11
|
var useTree = require('./useTree.js');
|
|
12
12
|
var jsxRuntime = require('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", "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,36 @@ 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
|
+
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,
|
|
42
50
|
matcher: matcher,
|
|
51
|
+
sorter: sorter,
|
|
52
|
+
onLoad: onLoad,
|
|
43
53
|
onSelect: onSelect,
|
|
44
|
-
onChecked: onChecked
|
|
54
|
+
onChecked: onChecked,
|
|
55
|
+
defaultExpanded: defaultExpanded,
|
|
56
|
+
onExpandToggle: onExpandToggle
|
|
45
57
|
}),
|
|
46
58
|
tree = _useTree.tree,
|
|
47
59
|
toggleExpand = _useTree.toggleExpand,
|
|
48
60
|
toggleCheck = _useTree.toggleCheck,
|
|
49
61
|
expandAll = _useTree.expandAll,
|
|
50
62
|
collapseAll = _useTree.collapseAll,
|
|
51
|
-
|
|
63
|
+
_select = _useTree.select,
|
|
52
64
|
expand = _useTree.expand,
|
|
53
65
|
onFilter = _useTree.onFilter;
|
|
54
66
|
var scrollerRef = react.useRef(null);
|
|
@@ -74,7 +86,7 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
74
86
|
return expand(id);
|
|
75
87
|
},
|
|
76
88
|
select: function select(id) {
|
|
77
|
-
return
|
|
89
|
+
return _select(id);
|
|
78
90
|
}
|
|
79
91
|
};
|
|
80
92
|
}, []);
|
|
@@ -120,6 +132,7 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
120
132
|
height: (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.start
|
|
121
133
|
}
|
|
122
134
|
}), virtualItems.map(function (_ref2) {
|
|
135
|
+
var _makeIcon, _ref3, _ref4;
|
|
123
136
|
var index = _ref2.index,
|
|
124
137
|
key = _ref2.key;
|
|
125
138
|
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
@@ -132,11 +145,14 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
132
145
|
checkable: checkable,
|
|
133
146
|
selectable: selectable,
|
|
134
147
|
defaultLeafIcon: defaultLeafIcon,
|
|
135
|
-
defaultNodeIcon: defaultNodeIcon,
|
|
148
|
+
defaultNodeIcon: (_makeIcon = makeIcon === null || makeIcon === void 0 ? void 0 : makeIcon(tree[index].data)) !== null && _makeIcon !== void 0 ? _makeIcon : defaultNodeIcon,
|
|
136
149
|
onToggle: toggleExpand,
|
|
137
150
|
onChecked: toggleCheck,
|
|
138
|
-
onSelect:
|
|
139
|
-
|
|
151
|
+
onSelect: _select,
|
|
152
|
+
onClick: onClick,
|
|
153
|
+
leafClassName: leafClassName,
|
|
154
|
+
nodeClassName: nodeClassName,
|
|
155
|
+
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
156
|
})
|
|
141
157
|
}, key);
|
|
142
158
|
})]
|
package/dist/cjs/tree/useTree.js
CHANGED
|
@@ -19,39 +19,107 @@ var useTree = function useTree(_ref) {
|
|
|
19
19
|
_ref$checked = _ref.checked,
|
|
20
20
|
checked = _ref$checked === void 0 ? utilities.EMPTY_ARRAY : _ref$checked,
|
|
21
21
|
selected = _ref.selected,
|
|
22
|
+
sorter = _ref.sorter,
|
|
22
23
|
matcher = _ref.matcher,
|
|
24
|
+
onLoad = _ref.onLoad,
|
|
23
25
|
onSelect = _ref.onSelect,
|
|
24
|
-
onChecked = _ref.onChecked
|
|
26
|
+
onChecked = _ref.onChecked,
|
|
27
|
+
defaultExpanded = _ref.defaultExpanded,
|
|
28
|
+
onExpandToggle = _ref.onExpandToggle;
|
|
25
29
|
var componentEvents = react.useRef({
|
|
26
30
|
onSelect: onSelect,
|
|
27
31
|
onChecked: onChecked
|
|
28
32
|
});
|
|
33
|
+
var intialExpand = react.useRef(defaultExpanded !== null && defaultExpanded !== void 0 ? defaultExpanded : utilities.EMPTY_ARRAY);
|
|
29
34
|
var itemList = createItemList(items);
|
|
35
|
+
var fireExpandToggle = react.useCallback(function (itemMap) {
|
|
36
|
+
var expandedList = itemMap.filter(function (node) {
|
|
37
|
+
return node.open;
|
|
38
|
+
}).map(function (node) {
|
|
39
|
+
return node.id;
|
|
40
|
+
});
|
|
41
|
+
onExpandToggle === null || onExpandToggle === void 0 || onExpandToggle(expandedList);
|
|
42
|
+
}, [onExpandToggle]);
|
|
43
|
+
var loadChildren = react.useCallback(function (node) {
|
|
44
|
+
var _node$children;
|
|
45
|
+
if (node.open && !node.leaf && !((_node$children = node.children) !== null && _node$children !== void 0 && _node$children.length)) {
|
|
46
|
+
node.loading = true;
|
|
47
|
+
void Promise.resolve(onLoad === null || onLoad === void 0 ? void 0 : onLoad(node.id)).then(function () {
|
|
48
|
+
var resp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : utilities.EMPTY_ARRAY;
|
|
49
|
+
node.children = utils.refactorTree(resp, {
|
|
50
|
+
sorter: sorter,
|
|
51
|
+
defaultExpanded: defaultExpanded
|
|
52
|
+
}, {
|
|
53
|
+
level: node.level + 1,
|
|
54
|
+
parent: node.id
|
|
55
|
+
});
|
|
56
|
+
})["finally"](function () {
|
|
57
|
+
var _intialExpand$current;
|
|
58
|
+
node.loading = false;
|
|
59
|
+
dispatch({
|
|
60
|
+
type: "loaded"
|
|
61
|
+
});
|
|
62
|
+
((_intialExpand$current = intialExpand.current) === null || _intialExpand$current === void 0 ? void 0 : _intialExpand$current.length) > 0 && dispatch({
|
|
63
|
+
type: "expand",
|
|
64
|
+
id: intialExpand.current.shift()
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
} else {
|
|
68
|
+
var _intialExpand$current2;
|
|
69
|
+
dispatch({
|
|
70
|
+
type: "loaded"
|
|
71
|
+
});
|
|
72
|
+
((_intialExpand$current2 = intialExpand.current) === null || _intialExpand$current2 === void 0 ? void 0 : _intialExpand$current2.length) > 0 && dispatch({
|
|
73
|
+
type: "expand",
|
|
74
|
+
id: intialExpand.current.shift()
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}, [onLoad]);
|
|
30
78
|
var _useReducer = react.useReducer(function (state, action) {
|
|
31
79
|
if (action.type === "load") {
|
|
32
|
-
state.items = utils.refactorTree(action.items
|
|
80
|
+
state.items = utils.refactorTree(action.items, {
|
|
81
|
+
sorter: sorter,
|
|
82
|
+
defaultExpanded: defaultExpanded
|
|
83
|
+
});
|
|
33
84
|
state.itemMap = utils.makeTreeMap(state.items);
|
|
34
85
|
state.tree = utils.flattenTree(state.items);
|
|
35
86
|
return _objectSpread({}, state);
|
|
36
87
|
}
|
|
37
88
|
if (action.type === "toggleExpand") {
|
|
38
89
|
var node = state.itemMap.get(action.id);
|
|
39
|
-
|
|
90
|
+
if (node && !node.leaf) {
|
|
91
|
+
node && (node.open = !node.open);
|
|
92
|
+
loadChildren(node);
|
|
93
|
+
return _objectSpread({}, state);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (action.type === "loaded") {
|
|
97
|
+
state.itemMap = utils.makeTreeMap(state.items);
|
|
98
|
+
fireExpandToggle(Array.from(state.itemMap.values()));
|
|
40
99
|
state.tree = utils.flattenTree(state.items);
|
|
100
|
+
state.selected && utils.updateSelection(state.itemMap, state.selected, true);
|
|
41
101
|
return _objectSpread({}, state);
|
|
42
102
|
}
|
|
43
103
|
if (action.type === "expand") {
|
|
44
|
-
// TODO: check if children available, if not call onLoad to fetch node children
|
|
45
104
|
var _node = state.itemMap.get(action.id);
|
|
46
|
-
_node &&
|
|
47
|
-
|
|
48
|
-
|
|
105
|
+
if (_node && !_node.leaf) {
|
|
106
|
+
_node.open = true;
|
|
107
|
+
var parentId = _node.parent;
|
|
108
|
+
while (parentId) {
|
|
109
|
+
var _node2 = state.itemMap.get(parentId);
|
|
110
|
+
_node2 && (_node2.open = true);
|
|
111
|
+
parentId = _node2 === null || _node2 === void 0 ? void 0 : _node2.parent;
|
|
112
|
+
}
|
|
113
|
+
loadChildren(_node);
|
|
114
|
+
return _objectSpread({}, state);
|
|
115
|
+
}
|
|
49
116
|
}
|
|
50
117
|
if (action.type === "expandAll") {
|
|
51
|
-
// TODO: prevent opening dynamic nodes that dont have children
|
|
52
118
|
state.itemMap.forEach(function (node) {
|
|
53
|
-
|
|
119
|
+
var _node$children2;
|
|
120
|
+
!node.leaf && ((_node$children2 = node.children) === null || _node$children2 === void 0 ? void 0 : _node$children2.length) && (node.open = true);
|
|
54
121
|
});
|
|
122
|
+
fireExpandToggle(Array.from(state.itemMap.values()));
|
|
55
123
|
state.tree = utils.flattenTree(state.items);
|
|
56
124
|
return _objectSpread({}, state);
|
|
57
125
|
}
|
|
@@ -59,6 +127,7 @@ var useTree = function useTree(_ref) {
|
|
|
59
127
|
state.itemMap.forEach(function (node) {
|
|
60
128
|
!node.leaf && (node.open = false);
|
|
61
129
|
});
|
|
130
|
+
fireExpandToggle([]);
|
|
62
131
|
state.tree = utils.flattenTree(state.items);
|
|
63
132
|
return _objectSpread({}, state);
|
|
64
133
|
}
|
|
@@ -68,13 +137,13 @@ var useTree = function useTree(_ref) {
|
|
|
68
137
|
return _objectSpread({}, state);
|
|
69
138
|
}
|
|
70
139
|
if (action.type === "select") {
|
|
71
|
-
var _componentEvents$curr, _componentEvents$curr2;
|
|
140
|
+
var _componentEvents$curr, _componentEvents$curr2, _state$itemMap$get;
|
|
72
141
|
if (state.selected) {
|
|
73
142
|
utils.updateSelection(state.itemMap, state.selected);
|
|
74
143
|
}
|
|
75
144
|
utils.updateSelection(state.itemMap, action.id, true);
|
|
76
145
|
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);
|
|
146
|
+
(_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
147
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
79
148
|
selected: action.id
|
|
80
149
|
});
|
|
@@ -116,10 +185,15 @@ var useTree = function useTree(_ref) {
|
|
|
116
185
|
};
|
|
117
186
|
}, [onSelect, onChecked]);
|
|
118
187
|
react.useEffect(function () {
|
|
188
|
+
var _intialExpand$current3;
|
|
119
189
|
dispatch({
|
|
120
190
|
type: "load",
|
|
121
191
|
items: itemList
|
|
122
192
|
});
|
|
193
|
+
((_intialExpand$current3 = intialExpand.current) === null || _intialExpand$current3 === void 0 ? void 0 : _intialExpand$current3.length) > 0 && dispatch({
|
|
194
|
+
type: "expand",
|
|
195
|
+
id: intialExpand.current.shift()
|
|
196
|
+
});
|
|
123
197
|
}, [itemList]);
|
|
124
198
|
react.useEffect(function () {
|
|
125
199
|
selected && dispatch({
|
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) {
|
|
38
43
|
list.push(_objectSpread(_objectSpread({
|
|
39
44
|
open: false,
|
|
45
|
+
// defaultExpanded.includes(node.id),
|
|
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
|
})
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
4
|
import { getBadgeProps, Icon, CoreIcons, 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 { useMemo, isValidElement } from 'react';
|
|
7
8
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
8
9
|
|
|
9
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; }
|
|
@@ -17,16 +18,19 @@ var TreeNode = function TreeNode(_ref) {
|
|
|
17
18
|
defaultLeafIcon = _ref.defaultLeafIcon,
|
|
18
19
|
defaultNodeIcon = _ref.defaultNodeIcon,
|
|
19
20
|
onToggle = _ref.onToggle,
|
|
21
|
+
_onClick = _ref.onClick,
|
|
20
22
|
onSelect = _ref.onSelect,
|
|
21
23
|
onChecked = _ref.onChecked,
|
|
22
|
-
children = _ref.children
|
|
24
|
+
children = _ref.children,
|
|
25
|
+
leafClassName = _ref.leafClassName,
|
|
26
|
+
nodeClassName = _ref.nodeClassName;
|
|
23
27
|
var badgeProps = useMemo(function () {
|
|
24
28
|
return getBadgeProps(node.badge);
|
|
25
29
|
}, [node.badge]);
|
|
26
30
|
var filler = useMemo(function () {
|
|
27
|
-
return node.lines.slice(
|
|
31
|
+
return node.lines.slice(1).map(function (line, idx) {
|
|
28
32
|
return /*#__PURE__*/jsx("div", {
|
|
29
|
-
className: classNames("flex-initial self-stretch flex items-center w-6 relative before:absolute before:top-0 before:start-[7px] before:bg-tint-200 before:min-h-[50%] before:w-[2px] before:scale-x-[.625]", !noLines && line !== 2 && "before:h-full"),
|
|
33
|
+
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-[2px] before:scale-x-[.625]", !noLines && line !== 2 && "before:h-full"),
|
|
30
34
|
children: /*#__PURE__*/jsxs("svg", {
|
|
31
35
|
viewBox: "0 0 24 24",
|
|
32
36
|
className: "fill-tint-200",
|
|
@@ -56,10 +60,17 @@ var TreeNode = function TreeNode(_ref) {
|
|
|
56
60
|
return /*#__PURE__*/jsxs("div", {
|
|
57
61
|
role: "treeitem",
|
|
58
62
|
"aria-selected": node.selected,
|
|
59
|
-
className: "flex flex-nowrap items-center",
|
|
63
|
+
className: classNames("flex flex-nowrap items-center", node.leaf ? leafClassName : nodeClassName),
|
|
60
64
|
"data-testid": node["data-testid"],
|
|
61
65
|
"data-test-value": node["data-test-value"],
|
|
62
|
-
children: [filler,
|
|
66
|
+
children: [filler, node.loading && /*#__PURE__*/jsx("div", {
|
|
67
|
+
className: "flex-initial w-6",
|
|
68
|
+
children: /*#__PURE__*/jsx(Icon, {
|
|
69
|
+
rtlFlip: true,
|
|
70
|
+
icon: CoreIcons.spinner,
|
|
71
|
+
className: "animate-spin text-muted"
|
|
72
|
+
})
|
|
73
|
+
}), !node.leaf && !node.childFiltered && !node.loading && /*#__PURE__*/jsx("div", {
|
|
63
74
|
className: "flex-initial w-6",
|
|
64
75
|
children: /*#__PURE__*/jsx(Icon, {
|
|
65
76
|
rtlFlip: true,
|
|
@@ -80,19 +91,20 @@ var TreeNode = function TreeNode(_ref) {
|
|
|
80
91
|
})
|
|
81
92
|
}), /*#__PURE__*/jsxs("div", {
|
|
82
93
|
role: "none",
|
|
83
|
-
className: classNames("group data-[selected]:bg-primary-100 flex flex-nowrap flex-1 overflow-hidden select-none", node.childSelected && "font-medium", canSelect && "hover:bg-primary-50 cursor-pointer"),
|
|
94
|
+
className: classNames("group/tool data-[selected]:bg-primary-100 flex flex-nowrap flex-1 overflow-hidden select-none", node.childSelected && "font-medium", (canSelect || _onClick) && "hover:bg-primary-50 cursor-pointer"),
|
|
84
95
|
"data-selected": node.selected,
|
|
85
96
|
onClick: function onClick() {
|
|
86
|
-
|
|
97
|
+
_onClick === null || _onClick === void 0 || _onClick(node.id, node.data);
|
|
98
|
+
canSelect ? onSelect(node.id) : canCheck ? onChecked(node.id) : onToggle(node.id);
|
|
87
99
|
},
|
|
88
|
-
children: [nodeIcon && /*#__PURE__*/
|
|
89
|
-
className: "flex-content w-6",
|
|
90
|
-
children: /*#__PURE__*/jsx(Icon, {
|
|
100
|
+
children: [nodeIcon && /*#__PURE__*/jsxs("div", {
|
|
101
|
+
className: "flex-content w-6 self-center leading-none",
|
|
102
|
+
children: [/*#__PURE__*/isValidElement(nodeIcon) && nodeIcon, isString(nodeIcon) && /*#__PURE__*/jsx(Icon, {
|
|
91
103
|
icon: nodeIcon,
|
|
92
104
|
bg: node.iconBg,
|
|
93
105
|
color: node.iconColor,
|
|
94
106
|
rtlFlip: node.rtlFlip
|
|
95
|
-
})
|
|
107
|
+
})]
|
|
96
108
|
}), node.childSelected && !node.open && /*#__PURE__*/jsx("span", {
|
|
97
109
|
className: " flex-content text-primary-500",
|
|
98
110
|
children: "\u2022"
|
|
@@ -100,7 +112,7 @@ var TreeNode = function TreeNode(_ref) {
|
|
|
100
112
|
role: "none",
|
|
101
113
|
className: "flex-1 truncate",
|
|
102
114
|
children: children
|
|
103
|
-
}), node.badge && /*#__PURE__*/jsx(Badge, _objectSpread(_objectSpread({}, badgeProps), {}, {
|
|
115
|
+
}), !isEmpty(node.badge) && /*#__PURE__*/jsx(Badge, _objectSpread(_objectSpread({}, badgeProps), {}, {
|
|
104
116
|
className: classNames("me-1 self-center flex-content bg-opacity-50", badgeProps.className)
|
|
105
117
|
}))]
|
|
106
118
|
})]
|
|
@@ -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", "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,36 @@ 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
|
+
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({
|
|
39
47
|
items: items,
|
|
40
48
|
checked: checked,
|
|
41
49
|
selected: selected,
|
|
42
50
|
matcher: matcher,
|
|
51
|
+
sorter: sorter,
|
|
52
|
+
onLoad: onLoad,
|
|
43
53
|
onSelect: onSelect,
|
|
44
|
-
onChecked: onChecked
|
|
54
|
+
onChecked: onChecked,
|
|
55
|
+
defaultExpanded: defaultExpanded,
|
|
56
|
+
onExpandToggle: onExpandToggle
|
|
45
57
|
}),
|
|
46
58
|
tree = _useTree.tree,
|
|
47
59
|
toggleExpand = _useTree.toggleExpand,
|
|
48
60
|
toggleCheck = _useTree.toggleCheck,
|
|
49
61
|
expandAll = _useTree.expandAll,
|
|
50
62
|
collapseAll = _useTree.collapseAll,
|
|
51
|
-
|
|
63
|
+
_select = _useTree.select,
|
|
52
64
|
expand = _useTree.expand,
|
|
53
65
|
onFilter = _useTree.onFilter;
|
|
54
66
|
var scrollerRef = useRef(null);
|
|
@@ -74,7 +86,7 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
74
86
|
return expand(id);
|
|
75
87
|
},
|
|
76
88
|
select: function select(id) {
|
|
77
|
-
return
|
|
89
|
+
return _select(id);
|
|
78
90
|
}
|
|
79
91
|
};
|
|
80
92
|
}, []);
|
|
@@ -120,6 +132,7 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
120
132
|
height: (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.start
|
|
121
133
|
}
|
|
122
134
|
}), virtualItems.map(function (_ref2) {
|
|
135
|
+
var _makeIcon, _ref3, _ref4;
|
|
123
136
|
var index = _ref2.index,
|
|
124
137
|
key = _ref2.key;
|
|
125
138
|
return /*#__PURE__*/jsx("div", {
|
|
@@ -132,11 +145,14 @@ var TreePanel = function TreePanel(_ref) {
|
|
|
132
145
|
checkable: checkable,
|
|
133
146
|
selectable: selectable,
|
|
134
147
|
defaultLeafIcon: defaultLeafIcon,
|
|
135
|
-
defaultNodeIcon: defaultNodeIcon,
|
|
148
|
+
defaultNodeIcon: (_makeIcon = makeIcon === null || makeIcon === void 0 ? void 0 : makeIcon(tree[index].data)) !== null && _makeIcon !== void 0 ? _makeIcon : defaultNodeIcon,
|
|
136
149
|
onToggle: toggleExpand,
|
|
137
150
|
onChecked: toggleCheck,
|
|
138
|
-
onSelect:
|
|
139
|
-
|
|
151
|
+
onSelect: _select,
|
|
152
|
+
onClick: onClick,
|
|
153
|
+
leafClassName: leafClassName,
|
|
154
|
+
nodeClassName: nodeClassName,
|
|
155
|
+
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
156
|
})
|
|
141
157
|
}, key);
|
|
142
158
|
})]
|