UNPKG

mui-nav-menu

Version:

Navigation menu component based on material ui

38 lines (37 loc) 2.3 kB
"use strict"; 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);