import { useEffect } from "react"; import { useParams } from "react-router-dom"; import { useQuery } from "@tanstack/react-query"; import { projectsApi } from "../api/projects"; import { issuesApi } from "../api/issues"; import { usePanel } from "../context/PanelContext"; import { useCompany } from "../context/CompanyContext"; import { useBreadcrumbs } from "../context/BreadcrumbContext"; import { queryKeys } from "../lib/queryKeys"; import { ProjectProperties } from "../components/ProjectProperties"; import { StatusBadge } from "../components/StatusBadge"; import { EntityRow } from "../components/EntityRow"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import type { Issue } from "@paperclip/shared"; export function ProjectDetail() { const { projectId } = useParams<{ projectId: string }>(); const { selectedCompanyId } = useCompany(); const { openPanel, closePanel } = usePanel(); const { setBreadcrumbs } = useBreadcrumbs(); const { data: project, isLoading, error } = useQuery({ queryKey: queryKeys.projects.detail(projectId!), queryFn: () => projectsApi.get(projectId!), enabled: !!projectId, }); const { data: allIssues } = useQuery({ queryKey: queryKeys.issues.list(selectedCompanyId!), queryFn: () => issuesApi.list(selectedCompanyId!), enabled: !!selectedCompanyId, }); const projectIssues = (allIssues ?? []).filter((i) => i.projectId === projectId); useEffect(() => { setBreadcrumbs([ { label: "Projects", href: "/projects" }, { label: project?.name ?? projectId ?? "Project" }, ]); }, [setBreadcrumbs, project, projectId]); useEffect(() => { if (project) { openPanel(); } return () => closePanel(); }, [project]); // eslint-disable-line react-hooks/exhaustive-deps if (isLoading) return

Loading...

; if (error) return

{error.message}

; if (!project) return null; return (

{project.name}

{project.description && (

{project.description}

)}
Overview Issues ({projectIssues.length})
Status
{project.targetDate && (
Target Date

{project.targetDate}

)}
{projectIssues.length === 0 ? (

No issues in this project.

) : (
{projectIssues.map((issue) => ( } /> ))}
)}
); }