@mui/lab
Version:
Laboratory for new MUI modules.
89 lines (74 loc) • 3.21 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useTreeItem;
var React = _interopRequireWildcard(require("react"));
var _TreeViewContext = _interopRequireDefault(require("../TreeView/TreeViewContext"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
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
};
}
;