Deploy
This commit is contained in:
@@ -0,0 +1,141 @@
|
|||||||
|
'use client'
|
||||||
|
|
||||||
|
import { useEmDashContent } from '@/hooks/useEmDashContent'
|
||||||
|
import { Mail, MapPin, MessageCircle, Phone } from 'lucide-react'
|
||||||
|
import Badge from '@/components/ui/Badge'
|
||||||
|
|
||||||
|
export default function ContactSection() {
|
||||||
|
const { items: hours, loading } = useEmDashContent('business_hours')
|
||||||
|
|
||||||
|
if (loading) {
|
||||||
|
return <div className="flex justify-center py-16"><div className="w-8 h-8 rounded-full border-2 border-[#d4af37] border-t-transparent animate-spin" /></div>
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static contact details – consistent across the site
|
||||||
|
const contactDetails = {
|
||||||
|
address: 'R618, Mkuze, KwaZulu-Natal, 3965',
|
||||||
|
phone: '+27 82 123 4567',
|
||||||
|
email: 'reservations@mpofanalodge.co.za',
|
||||||
|
whatsapp: '+27 82 123 4567',
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<section
|
||||||
|
id="contact"
|
||||||
|
data-vula-section="contact"
|
||||||
|
data-vula-cms="business_hours"
|
||||||
|
className="py-28 bg-[#0a120e] text-[#e7eeea] border-t border-[#304036]"
|
||||||
|
>
|
||||||
|
<div className="container mx-auto px-4 max-w-6xl">
|
||||||
|
<div className="flex items-center justify-center gap-4 mb-6">
|
||||||
|
<span className="block w-14 h-px bg-[#d4af37]" />
|
||||||
|
<span className="text-[#d4af37] text-xs font-sans uppercase tracking-[0.2em]">
|
||||||
|
Get in Touch
|
||||||
|
</span>
|
||||||
|
<span className="block w-14 h-px bg-[#d4af37]" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2 className="font-serif font-light text-4xl md:text-5xl text-center leading-tight mb-16">
|
||||||
|
We're here to
|
||||||
|
<span className="italic text-[#d4af37]"> help</span>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12">
|
||||||
|
{/* Map embed */}
|
||||||
|
<div className="rounded-lg overflow-hidden border border-[#304036] h-80">
|
||||||
|
<iframe
|
||||||
|
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3589.123456789!2d32.0!4d-27.5!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x0!2zMjfCsDMwJzAwLjAiUyAzMsKwMDAnMDAuMCJF!5e0!3m2!1sen!2sza!4v1710000000000"
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
style={{ border: 0 }}
|
||||||
|
allowFullScreen
|
||||||
|
loading="lazy"
|
||||||
|
referrerPolicy="no-referrer-when-downgrade"
|
||||||
|
title="Mpofana Lodge location"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Contact info + hours */}
|
||||||
|
<div className="space-y-8">
|
||||||
|
{/* Address, Phone, Email, WhatsApp */}
|
||||||
|
<div className="space-y-4">
|
||||||
|
<div className="flex items-start gap-3">
|
||||||
|
<MapPin className="w-5 h-5 text-[#d4af37] mt-0.5 shrink-0" />
|
||||||
|
<p className="text-[#b0bfb8]">{contactDetails.address}</p>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center gap-3">
|
||||||
|
<Phone className="w-5 h-5 text-[#d4af37] shrink-0" />
|
||||||
|
<p className="text-[#b0bfb8]">{contactDetails.phone}</p>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center gap-3">
|
||||||
|
<Mail className="w-5 h-5 text-[#d4af37] shrink-0" />
|
||||||
|
<p className="text-[#b0bfb8]">{contactDetails.email}</p>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center gap-3">
|
||||||
|
<MessageCircle className="w-5 h-5 text-[#d4af37] shrink-0" />
|
||||||
|
<a
|
||||||
|
href={`https://wa.me/${contactDetails.whatsapp.replace(/\s/g, '')}`}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
className="text-[#b0bfb8] hover:text-[#d4af37] transition-colors duration-200 underline underline-offset-2"
|
||||||
|
>
|
||||||
|
WhatsApp Us
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Opening hours from CMS */}
|
||||||
|
{hours.length > 0 && (
|
||||||
|
<div className="border-t border-[#304036] pt-6">
|
||||||
|
<h3 className="font-sans text-xs uppercase tracking-[0.15em] text-[#d4af37] mb-4">
|
||||||
|
Opening Hours
|
||||||
|
</h3>
|
||||||
|
<ul className="space-y-2">
|
||||||
|
{hours.map((item) => {
|
||||||
|
const d = item.data as {
|
||||||
|
day_of_week?: string
|
||||||
|
open_time?: string
|
||||||
|
close_time?: string
|
||||||
|
is_closed?: boolean
|
||||||
|
note?: string
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<li
|
||||||
|
key={item.id}
|
||||||
|
className="flex justify-between text-sm text-[#b0bfb8]"
|
||||||
|
>
|
||||||
|
<span className="font-medium">{d.day_of_week}</span>
|
||||||
|
<span>
|
||||||
|
{d.is_closed
|
||||||
|
? 'Closed'
|
||||||
|
: `${d.open_time} – ${d.close_time}`}
|
||||||
|
{d.note && (
|
||||||
|
<span className="text-[#6a7a72] ml-2">
|
||||||
|
({d.note})
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</ul>
|
||||||
|
<p className="text-[#6a7a72] text-xs mt-3">
|
||||||
|
* Public holidays may affect hours.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{/* Enquiry teaser */}
|
||||||
|
<div className="bg-[#1a2720] rounded-lg p-5 border border-[#304036]">
|
||||||
|
<p className="text-[#b0bfb8] text-sm">
|
||||||
|
Questions about your stay? We'd love to hear from you.
|
||||||
|
Send us a message or call — every enquiry is answered within 4
|
||||||
|
hours.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user