@hitachivantara/uikit-react-core
Version:
UI Kit Core React components.
43 lines (42 loc) • 1.73 kB
JavaScript
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 };