feat: auto-refresh homepage data every 2 minutes on current week
All checks were successful
Build and Deploy / Build & Push (push) Successful in 52s
All checks were successful
Build and Deploy / Build & Push (push) Successful in 52s
Uses router.refresh() to re-run server data fetching (ride counts, open status) without a full page reload. Only runs when viewing the current week — no need to poll for past/future weeks. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useState, useEffect } from "react";
|
import { useState, useEffect } from "react";
|
||||||
|
import { useRouter } from "next/navigation";
|
||||||
import { WeekCalendar } from "./WeekCalendar";
|
import { WeekCalendar } from "./WeekCalendar";
|
||||||
import { MobileCardList } from "./MobileCardList";
|
import { MobileCardList } from "./MobileCardList";
|
||||||
import { WeekNav } from "./WeekNav";
|
import { WeekNav } from "./WeekNav";
|
||||||
@@ -9,6 +10,8 @@ import { EmptyState } from "./EmptyState";
|
|||||||
import { PARKS, groupByRegion } from "@/lib/parks";
|
import { PARKS, groupByRegion } from "@/lib/parks";
|
||||||
import type { DayData } from "@/lib/db";
|
import type { DayData } from "@/lib/db";
|
||||||
|
|
||||||
|
const REFRESH_INTERVAL_MS = 2 * 60 * 1000; // 2 minutes
|
||||||
|
|
||||||
const COASTER_MODE_KEY = "coasterMode";
|
const COASTER_MODE_KEY = "coasterMode";
|
||||||
|
|
||||||
interface HomePageClientProps {
|
interface HomePageClientProps {
|
||||||
@@ -36,6 +39,7 @@ export function HomePageClient({
|
|||||||
hasCoasterData,
|
hasCoasterData,
|
||||||
scrapedCount,
|
scrapedCount,
|
||||||
}: HomePageClientProps) {
|
}: HomePageClientProps) {
|
||||||
|
const router = useRouter();
|
||||||
const [coastersOnly, setCoastersOnly] = useState(false);
|
const [coastersOnly, setCoastersOnly] = useState(false);
|
||||||
|
|
||||||
// Hydrate from localStorage after mount to avoid SSR mismatch.
|
// Hydrate from localStorage after mount to avoid SSR mismatch.
|
||||||
@@ -43,6 +47,13 @@ export function HomePageClient({
|
|||||||
setCoastersOnly(localStorage.getItem(COASTER_MODE_KEY) === "true");
|
setCoastersOnly(localStorage.getItem(COASTER_MODE_KEY) === "true");
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
// Periodically re-fetch server data (ride counts, open status) without a full page reload.
|
||||||
|
useEffect(() => {
|
||||||
|
if (!isCurrentWeek) return;
|
||||||
|
const id = setInterval(() => router.refresh(), REFRESH_INTERVAL_MS);
|
||||||
|
return () => clearInterval(id);
|
||||||
|
}, [isCurrentWeek, router]);
|
||||||
|
|
||||||
// Remember the current week so the park page back button returns here.
|
// Remember the current week so the park page back button returns here.
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
localStorage.setItem("lastWeek", weekStart);
|
localStorage.setItem("lastWeek", weekStart);
|
||||||
|
|||||||
Reference in New Issue
Block a user