diff --git a/src/components/forms/client-case-picker.tsx b/src/components/forms/client-case-picker.tsx new file mode 100644 index 0000000..1ca4bbe --- /dev/null +++ b/src/components/forms/client-case-picker.tsx @@ -0,0 +1,98 @@ +import { useEffect, useMemo, useState } from "react"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { Label } from "@/components/ui/label"; +import { + fetchClients, + fetchAccessibleCases, + type ClientLite, + type CaseLite, +} from "@/lib/forms-shared"; + +export function ClientCasePicker({ + clientId, + caseId, + onClientChange, + onCaseChange, +}: { + clientId: string; + caseId: string; + onClientChange: (id: string, client: ClientLite | null) => void; + onCaseChange: (id: string, kase: CaseLite | null) => void; +}) { + const [clients, setClients] = useState([]); + const [cases, setCases] = useState([]); + + useEffect(() => { + fetchClients().then(setClients); + fetchAccessibleCases().then(setCases); + }, []); + + const filteredCases = useMemo(() => { + if (!clientId) return []; + return cases.filter((c) => c.client_id === clientId); + }, [cases, clientId]); + + return ( +
+
+ + +
+
+ + +
+
+ ); +} diff --git a/src/components/forms/custom-form-builder.tsx b/src/components/forms/custom-form-builder.tsx index e53229a..d534700 100644 --- a/src/components/forms/custom-form-builder.tsx +++ b/src/components/forms/custom-form-builder.tsx @@ -54,7 +54,7 @@ import { Square, ImagePlus, } from "lucide-react"; -import { ClientHomeownerPicker } from "./form-pickers"; +import { ClientCasePicker } from "./client-case-picker"; import { FormFieldDefsDialog } from "./form-field-defs-dialog"; import { FormFieldsFillPanel } from "./form-fields-fill-panel"; import { @@ -1417,16 +1417,18 @@ export function CustomFormBuilder() { - { setClientId(id); setClient(c); + setSelectedCaseId(""); + setHomeownerId(""); + setHomeowner(null); }} - onHomeownerChange={(id, h) => { - setHomeownerId(id); - setHomeowner(h); + onCaseChange={(id) => { + setSelectedCaseId(id); }} />
diff --git a/src/lib/forms-shared.ts b/src/lib/forms-shared.ts index 2749753..6c7400b 100644 --- a/src/lib/forms-shared.ts +++ b/src/lib/forms-shared.ts @@ -331,12 +331,13 @@ export interface CaseLite { id: string; case_number: string; title: string; + client_id: string | null; } export async function fetchAccessibleCases(): Promise { const { data } = await supabase .from("cases") - .select("id,case_number,title") + .select("id,case_number,title,client_id") .is("archived_at", null) .order("opened_at", { ascending: false }) .limit(500);