Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
co-authored by
renee-png
parent
37e69b76e9
commit
d61a2a1ffe
@@ -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,
|
||||
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>
|
||||
)}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user