@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.
Files changed (158) hide show
  1. package/CHANGELOG.md +169 -0
  2. package/RichTreeView/RichTreeView.js +16 -15
  3. package/RichTreeView/RichTreeView.types.d.ts +3 -2
  4. package/SimpleTreeView/SimpleTreeView.js +10 -9
  5. package/SimpleTreeView/SimpleTreeView.types.d.ts +3 -2
  6. package/TreeItem/TreeItem.d.ts +1 -1
  7. package/TreeItemProvider/TreeItemProvider.js +3 -3
  8. package/esm/RichTreeView/RichTreeView.js +16 -15
  9. package/esm/RichTreeView/RichTreeView.types.d.ts +3 -2
  10. package/esm/SimpleTreeView/SimpleTreeView.js +10 -9
  11. package/esm/SimpleTreeView/SimpleTreeView.types.d.ts +3 -2
  12. package/esm/TreeItem/TreeItem.d.ts +1 -1
  13. package/esm/TreeItemProvider/TreeItemProvider.js +3 -3
  14. package/esm/hooks/index.d.ts +2 -1
  15. package/esm/hooks/index.js +2 -1
  16. package/esm/hooks/useApplyPropagationToSelectedItemsOnMount.d.ts +53 -0
  17. package/esm/hooks/useApplyPropagationToSelectedItemsOnMount.js +80 -0
  18. package/esm/hooks/useTreeItemModel.js +3 -3
  19. package/esm/hooks/useTreeItemUtils/useTreeItemUtils.js +24 -25
  20. package/esm/index.js +1 -1
  21. package/esm/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +2 -2
  22. package/esm/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
  23. package/esm/internals/components/RichTreeViewItems.js +5 -5
  24. package/esm/internals/corePlugins/useTreeViewId/index.d.ts +2 -1
  25. package/esm/internals/corePlugins/useTreeViewId/index.js +2 -1
  26. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -13
  27. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +8 -34
  28. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -9
  29. package/esm/internals/index.d.ts +6 -14
  30. package/esm/internals/index.js +6 -13
  31. package/esm/internals/models/plugin.d.ts +2 -3
  32. package/esm/internals/models/treeView.d.ts +4 -6
  33. package/esm/internals/plugins/useTreeViewExpansion/index.d.ts +2 -1
  34. package/esm/internals/plugins/useTreeViewExpansion/index.js +2 -1
  35. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -30
  36. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +24 -316
  37. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +27 -38
  38. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -1
  39. package/esm/internals/plugins/useTreeViewFocus/index.d.ts +2 -1
  40. package/esm/internals/plugins/useTreeViewFocus/index.js +2 -1
  41. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +17 -21
  42. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +20 -628
  43. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +25 -37
  44. package/esm/internals/plugins/useTreeViewItems/index.d.ts +2 -1
  45. package/esm/internals/plugins/useTreeViewItems/index.js +2 -1
  46. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +82 -102
  47. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +52 -1142
  48. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +58 -98
  49. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +1 -1
  50. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.js +1 -1
  51. package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +32 -42
  52. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +22 -22
  53. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -0
  54. package/esm/internals/plugins/useTreeViewLabel/index.d.ts +2 -1
  55. package/esm/internals/plugins/useTreeViewLabel/index.js +2 -1
  56. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +4 -4
  57. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +17 -25
  58. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -100
  59. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +24 -34
  60. package/esm/internals/plugins/useTreeViewLazyLoading/index.d.ts +2 -1
  61. package/esm/internals/plugins/useTreeViewLazyLoading/index.js +1 -1
  62. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +18 -245
  63. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +15 -27
  64. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +20 -6
  65. package/esm/internals/plugins/useTreeViewSelection/index.d.ts +2 -1
  66. package/esm/internals/plugins/useTreeViewSelection/index.js +2 -1
  67. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +25 -38
  68. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +30 -34
  69. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +38 -517
  70. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +46 -71
  71. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +1 -0
  72. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +10 -10
  73. package/esm/internals/useTreeView/useTreeView.d.ts +1 -1
  74. package/esm/internals/useTreeView/useTreeView.js +11 -18
  75. package/esm/internals/useTreeView/useTreeView.types.d.ts +1 -1
  76. package/esm/internals/useTreeView/useTreeViewBuildContext.d.ts +2 -3
  77. package/esm/internals/utils/tree.js +33 -33
  78. package/esm/useTreeItem/useTreeItem.js +14 -14
  79. package/esm/useTreeItem/useTreeItem.types.d.ts +2 -1
  80. package/hooks/index.d.ts +2 -1
  81. package/hooks/index.js +8 -1
  82. package/hooks/useApplyPropagationToSelectedItemsOnMount.d.ts +53 -0
  83. package/hooks/useApplyPropagationToSelectedItemsOnMount.js +87 -0
  84. package/hooks/useTreeItemModel.js +3 -3
  85. package/hooks/useTreeItemUtils/useTreeItemUtils.js +18 -19
  86. package/index.js +1 -1
  87. package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +1 -1
  88. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
  89. package/internals/components/RichTreeViewItems.js +5 -5
  90. package/internals/corePlugins/useTreeViewId/index.d.ts +2 -1
  91. package/internals/corePlugins/useTreeViewId/index.js +8 -1
  92. package/internals/corePlugins/useTreeViewId/useTreeViewId.js +9 -12
  93. package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +8 -34
  94. package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +10 -10
  95. package/internals/index.d.ts +6 -14
  96. package/internals/index.js +12 -73
  97. package/internals/models/plugin.d.ts +2 -3
  98. package/internals/models/treeView.d.ts +4 -6
  99. package/internals/plugins/useTreeViewExpansion/index.d.ts +2 -1
  100. package/internals/plugins/useTreeViewExpansion/index.js +8 -1
  101. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -28
  102. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +24 -316
  103. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +27 -38
  104. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -1
  105. package/internals/plugins/useTreeViewFocus/index.d.ts +2 -1
  106. package/internals/plugins/useTreeViewFocus/index.js +8 -1
  107. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +14 -18
  108. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +20 -628
  109. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +23 -35
  110. package/internals/plugins/useTreeViewItems/index.d.ts +2 -1
  111. package/internals/plugins/useTreeViewItems/index.js +8 -1
  112. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +81 -101
  113. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +52 -1142
  114. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +59 -99
  115. package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +1 -1
  116. package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.js +1 -1
  117. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +32 -42
  118. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +18 -18
  119. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -0
  120. package/internals/plugins/useTreeViewLabel/index.d.ts +2 -1
  121. package/internals/plugins/useTreeViewLabel/index.js +8 -1
  122. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +3 -3
  123. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -24
  124. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -100
  125. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +24 -34
  126. package/internals/plugins/useTreeViewLazyLoading/index.d.ts +2 -1
  127. package/internals/plugins/useTreeViewLazyLoading/index.js +8 -1
  128. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +18 -245
  129. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +16 -28
  130. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +20 -6
  131. package/internals/plugins/useTreeViewSelection/index.d.ts +2 -1
  132. package/internals/plugins/useTreeViewSelection/index.js +8 -1
  133. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +23 -37
  134. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +29 -33
  135. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +38 -517
  136. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +46 -71
  137. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +1 -0
  138. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +8 -8
  139. package/internals/useTreeView/useTreeView.d.ts +1 -1
  140. package/internals/useTreeView/useTreeView.js +11 -18
  141. package/internals/useTreeView/useTreeView.types.d.ts +1 -1
  142. package/internals/useTreeView/useTreeViewBuildContext.d.ts +2 -3
  143. package/internals/utils/tree.js +31 -31
  144. package/package.json +13 -14
  145. package/useTreeItem/useTreeItem.js +14 -14
  146. package/useTreeItem/useTreeItem.types.d.ts +2 -1
  147. package/esm/internals/hooks/useSelector.d.ts +0 -4
  148. package/esm/internals/hooks/useSelector.js +0 -8
  149. package/esm/internals/utils/TreeViewStore.d.ts +0 -12
  150. package/esm/internals/utils/TreeViewStore.js +0 -22
  151. package/esm/internals/utils/selectors.d.ts +0 -21
  152. package/esm/internals/utils/selectors.js +0 -51
  153. package/internals/hooks/useSelector.d.ts +0 -4
  154. package/internals/hooks/useSelector.js +0 -16
  155. package/internals/utils/TreeViewStore.d.ts +0 -12
  156. package/internals/utils/TreeViewStore.js +0 -29
  157. package/internals/utils/selectors.d.ts +0 -21
  158. package/internals/utils/selectors.js +0 -58
@@ -1,18 +1,9 @@
1
- import { createSelector } from "../../utils/selectors.js";
2
- import { selectorSelectionModelArray } from "../useTreeViewSelection/useTreeViewSelection.selectors.js";
3
- import { selectorDisabledItemFocusable, selectorItemMetaLookup, selectorItemOrderedChildrenIds } from "../useTreeViewItems/useTreeViewItems.selectors.js";
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 { selectorExpandedItemsMap } from "../useTreeViewExpansion/useTreeViewExpansion.selectors.js";
6
- const selectorTreeViewFocusState = state => state.focus;
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
- * Check if an item is the default focusable item.
35
- * @param {TreeViewState<[UseTreeViewFocusSignature]>} state The state of the tree view.
36
- * @param {TreeViewItemId} itemId The id of the item to check.
37
- * @returns {boolean} `true` if the item is the default focusable item, `false` otherwise.
38
- */
39
- export const selectorIsItemTheDefaultFocusableItem = createSelector([selectorDefaultFocusableItemId, (_, itemId) => itemId], (defaultFocusableItemId, itemId) => defaultFocusableItemId === itemId);
40
-
41
- /**
42
- * Get the id of the item that is currently focused.
43
- * @param {TreeViewState<[UseTreeViewFocusSignature]>} state The state of the tree view.
44
- * @returns {TreeViewItemId | null} The id of the item that is currently focused.
45
- */
46
- export const selectorFocusedItemId = createSelector(selectorTreeViewFocusState, focus => focus.focusedItemId);
47
-
48
- /**
49
- * Check if an item is focused.
50
- * @param {TreeViewState<[UseTreeViewFocusSignature]>} state The state of the tree view.
51
- * @param {TreeViewItemId} itemId The id of the item to check.
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 { selectorItemMeta, selectorItemOrderedChildrenIds, selectorItemModel, selectorItemDepth } from "./useTreeViewItems.selectors.js";
10
- import { selectorTreeViewId } from "../../corePlugins/useTreeViewId/useTreeViewId.selectors.js";
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 => selectorItemModel(store.value, itemId), [store]);
85
+ const getItem = React.useCallback(itemId => itemsSelectors.itemModel(store.state, itemId), [store]);
86
86
  const getParentId = React.useCallback(itemId => {
87
- const itemMeta = selectorItemMeta(store.value, itemId);
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.update(prevState => _extends({}, prevState, {
92
- items: _extends({}, prevState.items, {
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.update(prevState => _extends({}, prevState, {
99
- items: _extends({}, prevState.items, {
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.update(prevState => {
109
- if (!prevState.items.itemMetaLookup[itemId]) {
110
- return prevState;
111
- }
112
- const itemMetaLookup = _extends({}, prevState.items.itemMetaLookup);
113
- itemMetaLookup[itemId] = _extends({}, itemMetaLookup[itemId], {
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 = selectorItemModel(store.value, itemId);
126
- const newChildren = selectorItemOrderedChildrenIds(store.value, itemId);
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
- item.children = newChildren.map(getItemFromItemId);
121
+ itemToMutate.children = newChildren.map(getItemFromItemId);
129
122
  } else {
130
- delete item.children;
123
+ delete itemToMutate.children;
131
124
  }
132
- return item;
125
+ return itemToMutate;
133
126
  };
134
- return selectorItemOrderedChildrenIds(store.value, null).map(getItemFromItemId);
127
+ return itemsSelectors.itemOrderedChildrenIds(store.state, null).map(getItemFromItemId);
135
128
  }, [store]);
136
- const getItemOrderedChildrenIds = React.useCallback(itemId => selectorItemOrderedChildrenIds(store.value, itemId), [store]);
129
+ const getItemOrderedChildrenIds = React.useCallback(itemId => itemsSelectors.itemOrderedChildrenIds(store.state, itemId), [store]);
137
130
  const getItemDOMElement = itemId => {
138
- const itemMeta = selectorItemMeta(store.value, itemId);
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: selectorTreeViewId(store.value),
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
- store.update(prevState => {
174
- let newItems;
175
- if (parentId) {
176
- newItems = {
177
- itemModelLookup: _extends({}, prevState.items.itemModelLookup, newState.itemModelLookup),
178
- itemMetaLookup: _extends({}, prevState.items.itemMetaLookup, newState.itemMetaLookup),
179
- itemOrderedChildrenIdsLookup: _extends({}, newState.itemOrderedChildrenIdsLookup, prevState.items.itemOrderedChildrenIdsLookup),
180
- itemChildrenIndexesLookup: _extends({}, newState.itemChildrenIndexesLookup, prevState.items.itemChildrenIndexesLookup)
181
- };
182
- } else {
183
- newItems = {
184
- itemModelLookup: newState.itemModelLookup,
185
- itemMetaLookup: newState.itemMetaLookup,
186
- itemOrderedChildrenIdsLookup: newState.itemOrderedChildrenIdsLookup,
187
- itemChildrenIndexesLookup: newState.itemChildrenIndexesLookup
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
- store.update(prevState => {
205
- if (!parentId) {
206
- return _extends({}, prevState, {
207
- items: _extends({}, prevState.items, {
208
- itemMetaLookup: {},
209
- itemOrderedChildrenIdsLookup: {},
210
- itemChildrenIndexesLookup: {}
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 = prevState.items.itemOrderedChildrenIdsLookup;
227
- const newItemChildrenIndexesLookup = prevState.items.itemChildrenIndexesLookup;
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
- return _extends({}, prevState, {
231
- items: _extends({}, prevState.items, {
232
- itemMetaLookup: newMetaMap,
233
- itemOrderedChildrenIdsLookup: newItemOrderedChildrenIdsLookup,
234
- itemChildrenIndexesLookup: newItemChildrenIndexesLookup
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
- store.update(prevState => {
244
- const newState = processItemsLookups({
245
- disabledItemsFocusable: params.disabledItemsFocusable,
246
- items: params.items,
247
- isItemDisabled: params.isItemDisabled,
248
- getItemId: params.getItemId,
249
- getItemLabel: params.getItemLabel,
250
- getItemChildren: params.getItemChildren
251
- });
252
- Object.values(prevState.items.itemMetaLookup).forEach(item => {
253
- if (!newState.itemMetaLookup[item.id]) {
254
- publishTreeViewEvent(instance, 'removeItem', {
255
- id: item.id
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: selectorItemDepth,
300
+ value: itemsSelectors.itemDepth,
321
301
  children: children
322
302
  });
323
303
  };