import { useEffect, useState, type ReactElement } from 'react'; import { useNavigate } from 'react-router-dom'; import { ProjectCard } from '@/components/projects/project-card'; import { api } from '@/lib/api'; import type { Project } from '@/lib/types'; import { getErrorMessage } from './page-errors'; export function ProjectsPage(): ReactElement { const navigate = useNavigate(); const [projects, setProjects] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { let cancelled = false; void api('/api/projects') .then((response) => { if (cancelled) return; setProjects(response); }) .catch((caught: unknown) => { if (cancelled) return; setError(getErrorMessage(caught, 'Failed to load projects.')); }) .finally(() => { if (cancelled) return; setLoading(false); }); return () => { cancelled = true; }; }, []); return (

Projects

{error ? (
{error}
) : null} {loading ? (

Loading projects...

) : projects.length === 0 ? (

No projects yet

Projects will appear here when created via the gateway API

) : (
{projects.map((project) => ( navigate(`/projects/${selectedProject.id}`)} /> ))}
)}
); }