import { useState } from 'react'; import Button from '../reusable/Button'; import FormInput from '../reusable/FormInput'; // API requests are proxied to the same origin via Next.js rewrites const API_BASE_URL = ''; function ContactForm() { const [form, setForm] = useState({ name: '', email: '', subject: '', message: '', }); const [status, setStatus] = useState({ state: 'idle', message: '' }); const handleChange = (e) => { const { name, value } = e.target; setForm((prev) => ({ ...prev, [name]: value })); }; const handleSubmit = async (e) => { e.preventDefault(); setStatus({ state: 'loading', message: '' }); try { const res = await fetch(`${API_BASE_URL}/api/contact`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(form), }); if (!res.ok) { const data = await res.json().catch(() => ({})); const msg = Array.isArray(data?.message) ? data.message.join(', ') : data?.message || 'Failed to send message.'; throw new Error(msg); } setStatus({ state: 'success', message: 'Your message has been sent successfully.', }); setForm({ name: '', email: '', subject: '', message: '' }); } catch (err) { setStatus({ state: 'error', message: err.message || 'Failed to send message.', }); } }; return (

Contact Form

{status.state === 'success' && (

Your message has been sent successfully

We'll get back to you shortly. Thank you!

)} {status.state === 'error' && (

Failed to send

{status.message}

)}
); } export default ContactForm;