@mui/x-tree-view 8.11.0 → 8.11.1

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 (150) hide show
  1. package/CHANGELOG.md +74 -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/useTreeItemModel.js +3 -3
  15. package/esm/hooks/useTreeItemUtils/useTreeItemUtils.js +24 -25
  16. package/esm/index.js +1 -1
  17. package/esm/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +2 -2
  18. package/esm/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
  19. package/esm/internals/components/RichTreeViewItems.js +5 -5
  20. package/esm/internals/corePlugins/useTreeViewId/index.d.ts +2 -1
  21. package/esm/internals/corePlugins/useTreeViewId/index.js +2 -1
  22. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -13
  23. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +8 -34
  24. package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -9
  25. package/esm/internals/index.d.ts +6 -14
  26. package/esm/internals/index.js +6 -13
  27. package/esm/internals/models/plugin.d.ts +2 -3
  28. package/esm/internals/models/treeView.d.ts +4 -6
  29. package/esm/internals/plugins/useTreeViewExpansion/index.d.ts +2 -1
  30. package/esm/internals/plugins/useTreeViewExpansion/index.js +2 -1
  31. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -30
  32. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +24 -316
  33. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +27 -38
  34. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -1
  35. package/esm/internals/plugins/useTreeViewFocus/index.d.ts +2 -1
  36. package/esm/internals/plugins/useTreeViewFocus/index.js +2 -1
  37. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +17 -21
  38. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +20 -628
  39. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +25 -37
  40. package/esm/internals/plugins/useTreeViewItems/index.d.ts +2 -1
  41. package/esm/internals/plugins/useTreeViewItems/index.js +2 -1
  42. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +78 -99
  43. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +52 -1142
  44. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +58 -98
  45. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +1 -1
  46. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.js +1 -1
  47. package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +32 -42
  48. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +22 -22
  49. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -0
  50. package/esm/internals/plugins/useTreeViewLabel/index.d.ts +2 -1
  51. package/esm/internals/plugins/useTreeViewLabel/index.js +2 -1
  52. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +4 -4
  53. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +17 -25
  54. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -100
  55. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +24 -34
  56. package/esm/internals/plugins/useTreeViewLazyLoading/index.d.ts +2 -1
  57. package/esm/internals/plugins/useTreeViewLazyLoading/index.js +1 -1
  58. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +18 -245
  59. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +15 -27
  60. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +20 -6
  61. package/esm/internals/plugins/useTreeViewSelection/index.d.ts +2 -1
  62. package/esm/internals/plugins/useTreeViewSelection/index.js +2 -1
  63. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +25 -38
  64. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +30 -34
  65. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +38 -517
  66. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +46 -71
  67. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +1 -0
  68. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +10 -10
  69. package/esm/internals/useTreeView/useTreeView.d.ts +1 -1
  70. package/esm/internals/useTreeView/useTreeView.js +11 -18
  71. package/esm/internals/useTreeView/useTreeView.types.d.ts +1 -1
  72. package/esm/internals/useTreeView/useTreeViewBuildContext.d.ts +2 -3
  73. package/esm/internals/utils/tree.js +33 -33
  74. package/esm/useTreeItem/useTreeItem.js +14 -14
  75. package/esm/useTreeItem/useTreeItem.types.d.ts +2 -1
  76. package/hooks/useTreeItemModel.js +3 -3
  77. package/hooks/useTreeItemUtils/useTreeItemUtils.js +18 -19
  78. package/index.js +1 -1
  79. package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +1 -1
  80. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
  81. package/internals/components/RichTreeViewItems.js +5 -5
  82. package/internals/corePlugins/useTreeViewId/index.d.ts +2 -1
  83. package/internals/corePlugins/useTreeViewId/index.js +8 -1
  84. package/internals/corePlugins/useTreeViewId/useTreeViewId.js +9 -12
  85. package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +8 -34
  86. package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +10 -10
  87. package/internals/index.d.ts +6 -14
  88. package/internals/index.js +12 -73
  89. package/internals/models/plugin.d.ts +2 -3
  90. package/internals/models/treeView.d.ts +4 -6
  91. package/internals/plugins/useTreeViewExpansion/index.d.ts +2 -1
  92. package/internals/plugins/useTreeViewExpansion/index.js +8 -1
  93. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -28
  94. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +24 -316
  95. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +27 -38
  96. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -1
  97. package/internals/plugins/useTreeViewFocus/index.d.ts +2 -1
  98. package/internals/plugins/useTreeViewFocus/index.js +8 -1
  99. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +14 -18
  100. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +20 -628
  101. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +23 -35
  102. package/internals/plugins/useTreeViewItems/index.d.ts +2 -1
  103. package/internals/plugins/useTreeViewItems/index.js +8 -1
  104. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +77 -98
  105. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +52 -1142
  106. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +59 -99
  107. package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +1 -1
  108. package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.js +1 -1
  109. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +32 -42
  110. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +18 -18
  111. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -0
  112. package/internals/plugins/useTreeViewLabel/index.d.ts +2 -1
  113. package/internals/plugins/useTreeViewLabel/index.js +8 -1
  114. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +3 -3
  115. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -24
  116. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -100
  117. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +24 -34
  118. package/internals/plugins/useTreeViewLazyLoading/index.d.ts +2 -1
  119. package/internals/plugins/useTreeViewLazyLoading/index.js +8 -1
  120. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +18 -245
  121. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +16 -28
  122. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +20 -6
  123. package/internals/plugins/useTreeViewSelection/index.d.ts +2 -1
  124. package/internals/plugins/useTreeViewSelection/index.js +8 -1
  125. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +23 -37
  126. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +29 -33
  127. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +38 -517
  128. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +46 -71
  129. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +1 -0
  130. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +8 -8
  131. package/internals/useTreeView/useTreeView.d.ts +1 -1
  132. package/internals/useTreeView/useTreeView.js +11 -18
  133. package/internals/useTreeView/useTreeView.types.d.ts +1 -1
  134. package/internals/useTreeView/useTreeViewBuildContext.d.ts +2 -3
  135. package/internals/utils/tree.js +31 -31
  136. package/package.json +12 -13
  137. package/useTreeItem/useTreeItem.js +14 -14
  138. package/useTreeItem/useTreeItem.types.d.ts +2 -1
  139. package/esm/internals/hooks/useSelector.d.ts +0 -4
  140. package/esm/internals/hooks/useSelector.js +0 -8
  141. package/esm/internals/utils/TreeViewStore.d.ts +0 -12
  142. package/esm/internals/utils/TreeViewStore.js +0 -22
  143. package/esm/internals/utils/selectors.d.ts +0 -21
  144. package/esm/internals/utils/selectors.js +0 -51
  145. package/internals/hooks/useSelector.d.ts +0 -4
  146. package/internals/hooks/useSelector.js +0 -16
  147. package/internals/utils/TreeViewStore.d.ts +0 -12
  148. package/internals/utils/TreeViewStore.js +0 -29
  149. package/internals/utils/selectors.d.ts +0 -21
  150. package/internals/utils/selectors.js +0 -58
@@ -25,27 +25,21 @@ const useTreeViewExpansion = ({
25
25
  defaultValue: params.defaultExpandedItems
26
26
  });
27
27
  (0, _useEnhancedEffect.default)(() => {
28
- store.update(prevState => {
29
- const newExpansionTrigger = (0, _useTreeViewExpansion2.getExpansionTrigger)({
30
- isItemEditable: params.isItemEditable,
31
- expansionTrigger: params.expansionTrigger
32
- });
33
- if (prevState.expansion.expansionTrigger === newExpansionTrigger) {
34
- return prevState;
35
- }
36
- return (0, _extends2.default)({}, prevState, {
37
- expansion: (0, _extends2.default)({}, prevState.expansion, {
38
- expansionTrigger: newExpansionTrigger
39
- })
40
- });
28
+ const newExpansionTrigger = (0, _useTreeViewExpansion2.getExpansionTrigger)({
29
+ isItemEditable: params.isItemEditable,
30
+ expansionTrigger: params.expansionTrigger
41
31
  });
32
+ if (store.state.expansion.expansionTrigger === newExpansionTrigger) {
33
+ return;
34
+ }
35
+ store.set('expansion', (0, _extends2.default)({}, store.state.expansion, {
36
+ expansionTrigger: newExpansionTrigger
37
+ }));
42
38
  }, [store, params.isItemEditable, params.expansionTrigger]);
43
39
  const setExpandedItems = (event, value) => {
44
40
  if (params.expandedItems === undefined) {
45
- store.update(prevState => (0, _extends2.default)({}, prevState, {
46
- expansion: (0, _extends2.default)({}, prevState.expansion, {
47
- expandedItems: value
48
- })
41
+ store.set('expansion', (0, _extends2.default)({}, store.state.expansion, {
42
+ expandedItems: value
49
43
  }));
50
44
  }
51
45
  params.onExpandedItemsChange?.(event, value);
@@ -58,7 +52,7 @@ const useTreeViewExpansion = ({
58
52
  event,
59
53
  shouldBeExpanded
60
54
  }) => {
61
- const oldExpanded = (0, _useTreeViewExpansion.selectorExpandedItems)(store.value);
55
+ const oldExpanded = _useTreeViewExpansion.expansionSelectors.expandedItemsRaw(store.state);
62
56
  let newExpanded;
63
57
  if (shouldBeExpanded) {
64
58
  newExpanded = [itemId].concat(oldExpanded);
@@ -75,7 +69,7 @@ const useTreeViewExpansion = ({
75
69
  event = null,
76
70
  shouldBeExpanded
77
71
  }) => {
78
- const isExpandedBefore = (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId);
72
+ const isExpandedBefore = _useTreeViewExpansion.expansionSelectors.isItemExpanded(store.state, itemId);
79
73
  const cleanShouldBeExpanded = shouldBeExpanded ?? !isExpandedBefore;
80
74
  if (isExpandedBefore === cleanShouldBeExpanded) {
81
75
  return;
@@ -96,14 +90,17 @@ const useTreeViewExpansion = ({
96
90
  shouldBeExpanded: cleanShouldBeExpanded
97
91
  });
98
92
  });
93
+ const isItemExpanded = (0, _useEventCallback.default)(itemId => {
94
+ return _useTreeViewExpansion.expansionSelectors.isItemExpandable(store.state, itemId);
95
+ });
99
96
  const expandAllSiblings = (event, itemId) => {
100
- const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, itemId);
97
+ const itemMeta = _useTreeViewItems.itemsSelectors.itemMeta(store.state, itemId);
101
98
  if (itemMeta == null) {
102
99
  return;
103
100
  }
104
- const siblings = (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(store.value, itemMeta.parentId);
105
- const diff = siblings.filter(child => (0, _useTreeViewExpansion.selectorIsItemExpandable)(store.value, child) && !(0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, child));
106
- const newExpanded = (0, _useTreeViewExpansion.selectorExpandedItems)(store.value).concat(diff);
101
+ const siblings = _useTreeViewItems.itemsSelectors.itemOrderedChildrenIds(store.state, itemMeta.parentId);
102
+ const diff = siblings.filter(child => _useTreeViewExpansion.expansionSelectors.isItemExpandable(store.state, child) && !_useTreeViewExpansion.expansionSelectors.isItemExpanded(store.state, child));
103
+ const newExpanded = _useTreeViewExpansion.expansionSelectors.expandedItemsRaw(store.state).concat(diff);
107
104
  if (diff.length > 0) {
108
105
  if (params.onItemExpansionToggle) {
109
106
  diff.forEach(newlyExpandedItemId => {
@@ -120,16 +117,15 @@ const useTreeViewExpansion = ({
120
117
  (0, _useEnhancedEffect.default)(() => {
121
118
  const expandedItems = params.expandedItems;
122
119
  if (expandedItems !== undefined) {
123
- store.update(prevState => (0, _extends2.default)({}, prevState, {
124
- expansion: (0, _extends2.default)({}, prevState.expansion, {
125
- expandedItems
126
- })
120
+ store.set('expansion', (0, _extends2.default)({}, store.state.expansion, {
121
+ expandedItems
127
122
  }));
128
123
  }
129
124
  }, [store, params.expandedItems]);
130
125
  return {
131
126
  publicAPI: {
132
- setItemExpansion
127
+ setItemExpansion,
128
+ isItemExpanded
133
129
  },
134
130
  instance: {
135
131
  setItemExpansion,
@@ -1,318 +1,26 @@
1
- import { TreeViewRootSelector } from "../../utils/selectors.js";
1
+ import { TreeViewState } from "../../models/index.js";
2
2
  import { UseTreeViewExpansionSignature } from "./useTreeViewExpansion.types.js";
3
- /**
4
- * Get the expanded items.
5
- * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
6
- * @returns {TreeViewItemId[]} The expanded items.
7
- */
8
- export declare const selectorExpandedItems: ((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types.js").UseTreeViewIdState & import("./useTreeViewExpansion.types.js").UseTreeViewExpansionState & Partial<{}> & {
9
- cacheKey: import("../../models/index.js").TreeViewStateCacheKey;
10
- }) => string[]) & {
11
- clearCache: () => void;
12
- resultsCount: () => number;
13
- resetResultsCount: () => void;
14
- } & {
15
- resultFunc: (resultFuncArgs_0: {
16
- expandedItems: string[];
17
- expansionTrigger: "content" | "iconContainer";
18
- }) => string[];
19
- memoizedResultFunc: ((resultFuncArgs_0: {
20
- expandedItems: string[];
21
- expansionTrigger: "content" | "iconContainer";
22
- }) => string[]) & {
23
- clearCache: () => void;
24
- resultsCount: () => number;
25
- resetResultsCount: () => void;
26
- };
27
- lastResult: () => string[];
28
- dependencies: [TreeViewRootSelector<UseTreeViewExpansionSignature>];
29
- recomputations: () => number;
30
- resetRecomputations: () => void;
31
- dependencyRecomputations: () => number;
32
- resetDependencyRecomputations: () => void;
33
- } & {
34
- memoize: typeof import("reselect").weakMapMemoize;
35
- argsMemoize: typeof import("reselect").weakMapMemoize;
36
- };
37
- /**
38
- * Get the expanded items as a Map.
39
- * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
40
- * @returns {TreeViewExpansionValue} The expanded items as a Map.
41
- */
42
- export declare const selectorExpandedItemsMap: ((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types.js").UseTreeViewIdState & import("./useTreeViewExpansion.types.js").UseTreeViewExpansionState & Partial<{}> & {
43
- cacheKey: import("../../models/index.js").TreeViewStateCacheKey;
44
- }) => Map<string, true>) & {
45
- clearCache: () => void;
46
- resultsCount: () => number;
47
- resetResultsCount: () => void;
48
- } & {
49
- resultFunc: (resultFuncArgs_0: string[]) => Map<string, true>;
50
- memoizedResultFunc: ((resultFuncArgs_0: string[]) => Map<string, true>) & {
51
- clearCache: () => void;
52
- resultsCount: () => number;
53
- resetResultsCount: () => void;
54
- };
55
- lastResult: () => Map<string, true>;
56
- dependencies: [((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types.js").UseTreeViewIdState & import("./useTreeViewExpansion.types.js").UseTreeViewExpansionState & Partial<{}> & {
57
- cacheKey: import("../../models/index.js").TreeViewStateCacheKey;
58
- }) => string[]) & {
59
- clearCache: () => void;
60
- resultsCount: () => number;
61
- resetResultsCount: () => void;
62
- } & {
63
- resultFunc: (resultFuncArgs_0: {
64
- expandedItems: string[];
65
- expansionTrigger: "content" | "iconContainer";
66
- }) => string[];
67
- memoizedResultFunc: ((resultFuncArgs_0: {
68
- expandedItems: string[];
69
- expansionTrigger: "content" | "iconContainer";
70
- }) => string[]) & {
71
- clearCache: () => void;
72
- resultsCount: () => number;
73
- resetResultsCount: () => void;
74
- };
75
- lastResult: () => string[];
76
- dependencies: [TreeViewRootSelector<UseTreeViewExpansionSignature>];
77
- recomputations: () => number;
78
- resetRecomputations: () => void;
79
- dependencyRecomputations: () => number;
80
- resetDependencyRecomputations: () => void;
81
- } & {
82
- memoize: typeof import("reselect").weakMapMemoize;
83
- argsMemoize: typeof import("reselect").weakMapMemoize;
84
- }];
85
- recomputations: () => number;
86
- resetRecomputations: () => void;
87
- dependencyRecomputations: () => number;
88
- resetDependencyRecomputations: () => void;
89
- } & {
90
- memoize: typeof import("reselect").weakMapMemoize;
91
- argsMemoize: typeof import("reselect").weakMapMemoize;
92
- };
93
- /**
94
- * Check if an item is expanded.
95
- * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
96
- * @returns {boolean} `true` if the item is expanded, `false` otherwise.
97
- */
98
- export declare const selectorIsItemExpanded: ((state: any, itemId: string) => boolean) & {
99
- clearCache: () => void;
100
- resultsCount: () => number;
101
- resetResultsCount: () => void;
102
- } & {
103
- resultFunc: (resultFuncArgs_0: Map<string, true>, resultFuncArgs_1: string) => boolean;
104
- memoizedResultFunc: ((resultFuncArgs_0: Map<string, true>, resultFuncArgs_1: string) => boolean) & {
105
- clearCache: () => void;
106
- resultsCount: () => number;
107
- resetResultsCount: () => void;
108
- };
109
- lastResult: () => boolean;
110
- dependencies: [((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types.js").UseTreeViewIdState & import("./useTreeViewExpansion.types.js").UseTreeViewExpansionState & Partial<{}> & {
111
- cacheKey: import("../../models/index.js").TreeViewStateCacheKey;
112
- }) => Map<string, true>) & {
113
- clearCache: () => void;
114
- resultsCount: () => number;
115
- resetResultsCount: () => void;
116
- } & {
117
- resultFunc: (resultFuncArgs_0: string[]) => Map<string, true>;
118
- memoizedResultFunc: ((resultFuncArgs_0: string[]) => Map<string, true>) & {
119
- clearCache: () => void;
120
- resultsCount: () => number;
121
- resetResultsCount: () => void;
122
- };
123
- lastResult: () => Map<string, true>;
124
- dependencies: [((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types.js").UseTreeViewIdState & import("./useTreeViewExpansion.types.js").UseTreeViewExpansionState & Partial<{}> & {
125
- cacheKey: import("../../models/index.js").TreeViewStateCacheKey;
126
- }) => string[]) & {
127
- clearCache: () => void;
128
- resultsCount: () => number;
129
- resetResultsCount: () => void;
130
- } & {
131
- resultFunc: (resultFuncArgs_0: {
132
- expandedItems: string[];
133
- expansionTrigger: "content" | "iconContainer";
134
- }) => string[];
135
- memoizedResultFunc: ((resultFuncArgs_0: {
136
- expandedItems: string[];
137
- expansionTrigger: "content" | "iconContainer";
138
- }) => string[]) & {
139
- clearCache: () => void;
140
- resultsCount: () => number;
141
- resetResultsCount: () => void;
142
- };
143
- lastResult: () => string[];
144
- dependencies: [TreeViewRootSelector<UseTreeViewExpansionSignature>];
145
- recomputations: () => number;
146
- resetRecomputations: () => void;
147
- dependencyRecomputations: () => number;
148
- resetDependencyRecomputations: () => void;
149
- } & {
150
- memoize: typeof import("reselect").weakMapMemoize;
151
- argsMemoize: typeof import("reselect").weakMapMemoize;
152
- }];
153
- recomputations: () => number;
154
- resetRecomputations: () => void;
155
- dependencyRecomputations: () => number;
156
- resetDependencyRecomputations: () => void;
157
- } & {
158
- memoize: typeof import("reselect").weakMapMemoize;
159
- argsMemoize: typeof import("reselect").weakMapMemoize;
160
- }, (_: any, itemId: string) => string];
161
- recomputations: () => number;
162
- resetRecomputations: () => void;
163
- dependencyRecomputations: () => number;
164
- resetDependencyRecomputations: () => void;
165
- } & {
166
- memoize: typeof import("reselect").weakMapMemoize;
167
- argsMemoize: typeof import("reselect").weakMapMemoize;
168
- };
169
- /**
170
- * Check if an item is expandable.
171
- * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
172
- * @returns {boolean} `true` if the item is expandable, `false` otherwise.
173
- */
174
- export declare const selectorIsItemExpandable: ((state: any, itemId: string | null) => boolean) & {
175
- clearCache: () => void;
176
- resultsCount: () => number;
177
- resetResultsCount: () => void;
178
- } & {
179
- resultFunc: (resultFuncArgs_0: import("../../index.js").TreeViewItemMeta | null) => boolean;
180
- memoizedResultFunc: ((resultFuncArgs_0: import("../../index.js").TreeViewItemMeta | null) => boolean) & {
181
- clearCache: () => void;
182
- resultsCount: () => number;
183
- resetResultsCount: () => void;
184
- };
185
- lastResult: () => boolean;
186
- dependencies: [((state: any, itemId: string | null) => import("../../index.js").TreeViewItemMeta | null) & {
187
- clearCache: () => void;
188
- resultsCount: () => number;
189
- resetResultsCount: () => void;
190
- } & {
191
- resultFunc: (resultFuncArgs_0: {
192
- [itemId: string]: import("../../index.js").TreeViewItemMeta;
193
- }, resultFuncArgs_1: string | null) => import("../../index.js").TreeViewItemMeta | null;
194
- memoizedResultFunc: ((resultFuncArgs_0: {
195
- [itemId: string]: import("../../index.js").TreeViewItemMeta;
196
- }, resultFuncArgs_1: string | null) => import("../../index.js").TreeViewItemMeta | null) & {
197
- clearCache: () => void;
198
- resultsCount: () => number;
199
- resetResultsCount: () => void;
200
- };
201
- lastResult: () => import("../../index.js").TreeViewItemMeta | null;
202
- dependencies: [((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types.js").UseTreeViewIdState & import("../useTreeViewItems/index.js").UseTreeViewItemsState<import("../../../index.js").TreeViewDefaultItemModelProperties> & Partial<{}> & {
203
- cacheKey: import("../../models/index.js").TreeViewStateCacheKey;
204
- }) => {
205
- [itemId: string]: import("../../index.js").TreeViewItemMeta;
206
- }) & {
207
- clearCache: () => void;
208
- resultsCount: () => number;
209
- resetResultsCount: () => void;
210
- } & {
211
- resultFunc: (resultFuncArgs_0: {
212
- disabledItemsFocusable: boolean;
213
- itemModelLookup: {
214
- [itemId: string]: import("../../../index.js").TreeViewBaseItem<import("../../../index.js").TreeViewDefaultItemModelProperties>;
215
- };
216
- itemMetaLookup: {
217
- [itemId: string]: import("../../index.js").TreeViewItemMeta;
218
- };
219
- itemOrderedChildrenIdsLookup: {
220
- [parentItemId: string]: string[];
221
- };
222
- itemChildrenIndexesLookup: {
223
- [parentItemId: string]: {
224
- [itemId: string]: number;
225
- };
226
- };
227
- loading: boolean;
228
- error: Error | null;
229
- }) => {
230
- [itemId: string]: import("../../index.js").TreeViewItemMeta;
231
- };
232
- memoizedResultFunc: ((resultFuncArgs_0: {
233
- disabledItemsFocusable: boolean;
234
- itemModelLookup: {
235
- [itemId: string]: import("../../../index.js").TreeViewBaseItem<import("../../../index.js").TreeViewDefaultItemModelProperties>;
236
- };
237
- itemMetaLookup: {
238
- [itemId: string]: import("../../index.js").TreeViewItemMeta;
239
- };
240
- itemOrderedChildrenIdsLookup: {
241
- [parentItemId: string]: string[];
242
- };
243
- itemChildrenIndexesLookup: {
244
- [parentItemId: string]: {
245
- [itemId: string]: number;
246
- };
247
- };
248
- loading: boolean;
249
- error: Error | null;
250
- }) => {
251
- [itemId: string]: import("../../index.js").TreeViewItemMeta;
252
- }) & {
253
- clearCache: () => void;
254
- resultsCount: () => number;
255
- resetResultsCount: () => void;
256
- };
257
- lastResult: () => {
258
- [itemId: string]: import("../../index.js").TreeViewItemMeta;
259
- };
260
- dependencies: [TreeViewRootSelector<import("../useTreeViewItems/index.js").UseTreeViewItemsSignature>];
261
- recomputations: () => number;
262
- resetRecomputations: () => void;
263
- dependencyRecomputations: () => number;
264
- resetDependencyRecomputations: () => void;
265
- } & {
266
- memoize: typeof import("reselect").weakMapMemoize;
267
- argsMemoize: typeof import("reselect").weakMapMemoize;
268
- }, (_: any, itemId: string | null) => string | null];
269
- recomputations: () => number;
270
- resetRecomputations: () => void;
271
- dependencyRecomputations: () => number;
272
- resetDependencyRecomputations: () => void;
273
- } & {
274
- memoize: typeof import("reselect").weakMapMemoize;
275
- argsMemoize: typeof import("reselect").weakMapMemoize;
276
- }];
277
- recomputations: () => number;
278
- resetRecomputations: () => void;
279
- dependencyRecomputations: () => number;
280
- resetDependencyRecomputations: () => void;
281
- } & {
282
- memoize: typeof import("reselect").weakMapMemoize;
283
- argsMemoize: typeof import("reselect").weakMapMemoize;
284
- };
285
- /**
286
- * Get the slot that triggers the item's expansion when clicked.
287
- * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
288
- * @returns {'content' | 'iconContainer'} The slot that triggers the item's expansion when clicked. Is `null` if the item is not expandable.
289
- */
290
- export declare const selectorItemExpansionTrigger: ((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types.js").UseTreeViewIdState & import("./useTreeViewExpansion.types.js").UseTreeViewExpansionState & Partial<{}> & {
291
- cacheKey: import("../../models/index.js").TreeViewStateCacheKey;
292
- }) => "content" | "iconContainer") & {
293
- clearCache: () => void;
294
- resultsCount: () => number;
295
- resetResultsCount: () => void;
296
- } & {
297
- resultFunc: (resultFuncArgs_0: {
298
- expandedItems: string[];
299
- expansionTrigger: "content" | "iconContainer";
300
- }) => "content" | "iconContainer";
301
- memoizedResultFunc: ((resultFuncArgs_0: {
302
- expandedItems: string[];
303
- expansionTrigger: "content" | "iconContainer";
304
- }) => "content" | "iconContainer") & {
305
- clearCache: () => void;
306
- resultsCount: () => number;
307
- resetResultsCount: () => void;
308
- };
309
- lastResult: () => "content" | "iconContainer";
310
- dependencies: [TreeViewRootSelector<UseTreeViewExpansionSignature>];
311
- recomputations: () => number;
312
- resetRecomputations: () => void;
313
- dependencyRecomputations: () => number;
314
- resetDependencyRecomputations: () => void;
315
- } & {
316
- memoize: typeof import("reselect").weakMapMemoize;
317
- argsMemoize: typeof import("reselect").weakMapMemoize;
3
+ export declare const expansionSelectors: {
4
+ /**
5
+ * Gets the expanded items as provided to the component.
6
+ */
7
+ expandedItemsRaw: (state: TreeViewState<[UseTreeViewExpansionSignature]>) => string[];
8
+ /**
9
+ * Get the expanded items as a Map.
10
+ * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
11
+ * @returns {TreeViewExpansionValue} The expanded items as a Map.
12
+ */
13
+ expandedItemsMap: (args_0: import("../../corePlugins/useTreeViewId/useTreeViewId.types.js").UseTreeViewIdState & import("./useTreeViewExpansion.types.js").UseTreeViewExpansionState & Partial<{}>) => Map<string, true>;
14
+ /**
15
+ * Gets the slot that triggers the item's expansion when clicked.
16
+ */
17
+ triggerSlot: (state: TreeViewState<[UseTreeViewExpansionSignature]>) => "content" | "iconContainer";
18
+ /**
19
+ * Checks whether an item is expanded.
20
+ */
21
+ isItemExpanded: (args_0: import("../../corePlugins/useTreeViewId/useTreeViewId.types.js").UseTreeViewIdState & import("./useTreeViewExpansion.types.js").UseTreeViewExpansionState & Partial<{}>, itemId: string) => boolean;
22
+ /**
23
+ * Checks whether an item is expandable.
24
+ */
25
+ isItemExpandable: (args_0: import("../../corePlugins/useTreeViewId/useTreeViewId.types.js").UseTreeViewIdState & import("../useTreeViewItems/index.js").UseTreeViewItemsState<import("../../../index.js").TreeViewDefaultItemModelProperties> & Partial<{}>, _itemId: string) => boolean;
318
26
  };
@@ -3,48 +3,37 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.selectorItemExpansionTrigger = exports.selectorIsItemExpanded = exports.selectorIsItemExpandable = exports.selectorExpandedItemsMap = exports.selectorExpandedItems = void 0;
7
- var _selectors = require("../../utils/selectors");
6
+ exports.expansionSelectors = void 0;
7
+ var _store = require("@mui/x-internals/store");
8
8
  var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
9
- const selectorExpansion = state => state.expansion;
10
-
11
- /**
12
- * Get the expanded items.
13
- * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
14
- * @returns {TreeViewItemId[]} The expanded items.
15
- */
16
- const selectorExpandedItems = exports.selectorExpandedItems = (0, _selectors.createSelector)([selectorExpansion], expansionState => expansionState.expandedItems);
17
-
18
- /**
19
- * Get the expanded items as a Map.
20
- * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
21
- * @returns {TreeViewExpansionValue} The expanded items as a Map.
22
- */
23
- const selectorExpandedItemsMap = exports.selectorExpandedItemsMap = (0, _selectors.createSelector)([selectorExpandedItems], expandedItems => {
9
+ const expandedItemMapSelector = (0, _store.createSelectorMemoized)(state => state.expansion.expandedItems, expandedItems => {
24
10
  const expandedItemsMap = new Map();
25
11
  expandedItems.forEach(id => {
26
12
  expandedItemsMap.set(id, true);
27
13
  });
28
14
  return expandedItemsMap;
29
15
  });
30
-
31
- /**
32
- * Check if an item is expanded.
33
- * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
34
- * @returns {boolean} `true` if the item is expanded, `false` otherwise.
35
- */
36
- const selectorIsItemExpanded = exports.selectorIsItemExpanded = (0, _selectors.createSelector)([selectorExpandedItemsMap, (_, itemId) => itemId], (expandedItemsMap, itemId) => expandedItemsMap.has(itemId));
37
-
38
- /**
39
- * Check if an item is expandable.
40
- * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
41
- * @returns {boolean} `true` if the item is expandable, `false` otherwise.
42
- */
43
- const selectorIsItemExpandable = exports.selectorIsItemExpandable = (0, _selectors.createSelector)([_useTreeViewItems.selectorItemMeta], itemMeta => itemMeta?.expandable ?? false);
44
-
45
- /**
46
- * Get the slot that triggers the item's expansion when clicked.
47
- * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
48
- * @returns {'content' | 'iconContainer'} The slot that triggers the item's expansion when clicked. Is `null` if the item is not expandable.
49
- */
50
- const selectorItemExpansionTrigger = exports.selectorItemExpansionTrigger = (0, _selectors.createSelector)([selectorExpansion], expansionState => expansionState.expansionTrigger);
16
+ const expansionSelectors = exports.expansionSelectors = {
17
+ /**
18
+ * Gets the expanded items as provided to the component.
19
+ */
20
+ expandedItemsRaw: (0, _store.createSelector)(state => state.expansion.expandedItems),
21
+ /**
22
+ * Get the expanded items as a Map.
23
+ * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
24
+ * @returns {TreeViewExpansionValue} The expanded items as a Map.
25
+ */
26
+ expandedItemsMap: expandedItemMapSelector,
27
+ /**
28
+ * Gets the slot that triggers the item's expansion when clicked.
29
+ */
30
+ triggerSlot: (0, _store.createSelector)(state => state.expansion.expansionTrigger),
31
+ /**
32
+ * Checks whether an item is expanded.
33
+ */
34
+ isItemExpanded: (0, _store.createSelector)(expandedItemMapSelector, (expandedItemsMap, itemId) => expandedItemsMap.has(itemId)),
35
+ /**
36
+ * Checks whether an item is expandable.
37
+ */
38
+ isItemExpandable: (0, _store.createSelector)(_useTreeViewItems.itemsSelectors.itemMeta, (itemMeta, _itemId) => itemMeta?.expandable ?? false)
39
+ };
@@ -17,8 +17,14 @@ export interface UseTreeViewExpansionPublicAPI {
17
17
  event?: React.SyntheticEvent;
18
18
  shouldBeExpanded?: boolean;
19
19
  }) => void;
20
+ /**
21
+ * Check if an item is expanded.
22
+ * @param {TreeViewItemId} itemId The id of the item to check.
23
+ * @returns {boolean} `true` if the item is expanded, `false` otherwise.
24
+ */
25
+ isItemExpanded: (itemId: TreeViewItemId) => boolean;
20
26
  }
21
- export interface UseTreeViewExpansionInstance extends UseTreeViewExpansionPublicAPI {
27
+ export interface UseTreeViewExpansionInstance extends Omit<UseTreeViewExpansionPublicAPI, 'isItemExpanded'> {
22
28
  /**
23
29
  * Expand all the siblings (i.e.: the items that have the same parent) of a given item.
24
30
  * @param {React.SyntheticEvent} event The DOM event that triggered the change.
@@ -1,2 +1,3 @@
1
1
  export { useTreeViewFocus } from "./useTreeViewFocus.js";
2
- export type { UseTreeViewFocusSignature, UseTreeViewFocusParameters, UseTreeViewFocusParametersWithDefaults } from "./useTreeViewFocus.types.js";
2
+ export type { UseTreeViewFocusSignature, UseTreeViewFocusParameters, UseTreeViewFocusParametersWithDefaults } from "./useTreeViewFocus.types.js";
3
+ export { focusSelectors } from "./useTreeViewFocus.selectors.js";
@@ -3,10 +3,17 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "focusSelectors", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _useTreeViewFocus2.focusSelectors;
10
+ }
11
+ });
6
12
  Object.defineProperty(exports, "useTreeViewFocus", {
7
13
  enumerable: true,
8
14
  get: function () {
9
15
  return _useTreeViewFocus.useTreeViewFocus;
10
16
  }
11
17
  });
12
- var _useTreeViewFocus = require("./useTreeViewFocus");
18
+ var _useTreeViewFocus = require("./useTreeViewFocus");
19
+ var _useTreeViewFocus2 = require("./useTreeViewFocus.selectors");
@@ -17,21 +17,17 @@ const useTreeViewFocus = ({
17
17
  store
18
18
  }) => {
19
19
  const setFocusedItemId = (0, _useEventCallback.default)(itemId => {
20
- store.update(prevState => {
21
- const focusedItemId = (0, _useTreeViewFocus.selectorFocusedItemId)(prevState);
22
- if (focusedItemId === itemId) {
23
- return prevState;
24
- }
25
- return (0, _extends2.default)({}, prevState, {
26
- focus: (0, _extends2.default)({}, prevState.focus, {
27
- focusedItemId: itemId
28
- })
29
- });
30
- });
20
+ const focusedItemId = _useTreeViewFocus.focusSelectors.focusedItemId(store.state);
21
+ if (focusedItemId === itemId) {
22
+ return;
23
+ }
24
+ store.set('focus', (0, _extends2.default)({}, store.state.focus, {
25
+ focusedItemId: itemId
26
+ }));
31
27
  });
32
28
  const isItemVisible = itemId => {
33
- const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, itemId);
34
- return itemMeta && (itemMeta.parentId == null || (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemMeta.parentId));
29
+ const itemMeta = _useTreeViewItems.itemsSelectors.itemMeta(store.state, itemId);
30
+ return itemMeta && (itemMeta.parentId == null || _useTreeViewExpansion.expansionSelectors.isItemExpanded(store.state, itemMeta.parentId));
35
31
  };
36
32
  const innerFocusItem = (event, itemId) => {
37
33
  const itemElement = instance.getItemDOMElement(itemId);
@@ -50,11 +46,11 @@ const useTreeViewFocus = ({
50
46
  }
51
47
  });
52
48
  const removeFocusedItem = (0, _useEventCallback.default)(() => {
53
- const focusedItemId = (0, _useTreeViewFocus.selectorFocusedItemId)(store.value);
49
+ const focusedItemId = _useTreeViewFocus.focusSelectors.focusedItemId(store.state);
54
50
  if (focusedItemId == null) {
55
51
  return;
56
52
  }
57
- const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, focusedItemId);
53
+ const itemMeta = _useTreeViewItems.itemsSelectors.itemMeta(store.state, focusedItemId);
58
54
  if (itemMeta) {
59
55
  const itemElement = instance.getItemDOMElement(focusedItemId);
60
56
  if (itemElement) {
@@ -66,8 +62,8 @@ const useTreeViewFocus = ({
66
62
  (0, _useInstanceEventHandler.useInstanceEventHandler)(instance, 'removeItem', ({
67
63
  id
68
64
  }) => {
69
- const focusedItemId = (0, _useTreeViewFocus.selectorFocusedItemId)(store.value);
70
- const defaultFocusableItemId = (0, _useTreeViewFocus.selectorDefaultFocusableItemId)(store.value);
65
+ const focusedItemId = _useTreeViewFocus.focusSelectors.focusedItemId(store.state);
66
+ const defaultFocusableItemId = _useTreeViewFocus.focusSelectors.defaultFocusableItemId(store.state);
71
67
  if (focusedItemId === id && defaultFocusableItemId != null) {
72
68
  innerFocusItem(null, defaultFocusableItemId);
73
69
  }
@@ -79,7 +75,7 @@ const useTreeViewFocus = ({
79
75
  }
80
76
 
81
77
  // if the event bubbled (which is React specific) we don't want to steal focus
82
- const defaultFocusableItemId = (0, _useTreeViewFocus.selectorDefaultFocusableItemId)(store.value);
78
+ const defaultFocusableItemId = _useTreeViewFocus.focusSelectors.defaultFocusableItemId(store.state);
83
79
  if (event.target === event.currentTarget && defaultFocusableItemId != null) {
84
80
  innerFocusItem(event, defaultFocusableItemId);
85
81
  }