import { RefObject, useRef, useState } from 'react'; import { useForm, SubmitHandler, FieldValues } from 'react-hook-form'; import ReCAPTCHA from 'react-google-recaptcha'; export interface ContactFormData extends FieldValues { firstName: string, lastName: string, email: string, subject: string, summary: string, honeypot_xyz: string }; const ContactForm = () => { const { register, resetField, handleSubmit, setValue, formState: { errors }, } = useForm(); const [submitted, setSubmitted] = useState(false); const handleFormSubmission: SubmitHandler = async (data: FieldValues) => { const submissionData = data as ContactFormData; console.log(submissionData) if (submissionData.honeypot_xyz !== "") { // Form submission is spam return; } const res = await fetch('/api/contact', { method: 'POST', headers: { 'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json' }, body: JSON.stringify(submissionData) }); console.log('Response received') if (res.status === 200) { console.log('Response succeeded!') setSubmitted(true) resetField('captchaToken') } }; const handleFormError: SubmitHandler = (error) => { console.log(error) }; const onCaptchaChange = (token: string | null) => { // Set the captcha token when the user completes the reCAPTCHA if (token) { setValue('captchaToken', token); } }; return (
{errors.firstName &&

First name is required.

}
{errors.lastName &&

Last name is required.

}
{errors.email &&

Email is required.

}
{errors.subject &&

Subject is required.

}