import { Section } from '@discordjs/ui'; import Link from 'next/link'; import { type Dispatch, type SetStateAction, useMemo } from 'react'; import { VscSymbolClass, VscSymbolEnum, VscSymbolInterface, VscSymbolField, VscSymbolVariable, VscSymbolMethod, } from 'react-icons/vsc'; import type { GroupedMembers, Members } from './SidebarLayout'; function groupMembers(members: Members): GroupedMembers { const Classes: Members = []; const Enums: Members = []; const Interfaces: Members = []; const Types: Members = []; const Variables: Members = []; const Functions: Members = []; 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: keyof GroupedMembers) { switch (item) { case 'Classes': return ; case 'Enums': return ; case 'Interfaces': return ; case 'Types': return ; case 'Variables': return ; default: return ; } } export function SidebarItems({ members, setOpened, asPath, }: { asPath: string; members: Members; setOpened: Dispatch>; }) { 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} ))} ))} ); }