'use client'; import Link from 'next/link'; import { Plus } from 'lucide-react'; import { useLocalStorage } from 'usehooks-ts'; import { useOrganizationList, useOrganization } from '@clerk/nextjs'; import { Button } from '@/components/ui/button'; import { Separator } from '@/components/ui/separator'; import { Accordion } from '@/components/ui/accordion'; import { Skeleton } from '@/components/ui/skeleton'; import { NavItem, Organization } from './nav-item'; interface SidebarProps { storageKey?: string; } export const Sidebar = ({ storageKey = 't-sidebar-state' }: SidebarProps) => { const [expanded, setExpanded] = useLocalStorage>( storageKey, {} ); const { organization: activeOrganization, isLoaded: isLoadedOrg } = useOrganization(); const { userMemberships, isLoaded: isLoadedOrgList } = useOrganizationList({ userMemberships: { infinite: true }, }); const defaultAccordionValue: string[] = Object.keys(expanded).reduce( (acc: string[], key: string) => { if (expanded[key]) { acc.push(key); } return acc; }, [] ); const onExpand = (id: string) => { setExpanded((curr) => ({ ...curr, [id]: !expanded[id], })); }; if (!isLoadedOrgList || !isLoadedOrg || userMemberships.isLoading) { return ( <>
); } return ( <>
Workspaces
{userMemberships.data.map(({ organization }) => ( ))} ); };