This commit is contained in:
Vula Builder
2026-10-11 14:20:28 +00:00
parent 93d2b922cc
commit b70a0da6eb
@@ -0,0 +1,42 @@
'use client'
import { useVulaContent } from '@/hooks/useVulaContent'
import { Tag } from 'lucide-react'
// CmsItem shape: { id, title: string|null, data: Record<string, unknown>, ... }
// Custom fields (price, description, image, available_until) live inside .data
export default function SpecialsSection() {
const { items: specials, isLoading } = useVulaContent('specials')
if (isLoading) return (
<section className="py-20 bg-muted/30"><div className="container mx-auto px-4"><div className="grid grid-cols-1 md:grid-cols-3 gap-6">{Array.from({ length: 3 }).map((_, i) => <div key={i} className="h-64 rounded-xl bg-muted animate-pulse" />)}</div></div></section>
)
if (!specials?.length) return null
return (
<section data-vula-section="specials" className="py-20 bg-muted/30">
<div className="container mx-auto px-4">
<div className="text-center mb-10">
<div className="flex items-center justify-center gap-2 mb-2"><Tag className="h-5 w-5 text-primary" /><p className="text-xs uppercase tracking-widest text-primary font-semibold">Limited Time</p></div>
<h2 className="text-3xl font-bold text-foreground">Today's Specials</h2>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{specials.map((s) => {
const d = s.data as Record<string, string>
return (
<div key={s.id} className="bg-card rounded-xl overflow-hidden border border-border hover:shadow-md transition-all">
{d.image && <div className="aspect-video overflow-hidden"><img src={d.image} alt={s.title || ''} className="w-full h-full object-cover hover:scale-105 transition-transform duration-500" /></div>}
<div className="p-5">
<div className="flex items-start justify-between gap-3 mb-2">
<h3 className="font-semibold text-foreground text-lg leading-tight">{s.title}</h3>
{d.price && <span className="text-primary font-bold text-lg whitespace-nowrap">{d.price}</span>}
</div>
{d.description && <p className="text-muted-foreground text-sm leading-relaxed">{d.description}</p>}
{d.available_until && <p className="text-xs text-muted-foreground mt-3 font-medium">Until {d.available_until}</p>}
</div>
</div>
)
})}
</div>
</div>
</section>
)
}