"use client"; import React, { useActionState, useEffect, useRef } from "react"; import { useFormStatus } from "react-dom"; import { submitContactForm, ContactFormState } from "@/actions/contact"; import Button from "@/components/ui/Button"; // Use your existing Button component // Submit button component with pending state function SubmitButton() { const { pending } = useFormStatus(); return ( {pending ? "Sending..." : "Send Message"} ); } // The main contact form component export default function ContactForm() { const initialState: ContactFormState = { message: null, errors: {}, success: false, }; const [state, dispatch] = useActionState(submitContactForm, initialState); const formRef = useRef(null); // Ref to reset the form // Reset form on successful submission useEffect(() => { if (state.success) { formRef.current?.reset(); } }, [state.success]); return ( {/* Name Input */} Full Name {state.errors?.name && state.errors.name.map((error: string) => ( {error} ))} {/* Email Input */} Email Address {state.errors?.email && state.errors.email.map((error: string) => ( {error} ))} {/* Subject Input */} Subject {state.errors?.subject && state.errors.subject.map((error: string) => ( {error} ))} {/* Message Textarea */} Your Message {state.errors?.message && state.errors.message.map((error: string) => ( {error} ))} {/* General Form Message (Success or Error) */} {state.message && ( {state.message} )} {/* Submit Button */} ); }
{error}
{state.message}