"use client"; import { useState, useEffect, FormEvent } from "react"; import { ContactData } from "./types"; import Breadcrumb from "../components/Breadcrumb"; export default function ContactPage() { const [contactData, setContactData] = useState(null); const [loading, setLoading] = useState(true); const [formData, setFormData] = useState({ name: "", email: "", phone: "", address: "", date: "", message: "", }); const [isSubmitting, setIsSubmitting] = useState(false); const [submitStatus, setSubmitStatus] = useState<{ type: "success" | "error" | null; message: string; }>({ type: null, message: "" }); const apiUrl = process.env.NEXT_PUBLIC_API_URL || "http://localhost:3001"; // Fetch contact data from CMS useEffect(() => { const fetchContactData = async () => { try { const response = await fetch(`${apiUrl}/api/contact`, { cache: 'no-store' }); if (response.ok) { const data = await response.json(); setContactData(data); } } catch (error) { console.error("Error fetching contact data:", error); } finally { setLoading(false); } }; fetchContactData(); }, [apiUrl]); const handleChange = ( e: React.ChangeEvent ) => { const { name, value } = e.target; setFormData((prev) => ({ ...prev, [name]: value })); }; const handleSubmit = async (e: FormEvent) => { e.preventDefault(); setIsSubmitting(true); setSubmitStatus({ type: null, message: "" }); try { const response = await fetch(`${apiUrl}/api/contact/submit`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(formData), }); const data = await response.json(); if (response.ok && data.success) { setSubmitStatus({ type: "success", message: data.message || "Thank you! We will contact you soon.", }); setFormData({ name: "", email: "", phone: "", address: "", date: "", message: "", }); } else { setSubmitStatus({ type: "error", message: data.error || "Something went wrong. Please try again.", }); } } catch (error) { console.error("Submit error:", error); setSubmitStatus({ type: "error", message: "Network error. Please check your connection and try again.", }); } finally { setIsSubmitting(false); } }; if (loading) { return (

Loading...

); } // Default values if API fails const hero = contactData?.hero || { title: "Contact Us", backgroundImage: "/assets/img/inner-page/breadcrumb.jpg" }; const contactCards = contactData?.contactCards || []; const map = contactData?.map || { embedUrl: "" }; const form = contactData?.form || { heading: "Send Us Message", description: "Have questions? Send us a message today.", fields: [], submitButton: { text: "SEND MESSAGE", icon: "fa-solid fa-arrow-right", buttonClass: "theme-btn style-2" } }; return ( <> {/* Breadcrumb-Wrapper Section Start */} {/* Contact Icon Section Start */}
{contactCards.map((card, index) => (

{card.title}

{card.content.map((line, i) => ( {card.type === "email" ? ( {line} ) : card.type === "phone" ? ( {line} ) : ( line )} {i < card.content.length - 1 &&
}
))}
))}
{/* Contact Section Start */}
{form.heading}

"{form.description}"

{/* Status Message */} {submitStatus.type && (
{submitStatus.message}
)}
{form.fields.map((field, index) => (
{field.label}{field.required && " *"} {field.type === "textarea" ? ( ) : ( )}
))}
{/* Map Section Start */} {map.embedUrl && (
)} ); }