'use client'; import React, { useState } from 'react'; import { useTranslations } from 'next-intl'; import { Button, Heading, Card, Input, Textarea, Label } from '@/components/ui'; import { sendContactFormAction } from '@/app/actions/contact'; import { useAnalytics } from '@/components/analytics/useAnalytics'; import { AnalyticsEvents } from '@/components/analytics/analytics-events'; export default function ContactForm() { const t = useTranslations('Contact'); const { trackEvent } = useAnalytics(); const [status, setStatus] = useState<'idle' | 'submitting' | 'success' | 'error'>('idle'); const [hasStarted, setHasStarted] = useState(false); const handleFocus = (fieldId: string) => { // Initial form start if (!hasStarted) { setHasStarted(true); trackEvent(AnalyticsEvents.FORM_START, { form_id: 'contact_form', form_name: 'Contact', }); } // Field-level transparency trackEvent(AnalyticsEvents.FORM_FIELD_FOCUS, { form_id: 'contact_form', field_id: fieldId, }); }; async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setStatus('submitting'); const formData = new FormData(e.currentTarget); const email = formData.get('email') as string; try { const result = await sendContactFormAction(formData); if (result?.success) { trackEvent('contact_form_submission', { form_type: 'general', email, }); setStatus('success'); (e.target as HTMLFormElement).reset(); } else { console.error('Contact form submission failed:', { email, error: result.error }); trackEvent(AnalyticsEvents.FORM_ERROR, { form_id: 'contact_form', error: result.error || 'submission_failed', }); setStatus('error'); } } catch (error) { console.error('Contact form submission error:', { email, error }); trackEvent(AnalyticsEvents.FORM_ERROR, { form_id: 'contact_form', error: (error as Error).message || 'unexpected_error', }); setStatus('error'); } } if (status === 'success') { return (
{t('form.successTitle') || 'Message Sent!'}

{t('form.successDesc') || 'Thank you for your message. We will get back to you as soon as possible.'}

); } if (status === 'error') { return (
{t('form.errorTitle') || 'Submission Failed!'}

{t('form.error') || 'Something went wrong. Please check your input and try again.'}

); } return ( {t('form.title')}
handleFocus('contact-name')} required />
handleFocus('contact-email')} required />