dipal-x-tree/legacy/TreeItem/useTreeItem.js
2024-06-21 19:49:13 +03:00

58 lines
2.0 KiB
JavaScript

import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
export function useTreeItem(nodeId) {
var _useTreeViewContext = useTreeViewContext(),
instance = _useTreeViewContext.instance,
multiSelect = _useTreeViewContext.multiSelect;
var expandable = instance ? instance.isNodeExpandable(nodeId) : false;
var expanded = instance ? instance.isNodeExpanded(nodeId) : false;
var focused = instance ? instance.isNodeFocused(nodeId) : false;
var selected = instance ? instance.isNodeSelected(nodeId) : false;
var disabled = instance ? instance.isNodeDisabled(nodeId) : false;
var handleExpansion = function handleExpansion(event) {
if (instance && !disabled) {
if (!focused) {
instance.focusNode(event, nodeId);
}
var multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
// If already expanded and trying to toggle selection don't close
if (expandable && !(multiple && instance.isNodeExpanded(nodeId))) {
instance.toggleNodeExpansion(event, nodeId);
}
}
};
var handleSelection = function handleSelection(event) {
if (instance && !disabled) {
if (!focused) {
instance.focusNode(event, nodeId);
}
var multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
if (multiple) {
if (event.shiftKey) {
instance.selectRange(event, {
end: nodeId
});
} else {
instance.selectNode(event, nodeId, true);
}
} else {
instance.selectNode(event, nodeId);
}
}
};
var preventSelection = function preventSelection(event) {
if (event.shiftKey || event.ctrlKey || event.metaKey || disabled) {
// Prevent text selection
event.preventDefault();
}
};
return {
disabled: disabled,
expanded: expanded,
selected: selected,
focused: focused,
handleExpansion: handleExpansion,
handleSelection: handleSelection,
preventSelection: preventSelection
};
}