import { useCallback, useEffect, useMemo, useState } from "react"; import { getDashboardSummary, type DashboardSummary } from "../api/dashboard"; import { Icon } from "../components/icon"; const CARDS = [ { label: "Projects", key: "projects" }, { label: "Repositories", key: "repositories" }, { label: "SSH Keys", key: "sshKeys" } ] as const; type DashboardStatus = "loading" | "ready" | "error"; export const DashboardPage = () => { const [status, setStatus] = useState("loading"); const [summary, setSummary] = useState(null); const loadSummary = useCallback(async () => { setStatus("loading"); try { const data = await getDashboardSummary(); setSummary(data); setStatus("ready"); } catch { setSummary(null); setStatus("error"); } }, []); useEffect(() => { void loadSummary(); }, [loadSummary]); const cards = useMemo(() => CARDS, []); const isEmpty = status === "ready" && summary !== null && summary.projects === 0 && summary.repositories === 0 && summary.sshKeys === 0 && summary.recentActivity.length === 0; return (

Dashboard

Your workspace overview will appear here.

{status === "loading" &&

Loading dashboard...

} {status === "error" && (

Dashboard is unavailable

)}
{cards.map((card) => (

{card.label}

{summary ? String(summary[card.key]) : "-"}

))}
{isEmpty &&

No activity yet

}
); };