From 0fee6b6ecd3edea36bf90b5ce3fe81eccd0c8131 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 07:04:18 +0000 Subject: [PATCH] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/routes/cases.$caseId.tsx | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/routes/cases.$caseId.tsx b/src/routes/cases.$caseId.tsx index a32205c..9923032 100644 --- a/src/routes/cases.$caseId.tsx +++ b/src/routes/cases.$caseId.tsx @@ -40,19 +40,26 @@ function CaseDetail() { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [users, setUsers] = useState([]); + const [clients, setClients] = useState([]); + const [reassignOpen, setReassignOpen] = useState(false); + const [clientSearch, setClientSearch] = useState(""); + const [selectedClientId, setSelectedClientId] = useState(""); + 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

Loading…

; if (!data) { return (