import { useState } from 'preact/hooks';
import { Dialog, DialogPanel, DialogTitle, Tab, TabGroup, TabList, TabPanel, TabPanels, Transition, TransitionChild } from '@headlessui/react';
export interface FacilityItem {
text: string;
}
export interface FacilityCategory {
title: string;
items: FacilityItem[];
}
interface FacilitiesCardProps {
title?: string;
left: FacilityCategory[];
middle: FacilityCategory[];
right: FacilityCategory[];
seeMoreShow?: boolean;
}
function CategorySection({ category }: { category: FacilityCategory }) {
return (
{category.title}
{category.items.map((item, i) => (
{item.text}
))}
);
}
export function FacilitiesCard({ title = 'Facilities & Amenities', left, middle, right, seeMoreShow }: FacilitiesCardProps) {
const [dialogOpen, setDialogOpen] = useState(false);
// Flatten all categories from the 3 columns into a single ordered list for tabs
const allCategories = [...left, ...middle, ...right];
function handleSeeMore() {
setDialogOpen(true);
}
return (
<>
{title}
{left.map((cat, i) => )}
{middle.map((cat, i) => )}
{right.map((cat, i) => )}
{seeMoreShow !== undefined && (
See more
)}
{/* Dialog */}
setDialogOpen(false)} className="relative z-50">
{/* Backdrop */}
{/* Panel container */}
{/* Close button — top right */}
setDialogOpen(false)}
className="absolute top-5 right-5 text-tertiary hover:text-white transition-colors text-2xl leading-none w-9 h-9 flex items-center justify-center rounded-full hover:bg-white/10 z-10"
>
×
{/* Header */}
{title}
{/* Pill tabs */}
{allCategories.map((cat, i) => (
{cat.title}
))}
{/* Tab panels */}
{allCategories.map((cat, i) => (
{cat.items.map((item, j) => (
{item.text}
))}
))}
>
);
}
export default FacilitiesCard;