'use client' import { useState } from 'react' import { Send, CheckCircle, XCircle } from 'lucide-react' import type { FormSection } from '@/content/schemas/manifesto' import type { LeadFormData } from '@/app/api/leads/route' interface ContactFormProps { content: FormSection } type FormStatus = 'idle' | 'submitting' | 'success' | 'error' export function ContactForm({ content }: ContactFormProps) { const [status, setStatus] = useState('idle') const [errors, setErrors] = useState>({}) const [formData, setFormData] = useState({ name: '', email: '', company: '', projectType: '', budget: '', message: '', }) const validateField = (name: keyof LeadFormData, value: string): string | null => { const field = content.fields[name] if (field.required && !value.trim()) { return field.error || `${field.label} is verplicht` } if (name === 'email' && value) { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ if (!emailRegex.test(value)) { return 'Ongeldig email adres' } } if (name === 'message' && value && field.minLength) { if (value.length < field.minLength) { return `Minimaal ${field.minLength} karakters vereist` } } return null } const handleChange = ( e: React.ChangeEvent ) => { const { name, value } = e.target setFormData(prev => ({ ...prev, [name]: value })) // Clear error on change if (errors[name]) { setErrors(prev => { const newErrors = { ...prev } delete newErrors[name] return newErrors }) } } const handleBlur = ( e: React.FocusEvent ) => { const { name, value } = e.target const error = validateField(name as keyof LeadFormData, value) if (error) { setErrors(prev => ({ ...prev, [name]: error })) } } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() // Validate all fields const newErrors: Record = {} Object.keys(formData).forEach(key => { const error = validateField(key as keyof LeadFormData, formData[key as keyof LeadFormData] || '') if (error) { newErrors[key] = error } }) if (Object.keys(newErrors).length > 0) { setErrors(newErrors) return } // Submit form setStatus('submitting') try { const response = await fetch('/api/leads', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formData), }) const data = await response.json() if (!response.ok) { throw new Error(data.error || 'Er ging iets mis') } setStatus('success') // Reset form setFormData({ name: '', email: '', company: '', projectType: '', budget: '', message: '', }) } catch (error) { console.error('Form submission error:', error) setStatus('error') } } // Success state if (status === 'success') { return (

{content.success.title}

{content.success.message}

{content.success.cta}
) } // Error state if (status === 'error') { return (

{content.error.title}

{content.error.message}

) } return (
{/* Name */}
{errors.name && (

{errors.name}

)}
{/* Email */}
{errors.email && (

{errors.email}

)}
{/* Company */}
{/* Project Type */}
{errors.projectType && (

{errors.projectType}

)}
{/* Budget */}
{/* Message */}