@mui/x-tree-view 8.11.0 → 8.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +169 -0
- 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/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/TreeItemProvider/TreeItemProvider.js +3 -3
- package/esm/hooks/index.d.ts +2 -1
- package/esm/hooks/index.js +2 -1
- package/esm/hooks/useApplyPropagationToSelectedItemsOnMount.d.ts +53 -0
- package/esm/hooks/useApplyPropagationToSelectedItemsOnMount.js +80 -0
- 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 +82 -102
- 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/tree.js +33 -33
- package/esm/useTreeItem/useTreeItem.js +14 -14
- package/esm/useTreeItem/useTreeItem.types.d.ts +2 -1
- package/hooks/index.d.ts +2 -1
- package/hooks/index.js +8 -1
- package/hooks/useApplyPropagationToSelectedItemsOnMount.d.ts +53 -0
- package/hooks/useApplyPropagationToSelectedItemsOnMount.js +87 -0
- 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 +81 -101
- 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/tree.js +31 -31
- package/package.json +13 -14
- 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
|
@@ -3,104 +3,64 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
var
|
|
6
|
+
exports.itemsSelectors = void 0;
|
|
7
|
+
var _store = require("@mui/x-internals/store");
|
|
8
8
|
var _useTreeViewItems = require("./useTreeViewItems.utils");
|
|
9
|
-
const selectorTreeViewItemsState = state => state.items;
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Get the loading state for the Tree View.
|
|
13
|
-
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
14
|
-
* @returns {boolean} The loading state for the Tree View.
|
|
15
|
-
*/
|
|
16
|
-
const selectorIsTreeViewLoading = exports.selectorIsTreeViewLoading = (0, _selectors.createSelector)(selectorTreeViewItemsState, items => items.loading);
|
|
17
|
-
/**
|
|
18
|
-
* Get the error state for the Tree View.
|
|
19
|
-
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
20
|
-
* @returns {boolean} The error state for the Tree View.
|
|
21
|
-
*/
|
|
22
|
-
const selectorGetTreeViewError = exports.selectorGetTreeViewError = (0, _selectors.createSelector)(selectorTreeViewItemsState, items => items.error);
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Get the meta-information of all items.
|
|
26
|
-
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
27
|
-
* @returns {TreeViewItemMetaLookup} The meta-information of all items.
|
|
28
|
-
*/
|
|
29
|
-
const selectorItemMetaLookup = exports.selectorItemMetaLookup = (0, _selectors.createSelector)(selectorTreeViewItemsState, items => items.itemMetaLookup);
|
|
30
9
|
const EMPTY_CHILDREN = [];
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
return
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
* Get the depth of an item (items at the root level have a depth of 0).
|
|
89
|
-
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
90
|
-
* @param {TreeViewItemId} itemId The id of the item to get the depth of.
|
|
91
|
-
* @returns {number} The depth of the item.
|
|
92
|
-
*/
|
|
93
|
-
const selectorItemDepth = exports.selectorItemDepth = (0, _selectors.createSelector)([selectorItemMeta], itemMeta => itemMeta?.depth ?? 0);
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Check if the disabled items are focusable.
|
|
97
|
-
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
98
|
-
* @returns {boolean} Whether the disabled items are focusable.
|
|
99
|
-
*/
|
|
100
|
-
const selectorDisabledItemFocusable = exports.selectorDisabledItemFocusable = (0, _selectors.createSelector)([selectorTreeViewItemsState], itemsState => itemsState.disabledItemsFocusable);
|
|
101
|
-
const selectorCanItemBeFocused = exports.selectorCanItemBeFocused = (0, _selectors.createSelector)([selectorDisabledItemFocusable, selectorIsItemDisabled], (disabledItemsFocusable, isDisabled) => {
|
|
102
|
-
if (disabledItemsFocusable) {
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
return !isDisabled;
|
|
106
|
-
});
|
|
10
|
+
const itemsSelectors = exports.itemsSelectors = {
|
|
11
|
+
/**
|
|
12
|
+
* Gets the loading state for the Tree View.
|
|
13
|
+
*/
|
|
14
|
+
isLoading: (0, _store.createSelector)(state => state.items.loading),
|
|
15
|
+
/**
|
|
16
|
+
* Gets the error state for the Tree View.
|
|
17
|
+
*/
|
|
18
|
+
error: (0, _store.createSelector)(state => state.items.error),
|
|
19
|
+
/**
|
|
20
|
+
* Checks whether the disabled items are focusable.
|
|
21
|
+
*/
|
|
22
|
+
disabledItemFocusable: (0, _store.createSelector)(state => state.items.disabledItemsFocusable),
|
|
23
|
+
/**
|
|
24
|
+
* Gets the meta-information of all items.
|
|
25
|
+
*/
|
|
26
|
+
itemMetaLookup: (0, _store.createSelector)(state => state.items.itemMetaLookup),
|
|
27
|
+
/**
|
|
28
|
+
* Gets the meta-information of an item.
|
|
29
|
+
*/
|
|
30
|
+
itemMeta: (0, _store.createSelector)((state, itemId) => state.items.itemMetaLookup[itemId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID] ?? null),
|
|
31
|
+
/**
|
|
32
|
+
* Gets the ordered children ids of an item.
|
|
33
|
+
*/
|
|
34
|
+
itemOrderedChildrenIds: (0, _store.createSelector)((state, itemId) => state.items.itemOrderedChildrenIdsLookup[itemId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID] ?? EMPTY_CHILDREN),
|
|
35
|
+
/**
|
|
36
|
+
* Gets the model of an item.
|
|
37
|
+
*/
|
|
38
|
+
itemModel: (0, _store.createSelector)((state, itemId) => state.items.itemModelLookup[itemId]),
|
|
39
|
+
/**
|
|
40
|
+
* Checks whether an item is disabled.
|
|
41
|
+
*/
|
|
42
|
+
isItemDisabled: (0, _store.createSelector)((state, itemId) => (0, _useTreeViewItems.isItemDisabled)(state.items.itemMetaLookup, itemId)),
|
|
43
|
+
/**
|
|
44
|
+
* Gets the index of an item in its parent's children.
|
|
45
|
+
*/
|
|
46
|
+
itemIndex: (0, _store.createSelector)((state, itemId) => {
|
|
47
|
+
const itemMeta = state.items.itemMetaLookup[itemId];
|
|
48
|
+
if (itemMeta == null) {
|
|
49
|
+
return -1;
|
|
50
|
+
}
|
|
51
|
+
const parentIndexes = state.items.itemChildrenIndexesLookup[itemMeta.parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID];
|
|
52
|
+
return parentIndexes[itemMeta.id];
|
|
53
|
+
}),
|
|
54
|
+
/**
|
|
55
|
+
* Gets the id of an item's parent.
|
|
56
|
+
*/
|
|
57
|
+
itemParentId: (0, _store.createSelector)((state, itemId) => state.items.itemMetaLookup[itemId]?.parentId ?? null),
|
|
58
|
+
/**
|
|
59
|
+
* Gets the depth of an item (items at the root level have a depth of 0).
|
|
60
|
+
*/
|
|
61
|
+
itemDepth: (0, _store.createSelector)((state, itemId) => state.items.itemMetaLookup[itemId]?.depth ?? 0),
|
|
62
|
+
/**
|
|
63
|
+
* Checks whether an item can be focused.
|
|
64
|
+
*/
|
|
65
|
+
canItemBeFocused: (0, _store.createSelector)((state, itemId) => state.items.disabledItemsFocusable || !(0, _useTreeViewItems.isItemDisabled)(state.items.itemMetaLookup, itemId))
|
|
66
|
+
};
|
|
@@ -7,7 +7,7 @@ export declare const buildSiblingIndexes: (siblings: string[]) => {
|
|
|
7
7
|
/**
|
|
8
8
|
* Check if an item is disabled.
|
|
9
9
|
* This method should only be used in selectors that are checking if several items are disabled.
|
|
10
|
-
* Otherwise, use the `
|
|
10
|
+
* Otherwise, use the `itemsSelector.isItemDisabled` selector.
|
|
11
11
|
* @returns
|
|
12
12
|
*/
|
|
13
13
|
export declare const isItemDisabled: (itemMetaLookup: {
|
|
@@ -16,7 +16,7 @@ const buildSiblingIndexes = siblings => {
|
|
|
16
16
|
/**
|
|
17
17
|
* Check if an item is disabled.
|
|
18
18
|
* This method should only be used in selectors that are checking if several items are disabled.
|
|
19
|
-
* Otherwise, use the `
|
|
19
|
+
* Otherwise, use the `itemsSelector.isItemDisabled` selector.
|
|
20
20
|
* @returns
|
|
21
21
|
*/
|
|
22
22
|
exports.buildSiblingIndexes = buildSiblingIndexes;
|
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
9
|
exports.useTreeViewJSXItems = void 0;
|
|
10
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
11
|
var React = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _store = require("@mui/x-internals/store");
|
|
12
13
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
13
14
|
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
14
15
|
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
|
@@ -19,8 +20,7 @@ var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.utils");
|
|
|
19
20
|
var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext");
|
|
20
21
|
var _useTreeViewId = require("../../corePlugins/useTreeViewId/useTreeViewId.utils");
|
|
21
22
|
var _useTreeItemUtils = require("../../../hooks/useTreeItemUtils/useTreeItemUtils");
|
|
22
|
-
var
|
|
23
|
-
var _useTreeViewId2 = require("../../corePlugins/useTreeViewId/useTreeViewId.selectors");
|
|
23
|
+
var _useTreeViewId2 = require("../../corePlugins/useTreeViewId");
|
|
24
24
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
25
25
|
const useTreeViewJSXItems = ({
|
|
26
26
|
instance,
|
|
@@ -28,38 +28,30 @@ const useTreeViewJSXItems = ({
|
|
|
28
28
|
}) => {
|
|
29
29
|
instance.preventItemUpdates();
|
|
30
30
|
const insertJSXItem = (0, _useEventCallback.default)(item => {
|
|
31
|
-
store.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
})
|
|
47
|
-
})
|
|
48
|
-
});
|
|
49
|
-
});
|
|
31
|
+
if (store.state.items.itemMetaLookup[item.id] != null) {
|
|
32
|
+
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', `Two items were provided with the same id in the \`items\` prop: "${item.id}"`].join('\n'));
|
|
33
|
+
}
|
|
34
|
+
store.set('items', (0, _extends2.default)({}, store.state.items, {
|
|
35
|
+
itemMetaLookup: (0, _extends2.default)({}, store.state.items.itemMetaLookup, {
|
|
36
|
+
[item.id]: item
|
|
37
|
+
}),
|
|
38
|
+
// For Simple Tree View, we don't have a proper `item` object, so we create a very basic one.
|
|
39
|
+
itemModelLookup: (0, _extends2.default)({}, store.state.items.itemModelLookup, {
|
|
40
|
+
[item.id]: {
|
|
41
|
+
id: item.id,
|
|
42
|
+
label: item.label ?? ''
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
}));
|
|
50
46
|
return () => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
itemModelLookup: newItemModelLookup
|
|
60
|
-
})
|
|
61
|
-
});
|
|
62
|
-
});
|
|
47
|
+
const newItemMetaLookup = (0, _extends2.default)({}, store.state.items.itemMetaLookup);
|
|
48
|
+
const newItemModelLookup = (0, _extends2.default)({}, store.state.items.itemModelLookup);
|
|
49
|
+
delete newItemMetaLookup[item.id];
|
|
50
|
+
delete newItemModelLookup[item.id];
|
|
51
|
+
store.set('items', (0, _extends2.default)({}, store.state.items, {
|
|
52
|
+
itemMetaLookup: newItemMetaLookup,
|
|
53
|
+
itemModelLookup: newItemModelLookup
|
|
54
|
+
}));
|
|
63
55
|
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeItem', {
|
|
64
56
|
id: item.id
|
|
65
57
|
});
|
|
@@ -67,14 +59,12 @@ const useTreeViewJSXItems = ({
|
|
|
67
59
|
});
|
|
68
60
|
const setJSXItemsOrderedChildrenIds = (parentId, orderedChildrenIds) => {
|
|
69
61
|
const parentIdWithDefault = parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID;
|
|
70
|
-
store.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
[parentIdWithDefault]: (0, _useTreeViewItems.buildSiblingIndexes)(orderedChildrenIds)
|
|
77
|
-
})
|
|
62
|
+
store.set('items', (0, _extends2.default)({}, store.state.items, {
|
|
63
|
+
itemOrderedChildrenIdsLookup: (0, _extends2.default)({}, store.state.items.itemOrderedChildrenIdsLookup, {
|
|
64
|
+
[parentIdWithDefault]: orderedChildrenIds
|
|
65
|
+
}),
|
|
66
|
+
itemChildrenIndexesLookup: (0, _extends2.default)({}, store.state.items.itemChildrenIndexesLookup, {
|
|
67
|
+
[parentIdWithDefault]: (0, _useTreeViewItems.buildSiblingIndexes)(orderedChildrenIds)
|
|
78
68
|
})
|
|
79
69
|
}));
|
|
80
70
|
};
|
|
@@ -128,7 +118,7 @@ const useTreeViewJSXItemsItemPlugin = ({
|
|
|
128
118
|
const expandable = (0, _useTreeItemUtils.itemHasChildren)(children);
|
|
129
119
|
const pluginContentRef = React.useRef(null);
|
|
130
120
|
const handleContentRef = (0, _useForkRef.default)(pluginContentRef, contentRef);
|
|
131
|
-
const treeId = (0,
|
|
121
|
+
const treeId = (0, _store.useStore)(store, _useTreeViewId2.idSelectors.treeId);
|
|
132
122
|
|
|
133
123
|
// Prevent any flashing
|
|
134
124
|
(0, _useEnhancedEffect.default)(() => {
|
|
@@ -8,12 +8,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
});
|
|
9
9
|
exports.useTreeViewKeyboardNavigation = void 0;
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _store = require("@mui/x-internals/store");
|
|
11
12
|
var _RtlProvider = require("@mui/system/RtlProvider");
|
|
12
13
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
13
14
|
var _tree = require("../../utils/tree");
|
|
14
15
|
var _plugins = require("../../utils/plugins");
|
|
15
16
|
var _useTreeViewLabel = require("../useTreeViewLabel");
|
|
16
|
-
var _useSelector = require("../../hooks/useSelector");
|
|
17
17
|
var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
|
|
18
18
|
var _useTreeViewLabel2 = require("../useTreeViewLabel/useTreeViewLabel.selectors");
|
|
19
19
|
var _useTreeViewSelection = require("../useTreeViewSelection/useTreeViewSelection.selectors");
|
|
@@ -31,7 +31,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
31
31
|
const updateFirstCharMap = (0, _useEventCallback.default)(callback => {
|
|
32
32
|
firstCharMap.current = callback(firstCharMap.current);
|
|
33
33
|
});
|
|
34
|
-
const itemMetaLookup = (0,
|
|
34
|
+
const itemMetaLookup = (0, _store.useStore)(store, _useTreeViewItems.itemsSelectors.itemMetaLookup);
|
|
35
35
|
React.useEffect(() => {
|
|
36
36
|
if (instance.areItemUpdatesPrevented()) {
|
|
37
37
|
return;
|
|
@@ -46,10 +46,10 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
46
46
|
const getFirstMatchingItem = (itemId, query) => {
|
|
47
47
|
const cleanQuery = query.toLowerCase();
|
|
48
48
|
const getNextItem = itemIdToCheck => {
|
|
49
|
-
const nextItemId = (0, _tree.getNextNavigableItem)(store.
|
|
49
|
+
const nextItemId = (0, _tree.getNextNavigableItem)(store.state, itemIdToCheck);
|
|
50
50
|
// We reached the end of the tree, check from the beginning
|
|
51
51
|
if (nextItemId === null) {
|
|
52
|
-
return (0, _tree.getFirstNavigableItem)(store.
|
|
52
|
+
return (0, _tree.getFirstNavigableItem)(store.state);
|
|
53
53
|
}
|
|
54
54
|
return nextItemId;
|
|
55
55
|
};
|
|
@@ -67,9 +67,9 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
67
67
|
}
|
|
68
68
|
return matchingItemId;
|
|
69
69
|
};
|
|
70
|
-
const canToggleItemSelection = itemId =>
|
|
70
|
+
const canToggleItemSelection = itemId => _useTreeViewSelection.selectionSelectors.enabled(store.state) && !_useTreeViewItems.itemsSelectors.isItemDisabled(store.state, itemId);
|
|
71
71
|
const canToggleItemExpansion = itemId => {
|
|
72
|
-
return !
|
|
72
|
+
return !_useTreeViewItems.itemsSelectors.isItemDisabled(store.state, itemId) && _useTreeViewExpansion.expansionSelectors.isItemExpandable(store.state, itemId);
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
// ARIA specification: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/#keyboardinteraction
|
|
@@ -82,7 +82,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
82
82
|
}
|
|
83
83
|
const ctrlPressed = event.ctrlKey || event.metaKey;
|
|
84
84
|
const key = event.key;
|
|
85
|
-
const isMultiSelectEnabled =
|
|
85
|
+
const isMultiSelectEnabled = _useTreeViewSelection.selectionSelectors.isMultiSelectEnabled(store.state);
|
|
86
86
|
|
|
87
87
|
// eslint-disable-next-line default-case
|
|
88
88
|
switch (true) {
|
|
@@ -107,7 +107,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
107
107
|
// If the focused item has no children, we select it.
|
|
108
108
|
case key === 'Enter':
|
|
109
109
|
{
|
|
110
|
-
if ((0, _plugins.hasPlugin)(instance, _useTreeViewLabel.useTreeViewLabel) &&
|
|
110
|
+
if ((0, _plugins.hasPlugin)(instance, _useTreeViewLabel.useTreeViewLabel) && _useTreeViewLabel2.labelSelectors.isItemEditable(store.state, itemId) && !_useTreeViewLabel2.labelSelectors.isItemBeingEdited(store.state, itemId)) {
|
|
111
111
|
instance.setEditedItem(itemId);
|
|
112
112
|
} else if (canToggleItemExpansion(itemId)) {
|
|
113
113
|
instance.setItemExpansion({
|
|
@@ -123,7 +123,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
123
123
|
itemId,
|
|
124
124
|
keepExistingSelection: true
|
|
125
125
|
});
|
|
126
|
-
} else if (!
|
|
126
|
+
} else if (!_useTreeViewSelection.selectionSelectors.isItemSelected(store.state, itemId)) {
|
|
127
127
|
instance.setItemSelection({
|
|
128
128
|
event,
|
|
129
129
|
itemId
|
|
@@ -137,7 +137,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
137
137
|
// Focus the next focusable item
|
|
138
138
|
case key === 'ArrowDown':
|
|
139
139
|
{
|
|
140
|
-
const nextItem = (0, _tree.getNextNavigableItem)(store.
|
|
140
|
+
const nextItem = (0, _tree.getNextNavigableItem)(store.state, itemId);
|
|
141
141
|
if (nextItem) {
|
|
142
142
|
event.preventDefault();
|
|
143
143
|
instance.focusItem(event, nextItem);
|
|
@@ -154,7 +154,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
154
154
|
// Focuses the previous focusable item
|
|
155
155
|
case key === 'ArrowUp':
|
|
156
156
|
{
|
|
157
|
-
const previousItem = (0, _tree.getPreviousNavigableItem)(store.
|
|
157
|
+
const previousItem = (0, _tree.getPreviousNavigableItem)(store.state, itemId);
|
|
158
158
|
if (previousItem) {
|
|
159
159
|
event.preventDefault();
|
|
160
160
|
instance.focusItem(event, previousItem);
|
|
@@ -175,8 +175,8 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
175
175
|
if (ctrlPressed) {
|
|
176
176
|
return;
|
|
177
177
|
}
|
|
178
|
-
if (
|
|
179
|
-
const nextItemId = (0, _tree.getNextNavigableItem)(store.
|
|
178
|
+
if (_useTreeViewExpansion.expansionSelectors.isItemExpanded(store.state, itemId)) {
|
|
179
|
+
const nextItemId = (0, _tree.getNextNavigableItem)(store.state, itemId);
|
|
180
180
|
if (nextItemId) {
|
|
181
181
|
instance.focusItem(event, nextItemId);
|
|
182
182
|
event.preventDefault();
|
|
@@ -198,14 +198,14 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
198
198
|
if (ctrlPressed) {
|
|
199
199
|
return;
|
|
200
200
|
}
|
|
201
|
-
if (canToggleItemExpansion(itemId) &&
|
|
201
|
+
if (canToggleItemExpansion(itemId) && _useTreeViewExpansion.expansionSelectors.isItemExpanded(store.state, itemId)) {
|
|
202
202
|
instance.setItemExpansion({
|
|
203
203
|
event,
|
|
204
204
|
itemId
|
|
205
205
|
});
|
|
206
206
|
event.preventDefault();
|
|
207
207
|
} else {
|
|
208
|
-
const parent =
|
|
208
|
+
const parent = _useTreeViewItems.itemsSelectors.itemParentId(store.state, itemId);
|
|
209
209
|
if (parent) {
|
|
210
210
|
instance.focusItem(event, parent);
|
|
211
211
|
event.preventDefault();
|
|
@@ -222,7 +222,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
222
222
|
if (canToggleItemSelection(itemId) && isMultiSelectEnabled && ctrlPressed && event.shiftKey) {
|
|
223
223
|
instance.selectRangeFromStartToItem(event, itemId);
|
|
224
224
|
} else {
|
|
225
|
-
instance.focusItem(event, (0, _tree.getFirstNavigableItem)(store.
|
|
225
|
+
instance.focusItem(event, (0, _tree.getFirstNavigableItem)(store.state));
|
|
226
226
|
}
|
|
227
227
|
event.preventDefault();
|
|
228
228
|
break;
|
|
@@ -236,7 +236,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
236
236
|
if (canToggleItemSelection(itemId) && isMultiSelectEnabled && ctrlPressed && event.shiftKey) {
|
|
237
237
|
instance.selectRangeFromItemToEnd(event, itemId);
|
|
238
238
|
} else {
|
|
239
|
-
instance.focusItem(event, (0, _tree.getLastNavigableItem)(store.
|
|
239
|
+
instance.focusItem(event, (0, _tree.getLastNavigableItem)(store.state));
|
|
240
240
|
}
|
|
241
241
|
event.preventDefault();
|
|
242
242
|
break;
|
|
@@ -252,7 +252,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
252
252
|
|
|
253
253
|
// Multi select behavior when pressing Ctrl + a
|
|
254
254
|
// Selects all the items
|
|
255
|
-
case String.fromCharCode(event.keyCode) === 'A' && ctrlPressed && isMultiSelectEnabled &&
|
|
255
|
+
case String.fromCharCode(event.keyCode) === 'A' && ctrlPressed && isMultiSelectEnabled && _useTreeViewSelection.selectionSelectors.enabled(store.state):
|
|
256
256
|
{
|
|
257
257
|
instance.selectAllNavigableItems(event);
|
|
258
258
|
event.preventDefault();
|
package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { UseTreeViewItemsSignature } from "../useTreeViewItems/index.js";
|
|
|
4
4
|
import { UseTreeViewSelectionSignature } from "../useTreeViewSelection/index.js";
|
|
5
5
|
import { UseTreeViewFocusSignature } from "../useTreeViewFocus/index.js";
|
|
6
6
|
import { UseTreeViewExpansionSignature } from "../useTreeViewExpansion/index.js";
|
|
7
|
+
import { UseTreeViewLabelSignature } from "../useTreeViewLabel/index.js";
|
|
7
8
|
import { TreeViewItemId, TreeViewCancellableEvent } from "../../../models/index.js";
|
|
8
9
|
export interface UseTreeViewKeyboardNavigationInstance {
|
|
9
10
|
/**
|
|
@@ -24,6 +25,7 @@ export interface UseTreeViewKeyboardNavigationInstance {
|
|
|
24
25
|
export type UseTreeViewKeyboardNavigationSignature = TreeViewPluginSignature<{
|
|
25
26
|
instance: UseTreeViewKeyboardNavigationInstance;
|
|
26
27
|
dependencies: [UseTreeViewItemsSignature, UseTreeViewSelectionSignature, UseTreeViewFocusSignature, UseTreeViewExpansionSignature];
|
|
28
|
+
optionalDependencies: [UseTreeViewLabelSignature];
|
|
27
29
|
}>;
|
|
28
30
|
export type TreeViewFirstCharMap = {
|
|
29
31
|
[itemId: string]: string;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export { useTreeViewLabel } from "./useTreeViewLabel.js";
|
|
2
|
-
export type { UseTreeViewLabelSignature, UseTreeViewLabelParameters } from "./useTreeViewLabel.types.js";
|
|
2
|
+
export type { UseTreeViewLabelSignature, UseTreeViewLabelParameters } from "./useTreeViewLabel.types.js";
|
|
3
|
+
export { labelSelectors } from "./useTreeViewLabel.selectors.js";
|
|
@@ -3,10 +3,17 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "labelSelectors", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useTreeViewLabel2.labelSelectors;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "useTreeViewLabel", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function () {
|
|
9
15
|
return _useTreeViewLabel.useTreeViewLabel;
|
|
10
16
|
}
|
|
11
17
|
});
|
|
12
|
-
var _useTreeViewLabel = require("./useTreeViewLabel");
|
|
18
|
+
var _useTreeViewLabel = require("./useTreeViewLabel");
|
|
19
|
+
var _useTreeViewLabel2 = require("./useTreeViewLabel.selectors");
|
|
@@ -7,8 +7,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.useTreeViewLabelItemPlugin = void 0;
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _store = require("@mui/x-internals/store");
|
|
10
11
|
var _TreeViewProvider = require("../../TreeViewProvider");
|
|
11
|
-
var _useSelector = require("../../hooks/useSelector");
|
|
12
12
|
var _useTreeViewLabel = require("./useTreeViewLabel.selectors");
|
|
13
13
|
const useTreeViewLabelItemPlugin = ({
|
|
14
14
|
props
|
|
@@ -21,8 +21,8 @@ const useTreeViewLabelItemPlugin = ({
|
|
|
21
21
|
itemId
|
|
22
22
|
} = props;
|
|
23
23
|
const [labelInputValue, setLabelInputValue] = React.useState(label);
|
|
24
|
-
const isItemEditable = (0,
|
|
25
|
-
const isItemBeingEdited = (0,
|
|
24
|
+
const isItemEditable = (0, _store.useStore)(store, _useTreeViewLabel.labelSelectors.isItemEditable, itemId);
|
|
25
|
+
const isItemBeingEdited = (0, _store.useStore)(store, _useTreeViewLabel.labelSelectors.isItemBeingEdited, itemId);
|
|
26
26
|
React.useEffect(() => {
|
|
27
27
|
if (!isItemBeingEdited) {
|
|
28
28
|
setLabelInputValue(label);
|
|
@@ -15,45 +15,37 @@ const useTreeViewLabel = ({
|
|
|
15
15
|
}) => {
|
|
16
16
|
const setEditedItem = editedItemId => {
|
|
17
17
|
if (editedItemId !== null) {
|
|
18
|
-
const isEditable =
|
|
18
|
+
const isEditable = _useTreeViewLabel2.labelSelectors.isItemEditable(store.state, editedItemId);
|
|
19
19
|
if (!isEditable) {
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
-
store.
|
|
24
|
-
|
|
25
|
-
editedItemId
|
|
26
|
-
})
|
|
23
|
+
store.set('label', (0, _extends2.default)({}, store.state.label, {
|
|
24
|
+
editedItemId
|
|
27
25
|
}));
|
|
28
26
|
};
|
|
29
27
|
const updateItemLabel = (itemId, label) => {
|
|
30
28
|
if (!label) {
|
|
31
29
|
throw new Error(['MUI X: The Tree View component requires all items to have a `label` property.', 'The label of an item cannot be empty.', itemId].join('\n'));
|
|
32
30
|
}
|
|
33
|
-
store.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
return prevState;
|
|
47
|
-
});
|
|
31
|
+
const item = store.state.items.itemMetaLookup[itemId];
|
|
32
|
+
if (item.label === label) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
store.set('items', (0, _extends2.default)({}, store.state.items, {
|
|
36
|
+
itemMetaLookup: (0, _extends2.default)({}, store.state.items.itemMetaLookup, {
|
|
37
|
+
[itemId]: (0, _extends2.default)({}, item, {
|
|
38
|
+
label
|
|
39
|
+
})
|
|
40
|
+
})
|
|
41
|
+
}));
|
|
48
42
|
if (params.onItemLabelChange) {
|
|
49
43
|
params.onItemLabelChange(itemId, label);
|
|
50
44
|
}
|
|
51
45
|
};
|
|
52
46
|
(0, _useEnhancedEffect.default)(() => {
|
|
53
|
-
store.
|
|
54
|
-
|
|
55
|
-
isItemEditable: params.isItemEditable
|
|
56
|
-
})
|
|
47
|
+
store.set('label', (0, _extends2.default)({}, store.state.items, {
|
|
48
|
+
isItemEditable: params.isItemEditable
|
|
57
49
|
}));
|
|
58
50
|
}, [store, params.isItemEditable]);
|
|
59
51
|
return {
|