Added status dropdown to bulk

X-Lovable-Edit-ID: edt-324641c0-6c3a-451f-85a8-90fc342b8503
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-04-19 18:17:58 +00:00
co-authored by renee-png
+41
View File
@@ -43,6 +43,7 @@ function CasesList() {
const [selected, setSelected] = useState<Set<string>>(new Set());
const [assignAttorney, setAssignAttorney] = useState<string>("");
const [assignClient, setAssignClient] = useState<string>("");
const [assignStatus, setAssignStatus] = useState<string>("");
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() {
<Button size="sm" onClick={bulkAssignClient} disabled={busy || !assignClient}>
Apply
</Button>
<div className="mx-2 h-5 w-px bg-border" />
<span className="text-sm text-muted-foreground">Status:</span>
<Select value={assignStatus} onValueChange={setAssignStatus}>
<SelectTrigger className="w-[160px] h-9"><SelectValue placeholder="Select status…" /></SelectTrigger>
<SelectContent>
<SelectItem value="intake">Intake</SelectItem>
<SelectItem value="active">Active</SelectItem>
<SelectItem value="on_hold">On hold</SelectItem>
<SelectItem value="closed_won">Closed — won</SelectItem>
<SelectItem value="closed_lost">Closed — lost</SelectItem>
<SelectItem value="closed">Closed</SelectItem>
</SelectContent>
</Select>
<Button size="sm" onClick={bulkAssignStatus} disabled={busy || !assignStatus}>
Apply
</Button>
</div>
)}