import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { motion } from 'framer-motion'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../../components/Card'; import { Input } from '../../../components/Input'; import { Textarea } from '../../../components/TextArea'; import { Label } from '../../../components/Label'; import { Button } from '../../../components/Button'; import { Alert, AlertDescription } from '../../../components/Alert'; import { Loader2, Send, CheckCircle2, Mail } from 'lucide-react'; import { trackContactFormSubmit } from '../../../services/gtm'; interface FormData { name: string; email: string; message: string; } const ContactForm = () => { const { t } = useTranslation(); const [isSubmitting, setIsSubmitting] = useState(false); const [submitStatus, setSubmitStatus] = useState<'idle' | 'success' | 'error'>('idle'); const [formData, setFormData] = useState({ name: '', email: '', message: '' }); const [errors, setErrors] = useState>({}); const validateForm = () => { const newErrors: Partial = {}; if (!formData.name.trim()) { newErrors.name = t('pages.contact.contactForm.errors.nameRequired'); } if (!formData.email.trim()) { newErrors.email = t('pages.contact.contactForm.errors.emailRequired'); } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(formData.email)) { newErrors.email = t('pages.contact.contactForm.errors.emailInvalid'); } if (!formData.message.trim()) { newErrors.message = t('pages.contact.contactForm.errors.messageRequired'); } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleChange = ( e: React.ChangeEvent ) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); if (errors[name as keyof FormData]) { setErrors(prev => ({ ...prev, [name]: undefined })); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm()) return; setIsSubmitting(true); setSubmitStatus('idle'); try { // Track form submission trackContactFormSubmit({ name: formData.name, email: formData.email, subject: 'Contact Form' }); // Simuliere einen API-Aufruf await new Promise(resolve => setTimeout(resolve, 1500)); setSubmitStatus('success'); setFormData({ name: '', email: '', message: '' }); } catch { setSubmitStatus('error'); } finally { setIsSubmitting(false); } }; return (
{t('pages.contact.contactForm.title')}
{t('pages.contact.contactForm.description')}
{errors.name && (

{errors.name}

)}
{errors.email && (

{errors.email}

)}