'use client'; import { UserButton, useUser } from "@clerk/nextjs" import { BarChartIcon, UsersRoundIcon, LandPlotIcon, FileTextIcon, LayoutDashboard, Menu, Settings, ChevronDown, FolderIcon, PlusIcon } from "lucide-react" import Link from "next/link" import { usePathname, useRouter } from "next/navigation" import { useState } from "react" import { Button } from "~/components/ui/button" import { Sheet, SheetContent, SheetTrigger, SheetTitle } from "~/components/ui/sheet" import { cn } from "~/lib/utils" import { Logo } from "~/components/logo" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "~/components/ui/select" import { Separator } from "~/components/ui/separator" import { useActiveStudy } from "~/context/active-study" const getNavItems = (studyId?: number) => [ { name: "Dashboard", href: studyId ? `/dashboard/studies/${studyId}` : "/dashboard", icon: LayoutDashboard, exact: true, requiresStudy: false }, { name: "Participants", href: `/dashboard/studies/${studyId}/participants`, icon: UsersRoundIcon, requiresStudy: true, baseRoute: "participants" }, { name: "Trials", href: `/dashboard/studies/${studyId}/trials`, icon: LandPlotIcon, requiresStudy: true, baseRoute: "trials" }, { name: "Forms", href: `/dashboard/studies/${studyId}/forms`, icon: FileTextIcon, requiresStudy: true, baseRoute: "forms" }, { name: "Data Analysis", href: `/dashboard/studies/${studyId}/analysis`, icon: BarChartIcon, requiresStudy: true, baseRoute: "analysis" }, { name: "Settings", href: `/dashboard/studies/${studyId}/settings`, icon: Settings, requiresStudy: true, baseRoute: "settings" }, ]; export function Sidebar() { const pathname = usePathname() const router = useRouter() const [isOpen, setIsOpen] = useState(false) const { user } = useUser() const { activeStudy, setActiveStudy, studies, isLoading } = useActiveStudy() const navItems = getNavItems(activeStudy?.id) const visibleNavItems = activeStudy ? navItems : navItems.filter(item => !item.requiresStudy) const isActiveRoute = (item: { href: string, exact?: boolean, baseRoute?: string }) => { if (item.exact) { return pathname === item.href; } if (item.baseRoute && activeStudy) { const pattern = new RegExp(`/dashboard/studies/\\d+/${item.baseRoute}`); return pattern.test(pathname); } return pathname.startsWith(item.href); }; const handleStudyChange = (value: string) => { if (value === "all") { setActiveStudy(null); router.push("/dashboard/studies"); } else { const study = studies.find(s => s.id.toString() === value); if (study) { setActiveStudy(study); router.push(`/dashboard/studies/${study.id}`); } } }; const SidebarContent = () => (
{user?.fullName ?? user?.username ?? 'User'}
{user?.primaryEmailAddress?.emailAddress ?? 'user@example.com'}