"use client"; import { useActionState, useState } from "react"; import { SendIcon, Loader2Icon, CheckIcon, XIcon } from "lucide-react"; import Link from "@/components/link"; import Input from "@/components/ui/input"; import Textarea from "@/components/ui/textarea"; import Button from "@/components/ui/button"; import { MarkdownIcon } from "@/components/icons"; import { cn } from "@/lib/utils"; import { send, type ContactState, type ContactInput } from "@/lib/server/resend"; const ContactForm = () => { const [formState, formAction, pending] = useActionState(send, { success: false, message: "", }); // keep track of input so we can repopulate the fields if the form fails const [formFields, setFormFields] = useState>({ name: "", email: "", message: "", }); return (
{ setFormFields({ ...formFields, name: e.target.value }); }} disabled={pending || formState.success} aria-invalid={formState.errors?.name ? "true" : undefined} /> {formState.errors?.name && ( {formState.errors.name[0]} )}
{ setFormFields({ ...formFields, email: e.target.value }); }} disabled={pending || formState.success} aria-invalid={formState.errors?.email ? "true" : undefined} /> {formState.errors?.email && ( {formState.errors.email[0]} )}