"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 } from 'lucide-react'; import { submitContactForm } from '@/app/kontakt/actions'; 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.string().email("Niepoprawny adres e-mail"), subject: z.string().min(1, "Wybierz temat"), message: z.string().min(10, "Wiadomość musi mieć min. 10 znaków"), consent: z.boolean().refine((val) => val === true, "Zgoda RODO jest wymagana"), }); type ContactFormValues = z.infer; export function ContactForm() { const [serverState, setServerState] = useState<{ success?: boolean; message?: string } | null>(null); const { register, handleSubmit, formState: { errors, isSubmitting }, reset } = useForm({ resolver: zodResolver(contactFormSchema), defaultValues: { name: '', phone: '', email: '', subject: '', message: '', consent: false, } }); const onSubmit = async (data: ContactFormValues) => { setServerState(null); // Przekształcamy dane do formatu FormData dla Server Action const formData = new FormData(); Object.entries(data).forEach(([key, value]) => { formData.append(key, value.toString()); }); const response = await submitContactForm(null, formData); setServerState({ success: response.success, message: response.message }); if (response.success) { reset(); } }; 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}

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

{errors.subject.message}

}
{/* Wiadomość */}