"use client"; import { useState, useEffect } from "react"; import { WeekCalendar } from "./WeekCalendar"; import { MobileCardList } from "./MobileCardList"; import { WeekNav } from "./WeekNav"; import { Legend } from "./Legend"; import { EmptyState } from "./EmptyState"; import { PARKS, groupByRegion } from "@/lib/parks"; import type { DayData } from "@/lib/db"; const COASTER_MODE_KEY = "coasterMode"; interface HomePageClientProps { weekStart: string; weekDates: string[]; today: string; isCurrentWeek: boolean; data: Record>; rideCounts: Record; coasterCounts: Record; hasCoasterData: boolean; scrapedCount: number; } export function HomePageClient({ weekStart, weekDates, today, isCurrentWeek, data, rideCounts, coasterCounts, hasCoasterData, scrapedCount, }: HomePageClientProps) { const [coastersOnly, setCoastersOnly] = useState(false); // Hydrate from localStorage after mount to avoid SSR mismatch. useEffect(() => { setCoastersOnly(localStorage.getItem(COASTER_MODE_KEY) === "true"); }, []); const toggle = () => { const next = !coastersOnly; setCoastersOnly(next); localStorage.setItem(COASTER_MODE_KEY, String(next)); }; const activeCounts = coastersOnly ? coasterCounts : rideCounts; const visibleParks = PARKS.filter((park) => weekDates.some((date) => data[park.id]?.[date]?.isOpen) ); const grouped = groupByRegion(visibleParks); return (
{/* ── Header ───────────────────────────────────────────────────────────── */}
{/* Row 1: Title + controls */}
Thoosie Calendar
{hasCoasterData && ( )} 0 ? "var(--color-open-bg)" : "var(--color-surface)", border: `1px solid ${visibleParks.length > 0 ? "var(--color-open-border)" : "var(--color-border)"}`, borderRadius: 20, padding: "4px 14px", fontSize: "0.78rem", color: visibleParks.length > 0 ? "var(--color-open-hours)" : "var(--color-text-muted)", fontWeight: 600, }}> {visibleParks.length} of {PARKS.length} parks open this week
{/* Row 2: Week nav + legend */}
{/* ── Main content ────────────────────────────────────────────────────── */}
{scrapedCount === 0 ? ( ) : ( <> {/* Mobile: card list (hidden on lg+) */}
{/* Desktop: week table (hidden below lg) */}
)}
); }