'use client'; import { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; import { CheckCircle, AlertCircle } from 'lucide-react'; interface ContactFormData { name: string; email: string; phone?: string; message: string; } export function ContactForm() { const [isSubmitting, setIsSubmitting] = useState(false); const [submitStatus, setSubmitStatus] = useState<'idle' | 'success' | 'error'>('idle'); const [formData, setFormData] = useState({ name: '', email: '', phone: '', message: '', }); const [errors, setErrors] = useState>({}); const validateForm = (): boolean => { const newErrors: Partial = {}; if (!formData.name.trim()) { newErrors.name = 'Name is required'; } if (!formData.email.trim()) { newErrors.email = 'Email is required'; } else if (!/\S+@\S+\.\S+/.test(formData.email)) { newErrors.email = 'Email is invalid'; } if (!formData.message.trim()) { newErrors.message = 'Message is required'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm()) { return; } setIsSubmitting(true); setSubmitStatus('idle'); try { const response = await fetch('/api/contact', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formData), }); if (response.ok) { setSubmitStatus('success'); setFormData({ name: '', email: '', phone: '', message: '' }); } else { setSubmitStatus('error'); } } catch (error) { setSubmitStatus('error'); } finally { setIsSubmitting(false); } }; const handleInputChange = (field: keyof ContactFormData, value: string) => { setFormData(prev => ({ ...prev, [field]: value })); if (errors[field]) { setErrors(prev => ({ ...prev, [field]: undefined })); } }; return (
{submitStatus === 'success' && (

Thank you for your message! We'll get back to you within 24 hours.

)} {submitStatus === 'error' && (

There was an error sending your message. Please try again or call us directly.

)}
handleInputChange('name', e.target.value)} className={errors.name ? 'border-red-500' : ''} placeholder="Your full name" /> {errors.name && (

{errors.name}

)}
handleInputChange('email', e.target.value)} className={errors.email ? 'border-red-500' : ''} placeholder="your.email@example.com" /> {errors.email && (

{errors.email}

)}
handleInputChange('phone', e.target.value)} placeholder="(555) 123-4567" />