import { useCallback, useEffect, useState } from "react"; import { approvalsApi } from "../api/approvals"; import { dashboardApi } from "../api/dashboard"; import { useCompany } from "../context/CompanyContext"; import { useBreadcrumbs } from "../context/BreadcrumbContext"; import { useApi } from "../hooks/useApi"; import { StatusBadge } from "../components/StatusBadge"; import { EmptyState } from "../components/EmptyState"; import { timeAgo } from "../lib/timeAgo"; import { Button } from "@/components/ui/button"; import { Separator } from "@/components/ui/separator"; import { Inbox as InboxIcon } from "lucide-react"; export function Inbox() { const { selectedCompanyId } = useCompany(); const { setBreadcrumbs } = useBreadcrumbs(); const [actionError, setActionError] = useState(null); useEffect(() => { setBreadcrumbs([{ label: "Inbox" }]); }, [setBreadcrumbs]); const approvalsFetcher = useCallback(() => { if (!selectedCompanyId) return Promise.resolve([]); return approvalsApi.list(selectedCompanyId, "pending"); }, [selectedCompanyId]); const dashboardFetcher = useCallback(() => { if (!selectedCompanyId) return Promise.resolve(null); return dashboardApi.summary(selectedCompanyId); }, [selectedCompanyId]); const { data: approvals, loading, error, reload } = useApi(approvalsFetcher); const { data: dashboard } = useApi(dashboardFetcher); async function approve(id: string) { setActionError(null); try { await approvalsApi.approve(id); reload(); } catch (err) { setActionError(err instanceof Error ? err.message : "Failed to approve"); } } async function reject(id: string) { setActionError(null); try { await approvalsApi.reject(id); reload(); } catch (err) { setActionError(err instanceof Error ? err.message : "Failed to reject"); } } if (!selectedCompanyId) { return ; } const hasContent = (approvals && approvals.length > 0) || (dashboard && (dashboard.staleTasks > 0)); return (

Inbox

{loading &&

Loading...

} {error &&

{error.message}

} {actionError &&

{actionError}

} {!loading && !hasContent && ( )} {approvals && approvals.length > 0 && (

Pending Approvals ({approvals.length})

{approvals.map((approval) => (
{approval.type.replace(/_/g, " ")} {timeAgo(approval.createdAt)}
))}
)} {dashboard && dashboard.staleTasks > 0 && ( <>

Stale Work

{dashboard.staleTasks} tasks have gone stale and may need attention.

)}
); }