@mui/x-tree-view 7.22.1 → 8.0.0-alpha.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 +486 -11
- package/README.md +4 -4
- package/RichTreeView/RichTreeView.js +22 -5
- package/RichTreeView/RichTreeView.types.d.ts +4 -17
- package/SimpleTreeView/SimpleTreeView.js +21 -3
- package/TreeItem/TreeItem.d.ts +20 -2
- package/TreeItem/TreeItem.js +241 -371
- package/TreeItem/TreeItem.types.d.ts +52 -85
- package/TreeItem/index.d.ts +1 -4
- package/TreeItem/index.js +2 -4
- package/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.d.ts +7 -0
- package/{modern/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +8 -6
- package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.d.ts → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.d.ts} +1 -1
- package/TreeItemDragAndDropOverlay/index.d.ts +2 -0
- package/TreeItemDragAndDropOverlay/index.js +1 -0
- package/{TreeItem2LabelInput → TreeItemDragAndDropOverlay}/package.json +1 -1
- package/TreeItemIcon/TreeItemIcon.d.ts +7 -0
- package/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +5 -3
- package/{TreeItem2Icon/TreeItem2Icon.types.d.ts → TreeItemIcon/TreeItemIcon.types.d.ts} +7 -7
- package/TreeItemIcon/index.d.ts +2 -0
- package/TreeItemIcon/index.js +1 -0
- package/{useTreeItem2 → TreeItemIcon}/package.json +1 -1
- package/TreeItemLabelInput/TreeItemLabelInput.d.ts +5 -0
- package/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +3 -3
- package/{TreeItem2LabelInput/TreeItem2LabelInput.types.d.ts → TreeItemLabelInput/TreeItemLabelInput.types.d.ts} +1 -1
- package/TreeItemLabelInput/index.d.ts +2 -0
- package/TreeItemLabelInput/index.js +1 -0
- package/{TreeItem2Provider → TreeItemLabelInput}/package.json +1 -1
- package/TreeItemProvider/TreeItemProvider.d.ts +9 -0
- package/TreeItemProvider/TreeItemProvider.js +43 -0
- package/{TreeItem2Provider/TreeItem2Provider.types.d.ts → TreeItemProvider/TreeItemProvider.types.d.ts} +2 -1
- package/TreeItemProvider/index.d.ts +2 -0
- package/TreeItemProvider/index.js +1 -0
- package/{TreeItem2Icon → TreeItemProvider}/package.json +1 -1
- package/hooks/index.d.ts +2 -1
- package/hooks/index.js +2 -1
- package/hooks/useTreeItemModel.d.ts +2 -0
- package/hooks/useTreeItemModel.js +11 -0
- package/hooks/useTreeItemUtils/index.d.ts +1 -0
- package/hooks/useTreeItemUtils/index.js +1 -0
- package/hooks/{useTreeItem2Utils/useTreeItem2Utils.d.ts → useTreeItemUtils/useTreeItemUtils.d.ts} +13 -12
- package/{modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js → hooks/useTreeItemUtils/useTreeItemUtils.js} +36 -18
- package/index.d.ts +5 -7
- package/index.js +6 -8
- package/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.d.ts +3 -1
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.d.ts +2 -1
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
- package/internals/TreeViewProvider/TreeViewProvider.js +1 -2
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +5 -2
- package/internals/components/RichTreeViewItems.d.ts +3 -6
- package/internals/components/RichTreeViewItems.js +42 -30
- package/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -11
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +36 -0
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -0
- package/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +1 -5
- package/internals/hooks/useSelector.d.ts +4 -0
- package/internals/hooks/useSelector.js +6 -0
- package/internals/index.d.ts +6 -1
- package/internals/index.js +5 -1
- package/internals/models/helpers.d.ts +0 -2
- package/internals/models/itemPlugin.d.ts +13 -10
- package/internals/models/plugin.d.ts +20 -8
- package/internals/models/treeView.d.ts +6 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +124 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +17 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +8 -15
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.d.ts +1 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +7 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +182 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +34 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +4 -16
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +15 -13
- package/internals/plugins/useTreeViewItems/index.d.ts +1 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +58 -100
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +718 -0
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +103 -0
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +16 -55
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +29 -26
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.d.ts +1 -1
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +74 -0
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +26 -0
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +13 -29
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.d.ts +2 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +88 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +79 -43
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +32 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +9 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +39 -9
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +20 -1
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +105 -0
- package/internals/useTreeView/useTreeView.js +30 -17
- package/internals/useTreeView/useTreeView.types.d.ts +1 -2
- package/internals/useTreeView/useTreeViewBuildContext.d.ts +3 -1
- package/internals/useTreeView/useTreeViewBuildContext.js +24 -18
- package/internals/utils/TreeViewStore.d.ts +12 -0
- package/internals/utils/TreeViewStore.js +24 -0
- package/internals/utils/selectors.d.ts +9 -0
- package/internals/utils/selectors.js +37 -0
- package/internals/utils/tree.d.ts +8 -8
- package/internals/utils/tree.js +51 -43
- package/models/items.d.ts +7 -2
- package/modern/RichTreeView/RichTreeView.js +22 -5
- package/modern/SimpleTreeView/SimpleTreeView.js +21 -3
- package/modern/TreeItem/TreeItem.js +241 -371
- package/modern/TreeItem/index.js +2 -4
- package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +8 -6
- package/modern/TreeItemDragAndDropOverlay/index.js +1 -0
- package/modern/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +5 -3
- package/modern/TreeItemIcon/index.js +1 -0
- package/modern/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +3 -3
- package/modern/TreeItemLabelInput/index.js +1 -0
- package/modern/TreeItemProvider/TreeItemProvider.js +43 -0
- package/modern/TreeItemProvider/index.js +1 -0
- package/modern/hooks/index.js +2 -1
- package/modern/hooks/useTreeItemModel.js +11 -0
- package/modern/hooks/useTreeItemUtils/index.js +1 -0
- package/{hooks/useTreeItem2Utils/useTreeItem2Utils.js → modern/hooks/useTreeItemUtils/useTreeItemUtils.js} +36 -18
- package/modern/index.js +6 -8
- package/modern/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
- package/modern/internals/TreeViewProvider/TreeViewProvider.js +1 -2
- package/modern/internals/components/RichTreeViewItems.js +42 -30
- package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -11
- package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -0
- package/modern/internals/hooks/useSelector.js +6 -0
- package/modern/internals/index.js +5 -1
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +17 -0
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +7 -0
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +34 -0
- package/modern/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +15 -13
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +58 -100
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +103 -0
- package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +29 -26
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +26 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +88 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +79 -43
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +9 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +105 -0
- package/modern/internals/useTreeView/useTreeView.js +30 -17
- package/modern/internals/useTreeView/useTreeViewBuildContext.js +24 -18
- package/modern/internals/utils/TreeViewStore.js +24 -0
- package/modern/internals/utils/selectors.js +37 -0
- package/modern/internals/utils/tree.js +51 -43
- package/modern/useTreeItem/index.js +1 -0
- package/modern/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +45 -51
- package/node/RichTreeView/RichTreeView.js +22 -5
- package/node/SimpleTreeView/SimpleTreeView.js +21 -3
- package/node/TreeItem/TreeItem.js +242 -372
- package/node/TreeItem/index.js +38 -16
- package/node/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +7 -6
- package/node/TreeItemDragAndDropOverlay/index.js +12 -0
- package/node/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +4 -3
- package/node/TreeItemIcon/index.js +12 -0
- package/node/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +3 -3
- package/node/TreeItemLabelInput/index.js +12 -0
- package/node/{TreeItem2Provider/TreeItem2Provider.js → TreeItemProvider/TreeItemProvider.js} +22 -6
- package/node/TreeItemProvider/index.js +12 -0
- package/node/hooks/index.js +10 -3
- package/node/hooks/useTreeItemModel.js +17 -0
- package/node/hooks/useTreeItemUtils/index.js +12 -0
- package/node/hooks/{useTreeItem2Utils/useTreeItem2Utils.js → useTreeItemUtils/useTreeItemUtils.js} +37 -19
- package/node/index.js +18 -42
- package/node/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
- package/node/internals/TreeViewProvider/TreeViewProvider.js +1 -2
- package/node/internals/components/RichTreeViewItems.js +42 -30
- package/node/internals/corePlugins/useTreeViewId/useTreeViewId.js +12 -13
- package/node/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +15 -0
- package/node/internals/hooks/useSelector.js +13 -0
- package/node/internals/index.js +47 -1
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +23 -0
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +14 -0
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +40 -0
- package/node/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +16 -13
- package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +60 -102
- package/node/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +109 -0
- package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +30 -27
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
- package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
- package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
- package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +32 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +96 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +78 -42
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +15 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +109 -2
- package/node/internals/useTreeView/useTreeView.js +30 -17
- package/node/internals/useTreeView/useTreeViewBuildContext.js +25 -18
- package/node/internals/utils/TreeViewStore.js +31 -0
- package/node/internals/utils/selectors.js +44 -0
- package/node/internals/utils/tree.js +51 -43
- package/node/useTreeItem/index.js +12 -0
- package/node/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +46 -53
- package/package.json +7 -5
- package/themeAugmentation/components.d.ts +0 -10
- package/themeAugmentation/overrides.d.ts +0 -3
- package/themeAugmentation/props.d.ts +1 -5
- package/useTreeItem/index.d.ts +2 -0
- package/useTreeItem/index.js +1 -0
- package/{TreeItem2 → useTreeItem}/package.json +1 -1
- package/useTreeItem/useTreeItem.d.ts +2 -0
- package/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +45 -51
- package/{useTreeItem2/useTreeItem2.types.d.ts → useTreeItem/useTreeItem.types.d.ts} +51 -58
- package/TreeItem/TreeItemContent.d.ts +0 -61
- package/TreeItem/TreeItemContent.js +0 -146
- package/TreeItem/useTreeItemState.d.ts +0 -21
- package/TreeItem/useTreeItemState.js +0 -143
- package/TreeItem2/TreeItem2.d.ts +0 -34
- package/TreeItem2/TreeItem2.js +0 -387
- package/TreeItem2/TreeItem2.types.d.ts +0 -92
- package/TreeItem2/index.d.ts +0 -2
- package/TreeItem2/index.js +0 -1
- package/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.d.ts +0 -7
- package/TreeItem2DragAndDropOverlay/index.d.ts +0 -2
- package/TreeItem2DragAndDropOverlay/index.js +0 -1
- package/TreeItem2DragAndDropOverlay/package.json +0 -6
- package/TreeItem2Icon/TreeItem2Icon.d.ts +0 -7
- package/TreeItem2Icon/index.d.ts +0 -2
- package/TreeItem2Icon/index.js +0 -1
- package/TreeItem2LabelInput/TreeItem2LabelInput.d.ts +0 -5
- package/TreeItem2LabelInput/index.d.ts +0 -2
- package/TreeItem2LabelInput/index.js +0 -1
- package/TreeItem2Provider/TreeItem2Provider.d.ts +0 -6
- package/TreeItem2Provider/TreeItem2Provider.js +0 -26
- package/TreeItem2Provider/index.d.ts +0 -2
- package/TreeItem2Provider/index.js +0 -1
- package/TreeView/TreeView.d.ts +0 -21
- package/TreeView/TreeView.js +0 -211
- package/TreeView/TreeView.types.d.ts +0 -9
- package/TreeView/index.d.ts +0 -3
- package/TreeView/index.js +0 -3
- package/TreeView/package.json +0 -6
- package/TreeView/treeViewClasses.d.ts +0 -7
- package/TreeView/treeViewClasses.js +0 -6
- package/hooks/useTreeItem2Utils/index.d.ts +0 -1
- package/hooks/useTreeItem2Utils/index.js +0 -1
- package/modern/TreeItem/TreeItemContent.js +0 -146
- package/modern/TreeItem/useTreeItemState.js +0 -143
- package/modern/TreeItem2/TreeItem2.js +0 -387
- package/modern/TreeItem2/index.js +0 -1
- package/modern/TreeItem2DragAndDropOverlay/index.js +0 -1
- package/modern/TreeItem2Icon/index.js +0 -1
- package/modern/TreeItem2LabelInput/index.js +0 -1
- package/modern/TreeItem2Provider/TreeItem2Provider.js +0 -26
- package/modern/TreeItem2Provider/TreeItem2Provider.types.js +0 -1
- package/modern/TreeItem2Provider/index.js +0 -1
- package/modern/TreeView/TreeView.js +0 -211
- package/modern/TreeView/TreeView.types.js +0 -1
- package/modern/TreeView/index.js +0 -3
- package/modern/TreeView/treeViewClasses.js +0 -6
- package/modern/hooks/useTreeItem2Utils/index.js +0 -1
- package/modern/useTreeItem2/index.js +0 -4
- package/modern/useTreeItem2/useTreeItem2.types.js +0 -1
- package/node/TreeItem/TreeItemContent.js +0 -153
- package/node/TreeItem/useTreeItemState.js +0 -148
- package/node/TreeItem2/TreeItem2.js +0 -394
- package/node/TreeItem2/index.js +0 -48
- package/node/TreeItem2DragAndDropOverlay/index.js +0 -12
- package/node/TreeItem2Icon/index.js +0 -12
- package/node/TreeItem2LabelInput/index.js +0 -12
- package/node/TreeItem2Provider/index.js +0 -12
- package/node/TreeView/TreeView.js +0 -217
- package/node/TreeView/TreeView.types.js +0 -5
- package/node/TreeView/index.js +0 -27
- package/node/TreeView/treeViewClasses.js +0 -14
- package/node/hooks/useTreeItem2Utils/index.js +0 -12
- package/node/useTreeItem2/index.js +0 -10
- package/node/useTreeItem2/useTreeItem2.types.js +0 -5
- package/useTreeItem2/index.d.ts +0 -3
- package/useTreeItem2/index.js +0 -4
- package/useTreeItem2/useTreeItem2.d.ts +0 -2
- package/useTreeItem2/useTreeItem2.types.js +0 -1
- /package/{TreeItem2/TreeItem2.types.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
- /package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemIcon/TreeItemIcon.types.js} +0 -0
- /package/{TreeItem2Icon/TreeItem2Icon.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
- /package/{TreeItem2LabelInput/TreeItem2LabelInput.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
- /package/{TreeItem2Provider/TreeItem2Provider.types.js → modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
- /package/{TreeView/TreeView.types.js → modern/TreeItemIcon/TreeItemIcon.types.js} +0 -0
- /package/modern/{TreeItem2/TreeItem2.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
- /package/modern/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
- /package/modern/{TreeItem2Icon/TreeItem2Icon.types.js → useTreeItem/useTreeItem.types.js} +0 -0
- /package/node/{TreeItem2/TreeItem2.types.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
- /package/node/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemIcon/TreeItemIcon.types.js} +0 -0
- /package/node/{TreeItem2Icon/TreeItem2Icon.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
- /package/node/{TreeItem2LabelInput/TreeItem2LabelInput.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
- /package/node/{TreeItem2Provider/TreeItem2Provider.types.js → useTreeItem/useTreeItem.types.js} +0 -0
- /package/{modern/TreeItem2LabelInput/TreeItem2LabelInput.types.js → useTreeItem/useTreeItem.types.js} +0 -0
|
@@ -1,29 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
3
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.useTreeViewItems = void 0;
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
-
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
11
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
12
12
|
var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
|
|
13
13
|
var _useTreeViewItems = require("./useTreeViewItems.utils");
|
|
14
14
|
var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext");
|
|
15
|
-
var
|
|
15
|
+
var _useTreeViewItems2 = require("./useTreeViewItems.selectors");
|
|
16
|
+
var _useTreeViewId = require("../../corePlugins/useTreeViewId/useTreeViewId.selectors");
|
|
17
|
+
var _useTreeViewId2 = require("../../corePlugins/useTreeViewId/useTreeViewId.utils");
|
|
16
18
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
|
-
const _excluded = ["children"];
|
|
18
19
|
const updateItemsState = ({
|
|
20
|
+
disabledItemsFocusable,
|
|
19
21
|
items,
|
|
20
22
|
isItemDisabled,
|
|
21
23
|
getItemLabel,
|
|
22
24
|
getItemId
|
|
23
25
|
}) => {
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
26
|
+
const itemMetaLookup = {};
|
|
27
|
+
const itemModelLookup = {};
|
|
28
|
+
const itemOrderedChildrenIdsLookup = {
|
|
27
29
|
[_useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID]: []
|
|
28
30
|
};
|
|
29
31
|
const processItem = (item, depth, parentId) => {
|
|
@@ -31,14 +33,14 @@ const updateItemsState = ({
|
|
|
31
33
|
if (id == null) {
|
|
32
34
|
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.', 'An item was provided without id in the `items` prop:', JSON.stringify(item)].join('\n'));
|
|
33
35
|
}
|
|
34
|
-
if (
|
|
36
|
+
if (itemMetaLookup[id] != null) {
|
|
35
37
|
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: "${id}"`].join('\n'));
|
|
36
38
|
}
|
|
37
39
|
const label = getItemLabel ? getItemLabel(item) : item.label;
|
|
38
40
|
if (label == null) {
|
|
39
41
|
throw new Error(['MUI X: The Tree View component requires all items to have a `label` property.', 'Alternatively, you can use the `getItemLabel` prop to specify a custom label for each item.', 'An item was provided without label in the `items` prop:', JSON.stringify(item)].join('\n'));
|
|
40
42
|
}
|
|
41
|
-
|
|
43
|
+
itemMetaLookup[id] = {
|
|
42
44
|
id,
|
|
43
45
|
label,
|
|
44
46
|
parentId,
|
|
@@ -47,89 +49,58 @@ const updateItemsState = ({
|
|
|
47
49
|
disabled: isItemDisabled ? isItemDisabled(item) : false,
|
|
48
50
|
depth
|
|
49
51
|
};
|
|
50
|
-
|
|
52
|
+
itemModelLookup[id] = item;
|
|
51
53
|
const parentIdWithDefault = parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID;
|
|
52
|
-
if (!
|
|
53
|
-
|
|
54
|
+
if (!itemOrderedChildrenIdsLookup[parentIdWithDefault]) {
|
|
55
|
+
itemOrderedChildrenIdsLookup[parentIdWithDefault] = [];
|
|
54
56
|
}
|
|
55
|
-
|
|
57
|
+
itemOrderedChildrenIdsLookup[parentIdWithDefault].push(id);
|
|
56
58
|
item.children?.forEach(child => processItem(child, depth + 1, id));
|
|
57
59
|
};
|
|
58
60
|
items.forEach(item => processItem(item, 0, null));
|
|
59
|
-
const
|
|
60
|
-
Object.keys(
|
|
61
|
-
|
|
61
|
+
const itemChildrenIndexesLookup = {};
|
|
62
|
+
Object.keys(itemOrderedChildrenIdsLookup).forEach(parentId => {
|
|
63
|
+
itemChildrenIndexesLookup[parentId] = (0, _useTreeViewItems.buildSiblingIndexes)(itemOrderedChildrenIdsLookup[parentId]);
|
|
62
64
|
});
|
|
63
65
|
return {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
disabledItemsFocusable,
|
|
67
|
+
itemMetaLookup,
|
|
68
|
+
itemModelLookup,
|
|
69
|
+
itemOrderedChildrenIdsLookup,
|
|
70
|
+
itemChildrenIndexesLookup
|
|
68
71
|
};
|
|
69
72
|
};
|
|
70
73
|
const useTreeViewItems = ({
|
|
71
74
|
instance,
|
|
72
75
|
params,
|
|
73
|
-
|
|
74
|
-
setState,
|
|
75
|
-
experimentalFeatures
|
|
76
|
+
store
|
|
76
77
|
}) => {
|
|
77
|
-
const
|
|
78
|
-
const getItem = React.useCallback(itemId => state.items.itemMap[itemId], [state.items.itemMap]);
|
|
78
|
+
const getItem = React.useCallback(itemId => (0, _useTreeViewItems2.selectorItemModel)(store.value, itemId), [store]);
|
|
79
79
|
const getItemTree = React.useCallback(() => {
|
|
80
|
-
const getItemFromItemId =
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (newChildren) {
|
|
80
|
+
const getItemFromItemId = itemId => {
|
|
81
|
+
const item = (0, _useTreeViewItems2.selectorItemModel)(store.value, itemId);
|
|
82
|
+
const newChildren = (0, _useTreeViewItems2.selectorItemOrderedChildrenIds)(store.value, itemId);
|
|
83
|
+
if (newChildren.length > 0) {
|
|
85
84
|
item.children = newChildren.map(getItemFromItemId);
|
|
85
|
+
} else {
|
|
86
|
+
delete item.children;
|
|
86
87
|
}
|
|
87
88
|
return item;
|
|
88
89
|
};
|
|
89
|
-
return
|
|
90
|
-
}, [
|
|
91
|
-
const
|
|
92
|
-
if (itemId == null) {
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
let itemMeta = instance.getItemMeta(itemId);
|
|
96
|
-
|
|
97
|
-
// This can be called before the item has been added to the item map.
|
|
98
|
-
if (!itemMeta) {
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
if (itemMeta.disabled) {
|
|
102
|
-
return true;
|
|
103
|
-
}
|
|
104
|
-
while (itemMeta.parentId != null) {
|
|
105
|
-
itemMeta = instance.getItemMeta(itemMeta.parentId);
|
|
106
|
-
if (itemMeta.disabled) {
|
|
107
|
-
return true;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return false;
|
|
111
|
-
}, [instance]);
|
|
112
|
-
const getItemIndex = React.useCallback(itemId => {
|
|
113
|
-
const parentId = instance.getItemMeta(itemId).parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID;
|
|
114
|
-
return state.items.itemChildrenIndexes[parentId][itemId];
|
|
115
|
-
}, [instance, state.items.itemChildrenIndexes]);
|
|
116
|
-
const getItemOrderedChildrenIds = React.useCallback(itemId => state.items.itemOrderedChildrenIds[itemId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID] ?? [], [state.items.itemOrderedChildrenIds]);
|
|
90
|
+
return (0, _useTreeViewItems2.selectorItemOrderedChildrenIds)(store.value, null).map(getItemFromItemId);
|
|
91
|
+
}, [store]);
|
|
92
|
+
const getItemOrderedChildrenIds = React.useCallback(itemId => (0, _useTreeViewItems2.selectorItemOrderedChildrenIds)(store.value, itemId), [store]);
|
|
117
93
|
const getItemDOMElement = itemId => {
|
|
118
|
-
const itemMeta =
|
|
94
|
+
const itemMeta = (0, _useTreeViewItems2.selectorItemMeta)(store.value, itemId);
|
|
119
95
|
if (itemMeta == null) {
|
|
120
96
|
return null;
|
|
121
97
|
}
|
|
122
|
-
|
|
123
|
-
treeId:
|
|
98
|
+
const idAttribute = (0, _useTreeViewId2.generateTreeItemIdAttribute)({
|
|
99
|
+
treeId: (0, _useTreeViewId.selectorTreeViewId)(store.value),
|
|
124
100
|
itemId,
|
|
125
101
|
id: itemMeta.idAttribute
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
const isItemNavigable = itemId => {
|
|
129
|
-
if (params.disabledItemsFocusable) {
|
|
130
|
-
return true;
|
|
131
|
-
}
|
|
132
|
-
return !instance.isItemDisabled(itemId);
|
|
102
|
+
});
|
|
103
|
+
return document.getElementById(idAttribute);
|
|
133
104
|
};
|
|
134
105
|
const areItemUpdatesPreventedRef = React.useRef(false);
|
|
135
106
|
const preventItemUpdates = React.useCallback(() => {
|
|
@@ -140,15 +111,16 @@ const useTreeViewItems = ({
|
|
|
140
111
|
if (instance.areItemUpdatesPrevented()) {
|
|
141
112
|
return;
|
|
142
113
|
}
|
|
143
|
-
|
|
114
|
+
store.update(prevState => {
|
|
144
115
|
const newState = updateItemsState({
|
|
116
|
+
disabledItemsFocusable: params.disabledItemsFocusable,
|
|
145
117
|
items: params.items,
|
|
146
118
|
isItemDisabled: params.isItemDisabled,
|
|
147
119
|
getItemId: params.getItemId,
|
|
148
120
|
getItemLabel: params.getItemLabel
|
|
149
121
|
});
|
|
150
|
-
Object.values(prevState.items.
|
|
151
|
-
if (!newState.
|
|
122
|
+
Object.values(prevState.items.itemMetaLookup).forEach(item => {
|
|
123
|
+
if (!newState.itemMetaLookup[item.id]) {
|
|
152
124
|
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeItem', {
|
|
153
125
|
id: item.id
|
|
154
126
|
});
|
|
@@ -158,19 +130,19 @@ const useTreeViewItems = ({
|
|
|
158
130
|
items: newState
|
|
159
131
|
});
|
|
160
132
|
});
|
|
161
|
-
}, [instance,
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
};
|
|
133
|
+
}, [instance, store, params.items, params.disabledItemsFocusable, params.isItemDisabled, params.getItemId, params.getItemLabel]);
|
|
134
|
+
|
|
135
|
+
// Wrap `props.onItemClick` with `useEventCallback` to prevent unneeded context updates.
|
|
136
|
+
const handleItemClick = (0, _useEventCallback.default)((event, itemId) => {
|
|
137
|
+
if (params.onItemClick) {
|
|
138
|
+
params.onItemClick(event, itemId);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
const pluginContextValue = React.useMemo(() => ({
|
|
142
|
+
items: {
|
|
143
|
+
onItemClick: handleItemClick
|
|
144
|
+
}
|
|
145
|
+
}), [handleItemClick]);
|
|
174
146
|
return {
|
|
175
147
|
getRootProps: () => ({
|
|
176
148
|
style: {
|
|
@@ -184,30 +156,17 @@ const useTreeViewItems = ({
|
|
|
184
156
|
getItemOrderedChildrenIds
|
|
185
157
|
},
|
|
186
158
|
instance: {
|
|
187
|
-
getItemMeta,
|
|
188
|
-
getItem,
|
|
189
|
-
getItemTree,
|
|
190
|
-
getItemsToRender,
|
|
191
|
-
getItemIndex,
|
|
192
159
|
getItemDOMElement,
|
|
193
|
-
getItemOrderedChildrenIds,
|
|
194
|
-
isItemDisabled,
|
|
195
|
-
isItemNavigable,
|
|
196
160
|
preventItemUpdates,
|
|
197
161
|
areItemUpdatesPrevented
|
|
198
162
|
},
|
|
199
|
-
contextValue:
|
|
200
|
-
items: {
|
|
201
|
-
onItemClick: params.onItemClick,
|
|
202
|
-
disabledItemsFocusable: params.disabledItemsFocusable,
|
|
203
|
-
indentationAtItemLevel: experimentalFeatures.indentationAtItemLevel ?? false
|
|
204
|
-
}
|
|
205
|
-
}
|
|
163
|
+
contextValue: pluginContextValue
|
|
206
164
|
};
|
|
207
165
|
};
|
|
208
166
|
exports.useTreeViewItems = useTreeViewItems;
|
|
209
167
|
useTreeViewItems.getInitialState = params => ({
|
|
210
168
|
items: updateItemsState({
|
|
169
|
+
disabledItemsFocusable: params.disabledItemsFocusable,
|
|
211
170
|
items: params.items,
|
|
212
171
|
isItemDisabled: params.isItemDisabled,
|
|
213
172
|
getItemId: params.getItemId,
|
|
@@ -221,11 +180,10 @@ useTreeViewItems.getDefaultizedParams = ({
|
|
|
221
180
|
itemChildrenIndentation: params.itemChildrenIndentation ?? '12px'
|
|
222
181
|
});
|
|
223
182
|
useTreeViewItems.wrapRoot = ({
|
|
224
|
-
children
|
|
225
|
-
instance
|
|
183
|
+
children
|
|
226
184
|
}) => {
|
|
227
185
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewItemDepthContext.TreeViewItemDepthContext.Provider, {
|
|
228
|
-
value:
|
|
186
|
+
value: _useTreeViewItems2.selectorItemDepth,
|
|
229
187
|
children: children
|
|
230
188
|
});
|
|
231
189
|
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.selectorItemParentId = exports.selectorItemOrderedChildrenIds = exports.selectorItemModel = exports.selectorItemMetaLookup = exports.selectorItemMeta = exports.selectorItemIndex = exports.selectorItemDepth = exports.selectorIsItemDisabled = exports.selectorCanItemBeFocused = void 0;
|
|
7
|
+
var _selectors = require("../../utils/selectors");
|
|
8
|
+
var _useTreeViewItems = require("./useTreeViewItems.utils");
|
|
9
|
+
const selectorTreeViewItemsState = state => state.items;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Get the meta-information of all items.
|
|
13
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
14
|
+
* @returns {TreeViewItemMetaLookup} The meta-information of all items.
|
|
15
|
+
*/
|
|
16
|
+
const selectorItemMetaLookup = exports.selectorItemMetaLookup = (0, _selectors.createSelector)(selectorTreeViewItemsState, items => items.itemMetaLookup);
|
|
17
|
+
const EMPTY_CHILDREN = [];
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Get the ordered children ids of a given item.
|
|
21
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
22
|
+
* @param {TreeViewItemId} itemId The id of the item to get the children of.
|
|
23
|
+
* @returns {TreeViewItemId[]} The ordered children ids of the item.
|
|
24
|
+
*/
|
|
25
|
+
const selectorItemOrderedChildrenIds = exports.selectorItemOrderedChildrenIds = (0, _selectors.createSelector)([selectorTreeViewItemsState, (_, itemId) => itemId], (itemsState, itemId) => itemsState.itemOrderedChildrenIdsLookup[itemId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID] ?? EMPTY_CHILDREN);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Get the model of an item.
|
|
29
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
30
|
+
* @param {TreeViewItemId} itemId The id of the item to get the model of.
|
|
31
|
+
* @returns {R} The model of the item.
|
|
32
|
+
*/
|
|
33
|
+
const selectorItemModel = exports.selectorItemModel = (0, _selectors.createSelector)([selectorTreeViewItemsState, (_, itemId) => itemId], (itemsState, itemId) => {
|
|
34
|
+
const a = itemsState.itemModelLookup[itemId];
|
|
35
|
+
return a;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Get the meta-information of an item.
|
|
40
|
+
* Check the `TreeViewItemMeta` type for more information.
|
|
41
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>}
|
|
42
|
+
* @param {TreeViewItemId} itemId The id of the item to get the meta-information of.
|
|
43
|
+
* @returns {TreeViewItemMeta | null} The meta-information of the item.
|
|
44
|
+
*/
|
|
45
|
+
const selectorItemMeta = exports.selectorItemMeta = (0, _selectors.createSelector)([selectorItemMetaLookup, (_, itemId) => itemId], (itemMetaLookup, itemId) => itemMetaLookup[itemId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID] ?? null);
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Check if an item is disabled.
|
|
49
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
50
|
+
* @param {TreeViewItemId} itemId The id of the item to check.
|
|
51
|
+
* @returns {boolean} `true` if the item is disabled, `false` otherwise.
|
|
52
|
+
*/
|
|
53
|
+
const selectorIsItemDisabled = exports.selectorIsItemDisabled = (0, _selectors.createSelector)([selectorItemMetaLookup, (_, itemId) => itemId], (itemMetaLookup, itemId) => {
|
|
54
|
+
if (itemId == null) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
let itemMeta = itemMetaLookup[itemId];
|
|
58
|
+
|
|
59
|
+
// This can be called before the item has been added to the item map.
|
|
60
|
+
if (!itemMeta) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
if (itemMeta.disabled) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
while (itemMeta.parentId != null) {
|
|
67
|
+
itemMeta = itemMetaLookup[itemMeta.parentId];
|
|
68
|
+
if (itemMeta.disabled) {
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Get the index of an item in its parent's children.
|
|
77
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
78
|
+
* @param {TreeViewItemId} itemId The id of the item to get the index of.
|
|
79
|
+
* @returns {number} The index of the item in its parent's children.
|
|
80
|
+
*/
|
|
81
|
+
const selectorItemIndex = exports.selectorItemIndex = (0, _selectors.createSelector)([selectorTreeViewItemsState, selectorItemMeta], (itemsState, itemMeta) => {
|
|
82
|
+
if (itemMeta == null) {
|
|
83
|
+
return -1;
|
|
84
|
+
}
|
|
85
|
+
const parentIndexes = itemsState.itemChildrenIndexesLookup[itemMeta.parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID];
|
|
86
|
+
return parentIndexes[itemMeta.id];
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Get the id of the parent of an item.
|
|
91
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
92
|
+
* @param {TreeViewItemId} itemId The id of the item to get the parent id of.
|
|
93
|
+
* @returns {TreeViewItemId | null} The id of the parent of the item.
|
|
94
|
+
*/
|
|
95
|
+
const selectorItemParentId = exports.selectorItemParentId = (0, _selectors.createSelector)([selectorItemMeta], itemMeta => itemMeta?.parentId ?? null);
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Get the depth of an item (items at the root level have a depth of 0).
|
|
99
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
100
|
+
* @param {TreeViewItemId} itemId The id of the item to get the depth of.
|
|
101
|
+
* @returns {number} The depth of the item.
|
|
102
|
+
*/
|
|
103
|
+
const selectorItemDepth = exports.selectorItemDepth = (0, _selectors.createSelector)([selectorItemMeta], itemMeta => itemMeta?.depth ?? 0);
|
|
104
|
+
const selectorCanItemBeFocused = exports.selectorCanItemBeFocused = (0, _selectors.createSelector)([selectorTreeViewItemsState, selectorIsItemDisabled], (itemsState, isItemDisabled) => {
|
|
105
|
+
if (itemsState.disabledItemsFocusable) {
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
return !isItemDisabled;
|
|
109
|
+
});
|
|
@@ -17,42 +17,45 @@ var _TreeViewChildrenItemProvider = require("../../TreeViewProvider/TreeViewChil
|
|
|
17
17
|
var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.utils");
|
|
18
18
|
var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext");
|
|
19
19
|
var _useTreeViewId = require("../../corePlugins/useTreeViewId/useTreeViewId.utils");
|
|
20
|
+
var _useTreeItemUtils = require("../../../hooks/useTreeItemUtils/useTreeItemUtils");
|
|
21
|
+
var _useSelector = require("../../hooks/useSelector");
|
|
22
|
+
var _useTreeViewId2 = require("../../corePlugins/useTreeViewId/useTreeViewId.selectors");
|
|
20
23
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
24
|
const useTreeViewJSXItems = ({
|
|
22
25
|
instance,
|
|
23
|
-
|
|
26
|
+
store
|
|
24
27
|
}) => {
|
|
25
28
|
instance.preventItemUpdates();
|
|
26
29
|
const insertJSXItem = (0, _useEventCallback.default)(item => {
|
|
27
|
-
|
|
28
|
-
if (prevState.items.
|
|
30
|
+
store.update(prevState => {
|
|
31
|
+
if (prevState.items.itemMetaLookup[item.id] != null) {
|
|
29
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'));
|
|
30
33
|
}
|
|
31
34
|
return (0, _extends2.default)({}, prevState, {
|
|
32
35
|
items: (0, _extends2.default)({}, prevState.items, {
|
|
33
|
-
|
|
36
|
+
itemMetaLookup: (0, _extends2.default)({}, prevState.items.itemMetaLookup, {
|
|
34
37
|
[item.id]: item
|
|
35
38
|
}),
|
|
36
39
|
// For Simple Tree View, we don't have a proper `item` object, so we create a very basic one.
|
|
37
|
-
|
|
40
|
+
itemModelLookup: (0, _extends2.default)({}, prevState.items.itemModelLookup, {
|
|
38
41
|
[item.id]: {
|
|
39
42
|
id: item.id,
|
|
40
|
-
label: item.label
|
|
43
|
+
label: item.label ?? ''
|
|
41
44
|
}
|
|
42
45
|
})
|
|
43
46
|
})
|
|
44
47
|
});
|
|
45
48
|
});
|
|
46
49
|
return () => {
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
delete
|
|
51
|
-
delete
|
|
50
|
+
store.update(prevState => {
|
|
51
|
+
const newItemMetaLookup = (0, _extends2.default)({}, prevState.items.itemMetaLookup);
|
|
52
|
+
const newItemModelLookup = (0, _extends2.default)({}, prevState.items.itemModelLookup);
|
|
53
|
+
delete newItemMetaLookup[item.id];
|
|
54
|
+
delete newItemModelLookup[item.id];
|
|
52
55
|
return (0, _extends2.default)({}, prevState, {
|
|
53
56
|
items: (0, _extends2.default)({}, prevState.items, {
|
|
54
|
-
|
|
55
|
-
|
|
57
|
+
itemMetaLookup: newItemMetaLookup,
|
|
58
|
+
itemModelLookup: newItemModelLookup
|
|
56
59
|
})
|
|
57
60
|
});
|
|
58
61
|
});
|
|
@@ -63,12 +66,12 @@ const useTreeViewJSXItems = ({
|
|
|
63
66
|
});
|
|
64
67
|
const setJSXItemsOrderedChildrenIds = (parentId, orderedChildrenIds) => {
|
|
65
68
|
const parentIdWithDefault = parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID;
|
|
66
|
-
|
|
69
|
+
store.update(prevState => (0, _extends2.default)({}, prevState, {
|
|
67
70
|
items: (0, _extends2.default)({}, prevState.items, {
|
|
68
|
-
|
|
71
|
+
itemOrderedChildrenIdsLookup: (0, _extends2.default)({}, prevState.items.itemOrderedChildrenIdsLookup, {
|
|
69
72
|
[parentIdWithDefault]: orderedChildrenIds
|
|
70
73
|
}),
|
|
71
|
-
|
|
74
|
+
itemChildrenIndexesLookup: (0, _extends2.default)({}, prevState.items.itemChildrenIndexesLookup, {
|
|
72
75
|
[parentIdWithDefault]: (0, _useTreeViewItems.buildSiblingIndexes)(orderedChildrenIds)
|
|
73
76
|
})
|
|
74
77
|
})
|
|
@@ -96,12 +99,6 @@ const useTreeViewJSXItems = ({
|
|
|
96
99
|
};
|
|
97
100
|
};
|
|
98
101
|
exports.useTreeViewJSXItems = useTreeViewJSXItems;
|
|
99
|
-
const isItemExpandable = reactChildren => {
|
|
100
|
-
if (Array.isArray(reactChildren)) {
|
|
101
|
-
return reactChildren.length > 0 && reactChildren.some(isItemExpandable);
|
|
102
|
-
}
|
|
103
|
-
return Boolean(reactChildren);
|
|
104
|
-
};
|
|
105
102
|
const useTreeViewJSXItemsItemPlugin = ({
|
|
106
103
|
props,
|
|
107
104
|
rootRef,
|
|
@@ -109,7 +106,7 @@ const useTreeViewJSXItemsItemPlugin = ({
|
|
|
109
106
|
}) => {
|
|
110
107
|
const {
|
|
111
108
|
instance,
|
|
112
|
-
|
|
109
|
+
store
|
|
113
110
|
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
114
111
|
const {
|
|
115
112
|
children,
|
|
@@ -127,9 +124,10 @@ const useTreeViewJSXItemsItemPlugin = ({
|
|
|
127
124
|
unregisterChild,
|
|
128
125
|
parentId
|
|
129
126
|
} = parentContext;
|
|
130
|
-
const expandable = isItemExpandable(children);
|
|
127
|
+
const expandable = (0, _useTreeItemUtils.isItemExpandable)(children);
|
|
131
128
|
const pluginContentRef = React.useRef(null);
|
|
132
129
|
const handleContentRef = (0, _useForkRef.default)(pluginContentRef, contentRef);
|
|
130
|
+
const treeId = (0, _useSelector.useSelector)(store, _useTreeViewId2.selectorTreeViewId);
|
|
133
131
|
|
|
134
132
|
// Prevent any flashing
|
|
135
133
|
(0, _useEnhancedEffect.default)(() => {
|
|
@@ -141,9 +139,10 @@ const useTreeViewJSXItemsItemPlugin = ({
|
|
|
141
139
|
registerChild(idAttribute, itemId);
|
|
142
140
|
return () => {
|
|
143
141
|
unregisterChild(idAttribute);
|
|
142
|
+
unregisterChild(idAttribute);
|
|
144
143
|
};
|
|
145
|
-
}, [registerChild, unregisterChild, itemId, id, treeId]);
|
|
146
|
-
|
|
144
|
+
}, [store, instance, registerChild, unregisterChild, itemId, id, treeId]);
|
|
145
|
+
(0, _useEnhancedEffect.default)(() => {
|
|
147
146
|
return instance.insertJSXItem({
|
|
148
147
|
id: itemId,
|
|
149
148
|
idAttribute: id,
|
|
@@ -166,12 +165,14 @@ const useTreeViewJSXItemsItemPlugin = ({
|
|
|
166
165
|
useTreeViewJSXItems.itemPlugin = useTreeViewJSXItemsItemPlugin;
|
|
167
166
|
useTreeViewJSXItems.wrapItem = ({
|
|
168
167
|
children,
|
|
169
|
-
itemId
|
|
168
|
+
itemId,
|
|
169
|
+
idAttribute
|
|
170
170
|
}) => {
|
|
171
171
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
172
172
|
const depthContext = React.useContext(_TreeViewItemDepthContext.TreeViewItemDepthContext);
|
|
173
173
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewChildrenItemProvider.TreeViewChildrenItemProvider, {
|
|
174
174
|
itemId: itemId,
|
|
175
|
+
idAttribute: idAttribute,
|
|
175
176
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewItemDepthContext.TreeViewItemDepthContext.Provider, {
|
|
176
177
|
value: depthContext + 1,
|
|
177
178
|
children: children
|
|
@@ -181,6 +182,8 @@ useTreeViewJSXItems.wrapItem = ({
|
|
|
181
182
|
useTreeViewJSXItems.wrapRoot = ({
|
|
182
183
|
children
|
|
183
184
|
}) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewChildrenItemProvider.TreeViewChildrenItemProvider, {
|
|
185
|
+
itemId: null,
|
|
186
|
+
idAttribute: null,
|
|
184
187
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewItemDepthContext.TreeViewItemDepthContext.Provider, {
|
|
185
188
|
value: 0,
|
|
186
189
|
children: children
|
package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js
CHANGED
|
@@ -12,19 +12,25 @@ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallb
|
|
|
12
12
|
var _tree = require("../../utils/tree");
|
|
13
13
|
var _plugins = require("../../utils/plugins");
|
|
14
14
|
var _useTreeViewLabel = require("../useTreeViewLabel");
|
|
15
|
+
var _useSelector = require("../../hooks/useSelector");
|
|
16
|
+
var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
|
|
17
|
+
var _useTreeViewLabel2 = require("../useTreeViewLabel/useTreeViewLabel.selectors");
|
|
18
|
+
var _useTreeViewSelection = require("../useTreeViewSelection/useTreeViewSelection.selectors");
|
|
19
|
+
var _useTreeViewExpansion = require("../useTreeViewExpansion/useTreeViewExpansion.selectors");
|
|
15
20
|
function isPrintableKey(string) {
|
|
16
21
|
return !!string && string.length === 1 && !!string.match(/\S/);
|
|
17
22
|
}
|
|
18
23
|
const useTreeViewKeyboardNavigation = ({
|
|
19
24
|
instance,
|
|
20
|
-
|
|
21
|
-
|
|
25
|
+
store,
|
|
26
|
+
params
|
|
22
27
|
}) => {
|
|
23
28
|
const isRtl = (0, _RtlProvider.useRtl)();
|
|
24
29
|
const firstCharMap = React.useRef({});
|
|
25
30
|
const updateFirstCharMap = (0, _useEventCallback.default)(callback => {
|
|
26
31
|
firstCharMap.current = callback(firstCharMap.current);
|
|
27
32
|
});
|
|
33
|
+
const itemMetaLookup = (0, _useSelector.useSelector)(store, _useTreeViewItems.selectorItemMetaLookup);
|
|
28
34
|
React.useEffect(() => {
|
|
29
35
|
if (instance.areItemUpdatesPrevented()) {
|
|
30
36
|
return;
|
|
@@ -33,16 +39,16 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
33
39
|
const processItem = item => {
|
|
34
40
|
newFirstCharMap[item.id] = item.label.substring(0, 1).toLowerCase();
|
|
35
41
|
};
|
|
36
|
-
Object.values(
|
|
42
|
+
Object.values(itemMetaLookup).forEach(processItem);
|
|
37
43
|
firstCharMap.current = newFirstCharMap;
|
|
38
|
-
}, [
|
|
44
|
+
}, [itemMetaLookup, params.getItemId, instance]);
|
|
39
45
|
const getFirstMatchingItem = (itemId, query) => {
|
|
40
46
|
const cleanQuery = query.toLowerCase();
|
|
41
47
|
const getNextItem = itemIdToCheck => {
|
|
42
|
-
const nextItemId = (0, _tree.getNextNavigableItem)(
|
|
48
|
+
const nextItemId = (0, _tree.getNextNavigableItem)(store.value, itemIdToCheck);
|
|
43
49
|
// We reached the end of the tree, check from the beginning
|
|
44
50
|
if (nextItemId === null) {
|
|
45
|
-
return (0, _tree.getFirstNavigableItem)(
|
|
51
|
+
return (0, _tree.getFirstNavigableItem)(store.value);
|
|
46
52
|
}
|
|
47
53
|
return nextItemId;
|
|
48
54
|
};
|
|
@@ -60,9 +66,9 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
60
66
|
}
|
|
61
67
|
return matchingItemId;
|
|
62
68
|
};
|
|
63
|
-
const canToggleItemSelection = itemId => !params.disableSelection && !
|
|
69
|
+
const canToggleItemSelection = itemId => !params.disableSelection && !(0, _useTreeViewItems.selectorIsItemDisabled)(store.value, itemId);
|
|
64
70
|
const canToggleItemExpansion = itemId => {
|
|
65
|
-
return !
|
|
71
|
+
return !(0, _useTreeViewItems.selectorIsItemDisabled)(store.value, itemId) && (0, _useTreeViewExpansion.selectorIsItemExpandable)(store.value, itemId);
|
|
66
72
|
};
|
|
67
73
|
|
|
68
74
|
// ARIA specification: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/#keyboardinteraction
|
|
@@ -99,7 +105,10 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
99
105
|
// If the focused item has no children, we select it.
|
|
100
106
|
case key === 'Enter':
|
|
101
107
|
{
|
|
102
|
-
if ((0, _plugins.hasPlugin)(instance, _useTreeViewLabel.useTreeViewLabel) &&
|
|
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)) {
|
|
103
112
|
instance.setEditedItemId(itemId);
|
|
104
113
|
} else if (canToggleItemExpansion(itemId)) {
|
|
105
114
|
instance.toggleItemExpansion(event, itemId);
|
|
@@ -112,7 +121,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
112
121
|
itemId,
|
|
113
122
|
keepExistingSelection: true
|
|
114
123
|
});
|
|
115
|
-
} else if (!
|
|
124
|
+
} else if (!(0, _useTreeViewSelection.selectorIsItemSelected)(store.value, itemId)) {
|
|
116
125
|
instance.selectItem({
|
|
117
126
|
event,
|
|
118
127
|
itemId
|
|
@@ -126,7 +135,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
126
135
|
// Focus the next focusable item
|
|
127
136
|
case key === 'ArrowDown':
|
|
128
137
|
{
|
|
129
|
-
const nextItem = (0, _tree.getNextNavigableItem)(
|
|
138
|
+
const nextItem = (0, _tree.getNextNavigableItem)(store.value, itemId);
|
|
130
139
|
if (nextItem) {
|
|
131
140
|
event.preventDefault();
|
|
132
141
|
instance.focusItem(event, nextItem);
|
|
@@ -143,7 +152,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
143
152
|
// Focuses the previous focusable item
|
|
144
153
|
case key === 'ArrowUp':
|
|
145
154
|
{
|
|
146
|
-
const previousItem = (0, _tree.getPreviousNavigableItem)(
|
|
155
|
+
const previousItem = (0, _tree.getPreviousNavigableItem)(store.value, itemId);
|
|
147
156
|
if (previousItem) {
|
|
148
157
|
event.preventDefault();
|
|
149
158
|
instance.focusItem(event, previousItem);
|
|
@@ -164,8 +173,8 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
164
173
|
if (ctrlPressed) {
|
|
165
174
|
return;
|
|
166
175
|
}
|
|
167
|
-
if (
|
|
168
|
-
const nextItemId = (0, _tree.getNextNavigableItem)(
|
|
176
|
+
if ((0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId)) {
|
|
177
|
+
const nextItemId = (0, _tree.getNextNavigableItem)(store.value, itemId);
|
|
169
178
|
if (nextItemId) {
|
|
170
179
|
instance.focusItem(event, nextItemId);
|
|
171
180
|
event.preventDefault();
|
|
@@ -184,11 +193,11 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
184
193
|
if (ctrlPressed) {
|
|
185
194
|
return;
|
|
186
195
|
}
|
|
187
|
-
if (canToggleItemExpansion(itemId) &&
|
|
196
|
+
if (canToggleItemExpansion(itemId) && (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId)) {
|
|
188
197
|
instance.toggleItemExpansion(event, itemId);
|
|
189
198
|
event.preventDefault();
|
|
190
199
|
} else {
|
|
191
|
-
const parent =
|
|
200
|
+
const parent = (0, _useTreeViewItems.selectorItemParentId)(store.value, itemId);
|
|
192
201
|
if (parent) {
|
|
193
202
|
instance.focusItem(event, parent);
|
|
194
203
|
event.preventDefault();
|
|
@@ -205,7 +214,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
205
214
|
if (canToggleItemSelection(itemId) && params.multiSelect && ctrlPressed && event.shiftKey) {
|
|
206
215
|
instance.selectRangeFromStartToItem(event, itemId);
|
|
207
216
|
} else {
|
|
208
|
-
instance.focusItem(event, (0, _tree.getFirstNavigableItem)(
|
|
217
|
+
instance.focusItem(event, (0, _tree.getFirstNavigableItem)(store.value));
|
|
209
218
|
}
|
|
210
219
|
event.preventDefault();
|
|
211
220
|
break;
|
|
@@ -219,7 +228,7 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
219
228
|
if (canToggleItemSelection(itemId) && params.multiSelect && ctrlPressed && event.shiftKey) {
|
|
220
229
|
instance.selectRangeFromItemToEnd(event, itemId);
|
|
221
230
|
} else {
|
|
222
|
-
instance.focusItem(event, (0, _tree.getLastNavigableItem)(
|
|
231
|
+
instance.focusItem(event, (0, _tree.getLastNavigableItem)(store.value));
|
|
223
232
|
}
|
|
224
233
|
event.preventDefault();
|
|
225
234
|
break;
|