'use client'; import type { ApiItemKind } from '@microsoft/api-extractor-model'; import { VscSymbolClass } from '@react-icons/all-files/vsc/VscSymbolClass'; import { VscSymbolEnum } from '@react-icons/all-files/vsc/VscSymbolEnum'; import { VscSymbolField } from '@react-icons/all-files/vsc/VscSymbolField'; import { VscSymbolInterface } from '@react-icons/all-files/vsc/VscSymbolInterface'; import { VscSymbolMethod } from '@react-icons/all-files/vsc/VscSymbolMethod'; import { VscSymbolVariable } from '@react-icons/all-files/vsc/VscSymbolVariable'; import { usePathname } from 'next/navigation'; import { useMemo } from 'react'; import { ItemLink } from './ItemLink'; import { Section } from './Section'; import { useNav } from '~/contexts/nav'; export interface SidebarSectionItemData { href: string; kind: ApiItemKind; name: string; overloadIndex?: number | undefined; } interface GroupedMembers { Classes: SidebarSectionItemData[]; Enums: SidebarSectionItemData[]; Functions: SidebarSectionItemData[]; Interfaces: SidebarSectionItemData[]; Types: SidebarSectionItemData[]; Variables: SidebarSectionItemData[]; } function groupMembers(members: readonly SidebarSectionItemData[]): GroupedMembers { const Classes: SidebarSectionItemData[] = []; const Enums: SidebarSectionItemData[] = []; const Interfaces: SidebarSectionItemData[] = []; const Types: SidebarSectionItemData[] = []; const Variables: SidebarSectionItemData[] = []; const Functions: SidebarSectionItemData[] = []; for (const member of members) { switch (member.kind) { case 'Class': Classes.push(member); break; case 'Enum': Enums.push(member); break; case 'Interface': Interfaces.push(member); break; case 'TypeAlias': Types.push(member); break; case 'Variable': Variables.push(member); break; case 'Function': Functions.push(member); break; default: break; } } return { Classes, Functions, Enums, Interfaces, Types, Variables }; } function resolveIcon(item: string) { switch (item) { case 'Classes': return ; case 'Enums': return ; case 'Interfaces': return ; case 'Types': return ; case 'Variables': return ; default: return ; } } export function Sidebar({ members }: { members: SidebarSectionItemData[] }) { const pathname = usePathname(); const asPathWithoutQueryAndAnchor = `/${pathname?.split('/').splice(-1) ?? ''}`; const { setOpened } = useNav(); const groupItems = useMemo(() => groupMembers(members), [members]); return (
{(Object.keys(groupItems) as (keyof GroupedMembers)[]) .filter((group) => groupItems[group].length) .map((group, idx) => (
{groupItems[group].map((member, index) => ( setOpened(false)} title={member.name} >
{member.name} {member.overloadIndex && member.overloadIndex > 1 ? ( {member.overloadIndex} ) : null}
))}
))}
); }