"use client"; import React, { useState, useRef } from "react"; import SimpleReactValidator from "simple-react-validator"; import ReCAPTCHA from "react-google-recaptcha"; import axios from "axios"; import { useTranslation } from 'next-i18next'; const ContactForm = () => { const { t } = useTranslation("contact"); const subjectOptions = t("form.subjectOptions", { returnObjects: true }); const [forms, setForms] = useState({ name: "", email: "", subject: "", phone: "", message: "", }); const [validator] = useState( new SimpleReactValidator({ className: "errorMessage", }) ); const recaptchaRef = useRef(null); const [recaptchaToken, setRecaptchaToken] = useState(null); const RECAPTCHA_SITEKEY = "6Lc5wKUrAAAAAKqIviSUY2PsqLQ8Bq8CJJaHFA_f"; const changeHandler = (e) => { const { name, value } = e.target; setForms({ ...forms, [name]: value }); if (validator.allValid() && recaptchaToken) { validator.hideMessages(); } else { validator.showMessages(); } }; const handleRecaptcha = (token) => { setRecaptchaToken(token); if (validator.allValid() && token) { validator.hideMessages(); } }; const submitHandler = async (e) => { e.preventDefault(); if (validator.allValid() && recaptchaToken) { validator.hideMessages(); const emailPayload = { name: forms.name, email: forms.email, phone: forms.phone, subject: forms.subject, message: `Subject: ${forms.subject}\n\nMessage:\n${forms.message}`, to: "info@janahanlaw.com", senderName: "Website Contact Form", recaptchaToken: recaptchaToken, }; try { const response = await axios.post( "https://mailserver.metatronnest.com/send", emailPayload, { headers: { "Content-Type": "application/json" } } ); alert(t("form.successMessage")); setForms({ name: "", email: "", subject: "", phone: "", message: "", }); validator.hideMessages(); if (recaptchaRef.current) { try { recaptchaRef.current.reset(); } catch (err) { } } setRecaptchaToken(null); } catch (err) { alert(t("form.failedMessage")); } } else { validator.showMessages(); setForms((prev) => ({ ...prev })); } }; return (
submitHandler(e)} className="contact-validation-active">
{validator.message( "name", forms.name, "required|alpha_space", { messages: { required: t("form.requiredMessages.name") } } )}
{validator.message( "email", forms.email, "required|email", { messages: { required: t("form.requiredMessages.email") } } )}
{validator.message( "phone", forms.phone, "required|phone", { messages: { required: t("form.requiredMessages.phone") } } )}
{validator.message( "subject", forms.subject, "required", { messages: { required: t("form.requiredMessages.subject") } } )}
{validator.message( "message", forms.message, "required", { messages: { required: t("form.requiredMessages.message") } } )}
{!recaptchaToken &&
{t("form.requiredMessages.recaptcha")}
}
); }; export default ContactForm;