'use client'; import { useState, useEffect } from 'react'; import { Card } from '@/types'; export default function PublicGrid({ cards, maxCols = 5 }: { cards: Card[], maxCols?: number }) { const [activeCard, setActiveCard] = useState(null); // Prevent background scrolling when modal is open useEffect(() => { if (activeCard) document.body.style.overflow = 'hidden'; else document.body.style.overflow = 'unset'; return () => { document.body.style.overflow = 'unset'; } }, [activeCard]); // Tailwind classes mapping based on the admin's chosen max columns const gridClasses: Record = { 3: 'xl:grid-cols-3 lg:grid-cols-3 md:grid-cols-2 grid-cols-1', // ADDED THIS LINE 4: 'xl:grid-cols-4 lg:grid-cols-3 md:grid-cols-2 grid-cols-1', 5: 'xl:grid-cols-5 lg:grid-cols-4 md:grid-cols-3 grid-cols-1', 6: 'xl:grid-cols-6 lg:grid-cols-4 md:grid-cols-3 grid-cols-2', 7: 'xl:grid-cols-7 lg:grid-cols-5 md:grid-cols-4 grid-cols-2', 8: 'xl:grid-cols-8 lg:grid-cols-6 md:grid-cols-4 grid-cols-2', }; const activeGridClass = gridClasses[maxCols] || gridClasses[5]; return ( <>
{cards.map((card) => (
setActiveCard(card)} className="group relative cursor-pointer overflow-hidden rounded-xl shadow-md aspect-square bg-gray-200 transition-all duration-300 hover:shadow-xl hover:-translate-y-1" > {card.imageUrl ? ( {card.title} ) : (
No Image
)}

{card.title}

{card.shortDescription}

))}
{/* Improved Modal Pop-up */} {activeCard && (
setActiveCard(null)} // Click outside to close >
e.stopPropagation()} // Prevent clicks inside modal from closing it >
{activeCard.imageUrl && ( )} {/* Improved Close Button */}
{activeCard.cardType.replace('_', ' ')}

{activeCard.title}

{activeCard.fullContent ? (
) : (

{activeCard.shortDescription}

)}
)} ); }