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}
)}
-
{section.itemList.map((item) => (
))}
>
);
}
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;