import { useState } from "react"; import { NavLink, useLocation } from "react-router-dom"; import { useQuery } from "@tanstack/react-query"; import { ChevronRight, Plus } from "lucide-react"; import { useCompany } from "../context/CompanyContext"; import { useDialog } from "../context/DialogContext"; import { useSidebar } from "../context/SidebarContext"; import { projectsApi } from "../api/projects"; import { queryKeys } from "../lib/queryKeys"; import { cn } from "../lib/utils"; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible"; import type { Project } from "@paperclip/shared"; export function SidebarProjects() { const [open, setOpen] = useState(true); const { selectedCompanyId } = useCompany(); const { openNewProject } = useDialog(); const { isMobile, setSidebarOpen } = useSidebar(); const location = useLocation(); const { data: projects } = useQuery({ queryKey: queryKeys.projects.list(selectedCompanyId!), queryFn: () => projectsApi.list(selectedCompanyId!), enabled: !!selectedCompanyId, }); // Filter out archived projects const visibleProjects = (projects ?? []).filter( (p: Project) => !p.archivedAt ); // Extract current projectId from URL const projectMatch = location.pathname.match(/^\/projects\/([^/]+)/); const activeProjectId = projectMatch?.[1] ?? null; return (
Projects
{visibleProjects.map((project: Project) => ( { if (isMobile) setSidebarOpen(false); }} className={cn( "flex items-center gap-2.5 px-3 py-1.5 text-[13px] font-medium transition-colors", activeProjectId === project.id ? "bg-accent text-foreground" : "text-foreground/80 hover:bg-accent/50 hover:text-foreground" )} > {project.name} ))}
); }