@material-ui/lab
Version:
Material-UI Lab - Incubator for Material-UI React components.
87 lines (73 loc) • 2.18 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useTreeItem;
var React = _interopRequireWildcard(require("react"));
var _TreeViewContext = _interopRequireDefault(require("../TreeView/TreeViewContext"));
function useTreeItem(nodeId) {
const {
focus,
isExpanded,
isExpandable,
isFocused,
isDisabled,
isSelected,
multiSelect,
selectNode,
selectRange,
toggleExpansion
} = React.useContext(_TreeViewContext.default);
const expandable = isExpandable ? isExpandable(nodeId) : false;
const expanded = isExpanded ? isExpanded(nodeId) : false;
const focused = isFocused ? isFocused(nodeId) : false;
const disabled = isDisabled ? isDisabled(nodeId) : false;
const selected = isSelected ? isSelected(nodeId) : false;
const handleExpansion = event => {
if (!disabled) {
if (!focused) {
focus(event, nodeId);
}
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey); // If already expanded and trying to toggle selection don't close
if (expandable && !(multiple && isExpanded(nodeId))) {
toggleExpansion(event, nodeId);
}
}
};
const handleSelection = event => {
if (!disabled) {
if (!focused) {
focus(event, nodeId);
}
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
if (multiple) {
if (event.shiftKey) {
selectRange(event, {
end: nodeId
});
} else {
selectNode(event, nodeId, true);
}
} else {
selectNode(event, nodeId);
}
}
};
const preventSelection = event => {
if (event.shiftKey || event.ctrlKey || event.metaKey || disabled) {
// Prevent text selection
event.preventDefault();
}
};
return {
disabled,
expanded,
selected,
focused,
handleExpansion,
handleSelection,
preventSelection
};
}