mui-nav-menu
Version:
Navigation menu component based on material ui
38 lines (37 loc) • 2.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const jsx_runtime_1 = require("react/jsx-runtime");
const material_1 = require("@mui/material");
const classnames_1 = tslib_1.__importDefault(require("classnames"));
const react_1 = require("react");
const ListMenuItem_1 = tslib_1.__importDefault(require("./ListMenuItem"));
const MenuContext_1 = require("./contexts/MenuContext");
const PathContext_1 = require("./contexts/PathContext");
const MenuItem = (0, react_1.forwardRef)((props, ref) => {
const { id, children, type = "item", onClick, className: classNameProp, ...rest } = props;
const { openIds = [], selectedIds, checkSelectedFn, mode, collapsed, inlineIndent, onSelectedChange, onItemClick, focusedNodeId, defaultCollapseIcon, defaultExpandIcon, defaultPopupRootIcon, defaultPopupSubIcon, prefixCls, } = (0, MenuContext_1.useMenuContext)();
const connectedIdPath = (0, PathContext_1.useConnectedPath)(id);
const subIsOpen = (0, react_1.useMemo)(() => {
return openIds.includes(id);
}, [openIds]);
const isSelected = (0, react_1.useMemo)(() => {
if (checkSelectedFn) {
return checkSelectedFn(props);
}
return selectedIds ? selectedIds.includes(id) : false;
}, [selectedIds, checkSelectedFn]);
const handleItemClick = (0, material_1.useEventCallback)((event) => {
if (event.type !== "click") {
return;
}
if (typeof rest.link == "object" && rest.link.url) {
return;
}
onSelectedChange(connectedIdPath, true);
onClick && onClick(event);
onItemClick && onItemClick(id, connectedIdPath, event);
});
return ((0, jsx_runtime_1.jsx)(ListMenuItem_1.default, { id: id, mode: mode, isFocused: focusedNodeId == id, hasChildren: false, inlineIndent: inlineIndent, collapsed: collapsed, subIsOpen: subIsOpen, onClick: handleItemClick, isSelected: isSelected, className: (0, classnames_1.default)(prefixCls + "ListItem-root", classNameProp), connectedIdPath: connectedIdPath, expandIcon: defaultExpandIcon, collapseIcon: defaultCollapseIcon, popupRootIcon: defaultPopupRootIcon, popupSubIcon: defaultPopupSubIcon, ...rest }));
});
exports.default = (0, react_1.memo)(MenuItem);