Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-04-18 07:04:18 +00:00
co-authored by renee-png
parent aefe30bcfb
commit 0fee6b6ecd
+32 -1
View File
@@ -40,19 +40,26 @@ function CaseDetail() {
const [data, setData] = useState<any>(null);
const [loading, setLoading] = useState(true);
const [users, setUsers] = useState<any[]>([]);
const [clients, setClients] = useState<any[]>([]);
const [reassignOpen, setReassignOpen] = useState(false);
const [clientSearch, setClientSearch] = useState("");
const [selectedClientId, setSelectedClientId] = useState<string>("");
const [reassigning, setReassigning] = useState(false);
const load = useCallback(async () => {
const [{ data: c, error }, { data: us }] = await Promise.all([
const [{ data: c, error }, { data: us }, { data: cl }] = await Promise.all([
supabase
.from("cases")
.select("*, client:clients(id, name, client_type, annual_interest_rate), assignee:profiles!cases_assigned_attorney_id_fkey(id, full_name, email)")
.eq("id", caseId)
.maybeSingle(),
supabase.from("profiles").select("id, full_name, email"),
supabase.from("clients").select("id, name, client_type").is("archived_at", null).order("name"),
]);
if (error) toast.error("Failed to load case", { description: error.message });
setData(c);
setUsers(us ?? []);
setClients(cl ?? []);
setLoading(false);
}, [caseId]);
@@ -78,6 +85,30 @@ function CaseDetail() {
else { toast.success("Assignee updated"); load(); }
};
const filteredClients = useMemo(() => {
const q = clientSearch.trim().toLowerCase();
if (!q) return clients.slice(0, 50);
return clients.filter((c) => c.name.toLowerCase().includes(q)).slice(0, 50);
}, [clients, clientSearch]);
const reassignClient = async () => {
if (!selectedClientId || selectedClientId === data.client?.id) {
setReassignOpen(false);
return;
}
setReassigning(true);
const { error } = await supabase.from("cases").update({ client_id: selectedClientId }).eq("id", caseId);
setReassigning(false);
if (error) toast.error("Could not reassign", { description: error.message });
else {
toast.success("Case reassigned to new client");
setReassignOpen(false);
setClientSearch("");
setSelectedClientId("");
load();
}
};
if (loading) return <PageContainer><p className="text-muted-foreground">Loading…</p></PageContainer>;
if (!data) {
return (