"use client"; import { useTransition } from "react"; import { zodResolver } from "@hookform/resolvers/zod"; import { Loader2, Send } from "lucide-react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { submitContactRequest } from "@/actions/contact"; import { contactRequestSchema, contactRequestTypeLabels, type ContactRequestInput, type ContactSubmissionPayload, } from "@/lib/contact-schema"; import { Button } from "@/components/ui/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; export function ContactForm() { const [isPending, startTransition] = useTransition(); const form = useForm({ resolver: zodResolver(contactRequestSchema), defaultValues: { name: "", kitaName: "", email: "", requestType: "DEMO", message: "", }, }); function onSubmit( values: ContactRequestInput, event?: React.BaseSyntheticEvent, ) { const formEl = event?.target as HTMLFormElement | undefined; const website = (formEl?.elements.namedItem("website") as HTMLInputElement | null) ?.value ?? ""; startTransition(async () => { const payload: ContactSubmissionPayload = { ...values, website }; const result = await submitContactRequest(payload); if (!result.success) { toast.error(result.error); return; } toast.success( "Danke! Wir haben dir eine Bestätigung an deine E-Mail-Adresse geschickt.", ); form.reset({ name: "", kitaName: "", email: "", requestType: "DEMO", message: "", }); const honeypot = formEl?.elements.namedItem( "website", ) as HTMLInputElement | null; if (honeypot) honeypot.value = ""; }); } return (
( Name )} /> ( Name der Kita / Initiative )} /> ( E-Mail-Adresse )} /> ( Art der Anfrage )} /> ( Nachricht