diff --git a/src/routes/cases.index.tsx b/src/routes/cases.index.tsx index 83b2713..0d7d752 100644 --- a/src/routes/cases.index.tsx +++ b/src/routes/cases.index.tsx @@ -43,6 +43,7 @@ function CasesList() { const [selected, setSelected] = useState>(new Set()); const [assignAttorney, setAssignAttorney] = useState(""); const [assignClient, setAssignClient] = useState(""); + const [assignStatus, setAssignStatus] = useState(""); const [busy, setBusy] = useState(false); const [page, setPage] = useState(1); const PAGE_SIZE = 150; @@ -246,6 +247,30 @@ function CasesList() { load(); }; + const bulkAssignStatus = async () => { + if (selected.size === 0 || !assignStatus) return; + setBusy(true); + const ids = Array.from(selected); + const isClosed = assignStatus.startsWith("closed"); + const { data, error } = await supabase + .from("cases") + .update({ + status: assignStatus as "active" | "closed" | "closed_lost" | "closed_won" | "intake" | "on_hold", + closed_at: isClosed ? new Date().toISOString().slice(0, 10) : null, + }) + .in("id", ids) + .select("id"); + setBusy(false); + if (error) { toast.error(error.message); return; } + const n = data?.length ?? 0; + if (n === 0) { toast.error("No cases were updated. You may not have permission."); return; } + if (n < ids.length) toast.warning(`${n} of ${ids.length} case(s) updated (others skipped)`); + else toast.success(`${n} case(s) status updated`); + setSelected(new Set()); + setAssignStatus(""); + load(); + }; + const userOptions = users.map((u) => ({ value: u.id, label: u.full_name || u.email || u.id, @@ -352,6 +377,22 @@ function CasesList() { +
+ Status: + +
)}