import { useCallback, useEffect } from "react"; import { dashboardApi } from "../api/dashboard"; import { activityApi } from "../api/activity"; import { useCompany } from "../context/CompanyContext"; import { useBreadcrumbs } from "../context/BreadcrumbContext"; import { useApi } from "../hooks/useApi"; import { MetricCard } from "../components/MetricCard"; import { EmptyState } from "../components/EmptyState"; import { timeAgo } from "../lib/timeAgo"; import { formatCents } from "../lib/utils"; import { Bot, CircleDot, DollarSign, ShieldCheck, LayoutDashboard } from "lucide-react"; export function Dashboard() { const { selectedCompanyId, selectedCompany } = useCompany(); const { setBreadcrumbs } = useBreadcrumbs(); useEffect(() => { setBreadcrumbs([{ label: "Dashboard" }]); }, [setBreadcrumbs]); const dashFetcher = useCallback(() => { if (!selectedCompanyId) return Promise.resolve(null); return dashboardApi.summary(selectedCompanyId); }, [selectedCompanyId]); const activityFetcher = useCallback(() => { if (!selectedCompanyId) return Promise.resolve([]); return activityApi.list(selectedCompanyId); }, [selectedCompanyId]); const { data, loading, error } = useApi(dashFetcher); const { data: activity } = useApi(activityFetcher); if (!selectedCompanyId) { return ( ); } return (

Dashboard

{selectedCompany && (

{selectedCompany.name}

)}
{loading &&

Loading...

} {error &&

{error.message}

} {data && ( <>
{activity && activity.length > 0 && (

Recent Activity

{activity.slice(0, 10).map((event) => (
{event.action} {event.entityType}
{timeAgo(event.createdAt)}
))}
)} )}
); }