@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
|
@@ -7,30 +7,38 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.useTreeViewLabelItemPlugin = void 0;
|
|
8
8
|
var React = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _TreeViewProvider = require("../../TreeViewProvider");
|
|
10
|
+
var _useSelector = require("../../hooks/useSelector");
|
|
11
|
+
var _useTreeViewLabel = require("./useTreeViewLabel.selectors");
|
|
10
12
|
const useTreeViewLabelItemPlugin = ({
|
|
11
13
|
props
|
|
12
14
|
}) => {
|
|
13
15
|
const {
|
|
14
|
-
|
|
16
|
+
store,
|
|
17
|
+
label: {
|
|
18
|
+
isItemEditable
|
|
19
|
+
}
|
|
15
20
|
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
16
21
|
const {
|
|
17
22
|
label,
|
|
18
23
|
itemId
|
|
19
24
|
} = props;
|
|
20
25
|
const [labelInputValue, setLabelInputValue] = React.useState(label);
|
|
21
|
-
const
|
|
26
|
+
const editable = (0, _useSelector.useSelector)(store, _useTreeViewLabel.selectorIsItemEditable, {
|
|
27
|
+
itemId,
|
|
28
|
+
isItemEditable
|
|
29
|
+
});
|
|
30
|
+
const editing = (0, _useSelector.useSelector)(store, _useTreeViewLabel.selectorIsItemBeingEdited, itemId);
|
|
22
31
|
React.useEffect(() => {
|
|
23
|
-
if (!
|
|
32
|
+
if (!editing) {
|
|
24
33
|
setLabelInputValue(label);
|
|
25
34
|
}
|
|
26
|
-
}, [
|
|
35
|
+
}, [editing, label]);
|
|
27
36
|
return {
|
|
28
37
|
propsEnhancers: {
|
|
29
38
|
labelInput: ({
|
|
30
39
|
externalEventHandlers,
|
|
31
40
|
interactions
|
|
32
41
|
}) => {
|
|
33
|
-
const editable = instance.isItemEditable(itemId);
|
|
34
42
|
if (!editable) {
|
|
35
43
|
return {};
|
|
36
44
|
}
|
|
@@ -11,41 +11,26 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
11
11
|
var _warning = require("@mui/x-internals/warning");
|
|
12
12
|
var _useTreeViewLabel = require("./useTreeViewLabel.itemPlugin");
|
|
13
13
|
const useTreeViewLabel = ({
|
|
14
|
-
|
|
15
|
-
state,
|
|
16
|
-
setState,
|
|
14
|
+
store,
|
|
17
15
|
params
|
|
18
16
|
}) => {
|
|
19
|
-
const editedItemRef = React.useRef(state.editedItemId);
|
|
20
|
-
const isItemBeingEditedRef = itemId => editedItemRef.current === itemId;
|
|
21
17
|
const setEditedItemId = editedItemId => {
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
store.update(prevState => (0, _extends2.default)({}, prevState, {
|
|
19
|
+
label: {
|
|
20
|
+
editedItemId
|
|
21
|
+
}
|
|
24
22
|
}));
|
|
25
|
-
editedItemRef.current = editedItemId;
|
|
26
|
-
};
|
|
27
|
-
const isItemBeingEdited = itemId => itemId === state.editedItemId;
|
|
28
|
-
const isTreeViewEditable = Boolean(params.isItemEditable);
|
|
29
|
-
const isItemEditable = itemId => {
|
|
30
|
-
if (itemId == null || !isTreeViewEditable) {
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
const item = instance.getItem(itemId);
|
|
34
|
-
if (!item) {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
return typeof params.isItemEditable === 'function' ? params.isItemEditable(item) : Boolean(params.isItemEditable);
|
|
38
23
|
};
|
|
39
24
|
const updateItemLabel = (itemId, label) => {
|
|
40
25
|
if (!label) {
|
|
41
26
|
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'));
|
|
42
27
|
}
|
|
43
|
-
|
|
44
|
-
const item = prevState.items.
|
|
28
|
+
store.update(prevState => {
|
|
29
|
+
const item = prevState.items.itemMetaLookup[itemId];
|
|
45
30
|
if (item.label !== label) {
|
|
46
31
|
return (0, _extends2.default)({}, prevState, {
|
|
47
32
|
items: (0, _extends2.default)({}, prevState.items, {
|
|
48
|
-
|
|
33
|
+
itemMetaLookup: (0, _extends2.default)({}, prevState.items.itemMetaLookup, {
|
|
49
34
|
[itemId]: (0, _extends2.default)({}, item, {
|
|
50
35
|
label
|
|
51
36
|
})
|
|
@@ -59,18 +44,20 @@ const useTreeViewLabel = ({
|
|
|
59
44
|
params.onItemLabelChange(itemId, label);
|
|
60
45
|
}
|
|
61
46
|
};
|
|
47
|
+
const pluginContextValue = React.useMemo(() => ({
|
|
48
|
+
label: {
|
|
49
|
+
isItemEditable: params.isItemEditable
|
|
50
|
+
}
|
|
51
|
+
}), [params.isItemEditable]);
|
|
62
52
|
return {
|
|
63
53
|
instance: {
|
|
64
54
|
setEditedItemId,
|
|
65
|
-
|
|
66
|
-
updateItemLabel,
|
|
67
|
-
isItemEditable,
|
|
68
|
-
isTreeViewEditable,
|
|
69
|
-
isItemBeingEditedRef
|
|
55
|
+
updateItemLabel
|
|
70
56
|
},
|
|
71
57
|
publicAPI: {
|
|
72
58
|
updateItemLabel
|
|
73
|
-
}
|
|
59
|
+
},
|
|
60
|
+
contextValue: pluginContextValue
|
|
74
61
|
};
|
|
75
62
|
};
|
|
76
63
|
exports.useTreeViewLabel = useTreeViewLabel;
|
|
@@ -90,7 +77,9 @@ useTreeViewLabel.getDefaultizedParams = ({
|
|
|
90
77
|
});
|
|
91
78
|
};
|
|
92
79
|
useTreeViewLabel.getInitialState = () => ({
|
|
93
|
-
|
|
80
|
+
label: {
|
|
81
|
+
editedItemId: null
|
|
82
|
+
}
|
|
94
83
|
});
|
|
95
84
|
useTreeViewLabel.params = {
|
|
96
85
|
onItemLabelChange: true,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.selectorIsItemEditable = exports.selectorIsItemBeingEdited = void 0;
|
|
7
|
+
var _selectors = require("../../utils/selectors");
|
|
8
|
+
var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
|
|
9
|
+
const selectorTreeViewLabelState = state => state.label;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Check if an item is editable.
|
|
13
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
14
|
+
* @param {object} params The parameters.
|
|
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.
|
|
17
|
+
* @returns {boolean} `true` if the item is editable, `false` otherwise.
|
|
18
|
+
*/
|
|
19
|
+
const selectorIsItemEditable = exports.selectorIsItemEditable = (0, _selectors.createSelector)([(_, args) => args, (state, args) => (0, _useTreeViewItems.selectorItemModel)(state, args.itemId)], (args, itemModel) => {
|
|
20
|
+
if (!itemModel || !args.isItemEditable) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
return typeof args.isItemEditable === 'function' ? args.isItemEditable(itemModel) : true;
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Check if an item is being edited.
|
|
28
|
+
* @param {TreeViewState<[UseTreeViewLabelSignature]>} state The state of the tree view.
|
|
29
|
+
* @param {TreeViewItemId} itemId The id of the item to check.
|
|
30
|
+
* @returns {boolean} `true` if the item is being edited, `false` otherwise.
|
|
31
|
+
*/
|
|
32
|
+
const selectorIsItemBeingEdited = exports.selectorIsItemBeingEdited = (0, _selectors.createSelector)([selectorTreeViewLabelState, (_, itemId) => itemId], (labelState, itemId) => labelState.editedItemId === itemId);
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useTreeViewSelectionItemPlugin = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _TreeViewProvider = require("../../TreeViewProvider");
|
|
10
|
+
var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
|
|
11
|
+
var _useTreeViewSelection = require("./useTreeViewSelection.selectors");
|
|
12
|
+
function getCheckboxStatus({
|
|
13
|
+
itemId,
|
|
14
|
+
store,
|
|
15
|
+
selectionPropagation,
|
|
16
|
+
selected
|
|
17
|
+
}) {
|
|
18
|
+
if (selected) {
|
|
19
|
+
return {
|
|
20
|
+
indeterminate: false,
|
|
21
|
+
checked: true
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const children = (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(store.value, itemId);
|
|
25
|
+
if (children.length === 0) {
|
|
26
|
+
return {
|
|
27
|
+
indeterminate: false,
|
|
28
|
+
checked: false
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
let hasSelectedDescendant = false;
|
|
32
|
+
let hasUnSelectedDescendant = false;
|
|
33
|
+
const traverseDescendants = itemToTraverseId => {
|
|
34
|
+
if (itemToTraverseId !== itemId) {
|
|
35
|
+
if ((0, _useTreeViewSelection.selectorIsItemSelected)(store.value, itemToTraverseId)) {
|
|
36
|
+
hasSelectedDescendant = true;
|
|
37
|
+
} else {
|
|
38
|
+
hasUnSelectedDescendant = true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
(0, _useTreeViewItems.selectorItemOrderedChildrenIds)(store.value, itemToTraverseId).forEach(traverseDescendants);
|
|
42
|
+
};
|
|
43
|
+
traverseDescendants(itemId);
|
|
44
|
+
return {
|
|
45
|
+
indeterminate: hasSelectedDescendant && hasUnSelectedDescendant || !hasUnSelectedDescendant && !selected,
|
|
46
|
+
checked: selectionPropagation.parents ? hasSelectedDescendant : selected
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const useTreeViewSelectionItemPlugin = ({
|
|
50
|
+
props
|
|
51
|
+
}) => {
|
|
52
|
+
const {
|
|
53
|
+
itemId
|
|
54
|
+
} = props;
|
|
55
|
+
const {
|
|
56
|
+
store,
|
|
57
|
+
selection: {
|
|
58
|
+
disableSelection,
|
|
59
|
+
checkboxSelection,
|
|
60
|
+
selectionPropagation
|
|
61
|
+
}
|
|
62
|
+
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
63
|
+
return {
|
|
64
|
+
propsEnhancers: {
|
|
65
|
+
checkbox: ({
|
|
66
|
+
externalEventHandlers,
|
|
67
|
+
interactions,
|
|
68
|
+
status
|
|
69
|
+
}) => {
|
|
70
|
+
const handleChange = event => {
|
|
71
|
+
externalEventHandlers.onChange?.(event);
|
|
72
|
+
if (event.defaultMuiPrevented) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (disableSelection || status.disabled) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
interactions.handleCheckboxSelection(event);
|
|
79
|
+
};
|
|
80
|
+
const checkboxStatus = getCheckboxStatus({
|
|
81
|
+
store,
|
|
82
|
+
itemId,
|
|
83
|
+
selectionPropagation,
|
|
84
|
+
selected: status.selected
|
|
85
|
+
});
|
|
86
|
+
return (0, _extends2.default)({
|
|
87
|
+
visible: checkboxSelection,
|
|
88
|
+
disabled: disableSelection || status.disabled,
|
|
89
|
+
tabIndex: -1,
|
|
90
|
+
onChange: handleChange
|
|
91
|
+
}, checkboxStatus);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
exports.useTreeViewSelectionItemPlugin = useTreeViewSelectionItemPlugin;
|
|
@@ -8,52 +8,67 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.useTreeViewSelection = void 0;
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
|
11
12
|
var _tree = require("../../utils/tree");
|
|
12
13
|
var _useTreeViewSelection = require("./useTreeViewSelection.utils");
|
|
14
|
+
var _useTreeViewSelection2 = require("./useTreeViewSelection.selectors");
|
|
15
|
+
var _useTreeViewSelection3 = require("./useTreeViewSelection.itemPlugin");
|
|
13
16
|
const useTreeViewSelection = ({
|
|
14
|
-
|
|
17
|
+
store,
|
|
15
18
|
params,
|
|
16
19
|
models
|
|
17
20
|
}) => {
|
|
18
21
|
const lastSelectedItem = React.useRef(null);
|
|
19
22
|
const lastSelectedRange = React.useRef({});
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
+
const setSelectedItems = (event, newModel, additionalItemsToPropagate) => {
|
|
31
|
+
let cleanModel;
|
|
32
|
+
if (params.multiSelect && (params.selectionPropagation.descendants || params.selectionPropagation.parents)) {
|
|
33
|
+
cleanModel = (0, _useTreeViewSelection.propagateSelection)({
|
|
34
|
+
store,
|
|
35
|
+
selectionPropagation: params.selectionPropagation,
|
|
36
|
+
newModel: newModel,
|
|
37
|
+
oldModel: models.selectedItems.value,
|
|
38
|
+
additionalItemsToPropagate
|
|
25
39
|
});
|
|
26
|
-
} else
|
|
27
|
-
|
|
40
|
+
} else {
|
|
41
|
+
cleanModel = newModel;
|
|
28
42
|
}
|
|
29
|
-
return temp;
|
|
30
|
-
}, [models.selectedItems.value]);
|
|
31
|
-
const setSelectedItems = (event, newSelectedItems) => {
|
|
32
43
|
if (params.onItemSelectionToggle) {
|
|
33
44
|
if (params.multiSelect) {
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
39
|
-
removedItems.forEach(itemId => {
|
|
40
|
-
params.onItemSelectionToggle(event, itemId, false);
|
|
45
|
+
const changes = (0, _useTreeViewSelection.getAddedAndRemovedItems)({
|
|
46
|
+
store,
|
|
47
|
+
newModel: cleanModel,
|
|
48
|
+
oldModel: models.selectedItems.value
|
|
41
49
|
});
|
|
42
|
-
|
|
50
|
+
if (params.onItemSelectionToggle) {
|
|
51
|
+
changes.added.forEach(itemId => {
|
|
52
|
+
params.onItemSelectionToggle(event, itemId, true);
|
|
53
|
+
});
|
|
54
|
+
changes.removed.forEach(itemId => {
|
|
55
|
+
params.onItemSelectionToggle(event, itemId, false);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
} else if (params.onItemSelectionToggle && cleanModel !== models.selectedItems.value) {
|
|
43
59
|
if (models.selectedItems.value != null) {
|
|
44
60
|
params.onItemSelectionToggle(event, models.selectedItems.value, false);
|
|
45
61
|
}
|
|
46
|
-
if (
|
|
47
|
-
params.onItemSelectionToggle(event,
|
|
62
|
+
if (cleanModel != null) {
|
|
63
|
+
params.onItemSelectionToggle(event, cleanModel, true);
|
|
48
64
|
}
|
|
49
65
|
}
|
|
50
66
|
}
|
|
51
67
|
if (params.onSelectedItemsChange) {
|
|
52
|
-
params.onSelectedItemsChange(event,
|
|
68
|
+
params.onSelectedItemsChange(event, cleanModel);
|
|
53
69
|
}
|
|
54
|
-
models.selectedItems.setControlledValue(
|
|
70
|
+
models.selectedItems.setControlledValue(cleanModel);
|
|
55
71
|
};
|
|
56
|
-
const isItemSelected = itemId => selectedItemsMap.has(itemId);
|
|
57
72
|
const selectItem = ({
|
|
58
73
|
event,
|
|
59
74
|
itemId,
|
|
@@ -66,7 +81,7 @@ const useTreeViewSelection = ({
|
|
|
66
81
|
let newSelected;
|
|
67
82
|
if (keepExistingSelection) {
|
|
68
83
|
const cleanSelectedItems = (0, _useTreeViewSelection.convertSelectedItemsToArray)(models.selectedItems.value);
|
|
69
|
-
const isSelectedBefore =
|
|
84
|
+
const isSelectedBefore = (0, _useTreeViewSelection2.selectorIsItemSelected)(store.value, itemId);
|
|
70
85
|
if (isSelectedBefore && (shouldBeSelected === false || shouldBeSelected == null)) {
|
|
71
86
|
newSelected = cleanSelectedItems.filter(id => id !== itemId);
|
|
72
87
|
} else if (!isSelectedBefore && (shouldBeSelected === true || shouldBeSelected == null)) {
|
|
@@ -76,13 +91,16 @@ const useTreeViewSelection = ({
|
|
|
76
91
|
}
|
|
77
92
|
} else {
|
|
78
93
|
// eslint-disable-next-line no-lonely-if
|
|
79
|
-
if (shouldBeSelected === false || shouldBeSelected == null &&
|
|
94
|
+
if (shouldBeSelected === false || shouldBeSelected == null && (0, _useTreeViewSelection2.selectorIsItemSelected)(store.value, itemId)) {
|
|
80
95
|
newSelected = params.multiSelect ? [] : null;
|
|
81
96
|
} else {
|
|
82
97
|
newSelected = params.multiSelect ? [itemId] : itemId;
|
|
83
98
|
}
|
|
84
99
|
}
|
|
85
|
-
setSelectedItems(event, newSelected
|
|
100
|
+
setSelectedItems(event, newSelected,
|
|
101
|
+
// If shouldBeSelected === selectorIsItemSelected(store, itemId), we still want to propagate the select.
|
|
102
|
+
// This is useful when the element is in an indeterminate state.
|
|
103
|
+
[itemId]);
|
|
86
104
|
lastSelectedItem.current = itemId;
|
|
87
105
|
lastSelectedRange.current = {};
|
|
88
106
|
};
|
|
@@ -100,7 +118,7 @@ const useTreeViewSelection = ({
|
|
|
100
118
|
|
|
101
119
|
// Add to the model the items that are part of the new range and not already part of the model.
|
|
102
120
|
const selectedItemsLookup = (0, _useTreeViewSelection.getLookupFromArray)(newSelectedItems);
|
|
103
|
-
const range = (0, _tree.getNonDisabledItemsInRange)(
|
|
121
|
+
const range = (0, _tree.getNonDisabledItemsInRange)(store.value, start, end);
|
|
104
122
|
const itemsToAddToModel = range.filter(id => !selectedItemsLookup[id]);
|
|
105
123
|
newSelectedItems = newSelectedItems.concat(itemsToAddToModel);
|
|
106
124
|
setSelectedItems(event, newSelectedItems);
|
|
@@ -108,21 +126,21 @@ const useTreeViewSelection = ({
|
|
|
108
126
|
};
|
|
109
127
|
const expandSelectionRange = (event, itemId) => {
|
|
110
128
|
if (lastSelectedItem.current != null) {
|
|
111
|
-
const [start, end] = (0, _tree.findOrderInTremauxTree)(
|
|
129
|
+
const [start, end] = (0, _tree.findOrderInTremauxTree)(store.value, itemId, lastSelectedItem.current);
|
|
112
130
|
selectRange(event, [start, end]);
|
|
113
131
|
}
|
|
114
132
|
};
|
|
115
133
|
const selectRangeFromStartToItem = (event, itemId) => {
|
|
116
|
-
selectRange(event, [(0, _tree.getFirstNavigableItem)(
|
|
134
|
+
selectRange(event, [(0, _tree.getFirstNavigableItem)(store.value), itemId]);
|
|
117
135
|
};
|
|
118
136
|
const selectRangeFromItemToEnd = (event, itemId) => {
|
|
119
|
-
selectRange(event, [itemId, (0, _tree.getLastNavigableItem)(
|
|
137
|
+
selectRange(event, [itemId, (0, _tree.getLastNavigableItem)(store.value)]);
|
|
120
138
|
};
|
|
121
139
|
const selectAllNavigableItems = event => {
|
|
122
140
|
if (params.disableSelection || !params.multiSelect) {
|
|
123
141
|
return;
|
|
124
142
|
}
|
|
125
|
-
const navigableItems = (0, _tree.getAllNavigableItems)(
|
|
143
|
+
const navigableItems = (0, _tree.getAllNavigableItems)(store.value);
|
|
126
144
|
setSelectedItems(event, navigableItems);
|
|
127
145
|
lastSelectedRange.current = (0, _useTreeViewSelection.getLookupFromArray)(navigableItems);
|
|
128
146
|
};
|
|
@@ -151,6 +169,17 @@ const useTreeViewSelection = ({
|
|
|
151
169
|
}
|
|
152
170
|
setSelectedItems(event, newSelectedItems);
|
|
153
171
|
};
|
|
172
|
+
const pluginContextValue = React.useMemo(() => ({
|
|
173
|
+
selection: {
|
|
174
|
+
multiSelect: params.multiSelect,
|
|
175
|
+
checkboxSelection: params.checkboxSelection,
|
|
176
|
+
disableSelection: params.disableSelection,
|
|
177
|
+
selectionPropagation: {
|
|
178
|
+
descendants: params.selectionPropagation.descendants,
|
|
179
|
+
parents: params.selectionPropagation.parents
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}), [params.multiSelect, params.checkboxSelection, params.disableSelection, params.selectionPropagation.descendants, params.selectionPropagation.parents]);
|
|
154
183
|
return {
|
|
155
184
|
getRootProps: () => ({
|
|
156
185
|
'aria-multiselectable': params.multiSelect
|
|
@@ -159,7 +188,6 @@ const useTreeViewSelection = ({
|
|
|
159
188
|
selectItem
|
|
160
189
|
},
|
|
161
190
|
instance: {
|
|
162
|
-
isItemSelected,
|
|
163
191
|
selectItem,
|
|
164
192
|
selectAllNavigableItems,
|
|
165
193
|
expandSelectionRange,
|
|
@@ -167,29 +195,36 @@ const useTreeViewSelection = ({
|
|
|
167
195
|
selectRangeFromItemToEnd,
|
|
168
196
|
selectItemFromArrowNavigation
|
|
169
197
|
},
|
|
170
|
-
contextValue:
|
|
171
|
-
selection: {
|
|
172
|
-
multiSelect: params.multiSelect,
|
|
173
|
-
checkboxSelection: params.checkboxSelection,
|
|
174
|
-
disableSelection: params.disableSelection
|
|
175
|
-
}
|
|
176
|
-
}
|
|
198
|
+
contextValue: pluginContextValue
|
|
177
199
|
};
|
|
178
200
|
};
|
|
179
201
|
exports.useTreeViewSelection = useTreeViewSelection;
|
|
202
|
+
useTreeViewSelection.itemPlugin = _useTreeViewSelection3.useTreeViewSelectionItemPlugin;
|
|
180
203
|
useTreeViewSelection.models = {
|
|
181
204
|
selectedItems: {
|
|
182
205
|
getDefaultValue: params => params.defaultSelectedItems
|
|
183
206
|
}
|
|
184
207
|
};
|
|
185
208
|
const DEFAULT_SELECTED_ITEMS = [];
|
|
209
|
+
const EMPTY_SELECTION_PROPAGATION = {};
|
|
186
210
|
useTreeViewSelection.getDefaultizedParams = ({
|
|
187
211
|
params
|
|
188
212
|
}) => (0, _extends2.default)({}, params, {
|
|
189
213
|
disableSelection: params.disableSelection ?? false,
|
|
190
214
|
multiSelect: params.multiSelect ?? false,
|
|
191
215
|
checkboxSelection: params.checkboxSelection ?? false,
|
|
192
|
-
defaultSelectedItems: params.defaultSelectedItems ?? (params.multiSelect ? DEFAULT_SELECTED_ITEMS : null)
|
|
216
|
+
defaultSelectedItems: params.defaultSelectedItems ?? (params.multiSelect ? DEFAULT_SELECTED_ITEMS : null),
|
|
217
|
+
selectionPropagation: params.selectionPropagation ?? EMPTY_SELECTION_PROPAGATION
|
|
218
|
+
});
|
|
219
|
+
useTreeViewSelection.getInitialState = params => ({
|
|
220
|
+
selection: {
|
|
221
|
+
selectedItemsMap: (0, _useTreeViewSelection.createSelectedItemsMap)(params.selectedItems === undefined ? params.defaultSelectedItems : params.selectedItems)
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
useTreeViewSelection.getInitialState = params => ({
|
|
225
|
+
selection: {
|
|
226
|
+
selectedItemsMap: (0, _useTreeViewSelection.createSelectedItemsMap)(params.selectedItems === undefined ? params.defaultSelectedItems : params.selectedItems)
|
|
227
|
+
}
|
|
193
228
|
});
|
|
194
229
|
useTreeViewSelection.params = {
|
|
195
230
|
disableSelection: true,
|
|
@@ -198,5 +233,6 @@ useTreeViewSelection.params = {
|
|
|
198
233
|
defaultSelectedItems: true,
|
|
199
234
|
selectedItems: true,
|
|
200
235
|
onSelectedItemsChange: true,
|
|
201
|
-
onItemSelectionToggle: true
|
|
236
|
+
onItemSelectionToggle: true,
|
|
237
|
+
selectionPropagation: true
|
|
202
238
|
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.selectorIsItemSelected = void 0;
|
|
7
|
+
var _selectors = require("../../utils/selectors");
|
|
8
|
+
const selectorTreeViewSelectionState = state => state.selection;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Check if an item is selected.
|
|
12
|
+
* @param {TreeViewState<[UseTreeViewSelectionSignature]>} state The state of the tree view.
|
|
13
|
+
* @returns {boolean} `true` if the item is selected, `false` otherwise.
|
|
14
|
+
*/
|
|
15
|
+
const selectorIsItemSelected = exports.selectorIsItemSelected = (0, _selectors.createSelector)([selectorTreeViewSelectionState, (_, itemId) => itemId], (selectionState, itemId) => selectionState.selectedItemsMap.has(itemId));
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getLookupFromArray = exports.convertSelectedItemsToArray = void 0;
|
|
6
|
+
exports.propagateSelection = exports.getLookupFromArray = exports.getAddedAndRemovedItems = exports.createSelectedItemsMap = exports.convertSelectedItemsToArray = void 0;
|
|
7
|
+
var _useTreeViewSelection = require("./useTreeViewSelection.selectors");
|
|
8
|
+
var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
|
|
7
9
|
/**
|
|
8
10
|
* Transform the `selectedItems` model to be an array if it was a string or null.
|
|
9
11
|
* @param {string[] | string | null} model The raw model.
|
|
@@ -19,6 +21,14 @@ const convertSelectedItemsToArray = model => {
|
|
|
19
21
|
return [];
|
|
20
22
|
};
|
|
21
23
|
exports.convertSelectedItemsToArray = convertSelectedItemsToArray;
|
|
24
|
+
const createSelectedItemsMap = selectedItems => {
|
|
25
|
+
const selectedItemsMap = new Map();
|
|
26
|
+
convertSelectedItemsToArray(selectedItems).forEach(id => {
|
|
27
|
+
selectedItemsMap.set(id, true);
|
|
28
|
+
});
|
|
29
|
+
return selectedItemsMap;
|
|
30
|
+
};
|
|
31
|
+
exports.createSelectedItemsMap = createSelectedItemsMap;
|
|
22
32
|
const getLookupFromArray = array => {
|
|
23
33
|
const lookup = {};
|
|
24
34
|
array.forEach(itemId => {
|
|
@@ -26,4 +36,101 @@ const getLookupFromArray = array => {
|
|
|
26
36
|
});
|
|
27
37
|
return lookup;
|
|
28
38
|
};
|
|
29
|
-
exports.getLookupFromArray = getLookupFromArray;
|
|
39
|
+
exports.getLookupFromArray = getLookupFromArray;
|
|
40
|
+
const getAddedAndRemovedItems = ({
|
|
41
|
+
store,
|
|
42
|
+
oldModel,
|
|
43
|
+
newModel
|
|
44
|
+
}) => {
|
|
45
|
+
const newModelLookup = createSelectedItemsMap(newModel);
|
|
46
|
+
return {
|
|
47
|
+
added: newModel.filter(itemId => !(0, _useTreeViewSelection.selectorIsItemSelected)(store.value, itemId)),
|
|
48
|
+
removed: oldModel.filter(itemId => !newModelLookup.has(itemId))
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
exports.getAddedAndRemovedItems = getAddedAndRemovedItems;
|
|
52
|
+
const propagateSelection = ({
|
|
53
|
+
store,
|
|
54
|
+
selectionPropagation,
|
|
55
|
+
newModel,
|
|
56
|
+
oldModel,
|
|
57
|
+
additionalItemsToPropagate
|
|
58
|
+
}) => {
|
|
59
|
+
if (!selectionPropagation.descendants && !selectionPropagation.parents) {
|
|
60
|
+
return newModel;
|
|
61
|
+
}
|
|
62
|
+
let shouldRegenerateModel = false;
|
|
63
|
+
const newModelLookup = getLookupFromArray(newModel);
|
|
64
|
+
const changes = getAddedAndRemovedItems({
|
|
65
|
+
store,
|
|
66
|
+
newModel,
|
|
67
|
+
oldModel
|
|
68
|
+
});
|
|
69
|
+
additionalItemsToPropagate?.forEach(itemId => {
|
|
70
|
+
if (newModelLookup[itemId]) {
|
|
71
|
+
if (!changes.added.includes(itemId)) {
|
|
72
|
+
changes.added.push(itemId);
|
|
73
|
+
}
|
|
74
|
+
} else if (!changes.removed.includes(itemId)) {
|
|
75
|
+
changes.removed.push(itemId);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
changes.added.forEach(addedItemId => {
|
|
79
|
+
if (selectionPropagation.descendants) {
|
|
80
|
+
const selectDescendants = itemId => {
|
|
81
|
+
if (itemId !== addedItemId) {
|
|
82
|
+
shouldRegenerateModel = true;
|
|
83
|
+
newModelLookup[itemId] = true;
|
|
84
|
+
}
|
|
85
|
+
(0, _useTreeViewItems.selectorItemOrderedChildrenIds)(store.value, itemId).forEach(selectDescendants);
|
|
86
|
+
};
|
|
87
|
+
selectDescendants(addedItemId);
|
|
88
|
+
}
|
|
89
|
+
if (selectionPropagation.parents) {
|
|
90
|
+
const checkAllDescendantsSelected = itemId => {
|
|
91
|
+
if (!newModelLookup[itemId]) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
const children = (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(store.value, itemId);
|
|
95
|
+
return children.every(checkAllDescendantsSelected);
|
|
96
|
+
};
|
|
97
|
+
const selectParents = itemId => {
|
|
98
|
+
const parentId = (0, _useTreeViewItems.selectorItemParentId)(store.value, itemId);
|
|
99
|
+
if (parentId == null) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const siblings = (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(store.value, parentId);
|
|
103
|
+
if (siblings.every(checkAllDescendantsSelected)) {
|
|
104
|
+
shouldRegenerateModel = true;
|
|
105
|
+
newModelLookup[parentId] = true;
|
|
106
|
+
selectParents(parentId);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
selectParents(addedItemId);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
changes.removed.forEach(removedItemId => {
|
|
113
|
+
if (selectionPropagation.parents) {
|
|
114
|
+
let parentId = (0, _useTreeViewItems.selectorItemParentId)(store.value, removedItemId);
|
|
115
|
+
while (parentId != null) {
|
|
116
|
+
if (newModelLookup[parentId]) {
|
|
117
|
+
shouldRegenerateModel = true;
|
|
118
|
+
delete newModelLookup[parentId];
|
|
119
|
+
}
|
|
120
|
+
parentId = (0, _useTreeViewItems.selectorItemParentId)(store.value, parentId);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (selectionPropagation.descendants) {
|
|
124
|
+
const deSelectDescendants = itemId => {
|
|
125
|
+
if (itemId !== removedItemId) {
|
|
126
|
+
shouldRegenerateModel = true;
|
|
127
|
+
delete newModelLookup[itemId];
|
|
128
|
+
}
|
|
129
|
+
(0, _useTreeViewItems.selectorItemOrderedChildrenIds)(store.value, itemId).forEach(deSelectDescendants);
|
|
130
|
+
};
|
|
131
|
+
deSelectDescendants(removedItemId);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
return shouldRegenerateModel ? Object.keys(newModelLookup) : newModel;
|
|
135
|
+
};
|
|
136
|
+
exports.propagateSelection = propagateSelection;
|