This commit is contained in:
pradeepkumar
2026-03-19 13:32:40 +05:30
parent 2617262a74
commit ee51f4b554

View File

@@ -2,9 +2,48 @@
import Image from 'next/image'; import Image from 'next/image';
import Link from 'next/link'; import Link from 'next/link';
import { useState } from 'react'; import { useState, useEffect } from 'react';
import { CommonHeader } from '@/components/layout/CommonHeader'; import { CommonHeader } from '@/components/layout/CommonHeader';
import { Footer } from '@/components/layout/Footer'; import { Footer } from '@/components/layout/Footer';
import { cmsService } from '@/services/cms.service';
interface ContactDetails {
title: string;
description: string;
email: string;
phone: string;
phoneHours: string;
officeAddress: string;
officeCity: string;
mapUrl: string;
directionsUrl: string;
}
interface ContactCta {
title: string;
description: string;
buttonText: string;
buttonLink: string;
}
const defaultContactDetails: ContactDetails = {
title: 'Get In Touch',
description: 'Have a question about a property or need assistance? Fill out the form below and our team will get back to you shortly.',
email: '123support@gmail.com',
phone: '1234567890',
phoneHours: 'Mon-Fri 9am-6pm',
officeAddress: '123 Market Street',
officeCity: 'New York CA 234737',
mapUrl: '',
directionsUrl: '',
};
const defaultCta: ContactCta = {
title: 'Ready to find an agent?',
description: 'Discover trusted agents and start your property journey with confidence.',
buttonText: 'Start Your Search',
buttonLink: '/user/profiles',
};
export default function ContactPage() { export default function ContactPage() {
const [formData, setFormData] = useState({ const [formData, setFormData] = useState({
@@ -14,6 +53,21 @@ export default function ContactPage() {
message: '', message: '',
}); });
const [contactDetails, setContactDetails] = useState<ContactDetails>(defaultContactDetails);
const [cta, setCta] = useState<ContactCta>(defaultCta);
useEffect(() => {
const loadCms = async () => {
const [details, ctaData] = await Promise.all([
cmsService.getSectionContent<ContactDetails>('contact', 'contactDetails'),
cmsService.getSectionContent<ContactCta>('contact', 'cta'),
]);
if (details) setContactDetails({ ...defaultContactDetails, ...details });
if (ctaData) setCta({ ...defaultCta, ...ctaData });
};
loadCms();
}, []);
const handleInputChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => { const handleInputChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
const { name, value } = e.target; const { name, value } = e.target;
setFormData(prev => ({ ...prev, [name]: value })); setFormData(prev => ({ ...prev, [name]: value }));
@@ -43,10 +97,10 @@ export default function ContactPage() {
{/* Title */} {/* Title */}
<div className="text-center mb-8"> <div className="text-center mb-8">
<h1 className="font-fractul font-bold text-[25px] text-[#00293d] mb-4"> <h1 className="font-fractul font-bold text-[25px] text-[#00293d] mb-4">
Get In Touch {contactDetails.title}
</h1> </h1>
<p className="font-serif text-[14px] text-[#00293d] max-w-[633px] mx-auto"> <p className="font-serif text-[14px] text-[#00293d] max-w-[633px] mx-auto">
Have a question about a property or need assistance? Fill out the form below and our team will get back to you shortly. {contactDetails.description}
</p> </p>
</div> </div>
@@ -177,7 +231,7 @@ export default function ContactPage() {
Email Support Email Support
</p> </p>
<p className="font-serif text-[14px] text-[#00293d]"> <p className="font-serif text-[14px] text-[#00293d]">
123support@gmail.com {contactDetails.email}
</p> </p>
</div> </div>
</div> </div>
@@ -198,10 +252,10 @@ export default function ContactPage() {
Phone Phone
</p> </p>
<p className="font-serif text-[14px] text-[#00293d]"> <p className="font-serif text-[14px] text-[#00293d]">
1234567890 {contactDetails.phone}
</p> </p>
<p className="font-serif text-[10px] text-[#00293d]"> <p className="font-serif text-[10px] text-[#00293d]">
Mon-Fri 9am-6pm {contactDetails.phoneHours}
</p> </p>
</div> </div>
</div> </div>
@@ -222,10 +276,10 @@ export default function ContactPage() {
Office Office
</p> </p>
<p className="font-serif text-[14px] text-[#00293d]"> <p className="font-serif text-[14px] text-[#00293d]">
123 Market Street {contactDetails.officeAddress}
</p> </p>
<p className="font-serif text-[14px] text-[#00293d]"> <p className="font-serif text-[14px] text-[#00293d]">
New York CA 234737 {contactDetails.officeCity}
</p> </p>
</div> </div>
</div> </div>
@@ -246,9 +300,13 @@ export default function ContactPage() {
{/* Get Directions Button */} {/* Get Directions Button */}
<div className="px-4 pb-4"> <div className="px-4 pb-4">
<button className="w-[117px] h-[35px] border border-[#e58625] rounded-[15px] font-serif text-[14px] text-[#e58625] hover:bg-[#e58625]/10 transition-colors mx-auto block"> <Link
href={contactDetails.directionsUrl || '#'}
target={contactDetails.directionsUrl ? '_blank' : undefined}
className="w-[117px] h-[35px] border border-[#e58625] rounded-[15px] font-serif text-[14px] text-[#e58625] hover:bg-[#e58625]/10 transition-colors mx-auto flex items-center justify-center"
>
Get Directions Get Directions
</button> </Link>
</div> </div>
</div> </div>
</div> </div>
@@ -260,16 +318,16 @@ export default function ContactPage() {
<div className="flex flex-col lg:flex-row items-center justify-between gap-6"> <div className="flex flex-col lg:flex-row items-center justify-between gap-6">
<div className="lg:max-w-[400px]"> <div className="lg:max-w-[400px]">
<h2 className="font-fractul font-bold text-[24px] lg:text-[28px] text-[#00293d] mb-3"> <h2 className="font-fractul font-bold text-[24px] lg:text-[28px] text-[#00293d] mb-3">
Ready to find an agent? {cta.title}
</h2> </h2>
<p className="font-serif text-[13px] text-[#00293d] mb-5"> <p className="font-serif text-[13px] text-[#00293d] mb-5">
Discover trusted agents and start your property journey with confidence. {cta.description}
</p> </p>
<Link <Link
href="/agents" href={cta.buttonLink}
className="inline-flex items-center gap-2 bg-[#e58625] text-white px-5 py-2.5 rounded-full font-fractul font-medium text-[13px] hover:bg-[#d47720] transition-colors" className="inline-flex items-center gap-2 bg-[#e58625] text-white px-5 py-2.5 rounded-full font-fractul font-medium text-[13px] hover:bg-[#d47720] transition-colors"
> >
Start Your Search {cta.buttonText}
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5 12H19M19 12L12 5M19 12L12 19" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> <path d="M5 12H19M19 12L12 5M19 12L12 19" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
</svg> </svg>