@mui/x-tree-view 8.0.0-beta.0 → 8.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +171 -0
- package/RichTreeView/RichTreeView.js +17 -5
- package/RichTreeView/richTreeViewClasses.d.ts +2 -4
- package/RichTreeView/richTreeViewClasses.js +1 -1
- package/SimpleTreeView/SimpleTreeView.js +17 -5
- package/SimpleTreeView/simpleTreeViewClasses.d.ts +2 -4
- package/SimpleTreeView/simpleTreeViewClasses.js +1 -1
- package/TreeItem/TreeItem.d.ts +1 -1
- package/TreeItem/TreeItem.js +45 -49
- package/TreeItem/index.d.ts +2 -1
- package/TreeItem/index.js +13 -21
- package/TreeItem/treeItemClasses.d.ts +40 -18
- package/TreeItem/treeItemClasses.js +3 -1
- package/TreeItemLabelInput/TreeItemLabelInput.js +2 -2
- package/esm/RichTreeView/RichTreeView.js +17 -5
- package/esm/RichTreeView/richTreeViewClasses.d.ts +2 -4
- package/esm/RichTreeView/richTreeViewClasses.js +1 -1
- package/esm/SimpleTreeView/SimpleTreeView.js +17 -5
- package/esm/SimpleTreeView/simpleTreeViewClasses.d.ts +2 -4
- package/esm/SimpleTreeView/simpleTreeViewClasses.js +1 -1
- package/esm/TreeItem/TreeItem.d.ts +1 -1
- package/esm/TreeItem/TreeItem.js +45 -49
- package/esm/TreeItem/index.d.ts +2 -1
- package/esm/TreeItem/index.js +1 -1
- package/esm/TreeItem/treeItemClasses.d.ts +40 -18
- package/esm/TreeItem/treeItemClasses.js +3 -1
- package/esm/TreeItemLabelInput/TreeItemLabelInput.js +2 -2
- package/esm/hooks/useTreeItemUtils/useTreeItemUtils.js +8 -14
- package/esm/index.js +1 -1
- package/esm/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +1 -1
- package/esm/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
- package/esm/internals/TreeViewProvider/TreeViewContext.js +8 -1
- package/esm/internals/TreeViewProvider/TreeViewProvider.d.ts +1 -1
- package/esm/internals/TreeViewProvider/TreeViewProvider.js +17 -5
- package/esm/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -1
- package/esm/internals/TreeViewProvider/TreeViewStyleContext.d.ts +33 -0
- package/esm/internals/TreeViewProvider/TreeViewStyleContext.js +13 -0
- package/esm/internals/TreeViewProvider/index.d.ts +1 -1
- package/esm/internals/TreeViewProvider/index.js +1 -1
- package/esm/internals/index.d.ts +2 -1
- package/esm/internals/models/itemPlugin.d.ts +3 -3
- package/esm/internals/plugins/useTreeViewItemCustomization/index.d.ts +2 -0
- package/esm/internals/plugins/useTreeViewItemCustomization/index.js +1 -0
- package/esm/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.d.ts +3 -0
- package/esm/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.js +24 -0
- package/esm/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.types.d.ts +42 -0
- package/esm/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.types.js +1 -0
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +3 -8
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +1 -4
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +6 -6
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +13 -15
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +9 -12
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -11
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -20
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +5 -7
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +5 -4
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -2
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +2 -3
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +16 -21
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -38
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +331 -0
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +38 -1
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +5 -4
- package/esm/internals/utils/selectors.d.ts +1 -1
- package/esm/useTreeItem/useTreeItem.js +16 -17
- package/esm/useTreeItem/useTreeItem.types.d.ts +9 -4
- package/hooks/useTreeItemUtils/useTreeItemUtils.js +7 -13
- package/index.js +1 -1
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +2 -2
- package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
- package/internals/TreeViewProvider/TreeViewContext.js +10 -2
- package/internals/TreeViewProvider/TreeViewProvider.d.ts +1 -1
- package/internals/TreeViewProvider/TreeViewProvider.js +17 -5
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -1
- package/internals/TreeViewProvider/TreeViewStyleContext.d.ts +33 -0
- package/internals/TreeViewProvider/TreeViewStyleContext.js +21 -0
- package/internals/TreeViewProvider/index.d.ts +1 -1
- package/internals/TreeViewProvider/index.js +2 -2
- package/internals/index.d.ts +2 -1
- package/internals/models/itemPlugin.d.ts +3 -3
- package/internals/plugins/useTreeViewItemCustomization/index.d.ts +2 -0
- package/internals/plugins/useTreeViewItemCustomization/index.js +12 -0
- package/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.d.ts +3 -0
- package/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.js +32 -0
- package/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.types.d.ts +42 -0
- package/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.types.js +5 -0
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +3 -8
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +1 -4
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +6 -6
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +12 -14
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -3
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +9 -12
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -12
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -20
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +5 -7
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +5 -4
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -2
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +2 -3
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +15 -20
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +42 -37
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +331 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +39 -2
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +5 -4
- package/internals/utils/selectors.d.ts +1 -1
- package/modern/RichTreeView/RichTreeView.js +17 -5
- package/modern/RichTreeView/richTreeViewClasses.d.ts +2 -4
- package/modern/RichTreeView/richTreeViewClasses.js +1 -1
- package/modern/SimpleTreeView/SimpleTreeView.js +17 -5
- package/modern/SimpleTreeView/simpleTreeViewClasses.d.ts +2 -4
- package/modern/SimpleTreeView/simpleTreeViewClasses.js +1 -1
- package/modern/TreeItem/TreeItem.d.ts +1 -1
- package/modern/TreeItem/TreeItem.js +45 -49
- package/modern/TreeItem/index.d.ts +2 -1
- package/modern/TreeItem/index.js +1 -1
- package/modern/TreeItem/treeItemClasses.d.ts +40 -18
- package/modern/TreeItem/treeItemClasses.js +3 -1
- package/modern/TreeItemLabelInput/TreeItemLabelInput.js +2 -2
- package/modern/hooks/useTreeItemUtils/useTreeItemUtils.js +8 -14
- package/modern/index.js +1 -1
- package/modern/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +1 -1
- package/modern/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
- package/modern/internals/TreeViewProvider/TreeViewContext.js +8 -1
- package/modern/internals/TreeViewProvider/TreeViewProvider.d.ts +1 -1
- package/modern/internals/TreeViewProvider/TreeViewProvider.js +17 -5
- package/modern/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -1
- package/modern/internals/TreeViewProvider/TreeViewStyleContext.d.ts +33 -0
- package/modern/internals/TreeViewProvider/TreeViewStyleContext.js +13 -0
- package/modern/internals/TreeViewProvider/index.d.ts +1 -1
- package/modern/internals/TreeViewProvider/index.js +1 -1
- package/modern/internals/index.d.ts +2 -1
- package/modern/internals/models/itemPlugin.d.ts +3 -3
- package/modern/internals/plugins/useTreeViewItemCustomization/index.d.ts +2 -0
- package/modern/internals/plugins/useTreeViewItemCustomization/index.js +1 -0
- package/modern/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.d.ts +3 -0
- package/modern/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.js +24 -0
- package/modern/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.types.d.ts +42 -0
- package/modern/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.types.js +1 -0
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +3 -8
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +1 -4
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +6 -6
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +13 -15
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -3
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +9 -12
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -11
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -20
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +5 -7
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +5 -4
- package/modern/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -2
- package/modern/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +2 -3
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +16 -21
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -38
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +331 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +38 -1
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +5 -4
- package/modern/internals/utils/selectors.d.ts +1 -1
- package/modern/useTreeItem/useTreeItem.js +16 -17
- package/modern/useTreeItem/useTreeItem.types.d.ts +9 -4
- package/package.json +2 -2
- package/tsconfig.build.tsbuildinfo +1 -1
- package/useTreeItem/useTreeItem.js +16 -17
- package/useTreeItem/useTreeItem.types.d.ts +9 -4
- package/esm/internals/TreeViewProvider/useTreeViewContext.d.ts +0 -3
- package/esm/internals/TreeViewProvider/useTreeViewContext.js +0 -9
- package/internals/TreeViewProvider/useTreeViewContext.d.ts +0 -3
- package/internals/TreeViewProvider/useTreeViewContext.js +0 -17
- package/modern/internals/TreeViewProvider/useTreeViewContext.d.ts +0 -3
- package/modern/internals/TreeViewProvider/useTreeViewContext.js +0 -9
|
@@ -66,7 +66,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
66
66
|
}
|
|
67
67
|
return matchingItemId;
|
|
68
68
|
};
|
|
69
|
-
const canToggleItemSelection = itemId =>
|
|
69
|
+
const canToggleItemSelection = itemId => (0, _useTreeViewSelection.selectorIsSelectionEnabled)(store.value) && !(0, _useTreeViewItems.selectorIsItemDisabled)(store.value, itemId);
|
|
70
70
|
const canToggleItemExpansion = itemId => {
|
|
71
71
|
return !(0, _useTreeViewItems.selectorIsItemDisabled)(store.value, itemId) && (0, _useTreeViewExpansion.selectorIsItemExpandable)(store.value, itemId);
|
|
72
72
|
};
|
|
@@ -81,6 +81,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
81
81
|
}
|
|
82
82
|
const ctrlPressed = event.ctrlKey || event.metaKey;
|
|
83
83
|
const key = event.key;
|
|
84
|
+
const isMultiSelectEnabled = (0, _useTreeViewSelection.selectorIsMultiSelectEnabled)(store.value);
|
|
84
85
|
|
|
85
86
|
// eslint-disable-next-line default-case
|
|
86
87
|
switch (true) {
|
|
@@ -88,14 +89,14 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
88
89
|
case key === ' ' && canToggleItemSelection(itemId):
|
|
89
90
|
{
|
|
90
91
|
event.preventDefault();
|
|
91
|
-
if (
|
|
92
|
+
if (isMultiSelectEnabled && event.shiftKey) {
|
|
92
93
|
instance.expandSelectionRange(event, itemId);
|
|
93
94
|
} else {
|
|
94
95
|
instance.setItemSelection({
|
|
95
96
|
event,
|
|
96
97
|
itemId,
|
|
97
|
-
keepExistingSelection:
|
|
98
|
-
shouldBeSelected:
|
|
98
|
+
keepExistingSelection: isMultiSelectEnabled,
|
|
99
|
+
shouldBeSelected: undefined
|
|
99
100
|
});
|
|
100
101
|
}
|
|
101
102
|
break;
|
|
@@ -105,10 +106,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
105
106
|
// If the focused item has no children, we select it.
|
|
106
107
|
case key === 'Enter':
|
|
107
108
|
{
|
|
108
|
-
if ((0, _plugins.hasPlugin)(instance, _useTreeViewLabel.useTreeViewLabel) && (0, _useTreeViewLabel2.selectorIsItemEditable)(store.value, {
|
|
109
|
-
itemId,
|
|
110
|
-
isItemEditable: params.isItemEditable
|
|
111
|
-
}) && !(0, _useTreeViewLabel2.selectorIsItemBeingEdited)(store.value, itemId)) {
|
|
109
|
+
if ((0, _plugins.hasPlugin)(instance, _useTreeViewLabel.useTreeViewLabel) && (0, _useTreeViewLabel2.selectorIsItemEditable)(store.value, itemId) && !(0, _useTreeViewLabel2.selectorIsItemBeingEdited)(store.value, itemId)) {
|
|
112
110
|
instance.setEditedItemId(itemId);
|
|
113
111
|
} else if (canToggleItemExpansion(itemId)) {
|
|
114
112
|
instance.setItemExpansion({
|
|
@@ -117,7 +115,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
117
115
|
});
|
|
118
116
|
event.preventDefault();
|
|
119
117
|
} else if (canToggleItemSelection(itemId)) {
|
|
120
|
-
if (
|
|
118
|
+
if (isMultiSelectEnabled) {
|
|
121
119
|
event.preventDefault();
|
|
122
120
|
instance.setItemSelection({
|
|
123
121
|
event,
|
|
@@ -145,7 +143,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
145
143
|
|
|
146
144
|
// Multi select behavior when pressing Shift + ArrowDown
|
|
147
145
|
// Toggles the selection state of the next item
|
|
148
|
-
if (
|
|
146
|
+
if (isMultiSelectEnabled && event.shiftKey && canToggleItemSelection(nextItem)) {
|
|
149
147
|
instance.selectItemFromArrowNavigation(event, itemId, nextItem);
|
|
150
148
|
}
|
|
151
149
|
}
|
|
@@ -162,7 +160,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
162
160
|
|
|
163
161
|
// Multi select behavior when pressing Shift + ArrowUp
|
|
164
162
|
// Toggles the selection state of the previous item
|
|
165
|
-
if (
|
|
163
|
+
if (isMultiSelectEnabled && event.shiftKey && canToggleItemSelection(previousItem)) {
|
|
166
164
|
instance.selectItemFromArrowNavigation(event, itemId, previousItem);
|
|
167
165
|
}
|
|
168
166
|
}
|
|
@@ -220,7 +218,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
220
218
|
{
|
|
221
219
|
// Multi select behavior when pressing Ctrl + Shift + Home
|
|
222
220
|
// Selects the focused item and all items up to the first item.
|
|
223
|
-
if (canToggleItemSelection(itemId) &&
|
|
221
|
+
if (canToggleItemSelection(itemId) && isMultiSelectEnabled && ctrlPressed && event.shiftKey) {
|
|
224
222
|
instance.selectRangeFromStartToItem(event, itemId);
|
|
225
223
|
} else {
|
|
226
224
|
instance.focusItem(event, (0, _tree.getFirstNavigableItem)(store.value));
|
|
@@ -234,7 +232,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
234
232
|
{
|
|
235
233
|
// Multi select behavior when pressing Ctrl + Shirt + End
|
|
236
234
|
// Selects the focused item and all the items down to the last item.
|
|
237
|
-
if (canToggleItemSelection(itemId) &&
|
|
235
|
+
if (canToggleItemSelection(itemId) && isMultiSelectEnabled && ctrlPressed && event.shiftKey) {
|
|
238
236
|
instance.selectRangeFromItemToEnd(event, itemId);
|
|
239
237
|
} else {
|
|
240
238
|
instance.focusItem(event, (0, _tree.getLastNavigableItem)(store.value));
|
|
@@ -253,7 +251,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
253
251
|
|
|
254
252
|
// Multi select behavior when pressing Ctrl + a
|
|
255
253
|
// Selects all the items
|
|
256
|
-
case String.fromCharCode(event.keyCode) === 'A' && ctrlPressed &&
|
|
254
|
+
case String.fromCharCode(event.keyCode) === 'A' && ctrlPressed && isMultiSelectEnabled && (0, _useTreeViewSelection.selectorIsSelectionEnabled)(store.value):
|
|
257
255
|
{
|
|
258
256
|
instance.selectAllNavigableItems(event);
|
|
259
257
|
event.preventDefault();
|
package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts
CHANGED
|
@@ -5,8 +5,6 @@ import { UseTreeViewSelectionSignature } from "../useTreeViewSelection/index.js"
|
|
|
5
5
|
import { UseTreeViewFocusSignature } from "../useTreeViewFocus/index.js";
|
|
6
6
|
import { UseTreeViewExpansionSignature } from "../useTreeViewExpansion/index.js";
|
|
7
7
|
import { TreeViewItemId, TreeViewCancellableEvent } from "../../../models/index.js";
|
|
8
|
-
import { UseTreeViewLabelSignature } from "../useTreeViewLabel/index.js";
|
|
9
|
-
import { UseTreeViewLazyLoadingSignature } from "../useTreeViewLazyLoading/index.js";
|
|
10
8
|
export interface UseTreeViewKeyboardNavigationInstance {
|
|
11
9
|
/**
|
|
12
10
|
* Updates the `firstCharMap` to add/remove the first character of some item's labels.
|
|
@@ -26,7 +24,6 @@ export interface UseTreeViewKeyboardNavigationInstance {
|
|
|
26
24
|
export type UseTreeViewKeyboardNavigationSignature = TreeViewPluginSignature<{
|
|
27
25
|
instance: UseTreeViewKeyboardNavigationInstance;
|
|
28
26
|
dependencies: [UseTreeViewItemsSignature, UseTreeViewSelectionSignature, UseTreeViewFocusSignature, UseTreeViewExpansionSignature];
|
|
29
|
-
optionalDependencies: [UseTreeViewLabelSignature, UseTreeViewLazyLoadingSignature];
|
|
30
27
|
}>;
|
|
31
28
|
export type TreeViewFirstCharMap = {
|
|
32
29
|
[itemId: string]: string;
|
|
@@ -13,33 +13,30 @@ const useTreeViewLabelItemPlugin = ({
|
|
|
13
13
|
props
|
|
14
14
|
}) => {
|
|
15
15
|
const {
|
|
16
|
-
store
|
|
17
|
-
label: {
|
|
18
|
-
isItemEditable
|
|
19
|
-
}
|
|
16
|
+
store
|
|
20
17
|
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
21
18
|
const {
|
|
22
19
|
label,
|
|
23
20
|
itemId
|
|
24
21
|
} = props;
|
|
25
22
|
const [labelInputValue, setLabelInputValue] = React.useState(label);
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
isItemEditable
|
|
29
|
-
});
|
|
30
|
-
const editing = (0, _useSelector.useSelector)(store, _useTreeViewLabel.selectorIsItemBeingEdited, itemId);
|
|
23
|
+
const isItemEditable = (0, _useSelector.useSelector)(store, _useTreeViewLabel.selectorIsItemEditable, itemId);
|
|
24
|
+
const isItemBeingEdited = (0, _useSelector.useSelector)(store, _useTreeViewLabel.selectorIsItemBeingEdited, itemId);
|
|
31
25
|
React.useEffect(() => {
|
|
32
|
-
if (!
|
|
26
|
+
if (!isItemBeingEdited) {
|
|
33
27
|
setLabelInputValue(label);
|
|
34
28
|
}
|
|
35
|
-
}, [
|
|
29
|
+
}, [isItemBeingEdited, label]);
|
|
36
30
|
return {
|
|
37
31
|
propsEnhancers: {
|
|
32
|
+
label: () => ({
|
|
33
|
+
editable: isItemEditable
|
|
34
|
+
}),
|
|
38
35
|
labelInput: ({
|
|
39
36
|
externalEventHandlers,
|
|
40
37
|
interactions
|
|
41
38
|
}) => {
|
|
42
|
-
if (!
|
|
39
|
+
if (!isItemEditable) {
|
|
43
40
|
return {};
|
|
44
41
|
}
|
|
45
42
|
const handleKeydown = event => {
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.useTreeViewLabel = void 0;
|
|
9
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
-
var
|
|
9
|
+
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
|
11
10
|
var _useTreeViewLabel = require("./useTreeViewLabel.itemPlugin");
|
|
12
11
|
const useTreeViewLabel = ({
|
|
13
12
|
store,
|
|
@@ -15,9 +14,9 @@ const useTreeViewLabel = ({
|
|
|
15
14
|
}) => {
|
|
16
15
|
const setEditedItemId = editedItemId => {
|
|
17
16
|
store.update(prevState => (0, _extends2.default)({}, prevState, {
|
|
18
|
-
label: {
|
|
17
|
+
label: (0, _extends2.default)({}, prevState.label, {
|
|
19
18
|
editedItemId
|
|
20
|
-
}
|
|
19
|
+
})
|
|
21
20
|
}));
|
|
22
21
|
};
|
|
23
22
|
const updateItemLabel = (itemId, label) => {
|
|
@@ -43,11 +42,14 @@ const useTreeViewLabel = ({
|
|
|
43
42
|
params.onItemLabelChange(itemId, label);
|
|
44
43
|
}
|
|
45
44
|
};
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
(0, _useEnhancedEffect.default)(() => {
|
|
46
|
+
const isItemEditable = params.isItemEditable;
|
|
47
|
+
store.update(prevState => (0, _extends2.default)({}, prevState, {
|
|
48
|
+
label: (0, _extends2.default)({}, prevState.label, {
|
|
49
|
+
isItemEditable: typeof isItemEditable === 'boolean' ? () => isItemEditable : isItemEditable
|
|
50
|
+
})
|
|
51
|
+
}));
|
|
52
|
+
}, [store, params.isItemEditable]);
|
|
51
53
|
return {
|
|
52
54
|
instance: {
|
|
53
55
|
setEditedItemId,
|
|
@@ -55,8 +57,7 @@ const useTreeViewLabel = ({
|
|
|
55
57
|
},
|
|
56
58
|
publicAPI: {
|
|
57
59
|
updateItemLabel
|
|
58
|
-
}
|
|
59
|
-
contextValue: pluginContextValue
|
|
60
|
+
}
|
|
60
61
|
};
|
|
61
62
|
};
|
|
62
63
|
exports.useTreeViewLabel = useTreeViewLabel;
|
|
@@ -66,8 +67,11 @@ useTreeViewLabel.getDefaultizedParams = ({
|
|
|
66
67
|
}) => (0, _extends2.default)({}, params, {
|
|
67
68
|
isItemEditable: params.isItemEditable ?? false
|
|
68
69
|
});
|
|
69
|
-
useTreeViewLabel.getInitialState = (
|
|
70
|
+
useTreeViewLabel.getInitialState = ({
|
|
71
|
+
isItemEditable
|
|
72
|
+
}) => ({
|
|
70
73
|
label: {
|
|
74
|
+
isItemEditable: typeof isItemEditable === 'boolean' ? () => isItemEditable : isItemEditable,
|
|
71
75
|
editedItemId: null
|
|
72
76
|
}
|
|
73
77
|
});
|
|
@@ -3,36 +3,28 @@ import { TreeViewRootSelector } from "../../utils/selectors.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* Check if an item is editable.
|
|
5
5
|
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
6
|
-
* @param {
|
|
7
|
-
* @param {TreeViewItemId} params.itemId The id of the item to check.
|
|
8
|
-
* @param {((item: any) => boolean) | boolean} params.isItemEditable The function to determine if an item is editable.
|
|
6
|
+
* @param {TreeViewItemId} itemId The id of the item to check.
|
|
9
7
|
* @returns {boolean} `true` if the item is editable, `false` otherwise.
|
|
10
8
|
*/
|
|
11
|
-
export declare const selectorIsItemEditable: ((state: any,
|
|
9
|
+
export declare const selectorIsItemEditable: ((state: any, itemId: string) => boolean) & {
|
|
12
10
|
clearCache: () => void;
|
|
13
11
|
resultsCount: () => number;
|
|
14
12
|
resetResultsCount: () => void;
|
|
15
13
|
} & {
|
|
16
14
|
resultFunc: (resultFuncArgs_0: {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}, resultFuncArgs_1: import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>) => boolean;
|
|
15
|
+
isItemEditable: (item: any) => boolean;
|
|
16
|
+
editedItemId: string | null;
|
|
17
|
+
} | undefined, resultFuncArgs_1: import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>) => boolean;
|
|
20
18
|
memoizedResultFunc: ((resultFuncArgs_0: {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}, resultFuncArgs_1: import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>) => boolean) & {
|
|
19
|
+
isItemEditable: (item: any) => boolean;
|
|
20
|
+
editedItemId: string | null;
|
|
21
|
+
} | undefined, resultFuncArgs_1: import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>) => boolean) & {
|
|
24
22
|
clearCache: () => void;
|
|
25
23
|
resultsCount: () => number;
|
|
26
24
|
resetResultsCount: () => void;
|
|
27
25
|
};
|
|
28
26
|
lastResult: () => boolean;
|
|
29
|
-
dependencies: [(
|
|
30
|
-
itemId: string;
|
|
31
|
-
isItemEditable: ((item: any) => boolean) | boolean;
|
|
32
|
-
}) => {
|
|
33
|
-
itemId: string;
|
|
34
|
-
isItemEditable: ((item: any) => boolean) | boolean;
|
|
35
|
-
}, (state: any, args: any) => import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>];
|
|
27
|
+
dependencies: [TreeViewRootSelector<UseTreeViewLabelSignature, true>, (state: any, itemId: string) => import("../../..").TreeViewBaseItem<import("../../..").TreeViewDefaultItemModelProperties>];
|
|
36
28
|
recomputations: () => number;
|
|
37
29
|
resetRecomputations: () => void;
|
|
38
30
|
dependencyRecomputations: () => number;
|
|
@@ -53,17 +45,19 @@ export declare const selectorIsItemBeingEdited: ((state: any, itemId: string) =>
|
|
|
53
45
|
resetResultsCount: () => void;
|
|
54
46
|
} & {
|
|
55
47
|
resultFunc: (resultFuncArgs_0: {
|
|
48
|
+
isItemEditable: (item: any) => boolean;
|
|
56
49
|
editedItemId: string | null;
|
|
57
|
-
}, resultFuncArgs_1: string) => boolean;
|
|
50
|
+
} | undefined, resultFuncArgs_1: string) => boolean;
|
|
58
51
|
memoizedResultFunc: ((resultFuncArgs_0: {
|
|
52
|
+
isItemEditable: (item: any) => boolean;
|
|
59
53
|
editedItemId: string | null;
|
|
60
|
-
}, resultFuncArgs_1: string) => boolean) & {
|
|
54
|
+
} | undefined, resultFuncArgs_1: string) => boolean) & {
|
|
61
55
|
clearCache: () => void;
|
|
62
56
|
resultsCount: () => number;
|
|
63
57
|
resetResultsCount: () => void;
|
|
64
58
|
};
|
|
65
59
|
lastResult: () => boolean;
|
|
66
|
-
dependencies: [TreeViewRootSelector<UseTreeViewLabelSignature>, (_: any, itemId: string) => string];
|
|
60
|
+
dependencies: [TreeViewRootSelector<UseTreeViewLabelSignature, true>, (_: any, itemId: string) => string];
|
|
67
61
|
recomputations: () => number;
|
|
68
62
|
resetRecomputations: () => void;
|
|
69
63
|
dependencyRecomputations: () => number;
|
|
@@ -11,16 +11,14 @@ const selectorTreeViewLabelState = state => state.label;
|
|
|
11
11
|
/**
|
|
12
12
|
* Check if an item is editable.
|
|
13
13
|
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
14
|
-
* @param {
|
|
15
|
-
* @param {TreeViewItemId} params.itemId The id of the item to check.
|
|
16
|
-
* @param {((item: any) => boolean) | boolean} params.isItemEditable The function to determine if an item is editable.
|
|
14
|
+
* @param {TreeViewItemId} itemId The id of the item to check.
|
|
17
15
|
* @returns {boolean} `true` if the item is editable, `false` otherwise.
|
|
18
16
|
*/
|
|
19
|
-
const selectorIsItemEditable = exports.selectorIsItemEditable = (0, _selectors.createSelector)([
|
|
20
|
-
if (!itemModel || !
|
|
17
|
+
const selectorIsItemEditable = exports.selectorIsItemEditable = (0, _selectors.createSelector)([selectorTreeViewLabelState, (state, itemId) => (0, _useTreeViewItems.selectorItemModel)(state, itemId)], (labelState, itemModel) => {
|
|
18
|
+
if (!itemModel || !labelState) {
|
|
21
19
|
return false;
|
|
22
20
|
}
|
|
23
|
-
return
|
|
21
|
+
return labelState.isItemEditable(itemModel);
|
|
24
22
|
});
|
|
25
23
|
|
|
26
24
|
/**
|
|
@@ -29,4 +27,4 @@ const selectorIsItemEditable = exports.selectorIsItemEditable = (0, _selectors.c
|
|
|
29
27
|
* @param {TreeViewItemId} itemId The id of the item to check.
|
|
30
28
|
* @returns {boolean} `true` if the item is being edited, `false` otherwise.
|
|
31
29
|
*/
|
|
32
|
-
const selectorIsItemBeingEdited = exports.selectorIsItemBeingEdited = (0, _selectors.createSelector)([selectorTreeViewLabelState, (_, itemId) => itemId], (labelState, itemId) => labelState
|
|
30
|
+
const selectorIsItemBeingEdited = exports.selectorIsItemBeingEdited = (0, _selectors.createSelector)([selectorTreeViewLabelState, (_, itemId) => itemId], (labelState, itemId) => labelState?.editedItemId === itemId);
|
|
@@ -38,22 +38,23 @@ export interface UseTreeViewLabelParameters<R extends {}> {
|
|
|
38
38
|
export type UseTreeViewLabelDefaultizedParameters<R extends {}> = DefaultizedProps<UseTreeViewLabelParameters<R>, 'isItemEditable'>;
|
|
39
39
|
export interface UseTreeViewLabelState {
|
|
40
40
|
label: {
|
|
41
|
+
isItemEditable: (item: any) => boolean;
|
|
41
42
|
editedItemId: string | null;
|
|
42
43
|
};
|
|
43
44
|
}
|
|
44
|
-
export interface UseTreeViewLabelContextValue {
|
|
45
|
-
label: Pick<UseTreeViewLabelDefaultizedParameters<any>, 'isItemEditable'>;
|
|
46
|
-
}
|
|
47
45
|
export type UseTreeViewLabelSignature = TreeViewPluginSignature<{
|
|
48
46
|
params: UseTreeViewLabelParameters<any>;
|
|
49
47
|
defaultizedParams: UseTreeViewLabelDefaultizedParameters<any>;
|
|
50
48
|
publicAPI: UseTreeViewLabelPublicAPI;
|
|
51
49
|
instance: UseTreeViewLabelInstance;
|
|
52
50
|
state: UseTreeViewLabelState;
|
|
53
|
-
contextValue: UseTreeViewLabelContextValue;
|
|
54
51
|
dependencies: [UseTreeViewItemsSignature];
|
|
55
52
|
}>;
|
|
56
53
|
export interface UseTreeItemLabelInputSlotPropsFromLabelEditing extends TreeItemLabelInputProps {}
|
|
54
|
+
export interface UseTreeItemLabelSlotPropsFromLabelEditing {
|
|
55
|
+
editable?: boolean;
|
|
56
|
+
}
|
|
57
57
|
declare module '@mui/x-tree-view/useTreeItem' {
|
|
58
58
|
interface UseTreeItemLabelInputSlotOwnProps extends UseTreeItemLabelInputSlotPropsFromLabelEditing {}
|
|
59
|
+
interface UseTreeItemLabelSlotOwnProps extends UseTreeItemLabelSlotPropsFromLabelEditing {}
|
|
59
60
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { TreeViewAnyPluginSignature, TreeViewState } from "../../models/index.js";
|
|
2
1
|
import { TreeViewRootSelector, TreeViewRootSelectorForOptionalPlugin } from "../../utils/selectors.js";
|
|
3
2
|
import { UseTreeViewLazyLoadingSignature } from "./useTreeViewLazyLoading.types.js";
|
|
4
|
-
export type Temp<TSignature extends TreeViewAnyPluginSignature> = <TSignatures extends [], TOptionalSignatures extends [TSignature]>(state: TreeViewState<TSignatures, TOptionalSignatures>) => TSignature['state'][keyof TSignature['state']];
|
|
5
3
|
export declare const selectorDataSourceState: ((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types").UseTreeViewIdState & import("./useTreeViewLazyLoading.types").UseTreeViewLazyLoadingState & Partial<{}> & {
|
|
6
4
|
cacheKey: import("../../models").TreeViewStateCacheKey;
|
|
7
5
|
}) => {
|
|
@@ -13,9 +13,8 @@ type DataSource<R extends {}> = {
|
|
|
13
13
|
* @template R
|
|
14
14
|
* @param {R} item The item to check.
|
|
15
15
|
* @returns {number} The number of children.
|
|
16
|
-
* @default (item) => number
|
|
17
16
|
*/
|
|
18
|
-
getChildrenCount
|
|
17
|
+
getChildrenCount: (item: R) => number;
|
|
19
18
|
/**
|
|
20
19
|
* Method used for fetching the items.
|
|
21
20
|
* Only relevant for lazy-loaded tree views.
|
|
@@ -24,7 +23,7 @@ type DataSource<R extends {}> = {
|
|
|
24
23
|
* @param {TreeViewItemId} parentId The id of the item the children belong to.
|
|
25
24
|
* @returns { Promise<R[]>} The children of the item.
|
|
26
25
|
*/
|
|
27
|
-
getTreeItems
|
|
26
|
+
getTreeItems: (parentId?: TreeViewItemId) => Promise<R[]>;
|
|
28
27
|
};
|
|
29
28
|
export interface UseTreeViewLazyLoadingPublicAPI {}
|
|
30
29
|
export interface UseTreeViewLazyLoadingInstance extends UseTreeViewLazyLoadingPublicAPI {
|
|
@@ -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
|
-
|
|
15
|
-
|
|
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:
|
|
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 (
|
|
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
|
-
|
|
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 (
|
|
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 (
|
|
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 =
|
|
90
|
+
newSelected = isMultiSelectEnabled ? [] : null;
|
|
96
91
|
} else {
|
|
97
|
-
newSelected =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
}
|
|
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
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
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,
|