'use client' import { useRef, useState } from 'react' import { useTranslations } from 'next-intl' import { motion, useInView } from 'framer-motion' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { Phone, Mail, Instagram, Send } from 'lucide-react' import { ContactSchema, type ContactInput } from '@/lib/validations' export default function ContactSection() { const t = useTranslations('contact') const ref = useRef(null) const isInView = useInView(ref, { once: true, margin: '-80px' }) const [status, setStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle') const { register, handleSubmit, reset, formState: { errors } } = useForm({ resolver: zodResolver(ContactSchema), }) const onSubmit = async (data: ContactInput) => { setStatus('loading') try { const res = await fetch('/api/contact', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data), }) if (!res.ok) throw new Error() setStatus('success') reset() } catch { setStatus('error') } } return (
{/* Sol: Bilgi */}
{t('label')} {t('title')} {t('subtitle')}
{t('phone')}
{t('email')}
{t('instagram')}
{/* Sanal Tur */} 360° Sanal Tur
{/* Sağ: Form */} {status === 'success' ? (

{t('form.success')}

) : (
{errors.fullName && (

{errors.fullName.message}

)}
{errors.email && (

{errors.email.message}

)}