import React, { useCallback, useState } from 'react'; import cx from 'classnames'; import Link from 'next/link'; import { Menu, MenuItem, MenuSection, VersionMetadata, } from '@nrwl/nx-dev/data-access-documents'; import { useRouter } from 'next/router'; import { Selector } from '@nrwl/nx-dev/ui/common'; export interface SidebarProps { menu: Menu; version: VersionMetadata; versionList: VersionMetadata[]; flavorList: any[]; flavor: any; navIsOpen?: boolean; } // Exported for testing export function createNextPath( version: string, flavor: string, currentPath: string ): string { const genericPath = currentPath.split('/').slice(3).join('/'); return `/${version}/${flavor}/${genericPath}`; } export function Sidebar({ flavor, flavorList, version, versionList, menu, navIsOpen, }: SidebarProps) { const router = useRouter(); return (
({ label: version.name, value: version.id, }))} selected={{ label: version.name, value: version.id }} onChange={(item) => router.push( createNextPath(item.value, flavor.value, router.asPath) ) } />
router.push(createNextPath(version.id, item.value, router.asPath)) } />
); } function SidebarSection({ section }: { section: MenuSection }) { return ( <> {section.hideSectionHeader ? null : (

{section.name}

)} ); } function SidebarSectionItems({ item }: { item: MenuItem }) { 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 : ( )}
); } function CollapsibleIcon({ isCollapsed }: { isCollapsed: boolean }) { return ( ); } export default Sidebar;