import { Menu, MenuItem, MenuSection } from '@nrwl/nx-dev/models-menu'; import cx from 'classnames'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { ReactComponentElement, useCallback, useState } from 'react'; export interface SidebarProps { menu: Menu; navIsOpen?: boolean; } export function Sidebar({ menu, navIsOpen, }: SidebarProps): ReactComponentElement { return (
); } function SidebarSection({ section, }: { section: MenuSection; }): ReactComponentElement { return ( <> {section.hideSectionHeader ? null : (

{section.name}

)}
  • {section.itemList.map((item, index) => ( ))}
); } function SidebarSectionItems({ item, }: { item: MenuItem; }): ReactComponentElement { const router = useRouter(); const [collapsed, setCollapsed] = useState(!item.disableCollapsible); const handleCollapseToggle = useCallback(() => { if (!item.disableCollapsible) { setCollapsed(!collapsed); } }, [collapsed, setCollapsed, item]); function withoutAnchors(linkText: string): string { return linkText?.includes('#') ? linkText.substring(0, linkText.indexOf('#')) : linkText; } return ( <>
{item.name} {item.disableCollapsible ? null : ( )}
    {(item.itemList as MenuItem[]).map((subItem, index) => { const isActiveLink = subItem.path === withoutAnchors(router?.asPath); if (isActiveLink && collapsed) { handleCollapseToggle(); } return (
  • {isActiveLink ? ( ) : null} {subItem.name}
  • ); })}
); } function CollapsibleIcon({ isCollapsed, }: { isCollapsed: boolean; }): ReactComponentElement { return ( ); } export default Sidebar;