// Cases view — real case list, not alerts. const { useState: useCaseState, useMemo: useCaseMemo } = React; function CaseStatusPill({ status }) { const map = { open: { cls: "pill info", label: "Open" }, in_review: { cls: "pill med", label: "In review" }, escalated: { cls: "pill high", label: "Escalated" }, closed: { cls: "pill low", label: "Closed" }, }; const m = map[status] || { cls: "pill", label: status }; return {m.label}; } function CasesView({ data, onOpenCase }) { const cases = data?.cases || window.CASES_API || []; const [statusFilter, setStatusFilter] = useCaseState("all"); const [sortBy, setSortBy] = useCaseState("opened"); const filtered = useCaseMemo(() => { let r = cases; if (statusFilter !== "all") { r = r.filter(c => c.status === statusFilter); } r = [...r].sort((a, b) => { if (sortBy === "risk") return b.risk - a.risk; if (sortBy === "alerts") return b.alerts - a.alerts; return new Date(b.opened) - new Date(a.opened); }); return r; }, [cases, statusFilter, sortBy]); const counts = useCaseMemo(() => ({ all: cases.length, open: cases.filter(c => c.status === "open").length, in_review: cases.filter(c => c.status === "in_review").length, escalated: cases.filter(c => c.status === "escalated").length, closed: cases.filter(c => c.status === "closed").length, }), [cases]); return ( <>
| Case | Status | Priority | Customer | Risk | Alerts | Amount | Assignee | Opened |
|---|---|---|---|---|---|---|---|---|
|
{c.id}
{c.title}
|
{c.priority} | {c.customerId || "—"} | {c.risk} | {c.alerts} | {formatAmount(c.amount, "USD")} | {c.assignee} | {new Date(c.opened).toLocaleString()} |