'use client'; import {useTranslations} from 'next-intl'; import { FormEvent, useState } from 'react'; import toast from 'react-hot-toast'; // <-- Import toast export default function Contact() { const t = useTranslations('contact'); const [formData, setFormData] = useState<{ name: string; email: string; message: string }>({ name: '', email: '', message: '' }); const [isSubmitting, setIsSubmitting] = useState(false); const handleChange = (e: React.ChangeEvent) => { setFormData({...formData, [e.target.name]: e.target.value }); }; const handleSubmit = async (e: FormEvent) => { e.preventDefault(); setIsSubmitting(true); if (!formData.name || !formData.email || !formData.message) { toast.error(t('status_error_all_fields')); setIsSubmitting(false); return; } if (!/\S+@\S+\.\S+/.test(formData.email)) { toast.error(t('status_error_invalid_email')); setIsSubmitting(false); return; } const submissionPromise = async () => { try { const response = await fetch(`/api/email/send`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData), }); if (!response.ok) { const body = await response.json(); throw new Error(body.errorKey || 'status_error_generic'); } return await response.json(); } catch (error: any) { if (error instanceof TypeError) { throw new Error('status_error_generic'); } throw error; } }; toast.promise(submissionPromise(), { loading: t('status_sending'), success: () => { setFormData({ name: '', email: '', message: '' }); setIsSubmitting(false); return t('status_success'); }, error: (err: Error) => { setIsSubmitting(false); return t(err.message as any); }, }); }; return (

{t('title')}

{t('subtitle')}

); }