import { useEffect, useMemo } from "react"; import { useQuery } from "@tanstack/react-query"; import { projectsApi } from "../api/projects"; import { useCompany } from "../context/CompanyContext"; import { useDialog } from "../context/DialogContext"; import { useBreadcrumbs } from "../context/BreadcrumbContext"; import { queryKeys } from "../lib/queryKeys"; import { EntityRow } from "../components/EntityRow"; import { StatusBadge } from "../components/StatusBadge"; import { EmptyState } from "../components/EmptyState"; import { PageSkeleton } from "../components/PageSkeleton"; import { formatDate, projectUrl } from "../lib/utils"; import { Button } from "@/components/ui/button"; import { Hexagon, Plus } from "lucide-react"; export function Projects() { const { selectedCompanyId } = useCompany(); const { openNewProject } = useDialog(); const { setBreadcrumbs } = useBreadcrumbs(); useEffect(() => { setBreadcrumbs([{ label: "Projects" }]); }, [setBreadcrumbs]); const { data: allProjects, isLoading, error } = useQuery({ queryKey: queryKeys.projects.list(selectedCompanyId!), queryFn: () => projectsApi.list(selectedCompanyId!), enabled: !!selectedCompanyId, }); const projects = useMemo( () => (allProjects ?? []).filter((p) => !p.archivedAt), [allProjects], ); if (!selectedCompanyId) { return ; } if (isLoading) { return ; } return (
{error &&

{error.message}

} {!isLoading && projects.length === 0 && ( )} {projects.length > 0 && (
{projects.map((project) => ( {project.targetDate && ( {formatDate(project.targetDate)} )}
} /> ))}
)} ); }