"use client"; import React, { useState } from 'react'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { Loader2, CheckCircle2, AlertCircle, Check } from 'lucide-react'; import { submitContactForm } from '@/app/kontakt/actions'; import { getRecaptchaToken } from '@/lib/getRecaptchaToken'; const contactFormSchema = z.object({ name: z.string().min(2, "Imię musi mieć min. 2 znaki"), phone: z.string().min(9, "Wprowadź poprawny numer telefonu"), email: z.union([z.literal(''), z.string().email("Niepoprawny adres e-mail")]).optional(), city: z.string().min(1, "Wybierz miasto"), subject: z.string().optional(), message: z.string().optional(), brand: z.string().optional(), age: z.string().optional(), }); type ContactFormValues = z.infer; export function ContactForm() { const [serverState, setServerState] = useState<{ success?: boolean; message?: string } | null>(null); const [consent, setConsent] = useState(false); const [files, setFiles] = useState([]); const { register, handleSubmit: hookFormSubmit, formState: { errors, isSubmitting }, reset, watch } = useForm({ resolver: zodResolver(contactFormSchema), defaultValues: { name: '', phone: '', email: '', city: '', subject: '', message: '', brand: '', age: '', } }); const onSubmit = async (data: ContactFormValues) => { setServerState(null); const formData = new FormData(); Object.entries(data).forEach(([key, value]) => { if (value !== undefined) formData.append(key, value.toString()); }); formData.append("consent", consent ? 'true' : 'false'); const token = await getRecaptchaToken('submit'); if (token) { formData.append('recaptchaToken', token); } const response = await submitContactForm(null, formData); setServerState({ success: response.success, message: response.message }); if (response.success) { reset(); setConsent(false); } }; const handleSubmit = (e: React.FormEvent) => { if (!consent) { e.preventDefault(); alert('Proszę zaznaczyć zgodę na przetwarzanie danych.'); return; } hookFormSubmit(onSubmit)(e); }; if (serverState?.success) { return (

Wiadomość wysłana!

{serverState.message}

); } return (
{serverState && !serverState.success && (

{serverState.message}

)}
{/* Imię */}
{errors.name &&

{errors.name.message}

}
{/* Telefon */}
{errors.phone &&

{errors.phone.message}

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

{errors.email.message}

}
{/* Miasto */}
{errors.city &&

{errors.city.message}

}
{/* Temat */}
{errors.subject &&

{errors.subject.message}

}
{/* Warunkowe pola dla serwisu */} {watch('subject') === 'serwis' && (
)} {/* Wiadomość */}