"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 }) => ( ))} ); };