"use client"; import React, { useEffect, useState } from 'react'; import { createPortal } from 'react-dom'; import ReCAPTCHA from "react-google-recaptcha"; import axios from "axios"; interface ContactPopupProps { isOpen: boolean; onClose: () => void; } import ContactStatus from '../../contact/ContactStatus'; interface ContactPopupProps { isOpen: boolean; onClose: () => void; } const ContactPopup: React.FC = ({ isOpen, onClose }) => { const [status, setStatus] = useState<'idle' | 'submitting' | 'success' | 'error'>('idle'); const [formData, setFormData] = useState({ name: "", phone: "", email: "", businessName: "", projectRequirement: "", budgetRange: "", }); const [formErrors, setFormErrors] = useState({}); const [captchaToken, setCaptchaToken] = useState(null); const [mounted, setMounted] = useState(false); useEffect(() => { setMounted(true); }, []); // Close on ESC key useEffect(() => { const handleEsc = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); }; window.addEventListener('keydown', handleEsc); return () => window.removeEventListener('keydown', handleEsc); }, [onClose]); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData((prev) => ({ ...prev, [name]: value })); }; const handleCaptchaChange = (token: string | null) => { setCaptchaToken(token); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const errors: any = {}; if (!formData.name.trim()) errors.name = "Name is required."; if (!formData.phone.trim()) errors.phone = "Phone is required."; if (!formData.email.trim()) errors.email = "Email is required."; if (!formData.businessName.trim()) errors.businessName = "Business name requested."; if (!formData.projectRequirement.trim()) errors.projectRequirement = "Requirement details needed."; if (!formData.budgetRange) errors.budgetRange = "Please select a budget range."; // if (!captchaToken) errors.captcha = "Please verify the CAPTCHA."; setFormErrors(errors); if (Object.keys(errors).length > 0) return; setStatus('submitting'); const emailData = { ...formData, message: `Business: ${formData.businessName}
Budget: ${formData.budgetRange}

Requirement: ${formData.projectRequirement}`, to: "akashlucaas@gmail.com", senderName: "Metatroncube Contact Popup", recaptchaToken: captchaToken, }; try { await axios.post("https://mailserver.metatronnest.com/send", emailData, { headers: { "Content-Type": "application/json" }, }); setStatus('success'); setFormData({ name: "", phone: "", email: "", businessName: "", projectRequirement: "", budgetRange: "", }); setCaptchaToken(null); setFormErrors({}); } catch (error) { console.error("❌ Error sending email:", error); setStatus('error'); } }; const handleCloseStatus = () => { if (status === 'success') { onClose(); setStatus('idle'); } else { setStatus('idle'); } }; if (!mounted || !isOpen) return null; const modalContent = (
e.stopPropagation()}>
{/* Left Side: Info */}

Let's Build Something Great

Partner with Canada's leading web development agency to scale your business.

Email Us

info@metatroncubesolutions.com

Call Us Free

+1-647-679-7651
{/* Right Side: Form */}
{status === 'idle' || status === 'submitting' ? ( <>

Start Your Project

{formErrors.name && {formErrors.name}}
{formErrors.email && {formErrors.email}}
{formErrors.phone && {formErrors.phone}}
{formErrors.businessName && {formErrors.businessName}}
{formErrors.budgetRange && {formErrors.budgetRange}}
{formErrors.projectRequirement && {formErrors.projectRequirement}}
{formErrors.captcha && {formErrors.captcha}}
) : (
)}
); return typeof document !== 'undefined' ? createPortal(modalContent, document.body) : null; }; export default ContactPopup;