"use client"; import { useEffect, useState } from "react"; import { useForm, Controller } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { toast } from "sonner"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { PartiesField } from "@/components/wizard/parties-field"; import { useUpdateCase } from "@/lib/api/cases"; import { caseUpdateSchema, expectedOutcomes, type CaseUpdateInput } from "@/lib/schemas/case"; import type { CaseDetail } from "@/lib/api/cases"; /* * Inline edit dialog for all case fields set at creation time. * Uses react-hook-form + zod directly (shadcn's
registry entry * wasn't available at init time, so the styling is reproduced by hand). */ function FieldError({ message }: { message?: string }) { if (!message) return null; return

{message}

; } export function CaseEditDialog({ data }: { data: CaseDetail }) { const [open, setOpen] = useState(false); const mutate = useUpdateCase(data.case_number); const form = useForm({ resolver: zodResolver(caseUpdateSchema), defaultValues: { title: data.title ?? "", subject: data.subject ?? "", hearing_date: data.hearing_date ?? "", notes: "", expected_outcome: data.expected_outcome ?? "", appellants: data.appellants ?? [], respondents: data.respondents ?? [], property_address: data.property_address ?? "", permit_number: data.permit_number ?? "", }, }); /* Re-sync the form when the underlying case refetches after save */ useEffect(() => { if (!open) return; form.reset({ title: data.title ?? "", subject: data.subject ?? "", hearing_date: data.hearing_date ?? "", notes: "", expected_outcome: data.expected_outcome ?? "", appellants: data.appellants ?? [], respondents: data.respondents ?? [], property_address: data.property_address ?? "", permit_number: data.permit_number ?? "", }); }, [open, data, form]); const onSubmit = form.handleSubmit(async (values) => { try { await mutate.mutateAsync(values); toast.success("פרטי התיק עודכנו"); setOpen(false); } catch (e) { toast.error(e instanceof Error ? e.message : "שגיאה בעדכון התיק"); } }); return ( עריכת פרטי תיק {data.case_number} השינויים נשמרים ישירות ל-DB. שינוי כותרת יסנכרן גם ל-Paperclip.
( )} /> ( )} />