@redocly/theme
Version:
Shared UI components lib
25 lines • 1.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useMenuItemExpanded = useMenuItemExpanded;
const react_1 = require("react");
function isItemExpanded(item) {
return (item.active || item.hasActiveSubItem || item.expanded === 'true' || item.expanded === 'always');
}
function useMenuItemExpanded(item) {
const [isExpanded, setIsExpanded] = (0, react_1.useState)(isItemExpanded(item));
// we keep separate controlled value here so controlled updates have the same lifecycle as uncontrolled (via useEffect)
// it's important for transitions
const [controlledValue, setControlledValue] = (0, react_1.useState)(isItemExpanded(item));
(0, react_1.useEffect)(() => {
setIsExpanded(controlledValue);
}, [controlledValue]);
(0, react_1.useEffect)(() => {
const newValue = isItemExpanded(item);
setIsExpanded(newValue);
setControlledValue(newValue);
// we have different sensitivity to changes for items from openapi-docs sidebar and for items from portal sidebar
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [!item.modified ? item : item.active, item.hasActiveSubItem, item.expanded]);
return [isExpanded, setControlledValue];
}
//# sourceMappingURL=use-menu-item-expanded.js.map