UNPKG

@mui/x-tree-view

Version:

The community edition of the MUI X Tree View components.

60 lines (55 loc) 3.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.selectorIsItemTheDefaultFocusableItem = exports.selectorIsItemFocused = exports.selectorFocusedItemId = exports.selectorDefaultFocusableItemId = void 0; var _selectors = require("../../utils/selectors"); var _useTreeViewSelection = require("../useTreeViewSelection/useTreeViewSelection.selectors"); var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors"); var _useTreeViewItems2 = require("../useTreeViewItems/useTreeViewItems.utils"); var _useTreeViewExpansion = require("../useTreeViewExpansion/useTreeViewExpansion.selectors"); const selectorTreeViewFocusState = state => state.focus; /** * Get the item that should be sequentially focusable (usually with the Tab key). * At any point in time, there is a single item that can be sequentially focused in the Tree View. * This item is the first selected item (that is both visible and navigable), if any, or the first navigable item if no item is selected. * @param {TreeViewState<[UseTreeViewFocusSignature]>} state The state of the tree view. * @returns {TreeViewItemId | null} The id of the item that should be sequentially focusable. */ const selectorDefaultFocusableItemId = exports.selectorDefaultFocusableItemId = (0, _selectors.createSelector)([_useTreeViewSelection.selectorSelectionModelArray, _useTreeViewExpansion.selectorExpandedItemsMap, _useTreeViewItems.selectorItemMetaLookup, _useTreeViewItems.selectorDisabledItemFocusable, state => (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(state, null)], (selectedItems, expandedItemsMap, itemMetaLookup, disabledItemsFocusable, orderedRootItemIds) => { const firstSelectedItem = selectedItems.find(itemId => { if (!disabledItemsFocusable && (0, _useTreeViewItems2.isItemDisabled)(itemMetaLookup, itemId)) { return false; } const itemMeta = itemMetaLookup[itemId]; return itemMeta && (itemMeta.parentId == null || expandedItemsMap.has(itemMeta.parentId)); }); if (firstSelectedItem != null) { return firstSelectedItem; } const firstNavigableItem = orderedRootItemIds.find(itemId => disabledItemsFocusable || !(0, _useTreeViewItems2.isItemDisabled)(itemMetaLookup, itemId)); if (firstNavigableItem != null) { return firstNavigableItem; } return null; }); /** * Check if an item is the default focusable item. * @param {TreeViewState<[UseTreeViewFocusSignature]>} state The state of the tree view. * @param {TreeViewItemId} itemId The id of the item to check. * @returns {boolean} `true` if the item is the default focusable item, `false` otherwise. */ const selectorIsItemTheDefaultFocusableItem = exports.selectorIsItemTheDefaultFocusableItem = (0, _selectors.createSelector)([selectorDefaultFocusableItemId, (_, itemId) => itemId], (defaultFocusableItemId, itemId) => defaultFocusableItemId === itemId); /** * Get the id of the item that is currently focused. * @param {TreeViewState<[UseTreeViewFocusSignature]>} state The state of the tree view. * @returns {TreeViewItemId | null} The id of the item that is currently focused. */ const selectorFocusedItemId = exports.selectorFocusedItemId = (0, _selectors.createSelector)(selectorTreeViewFocusState, focus => focus.focusedItemId); /** * Check if an item is focused. * @param {TreeViewState<[UseTreeViewFocusSignature]>} state The state of the tree view. * @param {TreeViewItemId} itemId The id of the item to check. * @returns {boolean} `true` if the item is focused, `false` otherwise. */ const selectorIsItemFocused = exports.selectorIsItemFocused = (0, _selectors.createSelector)([selectorFocusedItemId, (_, itemId) => itemId], (focusedItemId, itemId) => focusedItemId === itemId);