@mui/x-tree-view 8.0.0-beta.0 → 8.0.0-beta.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 (69) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/esm/hooks/useTreeItemUtils/useTreeItemUtils.js +8 -14
  3. package/esm/index.js +1 -1
  4. package/esm/internals/models/itemPlugin.d.ts +3 -3
  5. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +3 -8
  6. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +1 -4
  7. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +6 -6
  8. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +13 -15
  9. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -3
  10. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +9 -12
  11. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -11
  12. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -20
  13. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +5 -7
  14. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +5 -4
  15. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -2
  16. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +16 -21
  17. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -38
  18. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +331 -0
  19. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +38 -1
  20. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +5 -4
  21. package/esm/internals/utils/selectors.d.ts +1 -1
  22. package/esm/useTreeItem/useTreeItem.js +11 -17
  23. package/esm/useTreeItem/useTreeItem.types.d.ts +0 -4
  24. package/hooks/useTreeItemUtils/useTreeItemUtils.js +7 -13
  25. package/index.js +1 -1
  26. package/internals/models/itemPlugin.d.ts +3 -3
  27. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +3 -8
  28. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +1 -4
  29. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +6 -6
  30. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +12 -14
  31. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -3
  32. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +9 -12
  33. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -12
  34. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -20
  35. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +5 -7
  36. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +5 -4
  37. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -2
  38. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +15 -20
  39. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +42 -37
  40. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +331 -0
  41. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +39 -2
  42. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +5 -4
  43. package/internals/utils/selectors.d.ts +1 -1
  44. package/modern/hooks/useTreeItemUtils/useTreeItemUtils.js +8 -14
  45. package/modern/index.js +1 -1
  46. package/modern/internals/models/itemPlugin.d.ts +3 -3
  47. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +3 -8
  48. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +1 -4
  49. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +6 -6
  50. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +13 -15
  51. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -3
  52. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +9 -12
  53. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -11
  54. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -20
  55. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +5 -7
  56. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +5 -4
  57. package/modern/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -2
  58. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +16 -21
  59. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -38
  60. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +331 -0
  61. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +38 -1
  62. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +5 -4
  63. package/modern/internals/utils/selectors.d.ts +1 -1
  64. package/modern/useTreeItem/useTreeItem.js +11 -17
  65. package/modern/useTreeItem/useTreeItem.types.d.ts +0 -4
  66. package/package.json +1 -1
  67. package/tsconfig.build.tsbuildinfo +1 -1
  68. package/useTreeItem/useTreeItem.js +11 -17
  69. package/useTreeItem/useTreeItem.types.d.ts +0 -4
@@ -6,16 +6,18 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.useTreeViewSelectionItemPlugin = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _fastObjectShallowCompare = require("@mui/x-internals/fastObjectShallowCompare");
9
10
  var _TreeViewProvider = require("../../TreeViewProvider");
10
11
  var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
11
12
  var _useTreeViewSelection = require("./useTreeViewSelection.selectors");
12
13
  var _useSelector = require("../../hooks/useSelector");
13
- function selectorItemCheckboxStatus(state, {
14
- itemId,
15
- selectionPropagation
16
- }) {
14
+ function selectorItemCheckboxStatus(state, itemId) {
15
+ const isCheckboxSelectionEnabled = (0, _useTreeViewSelection.selectorIsCheckboxSelectionEnabled)(state);
16
+ const isSelectionEnabledForItem = (0, _useTreeViewSelection.selectorIsItemSelectionEnabled)(state, itemId);
17
17
  if ((0, _useTreeViewSelection.selectorIsItemSelected)(state, itemId)) {
18
18
  return {
19
+ disabled: !isSelectionEnabledForItem,
20
+ visible: isCheckboxSelectionEnabled,
19
21
  indeterminate: false,
20
22
  checked: true
21
23
  };
@@ -23,6 +25,8 @@ function selectorItemCheckboxStatus(state, {
23
25
  const children = (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(state, itemId);
24
26
  if (children.length === 0) {
25
27
  return {
28
+ disabled: !isSelectionEnabledForItem,
29
+ visible: isCheckboxSelectionEnabled,
26
30
  indeterminate: false,
27
31
  checked: false
28
32
  };
@@ -41,8 +45,10 @@ function selectorItemCheckboxStatus(state, {
41
45
  };
42
46
  traverseDescendants(itemId);
43
47
  return {
48
+ disabled: !isSelectionEnabledForItem,
49
+ visible: isCheckboxSelectionEnabled,
44
50
  indeterminate: hasSelectedDescendant && hasUnSelectedDescendant || !hasUnSelectedDescendant,
45
- checked: selectionPropagation.parents ? hasSelectedDescendant : false
51
+ checked: (0, _useTreeViewSelection.selectorSelectionPropagationRules)(state).parents ? hasSelectedDescendant : false
46
52
  };
47
53
  }
48
54
  const useTreeViewSelectionItemPlugin = ({
@@ -52,37 +58,26 @@ const useTreeViewSelectionItemPlugin = ({
52
58
  itemId
53
59
  } = props;
54
60
  const {
55
- store,
56
- selection: {
57
- disableSelection,
58
- checkboxSelection,
59
- selectionPropagation
60
- }
61
+ store
61
62
  } = (0, _TreeViewProvider.useTreeViewContext)();
62
- const checkboxStatus = (0, _useSelector.useSelector)(store, selectorItemCheckboxStatus, {
63
- itemId,
64
- selectionPropagation
65
- }, (a, b) => a.checked === b.checked && a.indeterminate === b.indeterminate);
63
+ const checkboxStatus = (0, _useSelector.useSelector)(store, selectorItemCheckboxStatus, itemId, _fastObjectShallowCompare.fastObjectShallowCompare);
66
64
  return {
67
65
  propsEnhancers: {
68
66
  checkbox: ({
69
67
  externalEventHandlers,
70
- interactions,
71
- status
68
+ interactions
72
69
  }) => {
73
70
  const handleChange = event => {
74
71
  externalEventHandlers.onChange?.(event);
75
72
  if (event.defaultMuiPrevented) {
76
73
  return;
77
74
  }
78
- if (disableSelection || status.disabled) {
75
+ if (!(0, _useTreeViewSelection.selectorIsItemSelectionEnabled)(store.value, itemId)) {
79
76
  return;
80
77
  }
81
78
  interactions.handleCheckboxSelection(event);
82
79
  };
83
80
  return (0, _extends2.default)({
84
- visible: checkboxSelection,
85
- disabled: disableSelection || status.disabled,
86
81
  tabIndex: -1,
87
82
  onChange: handleChange
88
83
  }, checkboxStatus);
@@ -20,16 +20,10 @@ const useTreeViewSelection = ({
20
20
  }) => {
21
21
  const lastSelectedItem = React.useRef(null);
22
22
  const lastSelectedRange = React.useRef({});
23
- (0, _useEnhancedEffect.default)(() => {
24
- store.update(prevState => (0, _extends2.default)({}, prevState, {
25
- selection: {
26
- selectedItemsMap: (0, _useTreeViewSelection.createSelectedItemsMap)(models.selectedItems.value)
27
- }
28
- }));
29
- }, [store, models.selectedItems.value]);
30
23
  const setSelectedItems = (event, newModel, additionalItemsToPropagate) => {
31
24
  let cleanModel;
32
- if (params.multiSelect && (params.selectionPropagation.descendants || params.selectionPropagation.parents)) {
25
+ const isMultiSelectEnabled = (0, _useTreeViewSelection2.selectorIsMultiSelectEnabled)(store.value);
26
+ if (isMultiSelectEnabled && (params.selectionPropagation.descendants || params.selectionPropagation.parents)) {
33
27
  cleanModel = (0, _useTreeViewSelection.propagateSelection)({
34
28
  store,
35
29
  selectionPropagation: params.selectionPropagation,
@@ -41,7 +35,7 @@ const useTreeViewSelection = ({
41
35
  cleanModel = newModel;
42
36
  }
43
37
  if (params.onItemSelectionToggle) {
44
- if (params.multiSelect) {
38
+ if (isMultiSelectEnabled) {
45
39
  const changes = (0, _useTreeViewSelection.getAddedAndRemovedItems)({
46
40
  store,
47
41
  newModel: cleanModel,
@@ -75,10 +69,11 @@ const useTreeViewSelection = ({
75
69
  keepExistingSelection = false,
76
70
  shouldBeSelected
77
71
  }) => {
78
- if (params.disableSelection) {
72
+ if (!(0, _useTreeViewSelection2.selectorIsSelectionEnabled)(store.value)) {
79
73
  return;
80
74
  }
81
75
  let newSelected;
76
+ const isMultiSelectEnabled = (0, _useTreeViewSelection2.selectorIsMultiSelectEnabled)(store.value);
82
77
  if (keepExistingSelection) {
83
78
  const cleanSelectedItems = (0, _useTreeViewSelection.convertSelectedItemsToArray)(models.selectedItems.value);
84
79
  const isSelectedBefore = (0, _useTreeViewSelection2.selectorIsItemSelected)(store.value, itemId);
@@ -92,9 +87,9 @@ const useTreeViewSelection = ({
92
87
  } else {
93
88
  // eslint-disable-next-line no-lonely-if
94
89
  if (shouldBeSelected === false || shouldBeSelected == null && (0, _useTreeViewSelection2.selectorIsItemSelected)(store.value, itemId)) {
95
- newSelected = params.multiSelect ? [] : null;
90
+ newSelected = isMultiSelectEnabled ? [] : null;
96
91
  } else {
97
- newSelected = params.multiSelect ? [itemId] : itemId;
92
+ newSelected = isMultiSelectEnabled ? [itemId] : itemId;
98
93
  }
99
94
  }
100
95
  setSelectedItems(event, newSelected,
@@ -105,7 +100,8 @@ const useTreeViewSelection = ({
105
100
  lastSelectedRange.current = {};
106
101
  };
107
102
  const selectRange = (event, [start, end]) => {
108
- if (params.disableSelection || !params.multiSelect) {
103
+ const isMultiSelectEnabled = (0, _useTreeViewSelection2.selectorIsMultiSelectEnabled)(store.value);
104
+ if (!isMultiSelectEnabled) {
109
105
  return;
110
106
  }
111
107
  let newSelectedItems = (0, _useTreeViewSelection.convertSelectedItemsToArray)(models.selectedItems.value).slice();
@@ -137,7 +133,8 @@ const useTreeViewSelection = ({
137
133
  selectRange(event, [itemId, (0, _tree.getLastNavigableItem)(store.value)]);
138
134
  };
139
135
  const selectAllNavigableItems = event => {
140
- if (params.disableSelection || !params.multiSelect) {
136
+ const isMultiSelectEnabled = (0, _useTreeViewSelection2.selectorIsMultiSelectEnabled)(store.value);
137
+ if (!isMultiSelectEnabled) {
141
138
  return;
142
139
  }
143
140
  const navigableItems = (0, _tree.getAllNavigableItems)(store.value);
@@ -145,7 +142,8 @@ const useTreeViewSelection = ({
145
142
  lastSelectedRange.current = (0, _useTreeViewSelection.getLookupFromArray)(navigableItems);
146
143
  };
147
144
  const selectItemFromArrowNavigation = (event, currentItem, nextItem) => {
148
- if (params.disableSelection || !params.multiSelect) {
145
+ const isMultiSelectEnabled = (0, _useTreeViewSelection2.selectorIsMultiSelectEnabled)(store.value);
146
+ if (!isMultiSelectEnabled) {
149
147
  return;
150
148
  }
151
149
  let newSelectedItems = (0, _useTreeViewSelection.convertSelectedItemsToArray)(models.selectedItems.value).slice();
@@ -169,17 +167,22 @@ const useTreeViewSelection = ({
169
167
  }
170
168
  setSelectedItems(event, newSelectedItems);
171
169
  };
172
- const pluginContextValue = React.useMemo(() => ({
173
- selection: {
174
- multiSelect: params.multiSelect,
175
- checkboxSelection: params.checkboxSelection,
176
- disableSelection: params.disableSelection,
177
- selectionPropagation: {
178
- descendants: params.selectionPropagation.descendants,
179
- parents: params.selectionPropagation.parents
170
+ (0, _useEnhancedEffect.default)(() => {
171
+ store.update(prevState => (0, _extends2.default)({}, prevState, {
172
+ selection: {
173
+ rawSelectedItems: models.selectedItems.value,
174
+ // Only re-compute the map when the model changes.
175
+ selectedItemsMap: prevState.selection.rawSelectedItems === models.selectedItems.value ? prevState.selection.selectedItemsMap : (0, _useTreeViewSelection.createSelectedItemsMap)(models.selectedItems.value),
176
+ isEnabled: !params.disableSelection,
177
+ isMultiSelectEnabled: params.multiSelect,
178
+ isCheckboxSelectionEnabled: params.checkboxSelection,
179
+ selectionPropagation: {
180
+ descendants: params.selectionPropagation.descendants,
181
+ parents: params.selectionPropagation.parents
182
+ }
180
183
  }
181
- }
182
- }), [params.multiSelect, params.checkboxSelection, params.disableSelection, params.selectionPropagation.descendants, params.selectionPropagation.parents]);
184
+ }));
185
+ }, [store, models.selectedItems.value, params.multiSelect, params.checkboxSelection, params.disableSelection, params.selectionPropagation.descendants, params.selectionPropagation.parents]);
183
186
  return {
184
187
  getRootProps: () => ({
185
188
  'aria-multiselectable': params.multiSelect
@@ -194,8 +197,7 @@ const useTreeViewSelection = ({
194
197
  selectRangeFromStartToItem,
195
198
  selectRangeFromItemToEnd,
196
199
  selectItemFromArrowNavigation
197
- },
198
- contextValue: pluginContextValue
200
+ }
199
201
  };
200
202
  };
201
203
  exports.useTreeViewSelection = useTreeViewSelection;
@@ -216,16 +218,19 @@ useTreeViewSelection.getDefaultizedParams = ({
216
218
  defaultSelectedItems: params.defaultSelectedItems ?? (params.multiSelect ? DEFAULT_SELECTED_ITEMS : null),
217
219
  selectionPropagation: params.selectionPropagation ?? EMPTY_SELECTION_PROPAGATION
218
220
  });
219
- useTreeViewSelection.getInitialState = params => ({
220
- selection: {
221
- selectedItemsMap: (0, _useTreeViewSelection.createSelectedItemsMap)(params.selectedItems === undefined ? params.defaultSelectedItems : params.selectedItems)
222
- }
223
- });
224
- useTreeViewSelection.getInitialState = params => ({
225
- selection: {
226
- selectedItemsMap: (0, _useTreeViewSelection.createSelectedItemsMap)(params.selectedItems === undefined ? params.defaultSelectedItems : params.selectedItems)
227
- }
228
- });
221
+ useTreeViewSelection.getInitialState = params => {
222
+ const rawSelectedItems = params.selectedItems === undefined ? params.defaultSelectedItems : params.selectedItems;
223
+ return {
224
+ selection: {
225
+ rawSelectedItems,
226
+ selectedItemsMap: (0, _useTreeViewSelection.createSelectedItemsMap)(rawSelectedItems),
227
+ isEnabled: !params.disableSelection,
228
+ isMultiSelectEnabled: params.multiSelect,
229
+ isCheckboxSelectionEnabled: params.checkboxSelection,
230
+ selectionPropagation: params.selectionPropagation
231
+ }
232
+ };
233
+ };
229
234
  useTreeViewSelection.params = {
230
235
  disableSelection: true,
231
236
  multiSelect: true,
@@ -11,10 +11,20 @@ export declare const selectorIsItemSelected: ((state: any, itemId: string) => bo
11
11
  resetResultsCount: () => void;
12
12
  } & {
13
13
  resultFunc: (resultFuncArgs_0: {
14
+ rawSelectedItems: string | string[] | null;
14
15
  selectedItemsMap: Map<string, true>;
16
+ isEnabled: boolean;
17
+ isMultiSelectEnabled: boolean;
18
+ isCheckboxSelectionEnabled: boolean;
19
+ selectionPropagation: import("../../..").TreeViewSelectionPropagation;
15
20
  }, resultFuncArgs_1: string) => boolean;
16
21
  memoizedResultFunc: ((resultFuncArgs_0: {
22
+ rawSelectedItems: string | string[] | null;
17
23
  selectedItemsMap: Map<string, true>;
24
+ isEnabled: boolean;
25
+ isMultiSelectEnabled: boolean;
26
+ isCheckboxSelectionEnabled: boolean;
27
+ selectionPropagation: import("../../..").TreeViewSelectionPropagation;
18
28
  }, resultFuncArgs_1: string) => boolean) & {
19
29
  clearCache: () => void;
20
30
  resultsCount: () => number;
@@ -29,4 +39,325 @@ export declare const selectorIsItemSelected: ((state: any, itemId: string) => bo
29
39
  } & {
30
40
  argsMemoize: typeof import("reselect").weakMapMemoize;
31
41
  memoize: typeof import("reselect").weakMapMemoize;
42
+ };
43
+ /**
44
+ * Check if multi selection is enabled.
45
+ * @param {TreeViewState<[UseTreeViewSelectionSignature]>} state The state of the tree view.
46
+ * @returns {boolean} `true` if multi selection is enabled, `false` otherwise.
47
+ */
48
+ export declare const selectorIsMultiSelectEnabled: ((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types").UseTreeViewIdState & import("./useTreeViewSelection.types").UseTreeViewSelectionState & Partial<{}> & {
49
+ cacheKey: import("../../models").TreeViewStateCacheKey;
50
+ }) => boolean) & {
51
+ clearCache: () => void;
52
+ resultsCount: () => number;
53
+ resetResultsCount: () => void;
54
+ } & {
55
+ resultFunc: (resultFuncArgs_0: {
56
+ rawSelectedItems: string | string[] | null;
57
+ selectedItemsMap: Map<string, true>;
58
+ isEnabled: boolean;
59
+ isMultiSelectEnabled: boolean;
60
+ isCheckboxSelectionEnabled: boolean;
61
+ selectionPropagation: import("../../..").TreeViewSelectionPropagation;
62
+ }) => boolean;
63
+ memoizedResultFunc: ((resultFuncArgs_0: {
64
+ rawSelectedItems: string | string[] | null;
65
+ selectedItemsMap: Map<string, true>;
66
+ isEnabled: boolean;
67
+ isMultiSelectEnabled: boolean;
68
+ isCheckboxSelectionEnabled: boolean;
69
+ selectionPropagation: import("../../..").TreeViewSelectionPropagation;
70
+ }) => boolean) & {
71
+ clearCache: () => void;
72
+ resultsCount: () => number;
73
+ resetResultsCount: () => void;
74
+ };
75
+ lastResult: () => boolean;
76
+ dependencies: [TreeViewRootSelector<UseTreeViewSelectionSignature>];
77
+ recomputations: () => number;
78
+ resetRecomputations: () => void;
79
+ dependencyRecomputations: () => number;
80
+ resetDependencyRecomputations: () => void;
81
+ } & {
82
+ argsMemoize: typeof import("reselect").weakMapMemoize;
83
+ memoize: typeof import("reselect").weakMapMemoize;
84
+ };
85
+ /**
86
+ * Check if selection is enabled.
87
+ * @param {TreeViewState<[UseTreeViewSelectionSignature]>} state The state of the tree view.
88
+ * @returns {boolean} `true` if selection is enabled, `false` otherwise.
89
+ */
90
+ export declare const selectorIsSelectionEnabled: ((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types").UseTreeViewIdState & import("./useTreeViewSelection.types").UseTreeViewSelectionState & Partial<{}> & {
91
+ cacheKey: import("../../models").TreeViewStateCacheKey;
92
+ }) => boolean) & {
93
+ clearCache: () => void;
94
+ resultsCount: () => number;
95
+ resetResultsCount: () => void;
96
+ } & {
97
+ resultFunc: (resultFuncArgs_0: {
98
+ rawSelectedItems: string | string[] | null;
99
+ selectedItemsMap: Map<string, true>;
100
+ isEnabled: boolean;
101
+ isMultiSelectEnabled: boolean;
102
+ isCheckboxSelectionEnabled: boolean;
103
+ selectionPropagation: import("../../..").TreeViewSelectionPropagation;
104
+ }) => boolean;
105
+ memoizedResultFunc: ((resultFuncArgs_0: {
106
+ rawSelectedItems: string | string[] | null;
107
+ selectedItemsMap: Map<string, true>;
108
+ isEnabled: boolean;
109
+ isMultiSelectEnabled: boolean;
110
+ isCheckboxSelectionEnabled: boolean;
111
+ selectionPropagation: import("../../..").TreeViewSelectionPropagation;
112
+ }) => boolean) & {
113
+ clearCache: () => void;
114
+ resultsCount: () => number;
115
+ resetResultsCount: () => void;
116
+ };
117
+ lastResult: () => boolean;
118
+ dependencies: [TreeViewRootSelector<UseTreeViewSelectionSignature>];
119
+ recomputations: () => number;
120
+ resetRecomputations: () => void;
121
+ dependencyRecomputations: () => number;
122
+ resetDependencyRecomputations: () => void;
123
+ } & {
124
+ argsMemoize: typeof import("reselect").weakMapMemoize;
125
+ memoize: typeof import("reselect").weakMapMemoize;
126
+ };
127
+ /**
128
+ * Check if checkbox selection is enabled.
129
+ * @param {TreeViewState<[UseTreeViewSelectionSignature]>} state The state of the tree view.
130
+ * @returns {boolean} `true` if checkbox selection is enabled, `false` otherwise.
131
+ */
132
+ export declare const selectorIsCheckboxSelectionEnabled: ((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types").UseTreeViewIdState & import("./useTreeViewSelection.types").UseTreeViewSelectionState & Partial<{}> & {
133
+ cacheKey: import("../../models").TreeViewStateCacheKey;
134
+ }) => boolean) & {
135
+ clearCache: () => void;
136
+ resultsCount: () => number;
137
+ resetResultsCount: () => void;
138
+ } & {
139
+ resultFunc: (resultFuncArgs_0: {
140
+ rawSelectedItems: string | string[] | null;
141
+ selectedItemsMap: Map<string, true>;
142
+ isEnabled: boolean;
143
+ isMultiSelectEnabled: boolean;
144
+ isCheckboxSelectionEnabled: boolean;
145
+ selectionPropagation: import("../../..").TreeViewSelectionPropagation;
146
+ }) => boolean;
147
+ memoizedResultFunc: ((resultFuncArgs_0: {
148
+ rawSelectedItems: string | string[] | null;
149
+ selectedItemsMap: Map<string, true>;
150
+ isEnabled: boolean;
151
+ isMultiSelectEnabled: boolean;
152
+ isCheckboxSelectionEnabled: boolean;
153
+ selectionPropagation: import("../../..").TreeViewSelectionPropagation;
154
+ }) => boolean) & {
155
+ clearCache: () => void;
156
+ resultsCount: () => number;
157
+ resetResultsCount: () => void;
158
+ };
159
+ lastResult: () => boolean;
160
+ dependencies: [TreeViewRootSelector<UseTreeViewSelectionSignature>];
161
+ recomputations: () => number;
162
+ resetRecomputations: () => void;
163
+ dependencyRecomputations: () => number;
164
+ resetDependencyRecomputations: () => void;
165
+ } & {
166
+ argsMemoize: typeof import("reselect").weakMapMemoize;
167
+ memoize: typeof import("reselect").weakMapMemoize;
168
+ };
169
+ /**
170
+ * Check if selection is enabled for an item (if selection is enabled and if the item is not disabled).
171
+ * @param {TreeViewState<[UseTreeViewSelectionSignature]>} state The state of the tree view.
172
+ * @param {string} itemId The id of the item to check.
173
+ * @returns {boolean} `true` if selection is enabled for the item, `false` otherwise.
174
+ */
175
+ export declare const selectorIsItemSelectionEnabled: ((state: any, itemId: string) => boolean) & {
176
+ clearCache: () => void;
177
+ resultsCount: () => number;
178
+ resetResultsCount: () => void;
179
+ } & {
180
+ resultFunc: (resultFuncArgs_0: boolean, resultFuncArgs_1: boolean) => boolean;
181
+ memoizedResultFunc: ((resultFuncArgs_0: boolean, resultFuncArgs_1: boolean) => boolean) & {
182
+ clearCache: () => void;
183
+ resultsCount: () => number;
184
+ resetResultsCount: () => void;
185
+ };
186
+ lastResult: () => boolean;
187
+ dependencies: [((state: any, itemId: string) => boolean) & {
188
+ clearCache: () => void;
189
+ resultsCount: () => number;
190
+ resetResultsCount: () => void;
191
+ } & {
192
+ resultFunc: (resultFuncArgs_0: {
193
+ [itemId: string]: import("../..").TreeViewItemMeta;
194
+ }, resultFuncArgs_1: string) => boolean;
195
+ memoizedResultFunc: ((resultFuncArgs_0: {
196
+ [itemId: string]: import("../..").TreeViewItemMeta;
197
+ }, resultFuncArgs_1: string) => boolean) & {
198
+ clearCache: () => void;
199
+ resultsCount: () => number;
200
+ resetResultsCount: () => void;
201
+ };
202
+ lastResult: () => boolean;
203
+ dependencies: [((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types").UseTreeViewIdState & import("../useTreeViewItems").UseTreeViewItemsState<import("../../..").TreeViewDefaultItemModelProperties> & Partial<{}> & {
204
+ cacheKey: import("../../models").TreeViewStateCacheKey;
205
+ }) => {
206
+ [itemId: string]: import("../..").TreeViewItemMeta;
207
+ }) & {
208
+ clearCache: () => void;
209
+ resultsCount: () => number;
210
+ resetResultsCount: () => void;
211
+ } & {
212
+ resultFunc: (resultFuncArgs_0: {
213
+ disabledItemsFocusable: boolean;
214
+ itemModelLookup: {
215
+ [itemId: string]: import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>;
216
+ };
217
+ itemMetaLookup: {
218
+ [itemId: string]: import("../..").TreeViewItemMeta;
219
+ };
220
+ itemOrderedChildrenIdsLookup: {
221
+ [parentItemId: string]: string[];
222
+ };
223
+ itemChildrenIndexesLookup: {
224
+ [parentItemId: string]: {
225
+ [itemId: string]: number;
226
+ };
227
+ };
228
+ loading: boolean;
229
+ error: Error | null;
230
+ }) => {
231
+ [itemId: string]: import("../..").TreeViewItemMeta;
232
+ };
233
+ memoizedResultFunc: ((resultFuncArgs_0: {
234
+ disabledItemsFocusable: boolean;
235
+ itemModelLookup: {
236
+ [itemId: string]: import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>;
237
+ };
238
+ itemMetaLookup: {
239
+ [itemId: string]: import("../..").TreeViewItemMeta;
240
+ };
241
+ itemOrderedChildrenIdsLookup: {
242
+ [parentItemId: string]: string[];
243
+ };
244
+ itemChildrenIndexesLookup: {
245
+ [parentItemId: string]: {
246
+ [itemId: string]: number;
247
+ };
248
+ };
249
+ loading: boolean;
250
+ error: Error | null;
251
+ }) => {
252
+ [itemId: string]: import("../..").TreeViewItemMeta;
253
+ }) & {
254
+ clearCache: () => void;
255
+ resultsCount: () => number;
256
+ resetResultsCount: () => void;
257
+ };
258
+ lastResult: () => {
259
+ [itemId: string]: import("../..").TreeViewItemMeta;
260
+ };
261
+ dependencies: [TreeViewRootSelector<import("../useTreeViewItems").UseTreeViewItemsSignature>];
262
+ recomputations: () => number;
263
+ resetRecomputations: () => void;
264
+ dependencyRecomputations: () => number;
265
+ resetDependencyRecomputations: () => void;
266
+ } & {
267
+ argsMemoize: typeof import("reselect").weakMapMemoize;
268
+ memoize: typeof import("reselect").weakMapMemoize;
269
+ }, (_: any, itemId: string) => string];
270
+ recomputations: () => number;
271
+ resetRecomputations: () => void;
272
+ dependencyRecomputations: () => number;
273
+ resetDependencyRecomputations: () => void;
274
+ } & {
275
+ argsMemoize: typeof import("reselect").weakMapMemoize;
276
+ memoize: typeof import("reselect").weakMapMemoize;
277
+ }, ((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types").UseTreeViewIdState & import("./useTreeViewSelection.types").UseTreeViewSelectionState & Partial<{}> & {
278
+ cacheKey: import("../../models").TreeViewStateCacheKey;
279
+ }) => boolean) & {
280
+ clearCache: () => void;
281
+ resultsCount: () => number;
282
+ resetResultsCount: () => void;
283
+ } & {
284
+ resultFunc: (resultFuncArgs_0: {
285
+ rawSelectedItems: string | string[] | null;
286
+ selectedItemsMap: Map<string, true>;
287
+ isEnabled: boolean;
288
+ isMultiSelectEnabled: boolean;
289
+ isCheckboxSelectionEnabled: boolean;
290
+ selectionPropagation: import("../../..").TreeViewSelectionPropagation;
291
+ }) => boolean;
292
+ memoizedResultFunc: ((resultFuncArgs_0: {
293
+ rawSelectedItems: string | string[] | null;
294
+ selectedItemsMap: Map<string, true>;
295
+ isEnabled: boolean;
296
+ isMultiSelectEnabled: boolean;
297
+ isCheckboxSelectionEnabled: boolean;
298
+ selectionPropagation: import("../../..").TreeViewSelectionPropagation;
299
+ }) => boolean) & {
300
+ clearCache: () => void;
301
+ resultsCount: () => number;
302
+ resetResultsCount: () => void;
303
+ };
304
+ lastResult: () => boolean;
305
+ dependencies: [TreeViewRootSelector<UseTreeViewSelectionSignature>];
306
+ recomputations: () => number;
307
+ resetRecomputations: () => void;
308
+ dependencyRecomputations: () => number;
309
+ resetDependencyRecomputations: () => void;
310
+ } & {
311
+ argsMemoize: typeof import("reselect").weakMapMemoize;
312
+ memoize: typeof import("reselect").weakMapMemoize;
313
+ }];
314
+ recomputations: () => number;
315
+ resetRecomputations: () => void;
316
+ dependencyRecomputations: () => number;
317
+ resetDependencyRecomputations: () => void;
318
+ } & {
319
+ argsMemoize: typeof import("reselect").weakMapMemoize;
320
+ memoize: typeof import("reselect").weakMapMemoize;
321
+ };
322
+ /**
323
+ * Get the selection propagation rules.
324
+ * @param {TreeViewState<[UseTreeViewSelectionSignature]>} state The state of the tree view.
325
+ * @returns {TreeViewSelectionPropagation} The selection propagation rules.
326
+ */
327
+ export declare const selectorSelectionPropagationRules: ((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types").UseTreeViewIdState & import("./useTreeViewSelection.types").UseTreeViewSelectionState & Partial<{}> & {
328
+ cacheKey: import("../../models").TreeViewStateCacheKey;
329
+ }) => import("../../..").TreeViewSelectionPropagation) & {
330
+ clearCache: () => void;
331
+ resultsCount: () => number;
332
+ resetResultsCount: () => void;
333
+ } & {
334
+ resultFunc: (resultFuncArgs_0: {
335
+ rawSelectedItems: string | string[] | null;
336
+ selectedItemsMap: Map<string, true>;
337
+ isEnabled: boolean;
338
+ isMultiSelectEnabled: boolean;
339
+ isCheckboxSelectionEnabled: boolean;
340
+ selectionPropagation: import("../../..").TreeViewSelectionPropagation;
341
+ }) => import("../../..").TreeViewSelectionPropagation;
342
+ memoizedResultFunc: ((resultFuncArgs_0: {
343
+ rawSelectedItems: string | string[] | null;
344
+ selectedItemsMap: Map<string, true>;
345
+ isEnabled: boolean;
346
+ isMultiSelectEnabled: boolean;
347
+ isCheckboxSelectionEnabled: boolean;
348
+ selectionPropagation: import("../../..").TreeViewSelectionPropagation;
349
+ }) => import("../../..").TreeViewSelectionPropagation) & {
350
+ clearCache: () => void;
351
+ resultsCount: () => number;
352
+ resetResultsCount: () => void;
353
+ };
354
+ lastResult: () => import("../../..").TreeViewSelectionPropagation;
355
+ dependencies: [TreeViewRootSelector<UseTreeViewSelectionSignature>];
356
+ recomputations: () => number;
357
+ resetRecomputations: () => void;
358
+ dependencyRecomputations: () => number;
359
+ resetDependencyRecomputations: () => void;
360
+ } & {
361
+ argsMemoize: typeof import("reselect").weakMapMemoize;
362
+ memoize: typeof import("reselect").weakMapMemoize;
32
363
  };
@@ -3,8 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.selectorIsItemSelected = void 0;
6
+ exports.selectorSelectionPropagationRules = exports.selectorIsSelectionEnabled = exports.selectorIsMultiSelectEnabled = exports.selectorIsItemSelectionEnabled = exports.selectorIsItemSelected = exports.selectorIsCheckboxSelectionEnabled = void 0;
7
7
  var _selectors = require("../../utils/selectors");
8
+ var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
8
9
  const selectorTreeViewSelectionState = state => state.selection;
9
10
 
10
11
  /**
@@ -12,4 +13,40 @@ const selectorTreeViewSelectionState = state => state.selection;
12
13
  * @param {TreeViewState<[UseTreeViewSelectionSignature]>} state The state of the tree view.
13
14
  * @returns {boolean} `true` if the item is selected, `false` otherwise.
14
15
  */
15
- const selectorIsItemSelected = exports.selectorIsItemSelected = (0, _selectors.createSelector)([selectorTreeViewSelectionState, (_, itemId) => itemId], (selectionState, itemId) => selectionState.selectedItemsMap.has(itemId));
16
+ const selectorIsItemSelected = exports.selectorIsItemSelected = (0, _selectors.createSelector)([selectorTreeViewSelectionState, (_, itemId) => itemId], (selectionState, itemId) => selectionState.selectedItemsMap.has(itemId));
17
+
18
+ /**
19
+ * Check if multi selection is enabled.
20
+ * @param {TreeViewState<[UseTreeViewSelectionSignature]>} state The state of the tree view.
21
+ * @returns {boolean} `true` if multi selection is enabled, `false` otherwise.
22
+ */
23
+ const selectorIsMultiSelectEnabled = exports.selectorIsMultiSelectEnabled = (0, _selectors.createSelector)([selectorTreeViewSelectionState], selectionState => selectionState.isEnabled && selectionState.isMultiSelectEnabled);
24
+
25
+ /**
26
+ * Check if selection is enabled.
27
+ * @param {TreeViewState<[UseTreeViewSelectionSignature]>} state The state of the tree view.
28
+ * @returns {boolean} `true` if selection is enabled, `false` otherwise.
29
+ */
30
+ const selectorIsSelectionEnabled = exports.selectorIsSelectionEnabled = (0, _selectors.createSelector)([selectorTreeViewSelectionState], selectionState => selectionState.isEnabled);
31
+
32
+ /**
33
+ * Check if checkbox selection is enabled.
34
+ * @param {TreeViewState<[UseTreeViewSelectionSignature]>} state The state of the tree view.
35
+ * @returns {boolean} `true` if checkbox selection is enabled, `false` otherwise.
36
+ */
37
+ const selectorIsCheckboxSelectionEnabled = exports.selectorIsCheckboxSelectionEnabled = (0, _selectors.createSelector)([selectorTreeViewSelectionState], selectionState => selectionState.isCheckboxSelectionEnabled);
38
+
39
+ /**
40
+ * Check if selection is enabled for an item (if selection is enabled and if the item is not disabled).
41
+ * @param {TreeViewState<[UseTreeViewSelectionSignature]>} state The state of the tree view.
42
+ * @param {string} itemId The id of the item to check.
43
+ * @returns {boolean} `true` if selection is enabled for the item, `false` otherwise.
44
+ */
45
+ const selectorIsItemSelectionEnabled = exports.selectorIsItemSelectionEnabled = (0, _selectors.createSelector)([_useTreeViewItems.selectorIsItemDisabled, selectorIsSelectionEnabled], (isItemDisabled, isSelectionEnabled) => isSelectionEnabled && !isItemDisabled);
46
+
47
+ /**
48
+ * Get the selection propagation rules.
49
+ * @param {TreeViewState<[UseTreeViewSelectionSignature]>} state The state of the tree view.
50
+ * @returns {TreeViewSelectionPropagation} The selection propagation rules.
51
+ */
52
+ const selectorSelectionPropagationRules = exports.selectorSelectionPropagationRules = (0, _selectors.createSelector)([selectorTreeViewSelectionState], selectionState => selectionState.selectionPropagation);
@@ -115,18 +115,19 @@ export interface UseTreeViewSelectionParameters<Multiple extends boolean | undef
115
115
  export type UseTreeViewSelectionDefaultizedParameters<Multiple extends boolean> = DefaultizedProps<UseTreeViewSelectionParameters<Multiple>, 'disableSelection' | 'defaultSelectedItems' | 'multiSelect' | 'checkboxSelection' | 'selectionPropagation'>;
116
116
  export interface UseTreeViewSelectionState {
117
117
  selection: {
118
+ rawSelectedItems: TreeViewSelectionValue<boolean>;
118
119
  selectedItemsMap: Map<string, true>;
120
+ isEnabled: boolean;
121
+ isMultiSelectEnabled: boolean;
122
+ isCheckboxSelectionEnabled: boolean;
123
+ selectionPropagation: TreeViewSelectionPropagation;
119
124
  };
120
125
  }
121
- interface UseTreeViewSelectionContextValue {
122
- selection: Pick<UseTreeViewSelectionDefaultizedParameters<boolean>, 'multiSelect' | 'checkboxSelection' | 'disableSelection' | 'selectionPropagation'>;
123
- }
124
126
  export type UseTreeViewSelectionSignature = TreeViewPluginSignature<{
125
127
  params: UseTreeViewSelectionParameters<any>;
126
128
  defaultizedParams: UseTreeViewSelectionDefaultizedParameters<any>;
127
129
  instance: UseTreeViewSelectionInstance;
128
130
  publicAPI: UseTreeViewSelectionPublicAPI;
129
- contextValue: UseTreeViewSelectionContextValue;
130
131
  modelNames: 'selectedItems';
131
132
  state: UseTreeViewSelectionState;
132
133
  dependencies: [UseTreeViewItemsSignature, UseTreeViewExpansionSignature, UseTreeViewItemsSignature];
@@ -3,7 +3,7 @@ import { TreeViewAnyPluginSignature, TreeViewState } from "../models/index.js";
3
3
  /**
4
4
  * Type of a selector that take the whole tree view state as input and returns a value based on a required plugin.
5
5
  */
6
- export type TreeViewRootSelector<TSignature extends TreeViewAnyPluginSignature> = <TSignatures extends [TSignature]>(state: TreeViewState<TSignatures>) => TSignature['state'][keyof TSignature['state']];
6
+ export type TreeViewRootSelector<TSignature extends TreeViewAnyPluginSignature, IsOptional extends boolean = false> = <TSignatures extends [TSignature]>(state: TreeViewState<TSignatures>) => IsOptional extends true ? TSignature['state'][keyof TSignature['state']] | undefined : TSignature['state'][keyof TSignature['state']];
7
7
  /**
8
8
  * Type of a selector that take the whole tree view state as input and returns a value based on an optional plugin.
9
9
  */