UNPKG

@hitachivantara/uikit-react-core

Version:
43 lines (42 loc) 1.73 kB
import { DescendantContext } from "../internals/DescendantProvider.js"; import { useTreeViewContext } from "../internals/TreeViewProvider.js"; import { useContext } from "react"; //#region src/TreeView/TreeItem/useHvTreeItem.ts function useHvTreeItem(nodeId) { const { instance, multiSelect } = useTreeViewContext(); const { level = 0 } = useContext(DescendantContext); const expandable = instance ? instance.isNodeExpandable(nodeId) : false; const expanded = instance ? instance.isNodeExpanded(nodeId) : false; const focused = instance ? instance.isNodeFocused(nodeId) : false; const selected = instance ? instance.isNodeSelected(nodeId) : false; const disabled = instance ? instance.isNodeDisabled(nodeId) : false; const handleExpansion = (event) => { if (!instance || disabled) return; if (!focused) instance.focusNode(event, nodeId); const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey); if (expandable && !(multiple && instance.isNodeExpanded(nodeId))) instance.toggleNodeExpansion(event, nodeId); }; const handleSelection = (event) => { if (!instance || disabled) return; if (!focused) instance.focusNode(event, nodeId); if (multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey)) if (event.shiftKey) instance.selectRange(event, { end: nodeId }); else instance.selectNode(event, nodeId, true); else instance.selectNode(event, nodeId); }; const preventSelection = (event) => { if (event.shiftKey || event.ctrlKey || event.metaKey || disabled) event.preventDefault(); }; return { instance, level, disabled, expanded, selected, focused, handleExpansion, handleSelection, preventSelection }; } //#endregion export { useHvTreeItem };