@mui/x-tree-view 8.10.2 → 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.
- package/CHANGELOG.md +214 -13
- package/RichTreeView/RichTreeView.js +16 -15
- package/RichTreeView/RichTreeView.types.d.ts +3 -2
- package/SimpleTreeView/SimpleTreeView.js +10 -9
- package/SimpleTreeView/SimpleTreeView.types.d.ts +3 -2
- package/TreeItem/TreeItem.d.ts +1 -1
- package/TreeItem/TreeItem.types.d.ts +3 -1
- package/TreeItemProvider/TreeItemProvider.js +3 -3
- package/esm/RichTreeView/RichTreeView.js +16 -15
- package/esm/RichTreeView/RichTreeView.types.d.ts +3 -2
- package/esm/SimpleTreeView/SimpleTreeView.js +10 -9
- package/esm/SimpleTreeView/SimpleTreeView.types.d.ts +3 -2
- package/esm/TreeItem/TreeItem.d.ts +1 -1
- package/esm/TreeItem/TreeItem.types.d.ts +3 -1
- package/esm/TreeItemProvider/TreeItemProvider.js +3 -3
- package/esm/hooks/useTreeItemModel.js +3 -3
- package/esm/hooks/useTreeItemUtils/useTreeItemUtils.js +24 -25
- package/esm/index.js +1 -1
- package/esm/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +2 -2
- package/esm/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
- package/esm/internals/components/RichTreeViewItems.js +5 -5
- package/esm/internals/corePlugins/useTreeViewId/index.d.ts +2 -1
- package/esm/internals/corePlugins/useTreeViewId/index.js +2 -1
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -13
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +8 -34
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -9
- package/esm/internals/index.d.ts +6 -14
- package/esm/internals/index.js +6 -13
- package/esm/internals/models/plugin.d.ts +2 -3
- package/esm/internals/models/treeView.d.ts +4 -6
- package/esm/internals/plugins/useTreeViewExpansion/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewExpansion/index.js +2 -1
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -30
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +24 -316
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +27 -38
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -1
- package/esm/internals/plugins/useTreeViewFocus/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewFocus/index.js +2 -1
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +17 -21
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +20 -628
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +25 -37
- package/esm/internals/plugins/useTreeViewItems/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewItems/index.js +2 -1
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +78 -99
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +52 -1142
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +58 -98
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +1 -1
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.js +1 -1
- package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +32 -42
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +22 -22
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -0
- package/esm/internals/plugins/useTreeViewLabel/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewLabel/index.js +2 -1
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +4 -4
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +17 -25
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -100
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +24 -34
- package/esm/internals/plugins/useTreeViewLazyLoading/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewLazyLoading/index.js +1 -1
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +18 -245
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +15 -27
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +20 -6
- package/esm/internals/plugins/useTreeViewSelection/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewSelection/index.js +2 -1
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +25 -38
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +30 -34
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +38 -517
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +46 -71
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +1 -0
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +10 -10
- package/esm/internals/useTreeView/useTreeView.d.ts +1 -1
- package/esm/internals/useTreeView/useTreeView.js +11 -18
- package/esm/internals/useTreeView/useTreeView.types.d.ts +1 -1
- package/esm/internals/useTreeView/useTreeViewBuildContext.d.ts +2 -3
- package/esm/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +0 -2
- package/esm/internals/utils/tree.js +33 -33
- package/esm/useTreeItem/useTreeItem.js +14 -14
- package/esm/useTreeItem/useTreeItem.types.d.ts +2 -1
- package/hooks/useTreeItemModel.js +3 -3
- package/hooks/useTreeItemUtils/useTreeItemUtils.js +18 -19
- package/index.js +1 -1
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +1 -1
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
- package/internals/components/RichTreeViewItems.js +5 -5
- package/internals/corePlugins/useTreeViewId/index.d.ts +2 -1
- package/internals/corePlugins/useTreeViewId/index.js +8 -1
- package/internals/corePlugins/useTreeViewId/useTreeViewId.js +9 -12
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +8 -34
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +10 -10
- package/internals/index.d.ts +6 -14
- package/internals/index.js +12 -73
- package/internals/models/plugin.d.ts +2 -3
- package/internals/models/treeView.d.ts +4 -6
- package/internals/plugins/useTreeViewExpansion/index.d.ts +2 -1
- package/internals/plugins/useTreeViewExpansion/index.js +8 -1
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -28
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +24 -316
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +27 -38
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -1
- package/internals/plugins/useTreeViewFocus/index.d.ts +2 -1
- package/internals/plugins/useTreeViewFocus/index.js +8 -1
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +14 -18
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +20 -628
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +23 -35
- package/internals/plugins/useTreeViewItems/index.d.ts +2 -1
- package/internals/plugins/useTreeViewItems/index.js +8 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +77 -98
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +52 -1142
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +59 -99
- package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +1 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.js +1 -1
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +32 -42
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +18 -18
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -0
- package/internals/plugins/useTreeViewLabel/index.d.ts +2 -1
- package/internals/plugins/useTreeViewLabel/index.js +8 -1
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +3 -3
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -24
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -100
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +24 -34
- package/internals/plugins/useTreeViewLazyLoading/index.d.ts +2 -1
- package/internals/plugins/useTreeViewLazyLoading/index.js +8 -1
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +18 -245
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +16 -28
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +20 -6
- package/internals/plugins/useTreeViewSelection/index.d.ts +2 -1
- package/internals/plugins/useTreeViewSelection/index.js +8 -1
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +23 -37
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +29 -33
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +38 -517
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +46 -71
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +1 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +8 -8
- package/internals/useTreeView/useTreeView.d.ts +1 -1
- package/internals/useTreeView/useTreeView.js +11 -18
- package/internals/useTreeView/useTreeView.types.d.ts +1 -1
- package/internals/useTreeView/useTreeViewBuildContext.d.ts +2 -3
- package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +0 -2
- package/internals/utils/tree.js +31 -31
- package/package.json +12 -13
- package/useTreeItem/useTreeItem.js +14 -14
- package/useTreeItem/useTreeItem.types.d.ts +2 -1
- package/esm/internals/hooks/useSelector.d.ts +0 -4
- package/esm/internals/hooks/useSelector.js +0 -8
- package/esm/internals/utils/TreeViewStore.d.ts +0 -12
- package/esm/internals/utils/TreeViewStore.js +0 -22
- package/esm/internals/utils/selectors.d.ts +0 -21
- package/esm/internals/utils/selectors.js +0 -51
- package/internals/hooks/useSelector.d.ts +0 -4
- package/internals/hooks/useSelector.js +0 -16
- package/internals/utils/TreeViewStore.d.ts +0 -12
- package/internals/utils/TreeViewStore.js +0 -29
- package/internals/utils/selectors.d.ts +0 -21
- package/internals/utils/selectors.js +0 -58
|
@@ -4,7 +4,7 @@ import { useAssertModelConsistency } from '@mui/x-internals/useAssertModelConsis
|
|
|
4
4
|
import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
|
|
5
5
|
import { findOrderInTremauxTree, getAllNavigableItems, getFirstNavigableItem, getLastNavigableItem, getNonDisabledItemsInRange } from "../../utils/tree.js";
|
|
6
6
|
import { propagateSelection, getAddedAndRemovedItems, getLookupFromArray } from "./useTreeViewSelection.utils.js";
|
|
7
|
-
import {
|
|
7
|
+
import { selectionSelectors } from "./useTreeViewSelection.selectors.js";
|
|
8
8
|
import { useTreeViewSelectionItemPlugin } from "./useTreeViewSelection.itemPlugin.js";
|
|
9
9
|
export const useTreeViewSelection = ({
|
|
10
10
|
store,
|
|
@@ -19,9 +19,9 @@ export const useTreeViewSelection = ({
|
|
|
19
19
|
const lastSelectedItem = React.useRef(null);
|
|
20
20
|
const lastSelectedRange = React.useRef({});
|
|
21
21
|
const setSelectedItems = (event, newModel, additionalItemsToPropagate) => {
|
|
22
|
-
const oldModel =
|
|
22
|
+
const oldModel = selectionSelectors.selectedItemsRaw(store.state);
|
|
23
23
|
let cleanModel;
|
|
24
|
-
const isMultiSelectEnabled =
|
|
24
|
+
const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(store.state);
|
|
25
25
|
if (isMultiSelectEnabled && (params.selectionPropagation.descendants || params.selectionPropagation.parents)) {
|
|
26
26
|
cleanModel = propagateSelection({
|
|
27
27
|
store,
|
|
@@ -58,10 +58,8 @@ export const useTreeViewSelection = ({
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
if (params.selectedItems === undefined) {
|
|
61
|
-
store.
|
|
62
|
-
|
|
63
|
-
selectedItems: cleanModel
|
|
64
|
-
})
|
|
61
|
+
store.set('selection', _extends({}, store.state.selection, {
|
|
62
|
+
selectedItems: cleanModel
|
|
65
63
|
}));
|
|
66
64
|
}
|
|
67
65
|
params.onSelectedItemsChange?.(event, cleanModel);
|
|
@@ -72,14 +70,14 @@ export const useTreeViewSelection = ({
|
|
|
72
70
|
keepExistingSelection = false,
|
|
73
71
|
shouldBeSelected
|
|
74
72
|
}) => {
|
|
75
|
-
if (!
|
|
73
|
+
if (!selectionSelectors.enabled(store.state)) {
|
|
76
74
|
return;
|
|
77
75
|
}
|
|
78
76
|
let newSelected;
|
|
79
|
-
const isMultiSelectEnabled =
|
|
77
|
+
const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(store.state);
|
|
80
78
|
if (keepExistingSelection) {
|
|
81
|
-
const oldSelected =
|
|
82
|
-
const isSelectedBefore =
|
|
79
|
+
const oldSelected = selectionSelectors.selectedItems(store.state);
|
|
80
|
+
const isSelectedBefore = selectionSelectors.isItemSelected(store.state, itemId);
|
|
83
81
|
if (isSelectedBefore && (shouldBeSelected === false || shouldBeSelected == null)) {
|
|
84
82
|
newSelected = oldSelected.filter(id => id !== itemId);
|
|
85
83
|
} else if (!isSelectedBefore && (shouldBeSelected === true || shouldBeSelected == null)) {
|
|
@@ -89,25 +87,25 @@ export const useTreeViewSelection = ({
|
|
|
89
87
|
}
|
|
90
88
|
} else {
|
|
91
89
|
// eslint-disable-next-line no-lonely-if
|
|
92
|
-
if (shouldBeSelected === false || shouldBeSelected == null &&
|
|
90
|
+
if (shouldBeSelected === false || shouldBeSelected == null && selectionSelectors.isItemSelected(store.state, itemId)) {
|
|
93
91
|
newSelected = isMultiSelectEnabled ? [] : null;
|
|
94
92
|
} else {
|
|
95
93
|
newSelected = isMultiSelectEnabled ? [itemId] : itemId;
|
|
96
94
|
}
|
|
97
95
|
}
|
|
98
96
|
setSelectedItems(event, newSelected,
|
|
99
|
-
// If shouldBeSelected ===
|
|
97
|
+
// If shouldBeSelected === selectionSelectors.isItemSelected(store, itemId), we still want to propagate the select.
|
|
100
98
|
// This is useful when the element is in an indeterminate state.
|
|
101
99
|
[itemId]);
|
|
102
100
|
lastSelectedItem.current = itemId;
|
|
103
101
|
lastSelectedRange.current = {};
|
|
104
102
|
};
|
|
105
103
|
const selectRange = (event, [start, end]) => {
|
|
106
|
-
const isMultiSelectEnabled =
|
|
104
|
+
const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(store.state);
|
|
107
105
|
if (!isMultiSelectEnabled) {
|
|
108
106
|
return;
|
|
109
107
|
}
|
|
110
|
-
let newSelectedItems =
|
|
108
|
+
let newSelectedItems = selectionSelectors.selectedItems(store.state).slice();
|
|
111
109
|
|
|
112
110
|
// If the last selection was a range selection,
|
|
113
111
|
// remove the items that were part of the last range from the model
|
|
@@ -117,7 +115,7 @@ export const useTreeViewSelection = ({
|
|
|
117
115
|
|
|
118
116
|
// Add to the model the items that are part of the new range and not already part of the model.
|
|
119
117
|
const selectedItemsLookup = getLookupFromArray(newSelectedItems);
|
|
120
|
-
const range = getNonDisabledItemsInRange(store.
|
|
118
|
+
const range = getNonDisabledItemsInRange(store.state, start, end);
|
|
121
119
|
const itemsToAddToModel = range.filter(id => !selectedItemsLookup[id]);
|
|
122
120
|
newSelectedItems = newSelectedItems.concat(itemsToAddToModel);
|
|
123
121
|
setSelectedItems(event, newSelectedItems);
|
|
@@ -125,31 +123,31 @@ export const useTreeViewSelection = ({
|
|
|
125
123
|
};
|
|
126
124
|
const expandSelectionRange = (event, itemId) => {
|
|
127
125
|
if (lastSelectedItem.current != null) {
|
|
128
|
-
const [start, end] = findOrderInTremauxTree(store.
|
|
126
|
+
const [start, end] = findOrderInTremauxTree(store.state, itemId, lastSelectedItem.current);
|
|
129
127
|
selectRange(event, [start, end]);
|
|
130
128
|
}
|
|
131
129
|
};
|
|
132
130
|
const selectRangeFromStartToItem = (event, itemId) => {
|
|
133
|
-
selectRange(event, [getFirstNavigableItem(store.
|
|
131
|
+
selectRange(event, [getFirstNavigableItem(store.state), itemId]);
|
|
134
132
|
};
|
|
135
133
|
const selectRangeFromItemToEnd = (event, itemId) => {
|
|
136
|
-
selectRange(event, [itemId, getLastNavigableItem(store.
|
|
134
|
+
selectRange(event, [itemId, getLastNavigableItem(store.state)]);
|
|
137
135
|
};
|
|
138
136
|
const selectAllNavigableItems = event => {
|
|
139
|
-
const isMultiSelectEnabled =
|
|
137
|
+
const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(store.state);
|
|
140
138
|
if (!isMultiSelectEnabled) {
|
|
141
139
|
return;
|
|
142
140
|
}
|
|
143
|
-
const navigableItems = getAllNavigableItems(store.
|
|
141
|
+
const navigableItems = getAllNavigableItems(store.state);
|
|
144
142
|
setSelectedItems(event, navigableItems);
|
|
145
143
|
lastSelectedRange.current = getLookupFromArray(navigableItems);
|
|
146
144
|
};
|
|
147
145
|
const selectItemFromArrowNavigation = (event, currentItem, nextItem) => {
|
|
148
|
-
const isMultiSelectEnabled =
|
|
146
|
+
const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(store.state);
|
|
149
147
|
if (!isMultiSelectEnabled) {
|
|
150
148
|
return;
|
|
151
149
|
}
|
|
152
|
-
let newSelectedItems =
|
|
150
|
+
let newSelectedItems = selectionSelectors.selectedItems(store.state).slice();
|
|
153
151
|
if (Object.keys(lastSelectedRange.current).length === 0) {
|
|
154
152
|
newSelectedItems.push(nextItem);
|
|
155
153
|
lastSelectedRange.current = {
|
|
@@ -171,18 +169,16 @@ export const useTreeViewSelection = ({
|
|
|
171
169
|
setSelectedItems(event, newSelectedItems);
|
|
172
170
|
};
|
|
173
171
|
useEnhancedEffect(() => {
|
|
174
|
-
store.
|
|
175
|
-
selection:
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
parents: params.selectionPropagation.parents
|
|
183
|
-
}
|
|
172
|
+
store.set('selection', {
|
|
173
|
+
selectedItems: params.selectedItems === undefined ? store.state.selection.selectedItems : params.selectedItems,
|
|
174
|
+
isEnabled: !params.disableSelection,
|
|
175
|
+
isMultiSelectEnabled: params.multiSelect,
|
|
176
|
+
isCheckboxSelectionEnabled: params.checkboxSelection,
|
|
177
|
+
selectionPropagation: {
|
|
178
|
+
descendants: params.selectionPropagation.descendants,
|
|
179
|
+
parents: params.selectionPropagation.parents
|
|
184
180
|
}
|
|
185
|
-
})
|
|
181
|
+
});
|
|
186
182
|
}, [store, params.selectedItems, params.multiSelect, params.checkboxSelection, params.disableSelection, params.selectionPropagation.descendants, params.selectionPropagation.parents]);
|
|
187
183
|
return {
|
|
188
184
|
getRootProps: () => ({
|