"use client"; import { useActionState, useEffect, useRef } from "react"; import { useRouter } from "next/navigation"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { createCustomer, updateCustomer, type ActionResult } from "@/actions/customers"; import { toast } from "sonner"; import type { Customer } from "@/lib/types"; const initial: ActionResult = { ok: false, error: "" }; interface CustomerFormProps { customer?: Customer; } export function CustomerForm({ customer }: CustomerFormProps) { const router = useRouter(); const isEdit = !!customer; const boundAction = isEdit ? updateCustomer.bind(null, customer!.id) : createCustomer; const [state, formAction, pending] = useActionState(boundAction, initial); const formRef = useRef(null); useEffect(() => { if (state.ok) { toast.success(isEdit ? "Customer updated" : "Customer created"); if (!isEdit) { formRef.current?.reset(); } else { router.push("/customers"); } } else if (state.error) { toast.error(state.error); } }, [state, isEdit, router]); return ( {isEdit ? "Edit customer" : "Add a customer"}