@mui/x-tree-view 8.11.0 → 8.11.2
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 +169 -0
- package/RichTreeView/RichTreeView.js +16 -15
- package/RichTreeView/RichTreeView.types.d.ts +3 -2
- package/SimpleTreeView/SimpleTreeView.js +10 -9
- package/SimpleTreeView/SimpleTreeView.types.d.ts +3 -2
- package/TreeItem/TreeItem.d.ts +1 -1
- package/TreeItemProvider/TreeItemProvider.js +3 -3
- package/esm/RichTreeView/RichTreeView.js +16 -15
- package/esm/RichTreeView/RichTreeView.types.d.ts +3 -2
- package/esm/SimpleTreeView/SimpleTreeView.js +10 -9
- package/esm/SimpleTreeView/SimpleTreeView.types.d.ts +3 -2
- package/esm/TreeItem/TreeItem.d.ts +1 -1
- package/esm/TreeItemProvider/TreeItemProvider.js +3 -3
- package/esm/hooks/index.d.ts +2 -1
- package/esm/hooks/index.js +2 -1
- package/esm/hooks/useApplyPropagationToSelectedItemsOnMount.d.ts +53 -0
- package/esm/hooks/useApplyPropagationToSelectedItemsOnMount.js +80 -0
- package/esm/hooks/useTreeItemModel.js +3 -3
- package/esm/hooks/useTreeItemUtils/useTreeItemUtils.js +24 -25
- package/esm/index.js +1 -1
- package/esm/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +2 -2
- package/esm/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
- package/esm/internals/components/RichTreeViewItems.js +5 -5
- package/esm/internals/corePlugins/useTreeViewId/index.d.ts +2 -1
- package/esm/internals/corePlugins/useTreeViewId/index.js +2 -1
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -13
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +8 -34
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -9
- package/esm/internals/index.d.ts +6 -14
- package/esm/internals/index.js +6 -13
- package/esm/internals/models/plugin.d.ts +2 -3
- package/esm/internals/models/treeView.d.ts +4 -6
- package/esm/internals/plugins/useTreeViewExpansion/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewExpansion/index.js +2 -1
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -30
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +24 -316
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +27 -38
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -1
- package/esm/internals/plugins/useTreeViewFocus/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewFocus/index.js +2 -1
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +17 -21
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +20 -628
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +25 -37
- package/esm/internals/plugins/useTreeViewItems/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewItems/index.js +2 -1
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +82 -102
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +52 -1142
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +58 -98
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +1 -1
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.js +1 -1
- package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +32 -42
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +22 -22
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -0
- package/esm/internals/plugins/useTreeViewLabel/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewLabel/index.js +2 -1
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +4 -4
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +17 -25
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -100
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +24 -34
- package/esm/internals/plugins/useTreeViewLazyLoading/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewLazyLoading/index.js +1 -1
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +18 -245
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +15 -27
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +20 -6
- package/esm/internals/plugins/useTreeViewSelection/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewSelection/index.js +2 -1
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +25 -38
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +30 -34
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +38 -517
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +46 -71
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +1 -0
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +10 -10
- package/esm/internals/useTreeView/useTreeView.d.ts +1 -1
- package/esm/internals/useTreeView/useTreeView.js +11 -18
- package/esm/internals/useTreeView/useTreeView.types.d.ts +1 -1
- package/esm/internals/useTreeView/useTreeViewBuildContext.d.ts +2 -3
- package/esm/internals/utils/tree.js +33 -33
- package/esm/useTreeItem/useTreeItem.js +14 -14
- package/esm/useTreeItem/useTreeItem.types.d.ts +2 -1
- package/hooks/index.d.ts +2 -1
- package/hooks/index.js +8 -1
- package/hooks/useApplyPropagationToSelectedItemsOnMount.d.ts +53 -0
- package/hooks/useApplyPropagationToSelectedItemsOnMount.js +87 -0
- package/hooks/useTreeItemModel.js +3 -3
- package/hooks/useTreeItemUtils/useTreeItemUtils.js +18 -19
- package/index.js +1 -1
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +1 -1
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
- package/internals/components/RichTreeViewItems.js +5 -5
- package/internals/corePlugins/useTreeViewId/index.d.ts +2 -1
- package/internals/corePlugins/useTreeViewId/index.js +8 -1
- package/internals/corePlugins/useTreeViewId/useTreeViewId.js +9 -12
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +8 -34
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +10 -10
- package/internals/index.d.ts +6 -14
- package/internals/index.js +12 -73
- package/internals/models/plugin.d.ts +2 -3
- package/internals/models/treeView.d.ts +4 -6
- package/internals/plugins/useTreeViewExpansion/index.d.ts +2 -1
- package/internals/plugins/useTreeViewExpansion/index.js +8 -1
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -28
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +24 -316
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +27 -38
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -1
- package/internals/plugins/useTreeViewFocus/index.d.ts +2 -1
- package/internals/plugins/useTreeViewFocus/index.js +8 -1
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +14 -18
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +20 -628
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +23 -35
- package/internals/plugins/useTreeViewItems/index.d.ts +2 -1
- package/internals/plugins/useTreeViewItems/index.js +8 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +81 -101
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +52 -1142
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +59 -99
- package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +1 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.js +1 -1
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +32 -42
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +18 -18
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -0
- package/internals/plugins/useTreeViewLabel/index.d.ts +2 -1
- package/internals/plugins/useTreeViewLabel/index.js +8 -1
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +3 -3
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -24
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -100
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +24 -34
- package/internals/plugins/useTreeViewLazyLoading/index.d.ts +2 -1
- package/internals/plugins/useTreeViewLazyLoading/index.js +8 -1
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +18 -245
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +16 -28
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +20 -6
- package/internals/plugins/useTreeViewSelection/index.d.ts +2 -1
- package/internals/plugins/useTreeViewSelection/index.js +8 -1
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +23 -37
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +29 -33
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +38 -517
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +46 -71
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +1 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +8 -8
- package/internals/useTreeView/useTreeView.d.ts +1 -1
- package/internals/useTreeView/useTreeView.js +11 -18
- package/internals/useTreeView/useTreeView.types.d.ts +1 -1
- package/internals/useTreeView/useTreeViewBuildContext.d.ts +2 -3
- package/internals/utils/tree.js +31 -31
- package/package.json +13 -14
- package/useTreeItem/useTreeItem.js +14 -14
- package/useTreeItem/useTreeItem.types.d.ts +2 -1
- package/esm/internals/hooks/useSelector.d.ts +0 -4
- package/esm/internals/hooks/useSelector.js +0 -8
- package/esm/internals/utils/TreeViewStore.d.ts +0 -12
- package/esm/internals/utils/TreeViewStore.js +0 -22
- package/esm/internals/utils/selectors.d.ts +0 -21
- package/esm/internals/utils/selectors.js +0 -51
- package/internals/hooks/useSelector.d.ts +0 -4
- package/internals/hooks/useSelector.js +0 -16
- package/internals/utils/TreeViewStore.d.ts +0 -12
- package/internals/utils/TreeViewStore.js +0 -29
- package/internals/utils/selectors.d.ts +0 -21
- package/internals/utils/selectors.js +0 -58
|
@@ -1,18 +1,9 @@
|
|
|
1
|
-
import { createSelector } from
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { createSelector, createSelectorMemoized } from '@mui/x-internals/store';
|
|
2
|
+
import { selectionSelectors } from "../useTreeViewSelection/useTreeViewSelection.selectors.js";
|
|
3
|
+
import { itemsSelectors } from "../useTreeViewItems/useTreeViewItems.selectors.js";
|
|
4
4
|
import { isItemDisabled } from "../useTreeViewItems/useTreeViewItems.utils.js";
|
|
5
|
-
import {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Get the item that should be sequentially focusable (usually with the Tab key).
|
|
10
|
-
* At any point in time, there is a single item that can be sequentially focused in the Tree View.
|
|
11
|
-
* This item is the first selected item (that is both visible and navigable), if any, or the first navigable item if no item is selected.
|
|
12
|
-
* @param {TreeViewState<[UseTreeViewFocusSignature]>} state The state of the tree view.
|
|
13
|
-
* @returns {TreeViewItemId | null} The id of the item that should be sequentially focusable.
|
|
14
|
-
*/
|
|
15
|
-
export const selectorDefaultFocusableItemId = createSelector([selectorSelectionModelArray, selectorExpandedItemsMap, selectorItemMetaLookup, selectorDisabledItemFocusable, state => selectorItemOrderedChildrenIds(state, null)], (selectedItems, expandedItemsMap, itemMetaLookup, disabledItemsFocusable, orderedRootItemIds) => {
|
|
5
|
+
import { expansionSelectors } from "../useTreeViewExpansion/useTreeViewExpansion.selectors.js";
|
|
6
|
+
const defaultFocusableItemIdSelector = createSelectorMemoized(selectionSelectors.selectedItems, expansionSelectors.expandedItemsMap, itemsSelectors.itemMetaLookup, itemsSelectors.disabledItemFocusable, state => itemsSelectors.itemOrderedChildrenIds(state, null), (selectedItems, expandedItemsMap, itemMetaLookup, disabledItemsFocusable, orderedRootItemIds) => {
|
|
16
7
|
const firstSelectedItem = selectedItems.find(itemId => {
|
|
17
8
|
if (!disabledItemsFocusable && isItemDisabled(itemMetaLookup, itemId)) {
|
|
18
9
|
return false;
|
|
@@ -29,26 +20,23 @@ export const selectorDefaultFocusableItemId = createSelector([selectorSelectionM
|
|
|
29
20
|
}
|
|
30
21
|
return null;
|
|
31
22
|
});
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
* @returns {boolean} `true` if the item is focused, `false` otherwise.
|
|
53
|
-
*/
|
|
54
|
-
export const selectorIsItemFocused = createSelector([selectorFocusedItemId, (_, itemId) => itemId], (focusedItemId, itemId) => focusedItemId === itemId);
|
|
23
|
+
export const focusSelectors = {
|
|
24
|
+
/**
|
|
25
|
+
* Gets the item that should be sequentially focusable (usually with the Tab key).
|
|
26
|
+
* At any point in time, there is a single item that can be sequentially focused in the Tree View.
|
|
27
|
+
* This item is the first selected item (that is both visible and navigable), if any, or the first navigable item if no item is selected.
|
|
28
|
+
*/
|
|
29
|
+
defaultFocusableItemId: defaultFocusableItemIdSelector,
|
|
30
|
+
/**
|
|
31
|
+
* Checks whether an item is the default focusable item.
|
|
32
|
+
*/
|
|
33
|
+
isItemTheDefaultFocusableItem: createSelector(defaultFocusableItemIdSelector, (defaultFocusableItemId, itemId) => defaultFocusableItemId === itemId),
|
|
34
|
+
/**
|
|
35
|
+
* Gets the id of the item that is currently focused.
|
|
36
|
+
*/
|
|
37
|
+
focusedItemId: createSelector(state => state.focus.focusedItemId),
|
|
38
|
+
/**
|
|
39
|
+
* Checks whether an item is focused.
|
|
40
|
+
*/
|
|
41
|
+
isItemFocused: createSelector((state, itemId) => state.focus.focusedItemId === itemId)
|
|
42
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { useTreeViewItems } from "./useTreeViewItems.js";
|
|
2
2
|
export type { UseTreeViewItemsSignature, UseTreeViewItemsParameters, UseTreeViewItemsParametersWithDefaults, UseTreeViewItemsState } from "./useTreeViewItems.types.js";
|
|
3
|
-
export { buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID } from "./useTreeViewItems.utils.js";
|
|
3
|
+
export { buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID } from "./useTreeViewItems.utils.js";
|
|
4
|
+
export { itemsSelectors } from "./useTreeViewItems.selectors.js";
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export { useTreeViewItems } from "./useTreeViewItems.js";
|
|
2
|
-
export { buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID } from "./useTreeViewItems.utils.js";
|
|
2
|
+
export { buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID } from "./useTreeViewItems.utils.js";
|
|
3
|
+
export { itemsSelectors } from "./useTreeViewItems.selectors.js";
|
|
@@ -6,8 +6,8 @@ import useEventCallback from '@mui/utils/useEventCallback';
|
|
|
6
6
|
import { publishTreeViewEvent } from "../../utils/publishTreeViewEvent.js";
|
|
7
7
|
import { buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID } from "./useTreeViewItems.utils.js";
|
|
8
8
|
import { TreeViewItemDepthContext } from "../../TreeViewItemDepthContext/index.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { itemsSelectors } from "./useTreeViewItems.selectors.js";
|
|
10
|
+
import { idSelectors } from "../../corePlugins/useTreeViewId/index.js";
|
|
11
11
|
import { generateTreeItemIdAttribute } from "../../corePlugins/useTreeViewId/useTreeViewId.utils.js";
|
|
12
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
13
|
const checkId = (id, item, itemMetaLookup) => {
|
|
@@ -82,65 +82,58 @@ export const useTreeViewItems = ({
|
|
|
82
82
|
params,
|
|
83
83
|
store
|
|
84
84
|
}) => {
|
|
85
|
-
const getItem = React.useCallback(itemId =>
|
|
85
|
+
const getItem = React.useCallback(itemId => itemsSelectors.itemModel(store.state, itemId), [store]);
|
|
86
86
|
const getParentId = React.useCallback(itemId => {
|
|
87
|
-
const itemMeta =
|
|
87
|
+
const itemMeta = itemsSelectors.itemMeta(store.state, itemId);
|
|
88
88
|
return itemMeta?.parentId || null;
|
|
89
89
|
}, [store]);
|
|
90
90
|
const setTreeViewLoading = useEventCallback(isLoading => {
|
|
91
|
-
store.
|
|
92
|
-
|
|
93
|
-
loading: isLoading
|
|
94
|
-
})
|
|
91
|
+
store.set('items', _extends({}, store.state.items, {
|
|
92
|
+
loading: isLoading
|
|
95
93
|
}));
|
|
96
94
|
});
|
|
97
95
|
const setTreeViewError = useEventCallback(error => {
|
|
98
|
-
store.
|
|
99
|
-
|
|
100
|
-
error
|
|
101
|
-
})
|
|
96
|
+
store.set('items', _extends({}, store.state.items, {
|
|
97
|
+
error
|
|
102
98
|
}));
|
|
103
99
|
});
|
|
104
100
|
const setIsItemDisabled = useEventCallback(({
|
|
105
101
|
itemId,
|
|
106
102
|
shouldBeDisabled
|
|
107
103
|
}) => {
|
|
108
|
-
store.
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
disabled: shouldBeDisabled ?? !itemMetaLookup[itemId].disabled
|
|
115
|
-
});
|
|
116
|
-
return _extends({}, prevState, {
|
|
117
|
-
items: _extends({}, prevState.items, {
|
|
118
|
-
itemMetaLookup
|
|
119
|
-
})
|
|
120
|
-
});
|
|
104
|
+
if (!store.state.items.itemMetaLookup[itemId]) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const itemMetaLookup = _extends({}, store.state.items.itemMetaLookup);
|
|
108
|
+
itemMetaLookup[itemId] = _extends({}, itemMetaLookup[itemId], {
|
|
109
|
+
disabled: shouldBeDisabled ?? !itemMetaLookup[itemId].disabled
|
|
121
110
|
});
|
|
111
|
+
store.set('items', _extends({}, store.state.items, {
|
|
112
|
+
itemMetaLookup
|
|
113
|
+
}));
|
|
122
114
|
});
|
|
123
115
|
const getItemTree = React.useCallback(() => {
|
|
124
116
|
const getItemFromItemId = itemId => {
|
|
125
|
-
const item =
|
|
126
|
-
const
|
|
117
|
+
const item = itemsSelectors.itemModel(store.state, itemId);
|
|
118
|
+
const itemToMutate = _extends({}, item);
|
|
119
|
+
const newChildren = itemsSelectors.itemOrderedChildrenIds(store.state, itemId);
|
|
127
120
|
if (newChildren.length > 0) {
|
|
128
|
-
|
|
121
|
+
itemToMutate.children = newChildren.map(getItemFromItemId);
|
|
129
122
|
} else {
|
|
130
|
-
delete
|
|
123
|
+
delete itemToMutate.children;
|
|
131
124
|
}
|
|
132
|
-
return
|
|
125
|
+
return itemToMutate;
|
|
133
126
|
};
|
|
134
|
-
return
|
|
127
|
+
return itemsSelectors.itemOrderedChildrenIds(store.state, null).map(getItemFromItemId);
|
|
135
128
|
}, [store]);
|
|
136
|
-
const getItemOrderedChildrenIds = React.useCallback(itemId =>
|
|
129
|
+
const getItemOrderedChildrenIds = React.useCallback(itemId => itemsSelectors.itemOrderedChildrenIds(store.state, itemId), [store]);
|
|
137
130
|
const getItemDOMElement = itemId => {
|
|
138
|
-
const itemMeta =
|
|
131
|
+
const itemMeta = itemsSelectors.itemMeta(store.state, itemId);
|
|
139
132
|
if (itemMeta == null) {
|
|
140
133
|
return null;
|
|
141
134
|
}
|
|
142
135
|
const idAttribute = generateTreeItemIdAttribute({
|
|
143
|
-
treeId:
|
|
136
|
+
treeId: idSelectors.treeId(store.state),
|
|
144
137
|
itemId,
|
|
145
138
|
id: itemMeta.idAttribute
|
|
146
139
|
});
|
|
@@ -170,49 +163,42 @@ export const useTreeViewItems = ({
|
|
|
170
163
|
initialParentId: parentId,
|
|
171
164
|
ignoreChildren: true
|
|
172
165
|
});
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
166
|
+
let newItems;
|
|
167
|
+
if (parentId) {
|
|
168
|
+
newItems = {
|
|
169
|
+
itemModelLookup: _extends({}, store.state.items.itemModelLookup, newState.itemModelLookup),
|
|
170
|
+
itemMetaLookup: _extends({}, store.state.items.itemMetaLookup, newState.itemMetaLookup),
|
|
171
|
+
itemOrderedChildrenIdsLookup: _extends({}, newState.itemOrderedChildrenIdsLookup, store.state.items.itemOrderedChildrenIdsLookup),
|
|
172
|
+
itemChildrenIndexesLookup: _extends({}, newState.itemChildrenIndexesLookup, store.state.items.itemChildrenIndexesLookup)
|
|
173
|
+
};
|
|
174
|
+
} else {
|
|
175
|
+
newItems = {
|
|
176
|
+
itemModelLookup: newState.itemModelLookup,
|
|
177
|
+
itemMetaLookup: newState.itemMetaLookup,
|
|
178
|
+
itemOrderedChildrenIdsLookup: newState.itemOrderedChildrenIdsLookup,
|
|
179
|
+
itemChildrenIndexesLookup: newState.itemChildrenIndexesLookup
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
Object.values(store.state.items.itemMetaLookup).forEach(item => {
|
|
183
|
+
if (!newItems.itemMetaLookup[item.id]) {
|
|
184
|
+
publishTreeViewEvent(instance, 'removeItem', {
|
|
185
|
+
id: item.id
|
|
186
|
+
});
|
|
189
187
|
}
|
|
190
|
-
Object.values(prevState.items.itemMetaLookup).forEach(item => {
|
|
191
|
-
if (!newItems.itemMetaLookup[item.id]) {
|
|
192
|
-
publishTreeViewEvent(instance, 'removeItem', {
|
|
193
|
-
id: item.id
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
return _extends({}, prevState, {
|
|
198
|
-
items: _extends({}, prevState.items, newItems)
|
|
199
|
-
});
|
|
200
188
|
});
|
|
189
|
+
store.set('items', _extends({}, store.state.items, newItems));
|
|
201
190
|
}
|
|
202
191
|
};
|
|
203
192
|
const removeChildren = parentId => {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
const newMetaMap = Object.keys(prevState.items.itemMetaLookup).reduce((acc, key) => {
|
|
215
|
-
const item = prevState.items.itemMetaLookup[key];
|
|
193
|
+
if (parentId == null) {
|
|
194
|
+
store.set('items', _extends({}, store.state.items, {
|
|
195
|
+
itemMetaLookup: {},
|
|
196
|
+
itemOrderedChildrenIdsLookup: {},
|
|
197
|
+
itemChildrenIndexesLookup: {}
|
|
198
|
+
}));
|
|
199
|
+
} else {
|
|
200
|
+
const newMetaMap = Object.keys(store.state.items.itemMetaLookup).reduce((acc, key) => {
|
|
201
|
+
const item = store.state.items.itemMetaLookup[key];
|
|
216
202
|
if (item.parentId === parentId) {
|
|
217
203
|
publishTreeViewEvent(instance, 'removeItem', {
|
|
218
204
|
id: item.id
|
|
@@ -223,43 +209,37 @@ export const useTreeViewItems = ({
|
|
|
223
209
|
[item.id]: item
|
|
224
210
|
});
|
|
225
211
|
}, {});
|
|
226
|
-
const newItemOrderedChildrenIdsLookup =
|
|
227
|
-
const newItemChildrenIndexesLookup =
|
|
212
|
+
const newItemOrderedChildrenIdsLookup = _extends({}, store.state.items.itemOrderedChildrenIdsLookup);
|
|
213
|
+
const newItemChildrenIndexesLookup = _extends({}, store.state.items.itemChildrenIndexesLookup);
|
|
228
214
|
delete newItemChildrenIndexesLookup[parentId];
|
|
229
215
|
delete newItemOrderedChildrenIdsLookup[parentId];
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
});
|
|
237
|
-
});
|
|
216
|
+
store.set('items', _extends({}, store.state.items, {
|
|
217
|
+
itemMetaLookup: newMetaMap,
|
|
218
|
+
itemOrderedChildrenIdsLookup: newItemOrderedChildrenIdsLookup,
|
|
219
|
+
itemChildrenIndexesLookup: newItemChildrenIndexesLookup
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
238
222
|
};
|
|
239
223
|
React.useEffect(() => {
|
|
240
224
|
if (instance.areItemUpdatesPrevented()) {
|
|
241
225
|
return;
|
|
242
226
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
}
|
|
258
|
-
});
|
|
259
|
-
return _extends({}, prevState, {
|
|
260
|
-
items: _extends({}, prevState.items, newState)
|
|
261
|
-
});
|
|
227
|
+
const newState = processItemsLookups({
|
|
228
|
+
disabledItemsFocusable: params.disabledItemsFocusable,
|
|
229
|
+
items: params.items,
|
|
230
|
+
isItemDisabled: params.isItemDisabled,
|
|
231
|
+
getItemId: params.getItemId,
|
|
232
|
+
getItemLabel: params.getItemLabel,
|
|
233
|
+
getItemChildren: params.getItemChildren
|
|
234
|
+
});
|
|
235
|
+
Object.values(store.state.items.itemMetaLookup).forEach(item => {
|
|
236
|
+
if (!newState.itemMetaLookup[item.id]) {
|
|
237
|
+
publishTreeViewEvent(instance, 'removeItem', {
|
|
238
|
+
id: item.id
|
|
239
|
+
});
|
|
240
|
+
}
|
|
262
241
|
});
|
|
242
|
+
store.set('items', _extends({}, store.state.items, newState));
|
|
263
243
|
}, [instance, store, params.items, params.disabledItemsFocusable, params.isItemDisabled, params.getItemId, params.getItemLabel, params.getItemChildren]);
|
|
264
244
|
|
|
265
245
|
// Wrap `props.onItemClick` with `useEventCallback` to prevent unneeded context updates.
|
|
@@ -317,7 +297,7 @@ useTreeViewItems.wrapRoot = ({
|
|
|
317
297
|
children
|
|
318
298
|
}) => {
|
|
319
299
|
return /*#__PURE__*/_jsx(TreeViewItemDepthContext.Provider, {
|
|
320
|
-
value:
|
|
300
|
+
value: itemsSelectors.itemDepth,
|
|
321
301
|
children: children
|
|
322
302
|
});
|
|
323
303
|
};
|