@mui/x-tree-view 8.0.0-alpha.13 → 8.0.0-alpha.14
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/CHANGELOG.md +131 -0
- package/RichTreeView/RichTreeView.js +24 -5
- package/SimpleTreeView/SimpleTreeView.js +8 -6
- package/TreeItem/TreeItem.d.ts +2 -0
- package/TreeItem/TreeItem.js +46 -5
- package/TreeItem/TreeItem.types.d.ts +14 -0
- package/TreeItemIcon/TreeItemIcon.js +2 -0
- package/esm/RichTreeView/RichTreeView.js +24 -5
- package/esm/SimpleTreeView/SimpleTreeView.js +8 -6
- package/esm/TreeItem/TreeItem.d.ts +2 -0
- package/esm/TreeItem/TreeItem.js +45 -4
- package/esm/TreeItem/TreeItem.types.d.ts +14 -0
- package/esm/TreeItemIcon/TreeItemIcon.js +2 -0
- package/esm/hooks/useTreeItemUtils/useTreeItemUtils.d.ts +3 -2
- package/esm/hooks/useTreeItemUtils/useTreeItemUtils.js +21 -9
- package/esm/hooks/useTreeViewApiRef.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/internals/index.d.ts +6 -1
- package/esm/internals/index.js +4 -1
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +35 -12
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +4 -0
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +40 -16
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +157 -16
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +172 -0
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +13 -0
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +49 -0
- package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +2 -2
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +16 -7
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewLazyLoading/index.d.ts +1 -0
- package/esm/internals/plugins/useTreeViewLazyLoading/index.js +1 -0
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +249 -0
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +27 -0
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +83 -0
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.js +1 -0
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +4 -4
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +12 -12
- package/esm/internals/utils/selectors.d.ts +7 -0
- package/esm/internals/utils/selectors.js +9 -0
- package/esm/useTreeItem/useTreeItem.d.ts +1 -1
- package/esm/useTreeItem/useTreeItem.js +13 -0
- package/esm/useTreeItem/useTreeItem.types.d.ts +21 -0
- package/esm/utils/cache.d.ts +38 -0
- package/esm/utils/cache.js +31 -0
- package/esm/utils/index.d.ts +1 -0
- package/esm/utils/index.js +1 -0
- package/hooks/useTreeItemUtils/useTreeItemUtils.d.ts +3 -2
- package/hooks/useTreeItemUtils/useTreeItemUtils.js +22 -10
- package/hooks/useTreeViewApiRef.d.ts +1 -1
- package/index.js +1 -1
- package/internals/index.d.ts +6 -1
- package/internals/index.js +33 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +35 -12
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +4 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +40 -16
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +157 -16
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +172 -0
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +14 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +49 -0
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +1 -1
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +16 -7
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -1
- package/internals/plugins/useTreeViewLazyLoading/index.d.ts +1 -0
- package/internals/plugins/useTreeViewLazyLoading/index.js +5 -0
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +249 -0
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +33 -0
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +83 -0
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.js +5 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +4 -4
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +12 -12
- package/internals/utils/selectors.d.ts +7 -0
- package/internals/utils/selectors.js +9 -0
- package/modern/RichTreeView/RichTreeView.js +24 -5
- package/modern/SimpleTreeView/SimpleTreeView.js +8 -6
- package/modern/TreeItem/TreeItem.d.ts +2 -0
- package/modern/TreeItem/TreeItem.js +45 -4
- package/modern/TreeItem/TreeItem.types.d.ts +14 -0
- package/modern/TreeItemIcon/TreeItemIcon.js +2 -0
- package/modern/hooks/useTreeItemUtils/useTreeItemUtils.d.ts +3 -2
- package/modern/hooks/useTreeItemUtils/useTreeItemUtils.js +21 -9
- package/modern/hooks/useTreeViewApiRef.d.ts +1 -1
- package/modern/index.js +1 -1
- package/modern/internals/index.d.ts +6 -1
- package/modern/internals/index.js +4 -1
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +35 -12
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +4 -0
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +40 -16
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +157 -16
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +172 -0
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +13 -0
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +49 -0
- package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +2 -2
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +16 -7
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -1
- package/modern/internals/plugins/useTreeViewLazyLoading/index.d.ts +1 -0
- package/modern/internals/plugins/useTreeViewLazyLoading/index.js +1 -0
- package/modern/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +249 -0
- package/modern/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +27 -0
- package/modern/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +83 -0
- package/modern/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.js +1 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +4 -4
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +12 -12
- package/modern/internals/utils/selectors.d.ts +7 -0
- package/modern/internals/utils/selectors.js +9 -0
- package/modern/useTreeItem/useTreeItem.d.ts +1 -1
- package/modern/useTreeItem/useTreeItem.js +13 -0
- package/modern/useTreeItem/useTreeItem.types.d.ts +21 -0
- package/modern/utils/cache.d.ts +38 -0
- package/modern/utils/cache.js +31 -0
- package/modern/utils/index.d.ts +1 -0
- package/modern/utils/index.js +1 -0
- package/package.json +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/useTreeItem/useTreeItem.d.ts +1 -1
- package/useTreeItem/useTreeItem.js +13 -0
- package/useTreeItem/useTreeItem.types.d.ts +21 -0
- package/utils/cache.d.ts +38 -0
- package/utils/cache.js +38 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +16 -0
|
@@ -8,12 +8,24 @@ import { selectorItemMeta, selectorItemOrderedChildrenIds, selectorItemModel, se
|
|
|
8
8
|
import { selectorTreeViewId } from "../../corePlugins/useTreeViewId/useTreeViewId.selectors.js";
|
|
9
9
|
import { generateTreeItemIdAttribute } from "../../corePlugins/useTreeViewId/useTreeViewId.utils.js";
|
|
10
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
-
const
|
|
11
|
+
const checkId = (id, item, itemMetaLookup) => {
|
|
12
|
+
if (id == null) {
|
|
13
|
+
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', 'An item was provided without id in the `items` prop:', JSON.stringify(item)].join('\n'));
|
|
14
|
+
}
|
|
15
|
+
if (itemMetaLookup[id] != null) {
|
|
16
|
+
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', `Two items were provided with the same id in the \`items\` prop: "${id}"`].join('\n'));
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const processItemsLookups = ({
|
|
12
20
|
disabledItemsFocusable,
|
|
13
21
|
items,
|
|
14
22
|
isItemDisabled,
|
|
15
23
|
getItemLabel,
|
|
16
|
-
getItemId
|
|
24
|
+
getItemId,
|
|
25
|
+
initialDepth = 0,
|
|
26
|
+
initialParentId = null,
|
|
27
|
+
getChildrenCount,
|
|
28
|
+
ignoreChildren = false
|
|
17
29
|
}) => {
|
|
18
30
|
const itemMetaLookup = {};
|
|
19
31
|
const itemModelLookup = {};
|
|
@@ -22,12 +34,7 @@ const updateItemsState = ({
|
|
|
22
34
|
};
|
|
23
35
|
const processItem = (item, depth, parentId) => {
|
|
24
36
|
const id = getItemId ? getItemId(item) : item.id;
|
|
25
|
-
|
|
26
|
-
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', 'An item was provided without id in the `items` prop:', JSON.stringify(item)].join('\n'));
|
|
27
|
-
}
|
|
28
|
-
if (itemMetaLookup[id] != null) {
|
|
29
|
-
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', `Two items were provided with the same id in the \`items\` prop: "${id}"`].join('\n'));
|
|
30
|
-
}
|
|
37
|
+
checkId(id, item, itemMetaLookup);
|
|
31
38
|
const label = getItemLabel ? getItemLabel(item) : item.label;
|
|
32
39
|
if (label == null) {
|
|
33
40
|
throw new Error(['MUI X: The Tree View component requires all items to have a `label` property.', 'Alternatively, you can use the `getItemLabel` prop to specify a custom label for each item.', 'An item was provided without label in the `items` prop:', JSON.stringify(item)].join('\n'));
|
|
@@ -37,7 +44,7 @@ const updateItemsState = ({
|
|
|
37
44
|
label,
|
|
38
45
|
parentId,
|
|
39
46
|
idAttribute: undefined,
|
|
40
|
-
expandable: !!item.children?.length,
|
|
47
|
+
expandable: getChildrenCount ? getChildrenCount(item) > 0 : !!item.children?.length,
|
|
41
48
|
disabled: isItemDisabled ? isItemDisabled(item) : false,
|
|
42
49
|
depth
|
|
43
50
|
};
|
|
@@ -47,9 +54,13 @@ const updateItemsState = ({
|
|
|
47
54
|
itemOrderedChildrenIdsLookup[parentIdWithDefault] = [];
|
|
48
55
|
}
|
|
49
56
|
itemOrderedChildrenIdsLookup[parentIdWithDefault].push(id);
|
|
50
|
-
|
|
57
|
+
|
|
58
|
+
// if lazy loading is enabled, we don't want to process children passed through the `items` prop
|
|
59
|
+
if (!ignoreChildren) {
|
|
60
|
+
item.children?.forEach(child => processItem(child, depth + 1, id));
|
|
61
|
+
}
|
|
51
62
|
};
|
|
52
|
-
items
|
|
63
|
+
items?.forEach(item => processItem(item, initialDepth, initialParentId));
|
|
53
64
|
const itemChildrenIndexesLookup = {};
|
|
54
65
|
Object.keys(itemOrderedChildrenIdsLookup).forEach(parentId => {
|
|
55
66
|
itemChildrenIndexesLookup[parentId] = buildSiblingIndexes(itemOrderedChildrenIdsLookup[parentId]);
|
|
@@ -68,6 +79,43 @@ export const useTreeViewItems = ({
|
|
|
68
79
|
store
|
|
69
80
|
}) => {
|
|
70
81
|
const getItem = React.useCallback(itemId => selectorItemModel(store.value, itemId), [store]);
|
|
82
|
+
const getParentId = React.useCallback(itemId => {
|
|
83
|
+
const itemMeta = selectorItemMeta(store.value, itemId);
|
|
84
|
+
return itemMeta?.parentId || null;
|
|
85
|
+
}, [store]);
|
|
86
|
+
const setTreeViewLoading = useEventCallback(isLoading => {
|
|
87
|
+
store.update(prevState => _extends({}, prevState, {
|
|
88
|
+
items: _extends({}, prevState.items, {
|
|
89
|
+
loading: isLoading
|
|
90
|
+
})
|
|
91
|
+
}));
|
|
92
|
+
});
|
|
93
|
+
const setTreeViewError = useEventCallback(error => {
|
|
94
|
+
store.update(prevState => _extends({}, prevState, {
|
|
95
|
+
items: _extends({}, prevState.items, {
|
|
96
|
+
error
|
|
97
|
+
})
|
|
98
|
+
}));
|
|
99
|
+
});
|
|
100
|
+
const setIsItemDisabled = useEventCallback(({
|
|
101
|
+
itemId,
|
|
102
|
+
shouldBeDisabled
|
|
103
|
+
}) => {
|
|
104
|
+
store.update(prevState => {
|
|
105
|
+
if (!prevState.items.itemMetaLookup[itemId]) {
|
|
106
|
+
return prevState;
|
|
107
|
+
}
|
|
108
|
+
const itemMetaLookup = _extends({}, prevState.items.itemMetaLookup);
|
|
109
|
+
itemMetaLookup[itemId] = _extends({}, itemMetaLookup[itemId], {
|
|
110
|
+
disabled: shouldBeDisabled ?? !itemMetaLookup[itemId].disabled
|
|
111
|
+
});
|
|
112
|
+
return _extends({}, prevState, {
|
|
113
|
+
items: _extends({}, prevState.items, {
|
|
114
|
+
itemMetaLookup
|
|
115
|
+
})
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
});
|
|
71
119
|
const getItemTree = React.useCallback(() => {
|
|
72
120
|
const getItemFromItemId = itemId => {
|
|
73
121
|
const item = selectorItemModel(store.value, itemId);
|
|
@@ -99,12 +147,96 @@ export const useTreeViewItems = ({
|
|
|
99
147
|
areItemUpdatesPreventedRef.current = true;
|
|
100
148
|
}, []);
|
|
101
149
|
const areItemUpdatesPrevented = React.useCallback(() => areItemUpdatesPreventedRef.current, []);
|
|
150
|
+
const addItems = ({
|
|
151
|
+
items,
|
|
152
|
+
parentId,
|
|
153
|
+
depth,
|
|
154
|
+
getChildrenCount
|
|
155
|
+
}) => {
|
|
156
|
+
if (items) {
|
|
157
|
+
const newState = processItemsLookups({
|
|
158
|
+
disabledItemsFocusable: params.disabledItemsFocusable,
|
|
159
|
+
items,
|
|
160
|
+
isItemDisabled: params.isItemDisabled,
|
|
161
|
+
getItemId: params.getItemId,
|
|
162
|
+
getItemLabel: params.getItemLabel,
|
|
163
|
+
getChildrenCount,
|
|
164
|
+
initialDepth: depth,
|
|
165
|
+
initialParentId: parentId,
|
|
166
|
+
ignoreChildren: true
|
|
167
|
+
});
|
|
168
|
+
store.update(prevState => {
|
|
169
|
+
let newItems;
|
|
170
|
+
if (parentId) {
|
|
171
|
+
newItems = {
|
|
172
|
+
itemModelLookup: _extends({}, prevState.items.itemModelLookup, newState.itemModelLookup),
|
|
173
|
+
itemMetaLookup: _extends({}, prevState.items.itemMetaLookup, newState.itemMetaLookup),
|
|
174
|
+
itemOrderedChildrenIdsLookup: _extends({}, newState.itemOrderedChildrenIdsLookup, prevState.items.itemOrderedChildrenIdsLookup),
|
|
175
|
+
itemChildrenIndexesLookup: _extends({}, newState.itemChildrenIndexesLookup, prevState.items.itemChildrenIndexesLookup)
|
|
176
|
+
};
|
|
177
|
+
} else {
|
|
178
|
+
newItems = {
|
|
179
|
+
itemModelLookup: newState.itemModelLookup,
|
|
180
|
+
itemMetaLookup: newState.itemMetaLookup,
|
|
181
|
+
itemOrderedChildrenIdsLookup: newState.itemOrderedChildrenIdsLookup,
|
|
182
|
+
itemChildrenIndexesLookup: newState.itemChildrenIndexesLookup
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
Object.values(prevState.items.itemMetaLookup).forEach(item => {
|
|
186
|
+
if (!newState.itemMetaLookup[item.id]) {
|
|
187
|
+
publishTreeViewEvent(instance, 'removeItem', {
|
|
188
|
+
id: item.id
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
return _extends({}, prevState, {
|
|
193
|
+
items: _extends({}, prevState.items, newItems)
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
const removeChildren = parentId => {
|
|
199
|
+
store.update(prevState => {
|
|
200
|
+
if (!parentId) {
|
|
201
|
+
return _extends({}, prevState, {
|
|
202
|
+
items: _extends({}, prevState.items, {
|
|
203
|
+
itemMetaLookup: {},
|
|
204
|
+
itemOrderedChildrenIdsLookup: {},
|
|
205
|
+
itemChildrenIndexesLookup: {}
|
|
206
|
+
})
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
const newMetaMap = Object.keys(prevState.items.itemMetaLookup).reduce((acc, key) => {
|
|
210
|
+
const item = prevState.items.itemMetaLookup[key];
|
|
211
|
+
if (item.parentId === parentId) {
|
|
212
|
+
publishTreeViewEvent(instance, 'removeItem', {
|
|
213
|
+
id: item.id
|
|
214
|
+
});
|
|
215
|
+
return acc;
|
|
216
|
+
}
|
|
217
|
+
return _extends({}, acc, {
|
|
218
|
+
[item.id]: item
|
|
219
|
+
});
|
|
220
|
+
}, {});
|
|
221
|
+
const newItemOrderedChildrenIdsLookup = prevState.items.itemOrderedChildrenIdsLookup;
|
|
222
|
+
const newItemChildrenIndexesLookup = prevState.items.itemChildrenIndexesLookup;
|
|
223
|
+
delete newItemChildrenIndexesLookup[parentId];
|
|
224
|
+
delete newItemOrderedChildrenIdsLookup[parentId];
|
|
225
|
+
return _extends({}, prevState, {
|
|
226
|
+
items: _extends({}, prevState.items, {
|
|
227
|
+
itemMetaLookup: newMetaMap,
|
|
228
|
+
itemOrderedChildrenIdsLookup: newItemOrderedChildrenIdsLookup,
|
|
229
|
+
itemChildrenIndexesLookup: newItemChildrenIndexesLookup
|
|
230
|
+
})
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
};
|
|
102
234
|
React.useEffect(() => {
|
|
103
235
|
if (instance.areItemUpdatesPrevented()) {
|
|
104
236
|
return;
|
|
105
237
|
}
|
|
106
238
|
store.update(prevState => {
|
|
107
|
-
const newState =
|
|
239
|
+
const newState = processItemsLookups({
|
|
108
240
|
disabledItemsFocusable: params.disabledItemsFocusable,
|
|
109
241
|
items: params.items,
|
|
110
242
|
isItemDisabled: params.isItemDisabled,
|
|
@@ -119,7 +251,7 @@ export const useTreeViewItems = ({
|
|
|
119
251
|
}
|
|
120
252
|
});
|
|
121
253
|
return _extends({}, prevState, {
|
|
122
|
-
items: newState
|
|
254
|
+
items: _extends({}, prevState.items, newState)
|
|
123
255
|
});
|
|
124
256
|
});
|
|
125
257
|
}, [instance, store, params.items, params.disabledItemsFocusable, params.isItemDisabled, params.getItemId, params.getItemLabel]);
|
|
@@ -145,23 +277,32 @@ export const useTreeViewItems = ({
|
|
|
145
277
|
getItem,
|
|
146
278
|
getItemDOMElement,
|
|
147
279
|
getItemTree,
|
|
148
|
-
getItemOrderedChildrenIds
|
|
280
|
+
getItemOrderedChildrenIds,
|
|
281
|
+
setIsItemDisabled,
|
|
282
|
+
getParentId
|
|
149
283
|
},
|
|
150
284
|
instance: {
|
|
151
285
|
getItemDOMElement,
|
|
152
286
|
preventItemUpdates,
|
|
153
|
-
areItemUpdatesPrevented
|
|
287
|
+
areItemUpdatesPrevented,
|
|
288
|
+
addItems,
|
|
289
|
+
setTreeViewLoading,
|
|
290
|
+
setTreeViewError,
|
|
291
|
+
removeChildren
|
|
154
292
|
},
|
|
155
293
|
contextValue: pluginContextValue
|
|
156
294
|
};
|
|
157
295
|
};
|
|
158
296
|
useTreeViewItems.getInitialState = params => ({
|
|
159
|
-
items:
|
|
297
|
+
items: _extends({}, processItemsLookups({
|
|
160
298
|
disabledItemsFocusable: params.disabledItemsFocusable,
|
|
161
299
|
items: params.items,
|
|
162
300
|
isItemDisabled: params.isItemDisabled,
|
|
163
301
|
getItemId: params.getItemId,
|
|
164
302
|
getItemLabel: params.getItemLabel
|
|
303
|
+
}), {
|
|
304
|
+
loading: false,
|
|
305
|
+
error: null
|
|
165
306
|
})
|
|
166
307
|
});
|
|
167
308
|
useTreeViewItems.getDefaultizedParams = ({
|
|
@@ -1,6 +1,134 @@
|
|
|
1
1
|
import { TreeViewItemMeta } from "../../models/index.js";
|
|
2
2
|
import { TreeViewRootSelector } from "../../utils/selectors.js";
|
|
3
3
|
import { UseTreeViewItemsSignature } from "./useTreeViewItems.types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Get the loading state for the Tree View.
|
|
6
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
7
|
+
* @returns {boolean} The loading state for the Tree View.
|
|
8
|
+
*/
|
|
9
|
+
export declare const selectorIsTreeViewLoading: ((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types").UseTreeViewIdState & import("./useTreeViewItems.types").UseTreeViewItemsState<import("../../..").TreeViewDefaultItemModelProperties> & Partial<{}> & {
|
|
10
|
+
cacheKey: import("../../models").TreeViewStateCacheKey;
|
|
11
|
+
}) => boolean) & {
|
|
12
|
+
clearCache: () => void;
|
|
13
|
+
resultsCount: () => number;
|
|
14
|
+
resetResultsCount: () => void;
|
|
15
|
+
} & {
|
|
16
|
+
resultFunc: (resultFuncArgs_0: {
|
|
17
|
+
disabledItemsFocusable: boolean;
|
|
18
|
+
itemModelLookup: {
|
|
19
|
+
[itemId: string]: import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>;
|
|
20
|
+
};
|
|
21
|
+
itemMetaLookup: {
|
|
22
|
+
[itemId: string]: TreeViewItemMeta;
|
|
23
|
+
};
|
|
24
|
+
itemOrderedChildrenIdsLookup: {
|
|
25
|
+
[parentItemId: string]: string[];
|
|
26
|
+
};
|
|
27
|
+
itemChildrenIndexesLookup: {
|
|
28
|
+
[parentItemId: string]: {
|
|
29
|
+
[itemId: string]: number;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
loading: boolean;
|
|
33
|
+
error: Error | null;
|
|
34
|
+
}) => boolean;
|
|
35
|
+
memoizedResultFunc: ((resultFuncArgs_0: {
|
|
36
|
+
disabledItemsFocusable: boolean;
|
|
37
|
+
itemModelLookup: {
|
|
38
|
+
[itemId: string]: import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>;
|
|
39
|
+
};
|
|
40
|
+
itemMetaLookup: {
|
|
41
|
+
[itemId: string]: TreeViewItemMeta;
|
|
42
|
+
};
|
|
43
|
+
itemOrderedChildrenIdsLookup: {
|
|
44
|
+
[parentItemId: string]: string[];
|
|
45
|
+
};
|
|
46
|
+
itemChildrenIndexesLookup: {
|
|
47
|
+
[parentItemId: string]: {
|
|
48
|
+
[itemId: string]: number;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
loading: boolean;
|
|
52
|
+
error: Error | null;
|
|
53
|
+
}) => boolean) & {
|
|
54
|
+
clearCache: () => void;
|
|
55
|
+
resultsCount: () => number;
|
|
56
|
+
resetResultsCount: () => void;
|
|
57
|
+
};
|
|
58
|
+
lastResult: () => boolean;
|
|
59
|
+
dependencies: [TreeViewRootSelector<UseTreeViewItemsSignature>];
|
|
60
|
+
recomputations: () => number;
|
|
61
|
+
resetRecomputations: () => void;
|
|
62
|
+
dependencyRecomputations: () => number;
|
|
63
|
+
resetDependencyRecomputations: () => void;
|
|
64
|
+
} & {
|
|
65
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
66
|
+
memoize: typeof import("reselect").weakMapMemoize;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Get the error state for the Tree View.
|
|
70
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
71
|
+
* @returns {boolean} The error state for the Tree View.
|
|
72
|
+
*/
|
|
73
|
+
export declare const selectorGetTreeViewError: ((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types").UseTreeViewIdState & import("./useTreeViewItems.types").UseTreeViewItemsState<import("../../..").TreeViewDefaultItemModelProperties> & Partial<{}> & {
|
|
74
|
+
cacheKey: import("../../models").TreeViewStateCacheKey;
|
|
75
|
+
}) => Error | null) & {
|
|
76
|
+
clearCache: () => void;
|
|
77
|
+
resultsCount: () => number;
|
|
78
|
+
resetResultsCount: () => void;
|
|
79
|
+
} & {
|
|
80
|
+
resultFunc: (resultFuncArgs_0: {
|
|
81
|
+
disabledItemsFocusable: boolean;
|
|
82
|
+
itemModelLookup: {
|
|
83
|
+
[itemId: string]: import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>;
|
|
84
|
+
};
|
|
85
|
+
itemMetaLookup: {
|
|
86
|
+
[itemId: string]: TreeViewItemMeta;
|
|
87
|
+
};
|
|
88
|
+
itemOrderedChildrenIdsLookup: {
|
|
89
|
+
[parentItemId: string]: string[];
|
|
90
|
+
};
|
|
91
|
+
itemChildrenIndexesLookup: {
|
|
92
|
+
[parentItemId: string]: {
|
|
93
|
+
[itemId: string]: number;
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
loading: boolean;
|
|
97
|
+
error: Error | null;
|
|
98
|
+
}) => Error | null;
|
|
99
|
+
memoizedResultFunc: ((resultFuncArgs_0: {
|
|
100
|
+
disabledItemsFocusable: boolean;
|
|
101
|
+
itemModelLookup: {
|
|
102
|
+
[itemId: string]: import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>;
|
|
103
|
+
};
|
|
104
|
+
itemMetaLookup: {
|
|
105
|
+
[itemId: string]: TreeViewItemMeta;
|
|
106
|
+
};
|
|
107
|
+
itemOrderedChildrenIdsLookup: {
|
|
108
|
+
[parentItemId: string]: string[];
|
|
109
|
+
};
|
|
110
|
+
itemChildrenIndexesLookup: {
|
|
111
|
+
[parentItemId: string]: {
|
|
112
|
+
[itemId: string]: number;
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
loading: boolean;
|
|
116
|
+
error: Error | null;
|
|
117
|
+
}) => Error | null) & {
|
|
118
|
+
clearCache: () => void;
|
|
119
|
+
resultsCount: () => number;
|
|
120
|
+
resetResultsCount: () => void;
|
|
121
|
+
};
|
|
122
|
+
lastResult: () => Error | null;
|
|
123
|
+
dependencies: [TreeViewRootSelector<UseTreeViewItemsSignature>];
|
|
124
|
+
recomputations: () => number;
|
|
125
|
+
resetRecomputations: () => void;
|
|
126
|
+
dependencyRecomputations: () => number;
|
|
127
|
+
resetDependencyRecomputations: () => void;
|
|
128
|
+
} & {
|
|
129
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
130
|
+
memoize: typeof import("reselect").weakMapMemoize;
|
|
131
|
+
};
|
|
4
132
|
/**
|
|
5
133
|
* Get the meta-information of all items.
|
|
6
134
|
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
@@ -31,6 +159,8 @@ export declare const selectorItemMetaLookup: ((state: import("../../corePlugins/
|
|
|
31
159
|
[itemId: string]: number;
|
|
32
160
|
};
|
|
33
161
|
};
|
|
162
|
+
loading: boolean;
|
|
163
|
+
error: Error | null;
|
|
34
164
|
}) => {
|
|
35
165
|
[itemId: string]: TreeViewItemMeta;
|
|
36
166
|
};
|
|
@@ -50,6 +180,8 @@ export declare const selectorItemMetaLookup: ((state: import("../../corePlugins/
|
|
|
50
180
|
[itemId: string]: number;
|
|
51
181
|
};
|
|
52
182
|
};
|
|
183
|
+
loading: boolean;
|
|
184
|
+
error: Error | null;
|
|
53
185
|
}) => {
|
|
54
186
|
[itemId: string]: TreeViewItemMeta;
|
|
55
187
|
}) & {
|
|
@@ -96,6 +228,8 @@ export declare const selectorItemOrderedChildrenIds: ((state: any, itemId: strin
|
|
|
96
228
|
[itemId: string]: number;
|
|
97
229
|
};
|
|
98
230
|
};
|
|
231
|
+
loading: boolean;
|
|
232
|
+
error: Error | null;
|
|
99
233
|
}, resultFuncArgs_1: string | null) => string[];
|
|
100
234
|
memoizedResultFunc: ((resultFuncArgs_0: {
|
|
101
235
|
disabledItemsFocusable: boolean;
|
|
@@ -113,6 +247,8 @@ export declare const selectorItemOrderedChildrenIds: ((state: any, itemId: strin
|
|
|
113
247
|
[itemId: string]: number;
|
|
114
248
|
};
|
|
115
249
|
};
|
|
250
|
+
loading: boolean;
|
|
251
|
+
error: Error | null;
|
|
116
252
|
}, resultFuncArgs_1: string | null) => string[]) & {
|
|
117
253
|
clearCache: () => void;
|
|
118
254
|
resultsCount: () => number;
|
|
@@ -155,6 +291,8 @@ export declare const selectorItemModel: ((state: any, itemId: string) => import(
|
|
|
155
291
|
[itemId: string]: number;
|
|
156
292
|
};
|
|
157
293
|
};
|
|
294
|
+
loading: boolean;
|
|
295
|
+
error: Error | null;
|
|
158
296
|
}, resultFuncArgs_1: string) => import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>;
|
|
159
297
|
memoizedResultFunc: ((resultFuncArgs_0: {
|
|
160
298
|
disabledItemsFocusable: boolean;
|
|
@@ -172,6 +310,8 @@ export declare const selectorItemModel: ((state: any, itemId: string) => import(
|
|
|
172
310
|
[itemId: string]: number;
|
|
173
311
|
};
|
|
174
312
|
};
|
|
313
|
+
loading: boolean;
|
|
314
|
+
error: Error | null;
|
|
175
315
|
}, resultFuncArgs_1: string) => import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>) & {
|
|
176
316
|
clearCache: () => void;
|
|
177
317
|
resultsCount: () => number;
|
|
@@ -235,6 +375,8 @@ export declare const selectorItemMeta: ((state: any, itemId: string | null) => T
|
|
|
235
375
|
[itemId: string]: number;
|
|
236
376
|
};
|
|
237
377
|
};
|
|
378
|
+
loading: boolean;
|
|
379
|
+
error: Error | null;
|
|
238
380
|
}) => {
|
|
239
381
|
[itemId: string]: TreeViewItemMeta;
|
|
240
382
|
};
|
|
@@ -254,6 +396,8 @@ export declare const selectorItemMeta: ((state: any, itemId: string | null) => T
|
|
|
254
396
|
[itemId: string]: number;
|
|
255
397
|
};
|
|
256
398
|
};
|
|
399
|
+
loading: boolean;
|
|
400
|
+
error: Error | null;
|
|
257
401
|
}) => {
|
|
258
402
|
[itemId: string]: TreeViewItemMeta;
|
|
259
403
|
}) & {
|
|
@@ -328,6 +472,8 @@ export declare const selectorIsItemDisabled: ((state: any, itemId: string) => bo
|
|
|
328
472
|
[itemId: string]: number;
|
|
329
473
|
};
|
|
330
474
|
};
|
|
475
|
+
loading: boolean;
|
|
476
|
+
error: Error | null;
|
|
331
477
|
}) => {
|
|
332
478
|
[itemId: string]: TreeViewItemMeta;
|
|
333
479
|
};
|
|
@@ -347,6 +493,8 @@ export declare const selectorIsItemDisabled: ((state: any, itemId: string) => bo
|
|
|
347
493
|
[itemId: string]: number;
|
|
348
494
|
};
|
|
349
495
|
};
|
|
496
|
+
loading: boolean;
|
|
497
|
+
error: Error | null;
|
|
350
498
|
}) => {
|
|
351
499
|
[itemId: string]: TreeViewItemMeta;
|
|
352
500
|
}) & {
|
|
@@ -401,6 +549,8 @@ export declare const selectorItemIndex: ((state: any, itemId: string | null) =>
|
|
|
401
549
|
[itemId: string]: number;
|
|
402
550
|
};
|
|
403
551
|
};
|
|
552
|
+
loading: boolean;
|
|
553
|
+
error: Error | null;
|
|
404
554
|
}, resultFuncArgs_1: TreeViewItemMeta | null) => number;
|
|
405
555
|
memoizedResultFunc: ((resultFuncArgs_0: {
|
|
406
556
|
disabledItemsFocusable: boolean;
|
|
@@ -418,6 +568,8 @@ export declare const selectorItemIndex: ((state: any, itemId: string | null) =>
|
|
|
418
568
|
[itemId: string]: number;
|
|
419
569
|
};
|
|
420
570
|
};
|
|
571
|
+
loading: boolean;
|
|
572
|
+
error: Error | null;
|
|
421
573
|
}, resultFuncArgs_1: TreeViewItemMeta | null) => number) & {
|
|
422
574
|
clearCache: () => void;
|
|
423
575
|
resultsCount: () => number;
|
|
@@ -465,6 +617,8 @@ export declare const selectorItemIndex: ((state: any, itemId: string | null) =>
|
|
|
465
617
|
[itemId: string]: number;
|
|
466
618
|
};
|
|
467
619
|
};
|
|
620
|
+
loading: boolean;
|
|
621
|
+
error: Error | null;
|
|
468
622
|
}) => {
|
|
469
623
|
[itemId: string]: TreeViewItemMeta;
|
|
470
624
|
};
|
|
@@ -484,6 +638,8 @@ export declare const selectorItemIndex: ((state: any, itemId: string | null) =>
|
|
|
484
638
|
[itemId: string]: number;
|
|
485
639
|
};
|
|
486
640
|
};
|
|
641
|
+
loading: boolean;
|
|
642
|
+
error: Error | null;
|
|
487
643
|
}) => {
|
|
488
644
|
[itemId: string]: TreeViewItemMeta;
|
|
489
645
|
}) & {
|
|
@@ -578,6 +734,8 @@ export declare const selectorItemParentId: ((state: any, itemId: string | null)
|
|
|
578
734
|
[itemId: string]: number;
|
|
579
735
|
};
|
|
580
736
|
};
|
|
737
|
+
loading: boolean;
|
|
738
|
+
error: Error | null;
|
|
581
739
|
}) => {
|
|
582
740
|
[itemId: string]: TreeViewItemMeta;
|
|
583
741
|
};
|
|
@@ -597,6 +755,8 @@ export declare const selectorItemParentId: ((state: any, itemId: string | null)
|
|
|
597
755
|
[itemId: string]: number;
|
|
598
756
|
};
|
|
599
757
|
};
|
|
758
|
+
loading: boolean;
|
|
759
|
+
error: Error | null;
|
|
600
760
|
}) => {
|
|
601
761
|
[itemId: string]: TreeViewItemMeta;
|
|
602
762
|
}) & {
|
|
@@ -691,6 +851,8 @@ export declare const selectorItemDepth: ((state: any, itemId: string | null) =>
|
|
|
691
851
|
[itemId: string]: number;
|
|
692
852
|
};
|
|
693
853
|
};
|
|
854
|
+
loading: boolean;
|
|
855
|
+
error: Error | null;
|
|
694
856
|
}) => {
|
|
695
857
|
[itemId: string]: TreeViewItemMeta;
|
|
696
858
|
};
|
|
@@ -710,6 +872,8 @@ export declare const selectorItemDepth: ((state: any, itemId: string | null) =>
|
|
|
710
872
|
[itemId: string]: number;
|
|
711
873
|
};
|
|
712
874
|
};
|
|
875
|
+
loading: boolean;
|
|
876
|
+
error: Error | null;
|
|
713
877
|
}) => {
|
|
714
878
|
[itemId: string]: TreeViewItemMeta;
|
|
715
879
|
}) & {
|
|
@@ -766,6 +930,8 @@ export declare const selectorCanItemBeFocused: ((state: any, itemId: string) =>
|
|
|
766
930
|
[itemId: string]: number;
|
|
767
931
|
};
|
|
768
932
|
};
|
|
933
|
+
loading: boolean;
|
|
934
|
+
error: Error | null;
|
|
769
935
|
}, resultFuncArgs_1: boolean) => boolean;
|
|
770
936
|
memoizedResultFunc: ((resultFuncArgs_0: {
|
|
771
937
|
disabledItemsFocusable: boolean;
|
|
@@ -783,6 +949,8 @@ export declare const selectorCanItemBeFocused: ((state: any, itemId: string) =>
|
|
|
783
949
|
[itemId: string]: number;
|
|
784
950
|
};
|
|
785
951
|
};
|
|
952
|
+
loading: boolean;
|
|
953
|
+
error: Error | null;
|
|
786
954
|
}, resultFuncArgs_1: boolean) => boolean) & {
|
|
787
955
|
clearCache: () => void;
|
|
788
956
|
resultsCount: () => number;
|
|
@@ -830,6 +998,8 @@ export declare const selectorCanItemBeFocused: ((state: any, itemId: string) =>
|
|
|
830
998
|
[itemId: string]: number;
|
|
831
999
|
};
|
|
832
1000
|
};
|
|
1001
|
+
loading: boolean;
|
|
1002
|
+
error: Error | null;
|
|
833
1003
|
}) => {
|
|
834
1004
|
[itemId: string]: TreeViewItemMeta;
|
|
835
1005
|
};
|
|
@@ -849,6 +1019,8 @@ export declare const selectorCanItemBeFocused: ((state: any, itemId: string) =>
|
|
|
849
1019
|
[itemId: string]: number;
|
|
850
1020
|
};
|
|
851
1021
|
};
|
|
1022
|
+
loading: boolean;
|
|
1023
|
+
error: Error | null;
|
|
852
1024
|
}) => {
|
|
853
1025
|
[itemId: string]: TreeViewItemMeta;
|
|
854
1026
|
}) & {
|
|
@@ -2,6 +2,19 @@ import { createSelector } from "../../utils/selectors.js";
|
|
|
2
2
|
import { TREE_VIEW_ROOT_PARENT_ID } from "./useTreeViewItems.utils.js";
|
|
3
3
|
const selectorTreeViewItemsState = state => state.items;
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Get the loading state for the Tree View.
|
|
7
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
8
|
+
* @returns {boolean} The loading state for the Tree View.
|
|
9
|
+
*/
|
|
10
|
+
export const selectorIsTreeViewLoading = createSelector(selectorTreeViewItemsState, items => items.loading);
|
|
11
|
+
/**
|
|
12
|
+
* Get the error state for the Tree View.
|
|
13
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
14
|
+
* @returns {boolean} The error state for the Tree View.
|
|
15
|
+
*/
|
|
16
|
+
export const selectorGetTreeViewError = createSelector(selectorTreeViewItemsState, items => items.error);
|
|
17
|
+
|
|
5
18
|
/**
|
|
6
19
|
* Get the meta-information of all items.
|
|
7
20
|
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
@@ -2,6 +2,12 @@ import * as React from 'react';
|
|
|
2
2
|
import { DefaultizedProps } from '@mui/x-internals/types';
|
|
3
3
|
import { TreeViewItemMeta, TreeViewPluginSignature } from "../../models/index.js";
|
|
4
4
|
import { TreeViewBaseItem, TreeViewDefaultItemModelProperties, TreeViewItemId } from "../../../models/index.js";
|
|
5
|
+
export type AddItemsParameters<R> = {
|
|
6
|
+
items: readonly R[];
|
|
7
|
+
parentId?: TreeViewItemId;
|
|
8
|
+
depth: number;
|
|
9
|
+
getChildrenCount?: (item: R) => number;
|
|
10
|
+
};
|
|
5
11
|
export interface UseTreeViewItemsPublicAPI<R extends {}> {
|
|
6
12
|
/**
|
|
7
13
|
* Get the item with the given id.
|
|
@@ -29,6 +35,21 @@ export interface UseTreeViewItemsPublicAPI<R extends {}> {
|
|
|
29
35
|
* @returns {TreeViewBaseItem[]} The items in the tree.
|
|
30
36
|
*/
|
|
31
37
|
getItemTree: () => TreeViewBaseItem[];
|
|
38
|
+
/**
|
|
39
|
+
* Toggle the disabled state of the item with the given id.
|
|
40
|
+
* @param {object} parameters The params of the method.
|
|
41
|
+
* @param {TreeViewItemId } parameters.itemId The id of the item to get the children of.
|
|
42
|
+
* @param {boolean } parameters.shouldBeDisabled true if the item should be disabled.
|
|
43
|
+
*/
|
|
44
|
+
setIsItemDisabled: (parameters: {
|
|
45
|
+
itemId: TreeViewItemId;
|
|
46
|
+
shouldBeDisabled?: boolean;
|
|
47
|
+
}) => void;
|
|
48
|
+
/** * Get the id of the parent item.
|
|
49
|
+
* @param {string} itemId The id of the item to whose parentId we want to retrieve.
|
|
50
|
+
* @returns {TreeViewItemId | null} The id of the parent item.
|
|
51
|
+
*/
|
|
52
|
+
getParentId: (itemId: TreeViewItemId) => TreeViewItemId | null;
|
|
32
53
|
}
|
|
33
54
|
export interface UseTreeViewItemsInstance<R extends {}> extends Pick<UseTreeViewItemsPublicAPI<R>, 'getItemDOMElement'> {
|
|
34
55
|
/**
|
|
@@ -42,6 +63,26 @@ export interface UseTreeViewItemsInstance<R extends {}> extends Pick<UseTreeView
|
|
|
42
63
|
* @returns {boolean} `true` if the updates to the state based on the `items` prop are prevented.
|
|
43
64
|
*/
|
|
44
65
|
areItemUpdatesPrevented: () => boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Add an array of items to the tree.
|
|
68
|
+
* @param {AddItemsParameters<R>} args The items to add to the tree and information about their ancestors.
|
|
69
|
+
*/
|
|
70
|
+
addItems: (args: AddItemsParameters<R>) => void;
|
|
71
|
+
/**
|
|
72
|
+
* Remove the children of an item.
|
|
73
|
+
* @param {TreeViewItemId} parentId The id of the item to remove the children of.
|
|
74
|
+
*/
|
|
75
|
+
removeChildren: (parentId?: TreeViewItemId) => void;
|
|
76
|
+
/**
|
|
77
|
+
* Set the loading state of the tree.
|
|
78
|
+
* @param {boolean} loading True if the tree view is loading.
|
|
79
|
+
*/
|
|
80
|
+
setTreeViewLoading: (loading: boolean) => void;
|
|
81
|
+
/**
|
|
82
|
+
* Set the error state of the tree.
|
|
83
|
+
* @param {Error | null} error The error on the tree view.
|
|
84
|
+
*/
|
|
85
|
+
setTreeViewError: (error: Error | null) => void;
|
|
45
86
|
}
|
|
46
87
|
export interface UseTreeViewItemsParameters<R extends {
|
|
47
88
|
children?: R[];
|
|
@@ -137,6 +178,14 @@ export interface UseTreeViewItemsState<R extends {}> {
|
|
|
137
178
|
[itemId: string]: number;
|
|
138
179
|
};
|
|
139
180
|
};
|
|
181
|
+
/**
|
|
182
|
+
* The loading state of the tree.
|
|
183
|
+
*/
|
|
184
|
+
loading: boolean;
|
|
185
|
+
/**
|
|
186
|
+
* The error state of the tree.
|
|
187
|
+
*/
|
|
188
|
+
error: Error | null;
|
|
140
189
|
};
|
|
141
190
|
}
|
|
142
191
|
interface UseTreeViewItemsContextValue {
|
|
@@ -9,7 +9,7 @@ import { TreeViewChildrenItemContext, TreeViewChildrenItemProvider } from "../..
|
|
|
9
9
|
import { buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID } from "../useTreeViewItems/useTreeViewItems.utils.js";
|
|
10
10
|
import { TreeViewItemDepthContext } from "../../TreeViewItemDepthContext/index.js";
|
|
11
11
|
import { generateTreeItemIdAttribute } from "../../corePlugins/useTreeViewId/useTreeViewId.utils.js";
|
|
12
|
-
import {
|
|
12
|
+
import { itemHasChildren } from "../../../hooks/useTreeItemUtils/useTreeItemUtils.js";
|
|
13
13
|
import { useSelector } from "../../hooks/useSelector.js";
|
|
14
14
|
import { selectorTreeViewId } from "../../corePlugins/useTreeViewId/useTreeViewId.selectors.js";
|
|
15
15
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -115,7 +115,7 @@ const useTreeViewJSXItemsItemPlugin = ({
|
|
|
115
115
|
unregisterChild,
|
|
116
116
|
parentId
|
|
117
117
|
} = parentContext;
|
|
118
|
-
const expandable =
|
|
118
|
+
const expandable = itemHasChildren(children);
|
|
119
119
|
const pluginContentRef = React.useRef(null);
|
|
120
120
|
const handleContentRef = useForkRef(pluginContentRef, contentRef);
|
|
121
121
|
const treeId = useSelector(store, selectorTreeViewId);
|