import { Head } from '@inertiajs/react'; import { useState, useEffect } from 'react'; import AppLayout from '@/layouts/app-layout'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Checkbox } from '@/components/ui/checkbox'; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'; import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'; import { type BreadcrumbItem } from '@/types'; import { Textarea } from '@/components/ui/textarea'; import { cn } from '@/lib/utils'; const breadcrumbs: BreadcrumbItem[] = [ { title: 'Strona główna', href: '/', }, { title: 'Kontakt', href: '/kontakt', }, ]; interface ContactData { system_email: string; telephone: string; email: string; address: string; fax: string; } interface ContactApiResponse { contact: ContactData; } export default function Contact() { const [contactData, setContactData] = useState(null); const [loading, setLoading] = useState(true); const [formData, setFormData] = useState({ name: '', email: '', phone: '', subject: '', message: '', agreement: false, }); const [errors, setErrors] = useState>({}); const [submitStatus, setSubmitStatus] = useState<{ success: boolean; message: string; } | null>(null); const [submitting, setSubmitting] = useState(false); useEffect(() => { fetch('/api/contact') .then(response => response.json()) .then((data: ContactApiResponse) => { setContactData(data.contact); setLoading(false); }) .catch(error => { console.error('Error fetching contact data:', error); setLoading(false); }); }, []); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value, })); // Clear error for this field when user starts typing if (errors[name]) { setErrors(prev => { const newErrors = { ...prev }; delete newErrors[name]; return newErrors; }); } }; const handleCheckboxChange = (checked: boolean) => { setFormData(prev => ({ ...prev, agreement: checked, })); // Clear error for agreement when user checks it if (errors.agreement) { setErrors(prev => { const newErrors = { ...prev }; delete newErrors.agreement; return newErrors; }); } }; const validateForm = () => { const newErrors: Record = {}; if (!formData.name.trim()) { newErrors.name = 'Imię i nazwisko jest wymagane'; } if (!formData.email.trim()) { newErrors.email = 'Adres e-mail jest wymagany'; } else if (!/^\S+@\S+\.\S+$/.test(formData.email)) { newErrors.email = 'Podaj poprawny adres e-mail'; } if (!formData.subject.trim()) { newErrors.subject = 'Temat jest wymagany'; } if (!formData.message.trim()) { newErrors.message = 'Treść wiadomości jest wymagana'; } if (!formData.agreement) { newErrors.agreement = 'Wymagana jest zgoda na przetwarzanie danych osobowych'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm()) { return; } setSubmitting(true); setSubmitStatus(null); try { const csrfToken = document.head?.querySelector('meta[name="csrf-token"]')?.getAttribute('content') || ''; const response = await fetch('/kontakt/wyslij', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': csrfToken, 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: JSON.stringify(formData) }); const data = await response.json(); if (response.ok) { setSubmitStatus({ success: true, message: data.message || 'Wiadomość została wysłana pomyślnie.' }); // Resetowanie formularza po udanym wysłaniu setFormData({ name: '', email: '', phone: '', subject: '', message: '', agreement: false, }); } else { setSubmitStatus({ success: false, message: data.message || 'Wystąpił błąd podczas wysyłania wiadomości.' }); if (data.errors) { setErrors(data.errors); } } } catch (error) { console.error('Błąd wysyłania formularza:', error); setSubmitStatus({ success: false, message: 'Wystąpił błąd podczas wysyłania wiadomości. Spróbuj ponownie później.' }); } finally { setSubmitting(false); } }; return (

Kontakt

Dane kontaktowe {loading ? (
) : contactData ? ( <>

Adres:

Telefon:

{contactData.telephone}

Fax:

{contactData.fax}

) : (

Nie udało się załadować danych kontaktowych.

)}
Mapa
Formularz kontaktowy Skontaktuj się z nami {submitStatus && ( {submitStatus.success ? 'Sukces!' : 'Błąd!'} {submitStatus.message} )}
{errors.name && (

{errors.name}

)}
{errors.email && (

{errors.email}

)}
{errors.subject && (

{errors.subject}

)}