UNPKG

@trellixio/roaster-coffee

Version:
145 lines (139 loc) 6.48 kB
'use strict'; var React = require('react'); var Section = require('./components/Section.js'); var index = require('../../utils/classNames/index.js'); require('@floating-ui/react'); var Button = require('../Button/Button.js'); var Menu = require('./components/Menu.js'); function _interopNamespaceDefault(e) { var n = Object.create(null); if (e) { for (var k in e) { n[k] = e[k]; } } n.default = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React); const Sidebar = React__namespace.forwardRef((props, ref) => { const [visible, setVisible] = React__namespace.useState(false); const { mobileHeader, header, footer, activePath, onMenuItemClick, items, className } = props; const [activeSubMenu, setActiveSubMenu] = React__namespace.useState({ expanded: true, pathname: activePath }); React__namespace.useEffect(() => { setActiveSubMenu((currentSubMenu) => ({ expanded: currentSubMenu.expanded, pathname: activePath })); }, [activePath]); function handleClick(itemId) { onMenuItemClick?.({ itemId }); } function handleSubMenuExpand(item) { if (activeSubMenu.expanded) { const currentItemOrSubMenuItemIsOpen = ( // either the parent item is expanded already item.pathname === activeSubMenu.pathname || // or one of its expandable children is selected item.subMenu && item.subMenu.some((subMenuItem) => subMenuItem.pathname === activeSubMenu.pathname) || false ); setActiveSubMenu({ expanded: item.subMenu && item.subMenu.length > 0 ? !currentItemOrSubMenuItemIsOpen : false, pathname: item.pathname }); } else { setActiveSubMenu({ expanded: !!(item.subMenu && item.subMenu.length > 0), pathname: item.pathname }); } } function getMenuItemsProps(item) { const { pathname, subMenu, icon, label, ...rest } = item; const isItemSelected = pathname === activeSubMenu.pathname; const isExpanded = ( // item is expanded and activeSubMenu.expanded && // either the current expandable section is selected (isItemSelected || // or some item in the expandable section of the current item is selected or active subMenu && subMenu.some((subMenuItem) => subMenuItem.pathname === activeSubMenu.pathname) || false) ); return { isExpanded, pathname, subMenu, icon, label, otherProps: rest }; } return /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement("section", { className: "appnav-opener-mobile" }, /* @__PURE__ */ React__namespace.createElement(Button.Button, { variant: "", isIconButton: true, onClick: () => setVisible(!visible) }, /* @__PURE__ */ React__namespace.createElement("i", { className: "fa-regular fa-bars" })), mobileHeader), /* @__PURE__ */ React__namespace.createElement("aside", { className: index.classNames("appnav-container", className, { visible }), ref }, /* @__PURE__ */ React__namespace.createElement("div", { className: "background-overlay", onClick: () => setVisible(!visible) }), /* @__PURE__ */ React__namespace.createElement("nav", { className: "appnav" }, /* @__PURE__ */ React__namespace.createElement(Section.Section, { className: "header" }, header), /* @__PURE__ */ React__namespace.createElement(Section.Section, null, items.map((item) => { if (Array.isArray(item)) { return /* @__PURE__ */ React__namespace.createElement(Menu.Menu, null, item.map((menuItem) => { const { isExpanded: isExpanded2, pathname: pathname2, subMenu: subMenu2, icon: icon2, label: label2, otherProps: otherProps2 } = getMenuItemsProps(menuItem); return /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement( Menu.Menu.Item, { key: label2, icon: icon2, active: isExpanded2, onClick: () => { handleClick(pathname2); handleSubMenuExpand(menuItem); }, ...otherProps2 }, label2 ), subMenu2 && subMenu2.length > 0 && isExpanded2 && /* @__PURE__ */ React__namespace.createElement(Menu.Menu.Item, { component: React__namespace.Fragment }, /* @__PURE__ */ React__namespace.createElement(Menu.Menu.SubMenu, { expanded: isExpanded2 }, subMenu2.map((subMenuItem) => { const { icon: subMenuIcon, pathname: subMenuItemPathname, label: subMenuItemLabel, ...subMenuItemRest } = subMenuItem; return /* @__PURE__ */ React__namespace.createElement( Menu.Menu.Item, { icon: subMenuIcon, key: subMenuItemPathname, onClick: () => handleClick(subMenuItemPathname), ...subMenuItemRest }, subMenuItemLabel ); })))); })); } const { isExpanded, pathname, subMenu, icon, label, otherProps } = getMenuItemsProps(item); return /* @__PURE__ */ React__namespace.createElement(Menu.Menu, null, /* @__PURE__ */ React__namespace.createElement( Menu.Menu.Item, { key: label, icon, active: isExpanded, onClick: () => { handleClick(pathname); handleSubMenuExpand(item); }, ...otherProps }, label ), subMenu && subMenu.length > 0 && isExpanded && /* @__PURE__ */ React__namespace.createElement(Menu.Menu.Item, { component: React__namespace.Fragment }, /* @__PURE__ */ React__namespace.createElement(Menu.Menu.SubMenu, { expanded: isExpanded }, subMenu.map((subMenuItem) => { const { icon: subMenuIcon, pathname: subMenuItemPathname, label: subMenuItemLabel, ...subMenuItemRest } = subMenuItem; return /* @__PURE__ */ React__namespace.createElement( Menu.Menu.Item, { icon: subMenuIcon, key: subMenuItemPathname, onClick: () => handleClick(subMenuItemPathname), ...subMenuItemRest }, subMenuItemLabel ); })))); })), /* @__PURE__ */ React__namespace.createElement(Section.Section, { className: "footer" }, footer)))); }); Sidebar.Section = Section.Section; Sidebar.Menu = Menu.Menu; Sidebar.displayName = "Sidebar"; exports.Sidebar = Sidebar; //# sourceMappingURL=Sidebar.js.map