import { useMemo, useState } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Checkbox } from "@/components/ui/checkbox"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { useCredentialStatuses, useResendAllPendingCredentials, useResendCredential, } from "@/hooks/queries/useEntityOnboarding"; import type { CredentialStatus } from "@/types"; import { toast } from "sonner"; export default function CredentialDashboard() { const [accountFilter, setAccountFilter] = useState("all"); const [emailSentFilter, setEmailSentFilter] = useState("all"); const [placementFilter, setPlacementFilter] = useState("all"); const [dateFrom, setDateFrom] = useState(""); const [dateTo, setDateTo] = useState(""); const [selected, setSelected] = useState>(new Set()); const filters = useMemo( () => ({ account_status: accountFilter === "all" ? undefined : accountFilter, email_sent: emailSentFilter === "all" ? undefined : emailSentFilter === "yes" ? true : emailSentFilter === "no" ? false : undefined, placement_status: placementFilter === "all" ? undefined : placementFilter, date_from: dateFrom || undefined, date_to: dateTo || undefined, }), [accountFilter, emailSentFilter, placementFilter, dateFrom, dateTo], ); const { data, isLoading } = useCredentialStatuses(filters); const resendOne = useResendCredential(); const resendAll = useResendAllPendingCredentials(); const rows: CredentialStatus[] = data?.data ?? []; const toggle = (id: number) => { setSelected((prev) => { const n = new Set(prev); if (n.has(id)) n.delete(id); else n.add(id); return n; }); }; const toggleAll = (checked: boolean) => { if (!checked) setSelected(new Set()); else setSelected(new Set(rows.map((r) => r.student_id))); }; return (

Credential dashboard

Track onboarding emails and placement

Filters
setDateFrom(e.target.value)} /> setDateTo(e.target.value)} />
{isLoading ? (
Loading…
) : (
0 && selected.size === rows.length} onCheckedChange={(c) => toggleAll(!!c)} /> Name Email Account Status Email Sent First Login Placement Status Actions {rows.map((r) => ( toggle(r.student_id)} /> {r.name} {r.email} {r.account_status} {r.email_sent ? "Yes" : "No"} {r.first_login_at ? new Date(r.first_login_at).toLocaleString() : "—"} {r.placement_status} ))}
)}
); }