@mui/x-tree-view 8.22.0 → 8.24.0
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 +312 -0
- package/RichTreeView/RichTreeView.d.ts +1 -1
- package/RichTreeView/RichTreeView.js +41 -28
- package/RichTreeView/RichTreeView.types.d.ts +6 -4
- package/RichTreeView/index.d.ts +1 -3
- package/RichTreeView/index.js +1 -13
- package/RichTreeView/useExtractRichTreeViewParameters.d.ts +294 -0
- package/RichTreeView/useExtractRichTreeViewParameters.js +91 -0
- package/SimpleTreeView/SimpleTreeView.d.ts +1 -1
- package/SimpleTreeView/SimpleTreeView.js +30 -24
- package/SimpleTreeView/SimpleTreeView.types.d.ts +5 -4
- package/SimpleTreeView/useExtractSimpleTreeViewParameters.d.ts +293 -0
- package/SimpleTreeView/useExtractSimpleTreeViewParameters.js +78 -0
- package/TreeItem/TreeItem.d.ts +1 -1
- package/TreeItem/TreeItem.js +9 -2
- package/TreeItemProvider/TreeItemProvider.js +3 -10
- package/esm/RichTreeView/RichTreeView.d.ts +1 -1
- package/esm/RichTreeView/RichTreeView.js +40 -27
- package/esm/RichTreeView/RichTreeView.types.d.ts +6 -4
- package/esm/RichTreeView/index.d.ts +1 -3
- package/esm/RichTreeView/index.js +1 -1
- package/esm/RichTreeView/useExtractRichTreeViewParameters.d.ts +294 -0
- package/esm/RichTreeView/useExtractRichTreeViewParameters.js +83 -0
- package/esm/SimpleTreeView/SimpleTreeView.d.ts +1 -1
- package/esm/SimpleTreeView/SimpleTreeView.js +29 -23
- package/esm/SimpleTreeView/SimpleTreeView.types.d.ts +5 -4
- package/esm/SimpleTreeView/useExtractSimpleTreeViewParameters.d.ts +293 -0
- package/esm/SimpleTreeView/useExtractSimpleTreeViewParameters.js +70 -0
- package/esm/TreeItem/TreeItem.d.ts +1 -1
- package/esm/TreeItem/TreeItem.js +9 -2
- package/esm/TreeItemProvider/TreeItemProvider.js +3 -10
- package/esm/hooks/useApplyPropagationToSelectedItemsOnMount.js +2 -2
- package/esm/hooks/useRichTreeViewApiRef.d.ts +2 -2
- package/esm/hooks/useSimpleTreeViewApiRef.d.ts +2 -3
- package/esm/hooks/useTreeItemModel.d.ts +2 -2
- package/esm/hooks/useTreeItemModel.js +1 -1
- package/esm/hooks/useTreeItemUtils/useTreeItemUtils.d.ts +9 -19
- package/esm/hooks/useTreeItemUtils/useTreeItemUtils.js +26 -35
- package/esm/hooks/useTreeViewApiRef.d.ts +3 -5
- package/esm/hooks/useTreeViewApiRef.js +4 -3
- package/esm/index.d.ts +0 -1
- package/esm/index.js +1 -2
- package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.d.ts +90 -0
- package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.js +126 -0
- package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.types.d.ts +272 -0
- package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.d.ts +21 -0
- package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.js +49 -0
- package/esm/internals/MinimalTreeViewStore/TimeoutManager.d.ts +9 -0
- package/esm/internals/MinimalTreeViewStore/TimeoutManager.js +39 -0
- package/esm/internals/MinimalTreeViewStore/TreeViewItemPluginManager.d.ts +12 -0
- package/esm/internals/MinimalTreeViewStore/TreeViewItemPluginManager.js +16 -0
- package/esm/internals/MinimalTreeViewStore/index.d.ts +2 -0
- package/esm/internals/MinimalTreeViewStore/index.js +2 -0
- package/esm/internals/RichTreeViewStore/RichTreeViewStore.d.ts +53 -0
- package/esm/internals/RichTreeViewStore/RichTreeViewStore.js +21 -0
- package/esm/internals/RichTreeViewStore/RichTreeViewStore.types.d.ts +34 -0
- package/esm/internals/RichTreeViewStore/RichTreeViewStore.utils.d.ts +3 -0
- package/esm/internals/RichTreeViewStore/RichTreeViewStore.utils.js +15 -0
- package/esm/internals/RichTreeViewStore/index.d.ts +3 -0
- package/esm/internals/RichTreeViewStore/index.js +3 -0
- package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.d.ts +8 -0
- package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.js +18 -0
- package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.types.d.ts +9 -0
- package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.utils.d.ts +3 -0
- package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.utils.js +5 -0
- package/esm/internals/SimpleTreeViewStore/index.d.ts +2 -0
- package/esm/internals/SimpleTreeViewStore/index.js +2 -0
- package/esm/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.d.ts +2 -3
- package/esm/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +2 -3
- package/esm/internals/TreeViewProvider/TreeViewContext.d.ts +3 -3
- package/esm/internals/TreeViewProvider/TreeViewProvider.d.ts +2 -2
- package/esm/internals/TreeViewProvider/TreeViewProvider.js +11 -6
- package/esm/internals/TreeViewProvider/TreeViewProvider.types.d.ts +8 -10
- package/esm/internals/TreeViewProvider/index.d.ts +1 -1
- package/esm/internals/TreeViewProvider/useTreeViewBuildContext.d.ts +16 -0
- package/esm/internals/{useTreeView → TreeViewProvider}/useTreeViewBuildContext.js +25 -39
- package/esm/internals/components/RichTreeViewItems.js +3 -3
- package/esm/internals/hooks/useTreeViewRootProps.d.ts +287 -0
- package/esm/internals/hooks/useTreeViewRootProps.js +30 -0
- package/esm/internals/hooks/useTreeViewStore.d.ts +10 -0
- package/esm/internals/hooks/useTreeViewStore.js +19 -0
- package/esm/internals/index.d.ts +15 -21
- package/esm/internals/index.js +11 -14
- package/esm/internals/models/events.d.ts +24 -3
- package/esm/internals/models/index.d.ts +2 -3
- package/esm/internals/models/index.js +2 -3
- package/esm/internals/models/itemPlugin.d.ts +9 -0
- package/esm/internals/models/treeView.d.ts +6 -9
- package/esm/internals/plugins/expansion/TreeViewExpansionPlugin.d.ts +69 -0
- package/esm/internals/plugins/expansion/TreeViewExpansionPlugin.js +124 -0
- package/esm/internals/plugins/expansion/index.d.ts +2 -0
- package/esm/internals/plugins/expansion/index.js +2 -0
- package/esm/internals/plugins/expansion/selectors.d.ts +27 -0
- package/esm/internals/plugins/{useTreeViewExpansion/useTreeViewExpansion.selectors.js → expansion/selectors.js} +5 -5
- package/esm/internals/plugins/expansion/utils.d.ts +5 -0
- package/esm/internals/plugins/focus/TreeViewFocusPlugin.d.ts +33 -0
- package/esm/internals/plugins/focus/TreeViewFocusPlugin.js +107 -0
- package/esm/internals/plugins/focus/index.d.ts +2 -0
- package/esm/internals/plugins/focus/index.js +2 -0
- package/esm/internals/plugins/focus/selectors.d.ts +21 -0
- package/esm/internals/plugins/{useTreeViewFocus/useTreeViewFocus.selectors.js → focus/selectors.js} +6 -6
- package/esm/internals/plugins/id/index.d.ts +1 -0
- package/esm/internals/plugins/id/index.js +1 -0
- package/esm/internals/plugins/id/selectors.d.ts +13 -0
- package/esm/internals/plugins/id/selectors.js +18 -0
- package/esm/internals/plugins/items/TreeViewItemsPlugin.d.ts +105 -0
- package/esm/internals/plugins/items/TreeViewItemsPlugin.js +223 -0
- package/esm/internals/plugins/items/index.d.ts +3 -0
- package/esm/internals/plugins/items/index.js +3 -0
- package/esm/internals/plugins/items/selectors.d.ts +60 -0
- package/esm/internals/plugins/items/selectors.js +64 -0
- package/esm/internals/plugins/items/utils.d.ts +43 -0
- package/esm/internals/plugins/{useTreeViewItems/useTreeViewItems.utils.js → items/utils.js} +6 -49
- package/esm/internals/plugins/{useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts → jsxItems/TreeViewJSXItemsPlugin.d.ts} +6 -13
- package/esm/internals/plugins/jsxItems/TreeViewJSXItemsPlugin.js +81 -0
- package/esm/internals/plugins/jsxItems/index.d.ts +1 -0
- package/esm/internals/plugins/jsxItems/index.js +1 -0
- package/esm/internals/plugins/jsxItems/itemPlugin.d.ts +4 -0
- package/esm/internals/plugins/jsxItems/itemPlugin.js +88 -0
- package/esm/internals/plugins/keyboardNavigation/TreeViewKeyboardNavigationPlugin.d.ts +28 -0
- package/esm/internals/plugins/keyboardNavigation/TreeViewKeyboardNavigationPlugin.js +306 -0
- package/esm/internals/plugins/keyboardNavigation/index.d.ts +1 -0
- package/esm/internals/plugins/keyboardNavigation/index.js +1 -0
- package/esm/internals/plugins/labelEditing/TreeViewLabelEditingPlugin.d.ts +22 -0
- package/esm/internals/plugins/labelEditing/TreeViewLabelEditingPlugin.js +50 -0
- package/esm/internals/plugins/labelEditing/index.d.ts +2 -0
- package/esm/internals/plugins/labelEditing/index.js +2 -0
- package/{internals/plugins/useTreeViewLabel → esm/internals/plugins/labelEditing}/itemPlugin.d.ts +5 -4
- package/esm/internals/plugins/{useTreeViewLabel → labelEditing}/itemPlugin.js +2 -2
- package/esm/internals/plugins/labelEditing/selectors.d.ts +15 -0
- package/esm/internals/plugins/{useTreeViewLabel/useTreeViewLabel.selectors.js → labelEditing/selectors.js} +4 -4
- package/esm/internals/plugins/lazyLoading/index.d.ts +2 -0
- package/esm/internals/plugins/lazyLoading/index.js +2 -0
- package/esm/internals/plugins/lazyLoading/selectors.d.ts +19 -0
- package/esm/internals/plugins/lazyLoading/selectors.js +25 -0
- package/esm/internals/plugins/lazyLoading/types.d.ts +5 -0
- package/esm/internals/plugins/selection/TreeViewSelectionPlugin.d.ts +73 -0
- package/esm/internals/plugins/selection/TreeViewSelectionPlugin.js +319 -0
- package/esm/internals/plugins/selection/index.d.ts +2 -0
- package/esm/internals/plugins/selection/index.js +2 -0
- package/esm/internals/plugins/{useTreeViewSelection → selection}/itemPlugin.d.ts +1 -1
- package/esm/internals/plugins/{useTreeViewSelection → selection}/itemPlugin.js +8 -8
- package/esm/internals/plugins/selection/selectors.d.ts +48 -0
- package/esm/internals/plugins/{useTreeViewSelection/useTreeViewSelection.selectors.js → selection/selectors.js} +19 -9
- package/esm/internals/utils/tree.d.ts +8 -10
- package/esm/internals/utils/tree.js +2 -2
- package/esm/models/items.d.ts +5 -2
- package/esm/useTreeItem/useTreeItem.d.ts +18 -2
- package/esm/useTreeItem/useTreeItem.js +15 -19
- package/esm/useTreeItem/useTreeItem.types.d.ts +9 -19
- package/hooks/useApplyPropagationToSelectedItemsOnMount.js +3 -3
- package/hooks/useRichTreeViewApiRef.d.ts +2 -2
- package/hooks/useSimpleTreeViewApiRef.d.ts +2 -3
- package/hooks/useTreeItemModel.d.ts +2 -2
- package/hooks/useTreeItemModel.js +2 -2
- package/hooks/useTreeItemUtils/useTreeItemUtils.d.ts +9 -19
- package/hooks/useTreeItemUtils/useTreeItemUtils.js +41 -49
- package/hooks/useTreeViewApiRef.d.ts +3 -5
- package/hooks/useTreeViewApiRef.js +3 -5
- package/index.d.ts +0 -1
- package/index.js +1 -22
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.d.ts +90 -0
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.js +134 -0
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.types.d.ts +272 -0
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.d.ts +21 -0
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.js +58 -0
- package/internals/MinimalTreeViewStore/TimeoutManager.d.ts +9 -0
- package/internals/MinimalTreeViewStore/TimeoutManager.js +46 -0
- package/internals/MinimalTreeViewStore/TreeViewItemPluginManager.d.ts +12 -0
- package/internals/MinimalTreeViewStore/TreeViewItemPluginManager.js +23 -0
- package/internals/MinimalTreeViewStore/index.d.ts +2 -0
- package/internals/MinimalTreeViewStore/index.js +27 -0
- package/internals/RichTreeViewStore/RichTreeViewStore.d.ts +53 -0
- package/internals/RichTreeViewStore/RichTreeViewStore.js +30 -0
- package/internals/RichTreeViewStore/RichTreeViewStore.types.d.ts +34 -0
- package/internals/RichTreeViewStore/RichTreeViewStore.utils.d.ts +3 -0
- package/internals/RichTreeViewStore/RichTreeViewStore.utils.js +22 -0
- package/internals/RichTreeViewStore/index.d.ts +3 -0
- package/internals/RichTreeViewStore/index.js +38 -0
- package/internals/SimpleTreeViewStore/SimpleTreeViewStore.d.ts +8 -0
- package/internals/SimpleTreeViewStore/SimpleTreeViewStore.js +26 -0
- package/internals/SimpleTreeViewStore/SimpleTreeViewStore.types.d.ts +9 -0
- package/internals/SimpleTreeViewStore/SimpleTreeViewStore.utils.d.ts +3 -0
- package/internals/SimpleTreeViewStore/SimpleTreeViewStore.utils.js +11 -0
- package/internals/SimpleTreeViewStore/index.d.ts +2 -0
- package/internals/SimpleTreeViewStore/index.js +27 -0
- package/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.d.ts +2 -3
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +3 -4
- package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -3
- package/internals/TreeViewProvider/TreeViewProvider.d.ts +2 -2
- package/internals/TreeViewProvider/TreeViewProvider.js +14 -9
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +8 -10
- package/internals/TreeViewProvider/index.d.ts +1 -1
- package/internals/TreeViewProvider/useTreeViewBuildContext.d.ts +16 -0
- package/internals/{useTreeView → TreeViewProvider}/useTreeViewBuildContext.js +25 -39
- package/internals/components/RichTreeViewItems.js +9 -9
- package/internals/hooks/useTreeViewRootProps.d.ts +287 -0
- package/internals/hooks/useTreeViewRootProps.js +36 -0
- package/internals/hooks/useTreeViewStore.d.ts +10 -0
- package/internals/hooks/useTreeViewStore.js +26 -0
- package/internals/index.d.ts +15 -21
- package/internals/index.js +40 -70
- package/internals/models/events.d.ts +24 -3
- package/internals/models/index.d.ts +2 -3
- package/internals/models/index.js +11 -22
- package/internals/models/itemPlugin.d.ts +9 -0
- package/internals/models/treeView.d.ts +6 -9
- package/internals/plugins/expansion/TreeViewExpansionPlugin.d.ts +69 -0
- package/internals/plugins/expansion/TreeViewExpansionPlugin.js +132 -0
- package/internals/plugins/expansion/index.d.ts +2 -0
- package/internals/plugins/expansion/index.js +27 -0
- package/internals/plugins/expansion/selectors.d.ts +27 -0
- package/internals/plugins/{useTreeViewExpansion/useTreeViewExpansion.selectors.js → expansion/selectors.js} +8 -8
- package/internals/plugins/expansion/utils.d.ts +5 -0
- package/internals/plugins/focus/TreeViewFocusPlugin.d.ts +33 -0
- package/internals/plugins/focus/TreeViewFocusPlugin.js +114 -0
- package/internals/plugins/focus/index.d.ts +2 -0
- package/internals/plugins/focus/index.js +27 -0
- package/internals/plugins/focus/selectors.d.ts +21 -0
- package/internals/plugins/{useTreeViewFocus/useTreeViewFocus.selectors.js → focus/selectors.js} +9 -9
- package/internals/plugins/id/index.d.ts +1 -0
- package/internals/plugins/id/index.js +16 -0
- package/internals/plugins/id/selectors.d.ts +13 -0
- package/internals/plugins/id/selectors.js +24 -0
- package/internals/plugins/items/TreeViewItemsPlugin.d.ts +105 -0
- package/internals/plugins/items/TreeViewItemsPlugin.js +231 -0
- package/internals/plugins/items/index.d.ts +3 -0
- package/internals/plugins/items/index.js +46 -0
- package/internals/plugins/items/selectors.d.ts +60 -0
- package/internals/plugins/{useTreeViewItems/useTreeViewItems.selectors.js → items/selectors.js} +18 -14
- package/internals/plugins/items/utils.d.ts +43 -0
- package/internals/plugins/{useTreeViewItems/useTreeViewItems.utils.js → items/utils.js} +6 -50
- package/internals/plugins/{useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts → jsxItems/TreeViewJSXItemsPlugin.d.ts} +6 -13
- package/internals/plugins/jsxItems/TreeViewJSXItemsPlugin.js +89 -0
- package/internals/plugins/jsxItems/index.d.ts +1 -0
- package/internals/plugins/jsxItems/index.js +16 -0
- package/internals/plugins/jsxItems/itemPlugin.d.ts +4 -0
- package/internals/plugins/{useTreeViewJSXItems → jsxItems}/itemPlugin.js +35 -20
- package/internals/plugins/keyboardNavigation/TreeViewKeyboardNavigationPlugin.d.ts +28 -0
- package/internals/plugins/keyboardNavigation/TreeViewKeyboardNavigationPlugin.js +313 -0
- package/internals/plugins/keyboardNavigation/index.d.ts +1 -0
- package/internals/plugins/keyboardNavigation/index.js +16 -0
- package/internals/plugins/labelEditing/TreeViewLabelEditingPlugin.d.ts +22 -0
- package/internals/plugins/labelEditing/TreeViewLabelEditingPlugin.js +58 -0
- package/internals/plugins/labelEditing/index.d.ts +2 -0
- package/internals/plugins/labelEditing/index.js +27 -0
- package/{esm/internals/plugins/useTreeViewLabel → internals/plugins/labelEditing}/itemPlugin.d.ts +5 -4
- package/internals/plugins/{useTreeViewLabel → labelEditing}/itemPlugin.js +6 -6
- package/internals/plugins/labelEditing/selectors.d.ts +15 -0
- package/internals/plugins/{useTreeViewLabel/useTreeViewLabel.selectors.js → labelEditing/selectors.js} +4 -4
- package/internals/plugins/lazyLoading/index.d.ts +2 -0
- package/internals/plugins/lazyLoading/index.js +27 -0
- package/internals/plugins/lazyLoading/selectors.d.ts +19 -0
- package/internals/plugins/{useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js → lazyLoading/selectors.js} +11 -6
- package/internals/plugins/lazyLoading/types.d.ts +5 -0
- package/internals/plugins/selection/TreeViewSelectionPlugin.d.ts +73 -0
- package/internals/plugins/selection/TreeViewSelectionPlugin.js +327 -0
- package/internals/plugins/selection/index.d.ts +2 -0
- package/internals/plugins/selection/index.js +27 -0
- package/internals/plugins/{useTreeViewSelection → selection}/itemPlugin.d.ts +1 -1
- package/internals/plugins/{useTreeViewSelection → selection}/itemPlugin.js +16 -16
- package/internals/plugins/selection/selectors.d.ts +48 -0
- package/internals/plugins/{useTreeViewSelection/useTreeViewSelection.selectors.js → selection/selectors.js} +19 -9
- package/internals/utils/tree.d.ts +8 -10
- package/internals/utils/tree.js +33 -33
- package/models/items.d.ts +5 -2
- package/package.json +3 -3
- package/useTreeItem/useTreeItem.d.ts +18 -2
- package/useTreeItem/useTreeItem.js +19 -24
- package/useTreeItem/useTreeItem.types.d.ts +9 -19
- package/RichTreeView/RichTreeView.plugins.d.ts +0 -10
- package/RichTreeView/RichTreeView.plugins.js +0 -15
- package/SimpleTreeView/SimpleTreeView.plugins.d.ts +0 -9
- package/SimpleTreeView/SimpleTreeView.plugins.js +0 -15
- package/esm/RichTreeView/RichTreeView.plugins.d.ts +0 -10
- package/esm/RichTreeView/RichTreeView.plugins.js +0 -9
- package/esm/SimpleTreeView/SimpleTreeView.plugins.d.ts +0 -9
- package/esm/SimpleTreeView/SimpleTreeView.plugins.js +0 -9
- package/esm/internals/corePlugins/corePlugins.d.ts +0 -9
- package/esm/internals/corePlugins/corePlugins.js +0 -8
- package/esm/internals/corePlugins/index.d.ts +0 -2
- package/esm/internals/corePlugins/index.js +0 -1
- package/esm/internals/corePlugins/useTreeViewId/index.d.ts +0 -3
- package/esm/internals/corePlugins/useTreeViewId/index.js +0 -2
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.d.ts +0 -3
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.js +0 -38
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +0 -10
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +0 -9
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +0 -20
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.utils.d.ts +0 -21
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +0 -26
- package/esm/internals/corePlugins/useTreeViewInstanceEvents/index.d.ts +0 -2
- package/esm/internals/corePlugins/useTreeViewInstanceEvents/index.js +0 -1
- package/esm/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +0 -3
- package/esm/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -31
- package/esm/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +0 -22
- package/esm/internals/corePlugins/useTreeViewOptionalPlugins/index.d.ts +0 -2
- package/esm/internals/corePlugins/useTreeViewOptionalPlugins/index.js +0 -1
- package/esm/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.d.ts +0 -3
- package/esm/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.js +0 -12
- package/esm/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.d.ts +0 -8
- package/esm/internals/hooks/useInstanceEventHandler.d.ts +0 -15
- package/esm/internals/hooks/useInstanceEventHandler.js +0 -79
- package/esm/internals/models/helpers.d.ts +0 -7
- package/esm/internals/models/plugin.d.ts +0 -166
- package/esm/internals/models/plugin.js +0 -1
- package/esm/internals/plugins/useTreeViewExpansion/index.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewExpansion/index.js +0 -2
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +0 -149
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +0 -28
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +0 -112
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +0 -1
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.d.ts +0 -6
- package/esm/internals/plugins/useTreeViewFocus/index.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewFocus/index.js +0 -2
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -113
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +0 -22
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +0 -45
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +0 -1
- package/esm/internals/plugins/useTreeViewItems/index.d.ts +0 -4
- package/esm/internals/plugins/useTreeViewItems/index.js +0 -3
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +0 -218
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +0 -56
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +0 -60
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +0 -197
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.js +0 -1
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +0 -49
- package/esm/internals/plugins/useTreeViewJSXItems/index.d.ts +0 -2
- package/esm/internals/plugins/useTreeViewJSXItems/index.js +0 -1
- package/esm/internals/plugins/useTreeViewJSXItems/itemPlugin.d.ts +0 -2
- package/esm/internals/plugins/useTreeViewJSXItems/itemPlugin.js +0 -74
- package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +0 -104
- package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.js +0 -1
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/index.d.ts +0 -2
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/index.js +0 -1
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +0 -305
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -32
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +0 -1
- package/esm/internals/plugins/useTreeViewLabel/index.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewLabel/index.js +0 -2
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +0 -70
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +0 -16
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +0 -50
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.js +0 -1
- package/esm/internals/plugins/useTreeViewLazyLoading/index.d.ts +0 -2
- package/esm/internals/plugins/useTreeViewLazyLoading/index.js +0 -1
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -24
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +0 -20
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +0 -100
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.js +0 -1
- package/esm/internals/plugins/useTreeViewSelection/index.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewSelection/index.js +0 -2
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +0 -230
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +0 -40
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +0 -132
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +0 -1
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +0 -31
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +0 -107
- package/esm/internals/useTreeView/index.d.ts +0 -1
- package/esm/internals/useTreeView/index.js +0 -1
- package/esm/internals/useTreeView/useExtractPluginParamsFromProps.d.ts +0 -19
- package/esm/internals/useTreeView/useExtractPluginParamsFromProps.js +0 -51
- package/esm/internals/useTreeView/useTreeView.d.ts +0 -18
- package/esm/internals/useTreeView/useTreeView.js +0 -102
- package/esm/internals/useTreeView/useTreeView.types.d.ts +0 -20
- package/esm/internals/useTreeView/useTreeView.types.js +0 -1
- package/esm/internals/useTreeView/useTreeViewBuildContext.d.ts +0 -13
- package/esm/internals/utils/cleanupTracking/CleanupTracking.d.ts +0 -9
- package/esm/internals/utils/cleanupTracking/CleanupTracking.js +0 -1
- package/esm/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.d.ts +0 -7
- package/esm/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +0 -14
- package/esm/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +0 -9
- package/esm/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +0 -38
- package/esm/internals/utils/plugins.d.ts +0 -2
- package/esm/internals/utils/plugins.js +0 -4
- package/esm/internals/utils/publishTreeViewEvent.d.ts +0 -5
- package/esm/internals/utils/publishTreeViewEvent.js +0 -3
- package/internals/corePlugins/corePlugins.d.ts +0 -9
- package/internals/corePlugins/corePlugins.js +0 -14
- package/internals/corePlugins/index.d.ts +0 -2
- package/internals/corePlugins/index.js +0 -12
- package/internals/corePlugins/useTreeViewId/index.d.ts +0 -3
- package/internals/corePlugins/useTreeViewId/index.js +0 -19
- package/internals/corePlugins/useTreeViewId/useTreeViewId.d.ts +0 -3
- package/internals/corePlugins/useTreeViewId/useTreeViewId.js +0 -46
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +0 -10
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +0 -15
- package/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +0 -20
- package/internals/corePlugins/useTreeViewId/useTreeViewId.utils.d.ts +0 -21
- package/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +0 -34
- package/internals/corePlugins/useTreeViewInstanceEvents/index.d.ts +0 -2
- package/internals/corePlugins/useTreeViewInstanceEvents/index.js +0 -12
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +0 -3
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -38
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +0 -22
- package/internals/corePlugins/useTreeViewOptionalPlugins/index.d.ts +0 -2
- package/internals/corePlugins/useTreeViewOptionalPlugins/index.js +0 -12
- package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.d.ts +0 -3
- package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.js +0 -19
- package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.d.ts +0 -8
- package/internals/hooks/useInstanceEventHandler.d.ts +0 -15
- package/internals/hooks/useInstanceEventHandler.js +0 -87
- package/internals/models/helpers.d.ts +0 -7
- package/internals/models/plugin.d.ts +0 -166
- package/internals/models/plugin.js +0 -5
- package/internals/plugins/useTreeViewExpansion/index.d.ts +0 -3
- package/internals/plugins/useTreeViewExpansion/index.js +0 -19
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.d.ts +0 -3
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +0 -157
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +0 -28
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +0 -112
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +0 -5
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.d.ts +0 -6
- package/internals/plugins/useTreeViewFocus/index.d.ts +0 -3
- package/internals/plugins/useTreeViewFocus/index.js +0 -19
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.d.ts +0 -3
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -121
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +0 -22
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +0 -45
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +0 -5
- package/internals/plugins/useTreeViewItems/index.d.ts +0 -4
- package/internals/plugins/useTreeViewItems/index.js +0 -32
- package/internals/plugins/useTreeViewItems/useTreeViewItems.d.ts +0 -3
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +0 -226
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +0 -56
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +0 -197
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.js +0 -5
- package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +0 -49
- package/internals/plugins/useTreeViewJSXItems/index.d.ts +0 -2
- package/internals/plugins/useTreeViewJSXItems/index.js +0 -12
- package/internals/plugins/useTreeViewJSXItems/itemPlugin.d.ts +0 -2
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.d.ts +0 -3
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +0 -112
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.js +0 -5
- package/internals/plugins/useTreeViewKeyboardNavigation/index.d.ts +0 -2
- package/internals/plugins/useTreeViewKeyboardNavigation/index.js +0 -12
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.d.ts +0 -3
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +0 -312
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -32
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +0 -5
- package/internals/plugins/useTreeViewLabel/index.d.ts +0 -3
- package/internals/plugins/useTreeViewLabel/index.js +0 -19
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.d.ts +0 -3
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +0 -78
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +0 -16
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +0 -50
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.js +0 -5
- package/internals/plugins/useTreeViewLazyLoading/index.d.ts +0 -2
- package/internals/plugins/useTreeViewLazyLoading/index.js +0 -12
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -24
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +0 -100
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.js +0 -5
- package/internals/plugins/useTreeViewSelection/index.d.ts +0 -3
- package/internals/plugins/useTreeViewSelection/index.js +0 -19
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +0 -3
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +0 -239
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +0 -40
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +0 -132
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +0 -5
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +0 -31
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +0 -116
- package/internals/useTreeView/index.d.ts +0 -1
- package/internals/useTreeView/index.js +0 -12
- package/internals/useTreeView/useExtractPluginParamsFromProps.d.ts +0 -19
- package/internals/useTreeView/useExtractPluginParamsFromProps.js +0 -60
- package/internals/useTreeView/useTreeView.d.ts +0 -18
- package/internals/useTreeView/useTreeView.js +0 -112
- package/internals/useTreeView/useTreeView.types.d.ts +0 -20
- package/internals/useTreeView/useTreeView.types.js +0 -5
- package/internals/useTreeView/useTreeViewBuildContext.d.ts +0 -13
- package/internals/utils/cleanupTracking/CleanupTracking.d.ts +0 -9
- package/internals/utils/cleanupTracking/CleanupTracking.js +0 -5
- package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.d.ts +0 -7
- package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +0 -21
- package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +0 -9
- package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +0 -45
- package/internals/utils/plugins.d.ts +0 -2
- package/internals/utils/plugins.js +0 -11
- package/internals/utils/publishTreeViewEvent.d.ts +0 -5
- package/internals/utils/publishTreeViewEvent.js +0 -10
- /package/esm/internals/{corePlugins/useTreeViewId/useTreeViewId.types.js → MinimalTreeViewStore/MinimalTreeViewStore.types.js} +0 -0
- /package/esm/internals/{corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js → RichTreeViewStore/RichTreeViewStore.types.js} +0 -0
- /package/esm/internals/{corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.js → SimpleTreeViewStore/SimpleTreeViewStore.types.js} +0 -0
- /package/esm/internals/plugins/{useTreeViewExpansion/useTreeViewExpansion.utils.js → expansion/utils.js} +0 -0
- /package/esm/internals/{models/helpers.js → plugins/lazyLoading/types.js} +0 -0
- /package/internals/{corePlugins/useTreeViewId/useTreeViewId.types.js → MinimalTreeViewStore/MinimalTreeViewStore.types.js} +0 -0
- /package/internals/{corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js → RichTreeViewStore/RichTreeViewStore.types.js} +0 -0
- /package/internals/{corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.js → SimpleTreeViewStore/SimpleTreeViewStore.types.js} +0 -0
- /package/internals/plugins/{useTreeViewExpansion/useTreeViewExpansion.utils.js → expansion/utils.js} +0 -0
- /package/internals/{models/helpers.js → plugins/lazyLoading/types.js} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createSelector } from '@mui/x-internals/store';
|
|
2
|
-
import { itemsSelectors } from "../
|
|
2
|
+
import { itemsSelectors } from "../items/selectors.js";
|
|
3
3
|
export const labelSelectors = {
|
|
4
4
|
/**
|
|
5
5
|
* Checks whether an item is editable.
|
|
6
6
|
*/
|
|
7
|
-
isItemEditable: createSelector(state => state.
|
|
7
|
+
isItemEditable: createSelector(state => state.isItemEditable, itemsSelectors.itemModel, (isItemEditable, itemModel, _itemId) => {
|
|
8
8
|
if (!itemModel || isItemEditable == null) {
|
|
9
9
|
return false;
|
|
10
10
|
}
|
|
@@ -16,9 +16,9 @@ export const labelSelectors = {
|
|
|
16
16
|
/**
|
|
17
17
|
* Checks whether an item is being edited.
|
|
18
18
|
*/
|
|
19
|
-
isItemBeingEdited: createSelector((state, itemId) => itemId == null ? false : state.
|
|
19
|
+
isItemBeingEdited: createSelector((state, itemId) => itemId == null ? false : state.editedItemId === itemId),
|
|
20
20
|
/**
|
|
21
21
|
* Checks whether any item is being edited.
|
|
22
22
|
*/
|
|
23
|
-
isAnyItemBeingEdited: createSelector(state => !!state.
|
|
23
|
+
isAnyItemBeingEdited: createSelector(state => !!state.editedItemId)
|
|
24
24
|
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { RichTreeViewState } from "../../RichTreeViewStore/index.js";
|
|
2
|
+
export declare const lazyLoadingSelectors: {
|
|
3
|
+
/**
|
|
4
|
+
* Checks if the lazy loaded state is empty.
|
|
5
|
+
*/
|
|
6
|
+
isEmpty: (state: RichTreeViewState<any, any>) => boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Checks whether an item is loading.
|
|
9
|
+
*/
|
|
10
|
+
isItemLoading: (state: RichTreeViewState<any, any>, itemId: string | null) => boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Checks whether an item has errors.
|
|
13
|
+
*/
|
|
14
|
+
itemHasError: (state: RichTreeViewState<any, any>, itemId: string | null) => boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Get an item error.
|
|
17
|
+
*/
|
|
18
|
+
itemError: (state: RichTreeViewState<any, any>, itemId: string | null) => Error | null | undefined;
|
|
19
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createSelector } from '@mui/x-internals/store';
|
|
2
|
+
import { TREE_VIEW_ROOT_PARENT_ID } from "../items/index.js";
|
|
3
|
+
export const lazyLoadingSelectors = {
|
|
4
|
+
/**
|
|
5
|
+
* Checks if the lazy loaded state is empty.
|
|
6
|
+
*/
|
|
7
|
+
isEmpty: createSelector(state => {
|
|
8
|
+
if (state.lazyLoadedItems == null) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
return Object.keys(state.lazyLoadedItems.loading).length === 0 && Object.keys(state.lazyLoadedItems.errors).length === 0;
|
|
12
|
+
}),
|
|
13
|
+
/**
|
|
14
|
+
* Checks whether an item is loading.
|
|
15
|
+
*/
|
|
16
|
+
isItemLoading: createSelector((state, itemId) => state.lazyLoadedItems?.loading[itemId ?? TREE_VIEW_ROOT_PARENT_ID] ?? false),
|
|
17
|
+
/**
|
|
18
|
+
* Checks whether an item has errors.
|
|
19
|
+
*/
|
|
20
|
+
itemHasError: createSelector((state, itemId) => !!state.lazyLoadedItems?.errors[itemId ?? TREE_VIEW_ROOT_PARENT_ID]),
|
|
21
|
+
/**
|
|
22
|
+
* Get an item error.
|
|
23
|
+
*/
|
|
24
|
+
itemError: createSelector((state, itemId) => state.lazyLoadedItems?.errors[itemId ?? TREE_VIEW_ROOT_PARENT_ID])
|
|
25
|
+
};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export declare class TreeViewSelectionPlugin<Multiple extends boolean | undefined> {
|
|
2
|
+
private store;
|
|
3
|
+
private lastSelectedItem;
|
|
4
|
+
private lastSelectedRange;
|
|
5
|
+
constructor(store: any);
|
|
6
|
+
private setSelectedItems;
|
|
7
|
+
private selectRange;
|
|
8
|
+
buildPublicAPI: () => {
|
|
9
|
+
setItemSelection: ({
|
|
10
|
+
itemId,
|
|
11
|
+
event,
|
|
12
|
+
keepExistingSelection,
|
|
13
|
+
shouldBeSelected
|
|
14
|
+
}: {
|
|
15
|
+
itemId: string;
|
|
16
|
+
event?: React.SyntheticEvent | null;
|
|
17
|
+
shouldBeSelected?: boolean;
|
|
18
|
+
keepExistingSelection?: boolean;
|
|
19
|
+
}) => void;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Select or deselect an item.
|
|
23
|
+
* @param {object} parameters The parameters of the method.
|
|
24
|
+
* @param {TreeViewItemId} parameters.itemId The id of the item to select or deselect.
|
|
25
|
+
* @param {React.SyntheticEvent} parameters.event The DOM event that triggered the change.
|
|
26
|
+
* @param {boolean} parameters.keepExistingSelection If `true`, the other already selected items will remain selected, otherwise, they will be deselected. This parameter is only relevant when `multiSelect` is `true`
|
|
27
|
+
* @param {boolean | undefined} parameters.shouldBeSelected If `true` the item will be selected. If `false` the item will be deselected. If not defined, the item's selection status will be toggled.
|
|
28
|
+
*/
|
|
29
|
+
setItemSelection: ({
|
|
30
|
+
itemId,
|
|
31
|
+
event,
|
|
32
|
+
keepExistingSelection,
|
|
33
|
+
shouldBeSelected
|
|
34
|
+
}: {
|
|
35
|
+
itemId: string;
|
|
36
|
+
event?: React.SyntheticEvent | null;
|
|
37
|
+
shouldBeSelected?: boolean;
|
|
38
|
+
keepExistingSelection?: boolean;
|
|
39
|
+
}) => void;
|
|
40
|
+
/**
|
|
41
|
+
* Select all the navigable items in the tree.
|
|
42
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
43
|
+
*/
|
|
44
|
+
selectAllNavigableItems: (event: React.SyntheticEvent) => void;
|
|
45
|
+
/**
|
|
46
|
+
* Expand the current selection range up to the given item.
|
|
47
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
48
|
+
* @param {TreeViewItemId} itemId The id of the item to expand the selection to.
|
|
49
|
+
*/
|
|
50
|
+
expandSelectionRange: (event: React.SyntheticEvent, itemId: string) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Expand the current selection range from the first navigable item to the given item.
|
|
53
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
54
|
+
* @param {TreeViewItemId} itemId The id of the item up to which the selection range should be expanded.
|
|
55
|
+
*/
|
|
56
|
+
selectRangeFromStartToItem: (event: React.SyntheticEvent, itemId: string) => void;
|
|
57
|
+
/**
|
|
58
|
+
* Expand the current selection range from the given item to the last navigable item.
|
|
59
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
60
|
+
* @param {TreeViewItemId} itemId The id of the item from which the selection range should be expanded.
|
|
61
|
+
*/
|
|
62
|
+
selectRangeFromItemToEnd: (event: React.SyntheticEvent, itemId: string) => void;
|
|
63
|
+
/**
|
|
64
|
+
* Update the selection when navigating with ArrowUp / ArrowDown keys.
|
|
65
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
66
|
+
* @param {TreeViewItemId} currentItemId The id of the active item before the keyboard navigation.
|
|
67
|
+
* @param {TreeViewItemId} nextItemId The id of the active item after the keyboard navigation.
|
|
68
|
+
*/
|
|
69
|
+
selectItemFromArrowNavigation: (event: React.SyntheticEvent, currentItem: string, nextItem: string) => void;
|
|
70
|
+
}
|
|
71
|
+
export declare function getLookupFromArray(array: string[]): {
|
|
72
|
+
[itemId: string]: true;
|
|
73
|
+
};
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { EMPTY_OBJECT } from '@base-ui/utils/empty';
|
|
2
|
+
import { itemsSelectors } from "../items/index.js";
|
|
3
|
+
import { selectionSelectors } from "./selectors.js";
|
|
4
|
+
import { useSelectionItemPlugin } from "./itemPlugin.js";
|
|
5
|
+
import { findOrderInTremauxTree, getAllNavigableItems, getFirstNavigableItem, getLastNavigableItem, getNonDisabledItemsInRange } from "../../utils/tree.js";
|
|
6
|
+
export class TreeViewSelectionPlugin {
|
|
7
|
+
lastSelectedItem = null;
|
|
8
|
+
lastSelectedRange = {};
|
|
9
|
+
|
|
10
|
+
// We can't type `store`, otherwise we get the following TS error:
|
|
11
|
+
// 'selection' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.
|
|
12
|
+
constructor(store) {
|
|
13
|
+
this.store = store;
|
|
14
|
+
store.itemPluginManager.register(useSelectionItemPlugin, null);
|
|
15
|
+
}
|
|
16
|
+
setSelectedItems = (event, newModel, additionalItemsToPropagate) => {
|
|
17
|
+
const {
|
|
18
|
+
selectionPropagation = EMPTY_OBJECT,
|
|
19
|
+
selectedItems,
|
|
20
|
+
onItemSelectionToggle,
|
|
21
|
+
onSelectedItemsChange
|
|
22
|
+
} = this.store.parameters;
|
|
23
|
+
const oldModel = selectionSelectors.selectedItemsRaw(this.store.state);
|
|
24
|
+
let cleanModel;
|
|
25
|
+
const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(this.store.state);
|
|
26
|
+
if (isMultiSelectEnabled && (selectionPropagation.descendants || selectionPropagation.parents)) {
|
|
27
|
+
cleanModel = propagateSelection({
|
|
28
|
+
store: this.store,
|
|
29
|
+
selectionPropagation,
|
|
30
|
+
newModel: newModel,
|
|
31
|
+
oldModel: oldModel,
|
|
32
|
+
additionalItemsToPropagate
|
|
33
|
+
});
|
|
34
|
+
} else {
|
|
35
|
+
cleanModel = newModel;
|
|
36
|
+
}
|
|
37
|
+
if (onItemSelectionToggle) {
|
|
38
|
+
if (isMultiSelectEnabled) {
|
|
39
|
+
const changes = getAddedAndRemovedItems({
|
|
40
|
+
store: this.store,
|
|
41
|
+
newModel: cleanModel,
|
|
42
|
+
oldModel: oldModel
|
|
43
|
+
});
|
|
44
|
+
if (onItemSelectionToggle) {
|
|
45
|
+
changes.added.forEach(itemId => {
|
|
46
|
+
onItemSelectionToggle(event, itemId, true);
|
|
47
|
+
});
|
|
48
|
+
changes.removed.forEach(itemId => {
|
|
49
|
+
onItemSelectionToggle(event, itemId, false);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
} else if (cleanModel !== oldModel) {
|
|
53
|
+
if (oldModel != null) {
|
|
54
|
+
onItemSelectionToggle(event, oldModel, false);
|
|
55
|
+
}
|
|
56
|
+
if (cleanModel != null) {
|
|
57
|
+
onItemSelectionToggle(event, cleanModel, true);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (selectedItems === undefined) {
|
|
62
|
+
this.store.set('selectedItems', cleanModel);
|
|
63
|
+
}
|
|
64
|
+
onSelectedItemsChange?.(event, cleanModel);
|
|
65
|
+
};
|
|
66
|
+
selectRange = (event, [start, end]) => {
|
|
67
|
+
const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(this.store.state);
|
|
68
|
+
if (!isMultiSelectEnabled) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
let newSelectedItems = selectionSelectors.selectedItems(this.store.state).slice();
|
|
72
|
+
|
|
73
|
+
// If the last selection was a range selection,
|
|
74
|
+
// remove the items that were part of the last range from the model
|
|
75
|
+
if (Object.keys(this.lastSelectedRange).length > 0) {
|
|
76
|
+
newSelectedItems = newSelectedItems.filter(id => !this.lastSelectedRange[id]);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Add to the model the items that are part of the new range and not already part of the model.
|
|
80
|
+
const selectedItemsLookup = getLookupFromArray(newSelectedItems);
|
|
81
|
+
const range = getNonDisabledItemsInRange(this.store.state, start, end).filter(id => selectionSelectors.isItemSelectable(this.store.state, id));
|
|
82
|
+
const itemsToAddToModel = range.filter(id => !selectedItemsLookup[id]);
|
|
83
|
+
newSelectedItems = newSelectedItems.concat(itemsToAddToModel);
|
|
84
|
+
this.setSelectedItems(event, newSelectedItems);
|
|
85
|
+
this.lastSelectedRange = getLookupFromArray(range);
|
|
86
|
+
};
|
|
87
|
+
buildPublicAPI = () => {
|
|
88
|
+
return {
|
|
89
|
+
setItemSelection: this.setItemSelection
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Select or deselect an item.
|
|
95
|
+
* @param {object} parameters The parameters of the method.
|
|
96
|
+
* @param {TreeViewItemId} parameters.itemId The id of the item to select or deselect.
|
|
97
|
+
* @param {React.SyntheticEvent} parameters.event The DOM event that triggered the change.
|
|
98
|
+
* @param {boolean} parameters.keepExistingSelection If `true`, the other already selected items will remain selected, otherwise, they will be deselected. This parameter is only relevant when `multiSelect` is `true`
|
|
99
|
+
* @param {boolean | undefined} parameters.shouldBeSelected If `true` the item will be selected. If `false` the item will be deselected. If not defined, the item's selection status will be toggled.
|
|
100
|
+
*/
|
|
101
|
+
setItemSelection = ({
|
|
102
|
+
itemId,
|
|
103
|
+
event = null,
|
|
104
|
+
keepExistingSelection = false,
|
|
105
|
+
shouldBeSelected
|
|
106
|
+
}) => {
|
|
107
|
+
if (!selectionSelectors.enabled(this.store.state)) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
let newSelected;
|
|
111
|
+
const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(this.store.state);
|
|
112
|
+
if (keepExistingSelection) {
|
|
113
|
+
const oldSelected = selectionSelectors.selectedItems(this.store.state);
|
|
114
|
+
const isSelectedBefore = selectionSelectors.isItemSelected(this.store.state, itemId);
|
|
115
|
+
if (isSelectedBefore && (shouldBeSelected === false || shouldBeSelected == null)) {
|
|
116
|
+
newSelected = oldSelected.filter(id => id !== itemId);
|
|
117
|
+
} else if (!isSelectedBefore && (shouldBeSelected === true || shouldBeSelected == null)) {
|
|
118
|
+
newSelected = [itemId].concat(oldSelected);
|
|
119
|
+
} else {
|
|
120
|
+
newSelected = oldSelected;
|
|
121
|
+
}
|
|
122
|
+
} else {
|
|
123
|
+
// eslint-disable-next-line no-lonely-if
|
|
124
|
+
if (shouldBeSelected === false || shouldBeSelected == null && selectionSelectors.isItemSelected(this.store.state, itemId)) {
|
|
125
|
+
newSelected = isMultiSelectEnabled ? [] : null;
|
|
126
|
+
} else {
|
|
127
|
+
newSelected = isMultiSelectEnabled ? [itemId] : itemId;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
this.setSelectedItems(event, newSelected,
|
|
131
|
+
// If shouldBeSelected === selectionSelectors.isItemSelected(store, itemId), we still want to propagate the select.
|
|
132
|
+
// This is useful when the element is in an indeterminate state.
|
|
133
|
+
[itemId]);
|
|
134
|
+
this.lastSelectedItem = itemId;
|
|
135
|
+
this.lastSelectedRange = {};
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Select all the navigable items in the tree.
|
|
140
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
141
|
+
*/
|
|
142
|
+
selectAllNavigableItems = event => {
|
|
143
|
+
const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(this.store.state);
|
|
144
|
+
if (!isMultiSelectEnabled) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const navigableItems = getAllNavigableItems(this.store.state);
|
|
148
|
+
this.setSelectedItems(event, navigableItems);
|
|
149
|
+
this.lastSelectedRange = getLookupFromArray(navigableItems);
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Expand the current selection range up to the given item.
|
|
154
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
155
|
+
* @param {TreeViewItemId} itemId The id of the item to expand the selection to.
|
|
156
|
+
*/
|
|
157
|
+
expandSelectionRange = (event, itemId) => {
|
|
158
|
+
if (this.lastSelectedItem != null) {
|
|
159
|
+
const [start, end] = findOrderInTremauxTree(this.store.state, itemId, this.lastSelectedItem);
|
|
160
|
+
this.selectRange(event, [start, end]);
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Expand the current selection range from the first navigable item to the given item.
|
|
166
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
167
|
+
* @param {TreeViewItemId} itemId The id of the item up to which the selection range should be expanded.
|
|
168
|
+
*/
|
|
169
|
+
selectRangeFromStartToItem = (event, itemId) => {
|
|
170
|
+
this.selectRange(event, [getFirstNavigableItem(this.store.state), itemId]);
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Expand the current selection range from the given item to the last navigable item.
|
|
175
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
176
|
+
* @param {TreeViewItemId} itemId The id of the item from which the selection range should be expanded.
|
|
177
|
+
*/
|
|
178
|
+
selectRangeFromItemToEnd = (event, itemId) => {
|
|
179
|
+
this.selectRange(event, [itemId, getLastNavigableItem(this.store.state)]);
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Update the selection when navigating with ArrowUp / ArrowDown keys.
|
|
184
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
185
|
+
* @param {TreeViewItemId} currentItemId The id of the active item before the keyboard navigation.
|
|
186
|
+
* @param {TreeViewItemId} nextItemId The id of the active item after the keyboard navigation.
|
|
187
|
+
*/
|
|
188
|
+
selectItemFromArrowNavigation = (event, currentItem, nextItem) => {
|
|
189
|
+
const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(this.store.state);
|
|
190
|
+
if (!isMultiSelectEnabled) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
let newSelectedItems = selectionSelectors.selectedItems(this.store.state).slice();
|
|
194
|
+
if (Object.keys(this.lastSelectedRange).length === 0) {
|
|
195
|
+
newSelectedItems.push(nextItem);
|
|
196
|
+
this.lastSelectedRange = {
|
|
197
|
+
[currentItem]: true,
|
|
198
|
+
[nextItem]: true
|
|
199
|
+
};
|
|
200
|
+
} else {
|
|
201
|
+
if (!this.lastSelectedRange[currentItem]) {
|
|
202
|
+
this.lastSelectedRange = {};
|
|
203
|
+
}
|
|
204
|
+
if (this.lastSelectedRange[nextItem]) {
|
|
205
|
+
newSelectedItems = newSelectedItems.filter(id => id !== currentItem);
|
|
206
|
+
delete this.lastSelectedRange[currentItem];
|
|
207
|
+
} else {
|
|
208
|
+
newSelectedItems.push(nextItem);
|
|
209
|
+
this.lastSelectedRange[nextItem] = true;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
this.setSelectedItems(event, newSelectedItems);
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
function propagateSelection({
|
|
216
|
+
store,
|
|
217
|
+
selectionPropagation,
|
|
218
|
+
newModel,
|
|
219
|
+
oldModel,
|
|
220
|
+
additionalItemsToPropagate
|
|
221
|
+
}) {
|
|
222
|
+
if (!selectionPropagation.descendants && !selectionPropagation.parents) {
|
|
223
|
+
return newModel;
|
|
224
|
+
}
|
|
225
|
+
let shouldRegenerateModel = false;
|
|
226
|
+
const newModelLookup = getLookupFromArray(newModel);
|
|
227
|
+
const changes = getAddedAndRemovedItems({
|
|
228
|
+
store,
|
|
229
|
+
newModel,
|
|
230
|
+
oldModel
|
|
231
|
+
});
|
|
232
|
+
additionalItemsToPropagate?.forEach(itemId => {
|
|
233
|
+
if (newModelLookup[itemId]) {
|
|
234
|
+
if (!changes.added.includes(itemId)) {
|
|
235
|
+
changes.added.push(itemId);
|
|
236
|
+
}
|
|
237
|
+
} else if (!changes.removed.includes(itemId)) {
|
|
238
|
+
changes.removed.push(itemId);
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
changes.added.forEach(addedItemId => {
|
|
242
|
+
if (selectionPropagation.descendants) {
|
|
243
|
+
const selectDescendants = itemId => {
|
|
244
|
+
if (itemId !== addedItemId) {
|
|
245
|
+
shouldRegenerateModel = true;
|
|
246
|
+
newModelLookup[itemId] = true;
|
|
247
|
+
}
|
|
248
|
+
itemsSelectors.itemOrderedChildrenIds(store.state, itemId).forEach(selectDescendants);
|
|
249
|
+
};
|
|
250
|
+
selectDescendants(addedItemId);
|
|
251
|
+
}
|
|
252
|
+
if (selectionPropagation.parents) {
|
|
253
|
+
const checkAllDescendantsSelected = itemId => {
|
|
254
|
+
if (!newModelLookup[itemId]) {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
const children = itemsSelectors.itemOrderedChildrenIds(store.state, itemId);
|
|
258
|
+
return children.every(checkAllDescendantsSelected);
|
|
259
|
+
};
|
|
260
|
+
const selectParents = itemId => {
|
|
261
|
+
const parentId = itemsSelectors.itemParentId(store.state, itemId);
|
|
262
|
+
if (parentId == null) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
const siblings = itemsSelectors.itemOrderedChildrenIds(store.state, parentId);
|
|
266
|
+
if (siblings.every(checkAllDescendantsSelected)) {
|
|
267
|
+
shouldRegenerateModel = true;
|
|
268
|
+
newModelLookup[parentId] = true;
|
|
269
|
+
selectParents(parentId);
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
selectParents(addedItemId);
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
changes.removed.forEach(removedItemId => {
|
|
276
|
+
if (selectionPropagation.parents) {
|
|
277
|
+
let parentId = itemsSelectors.itemParentId(store.state, removedItemId);
|
|
278
|
+
while (parentId != null) {
|
|
279
|
+
if (newModelLookup[parentId]) {
|
|
280
|
+
shouldRegenerateModel = true;
|
|
281
|
+
delete newModelLookup[parentId];
|
|
282
|
+
}
|
|
283
|
+
parentId = itemsSelectors.itemParentId(store.state, parentId);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (selectionPropagation.descendants) {
|
|
287
|
+
const deSelectDescendants = itemId => {
|
|
288
|
+
if (itemId !== removedItemId) {
|
|
289
|
+
shouldRegenerateModel = true;
|
|
290
|
+
delete newModelLookup[itemId];
|
|
291
|
+
}
|
|
292
|
+
itemsSelectors.itemOrderedChildrenIds(store.state, itemId).forEach(deSelectDescendants);
|
|
293
|
+
};
|
|
294
|
+
deSelectDescendants(removedItemId);
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
return shouldRegenerateModel ? Object.keys(newModelLookup) : newModel;
|
|
298
|
+
}
|
|
299
|
+
function getAddedAndRemovedItems({
|
|
300
|
+
store,
|
|
301
|
+
oldModel,
|
|
302
|
+
newModel
|
|
303
|
+
}) {
|
|
304
|
+
const newModelMap = new Map();
|
|
305
|
+
newModel.forEach(id => {
|
|
306
|
+
newModelMap.set(id, true);
|
|
307
|
+
});
|
|
308
|
+
return {
|
|
309
|
+
added: newModel.filter(itemId => !selectionSelectors.isItemSelected(store.state, itemId)),
|
|
310
|
+
removed: oldModel.filter(itemId => !newModelMap.has(itemId))
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
export function getLookupFromArray(array) {
|
|
314
|
+
const lookup = {};
|
|
315
|
+
array.forEach(itemId => {
|
|
316
|
+
lookup[itemId] = true;
|
|
317
|
+
});
|
|
318
|
+
return lookup;
|
|
319
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { TreeViewCancellableEventHandler } from "../../../models/index.js";
|
|
3
3
|
import { TreeViewItemPlugin } from "../../models/index.js";
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const useSelectionItemPlugin: TreeViewItemPlugin;
|
|
5
5
|
interface UseTreeItemRootSlotPropsFromSelection {
|
|
6
6
|
'aria-checked': React.AriaAttributes['aria-checked'];
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createSelector, useStore } from '@mui/x-internals/store';
|
|
2
2
|
import { useTreeViewContext } from "../../TreeViewProvider/index.js";
|
|
3
|
-
import { itemsSelectors } from "../
|
|
4
|
-
import { selectionSelectors } from "./
|
|
3
|
+
import { itemsSelectors } from "../items/selectors.js";
|
|
4
|
+
import { selectionSelectors } from "./selectors.js";
|
|
5
5
|
const selectorCheckboxSelectionStatus = createSelector((state, itemId) => {
|
|
6
6
|
if (selectionSelectors.isItemSelected(state, itemId)) {
|
|
7
7
|
return 'checked';
|
|
@@ -34,7 +34,7 @@ const selectorCheckboxSelectionStatus = createSelector((state, itemId) => {
|
|
|
34
34
|
}
|
|
35
35
|
return 'empty';
|
|
36
36
|
});
|
|
37
|
-
export const
|
|
37
|
+
export const useSelectionItemPlugin = ({
|
|
38
38
|
props
|
|
39
39
|
}) => {
|
|
40
40
|
const {
|
|
@@ -44,9 +44,9 @@ export const useTreeViewSelectionItemPlugin = ({
|
|
|
44
44
|
store
|
|
45
45
|
} = useTreeViewContext();
|
|
46
46
|
const isCheckboxSelectionEnabled = useStore(store, selectionSelectors.isCheckboxSelectionEnabled);
|
|
47
|
-
const
|
|
47
|
+
const isFeatureEnabledForItem = useStore(store, selectionSelectors.isFeatureEnabledForItem, itemId);
|
|
48
|
+
const canItemBeSelected = useStore(store, selectionSelectors.canItemBeSelected, itemId);
|
|
48
49
|
const selectionStatus = useStore(store, selectorCheckboxSelectionStatus, itemId);
|
|
49
|
-
const isSelectionEnabledForItem = useStore(store, selectionSelectors.canItemBeSelected, itemId);
|
|
50
50
|
return {
|
|
51
51
|
propsEnhancers: {
|
|
52
52
|
root: () => {
|
|
@@ -57,7 +57,7 @@ export const useTreeViewSelectionItemPlugin = ({
|
|
|
57
57
|
ariaChecked = true;
|
|
58
58
|
} else if (selectionStatus === 'indeterminate') {
|
|
59
59
|
ariaChecked = 'mixed';
|
|
60
|
-
} else if (!
|
|
60
|
+
} else if (!canItemBeSelected) {
|
|
61
61
|
// - if the tree contains nodes that are not selectable, aria-checked is not present on those nodes.
|
|
62
62
|
ariaChecked = undefined;
|
|
63
63
|
} else {
|
|
@@ -85,8 +85,8 @@ export const useTreeViewSelectionItemPlugin = ({
|
|
|
85
85
|
return {
|
|
86
86
|
tabIndex: -1,
|
|
87
87
|
onChange: handleChange,
|
|
88
|
-
visible: isCheckboxSelectionEnabled,
|
|
89
|
-
disabled: !
|
|
88
|
+
visible: isCheckboxSelectionEnabled && isFeatureEnabledForItem,
|
|
89
|
+
disabled: !canItemBeSelected,
|
|
90
90
|
checked: selectionStatus === 'checked',
|
|
91
91
|
indeterminate: selectionStatus === 'indeterminate'
|
|
92
92
|
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { MinimalTreeViewState } from "../../MinimalTreeViewStore/index.js";
|
|
2
|
+
export declare const selectionSelectors: {
|
|
3
|
+
/**
|
|
4
|
+
* Gets the selected items as provided to the component.
|
|
5
|
+
*/
|
|
6
|
+
selectedItemsRaw: (state: MinimalTreeViewState<any, any>) => string | readonly string[] | readonly string[] | null;
|
|
7
|
+
/**
|
|
8
|
+
* Gets the selected items as an array.
|
|
9
|
+
*/
|
|
10
|
+
selectedItems: (args_0: MinimalTreeViewState<any, any>) => any[];
|
|
11
|
+
/**
|
|
12
|
+
* Gets the selected items as a Map.
|
|
13
|
+
*/
|
|
14
|
+
selectedItemsMap: (args_0: MinimalTreeViewState<any, any>) => Map<string, true>;
|
|
15
|
+
/**
|
|
16
|
+
* Checks whether selection is enabled.
|
|
17
|
+
*/
|
|
18
|
+
enabled: (state: MinimalTreeViewState<any, any>) => boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Checks whether multi selection is enabled.
|
|
21
|
+
*/
|
|
22
|
+
isMultiSelectEnabled: (state: MinimalTreeViewState<any, any>) => boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Checks whether checkbox selection is enabled.
|
|
25
|
+
*/
|
|
26
|
+
isCheckboxSelectionEnabled: (state: MinimalTreeViewState<any, any>) => boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Gets the selection propagation rules.
|
|
29
|
+
*/
|
|
30
|
+
propagationRules: (state: MinimalTreeViewState<any, any>) => import("../../../index.js").TreeViewSelectionPropagation;
|
|
31
|
+
/**
|
|
32
|
+
* Checks whether an item is selected.
|
|
33
|
+
*/
|
|
34
|
+
isItemSelected: (args_0: MinimalTreeViewState<any, any>, itemId: string) => boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Checks whether the selection feature is enabled for an item.
|
|
37
|
+
* Returns `true` when selection is enabled on the Tree View and the item is selectable (even if the item is disabled).
|
|
38
|
+
*/
|
|
39
|
+
isFeatureEnabledForItem: (args_0: MinimalTreeViewState<any, any>, _itemId: string) => boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Checks whether an item can be selected (if selection is enabled, if the item is not disabled, and if the item is selectable).
|
|
42
|
+
*/
|
|
43
|
+
canItemBeSelected: (args_0: MinimalTreeViewState<any, any>, _itemId: string) => boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Checks whether an item is selectable based on the `isItemSelectionDisabled` prop.
|
|
46
|
+
*/
|
|
47
|
+
isItemSelectable: (state: MinimalTreeViewState<any, any>, itemId: string) => boolean;
|
|
48
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createSelector, createSelectorMemoized } from '@mui/x-internals/store';
|
|
2
|
-
import { itemsSelectors } from "../
|
|
3
|
-
const selectedItemsSelector = createSelectorMemoized(state => state.
|
|
2
|
+
import { itemsSelectors } from "../items/selectors.js";
|
|
3
|
+
const selectedItemsSelector = createSelectorMemoized(state => state.selectedItems, selectedItemsRaw => {
|
|
4
4
|
if (Array.isArray(selectedItemsRaw)) {
|
|
5
5
|
return selectedItemsRaw;
|
|
6
6
|
}
|
|
@@ -16,11 +16,12 @@ const selectedItemsMapSelector = createSelectorMemoized(selectedItemsSelector, s
|
|
|
16
16
|
});
|
|
17
17
|
return selectedItemsMap;
|
|
18
18
|
});
|
|
19
|
+
const isItemSelectableSelector = createSelector((state, itemId) => state.itemMetaLookup[itemId]?.selectable ?? true);
|
|
19
20
|
export const selectionSelectors = {
|
|
20
21
|
/**
|
|
21
22
|
* Gets the selected items as provided to the component.
|
|
22
23
|
*/
|
|
23
|
-
selectedItemsRaw: createSelector(state => state.
|
|
24
|
+
selectedItemsRaw: createSelector(state => state.selectedItems),
|
|
24
25
|
/**
|
|
25
26
|
* Gets the selected items as an array.
|
|
26
27
|
*/
|
|
@@ -32,25 +33,34 @@ export const selectionSelectors = {
|
|
|
32
33
|
/**
|
|
33
34
|
* Checks whether selection is enabled.
|
|
34
35
|
*/
|
|
35
|
-
enabled: createSelector(state => state.
|
|
36
|
+
enabled: createSelector(state => !state.disableSelection),
|
|
36
37
|
/**
|
|
37
38
|
* Checks whether multi selection is enabled.
|
|
38
39
|
*/
|
|
39
|
-
isMultiSelectEnabled: createSelector(state => state.
|
|
40
|
+
isMultiSelectEnabled: createSelector(state => state.multiSelect),
|
|
40
41
|
/**
|
|
41
42
|
* Checks whether checkbox selection is enabled.
|
|
42
43
|
*/
|
|
43
|
-
isCheckboxSelectionEnabled: createSelector(state => state.
|
|
44
|
+
isCheckboxSelectionEnabled: createSelector(state => state.checkboxSelection),
|
|
44
45
|
/**
|
|
45
46
|
* Gets the selection propagation rules.
|
|
46
47
|
*/
|
|
47
|
-
propagationRules: createSelector(state => state.
|
|
48
|
+
propagationRules: createSelector(state => state.selectionPropagation),
|
|
48
49
|
/**
|
|
49
50
|
* Checks whether an item is selected.
|
|
50
51
|
*/
|
|
51
52
|
isItemSelected: createSelector(selectedItemsMapSelector, (selectedItemsMap, itemId) => selectedItemsMap.has(itemId)),
|
|
52
53
|
/**
|
|
53
|
-
* Checks whether
|
|
54
|
+
* Checks whether the selection feature is enabled for an item.
|
|
55
|
+
* Returns `true` when selection is enabled on the Tree View and the item is selectable (even if the item is disabled).
|
|
54
56
|
*/
|
|
55
|
-
|
|
57
|
+
isFeatureEnabledForItem: createSelector(isItemSelectableSelector, state => !state.disableSelection, (isItemSelectable, isSelectionEnabled, _itemId) => isSelectionEnabled && isItemSelectable),
|
|
58
|
+
/**
|
|
59
|
+
* Checks whether an item can be selected (if selection is enabled, if the item is not disabled, and if the item is selectable).
|
|
60
|
+
*/
|
|
61
|
+
canItemBeSelected: createSelector(itemsSelectors.isItemDisabled, isItemSelectableSelector, state => !state.disableSelection, (isItemDisabled, isItemSelectable, isSelectionEnabled, _itemId) => isSelectionEnabled && !isItemDisabled && isItemSelectable),
|
|
62
|
+
/**
|
|
63
|
+
* Checks whether an item is selectable based on the `isItemSelectionDisabled` prop.
|
|
64
|
+
*/
|
|
65
|
+
isItemSelectable: isItemSelectableSelector
|
|
56
66
|
};
|