refactor: store selected week in a cookie, not the URL
Build and Deploy / Build & Push (push) Successful in 1m7s

The home page no longer reads ?week=YYYY-MM-DD from the URL. Selected week
lives in the tcWeek cookie, set via a server action that revalidates the
home page so the next render reflects it. The URL stays at "/" regardless
of which week the user is viewing.

WeekNav prev/next/today buttons (and the arrow-key bindings) call the
server action directly — no router.refresh dance, no client-side cookie
write. BackToCalendarLink drops its localStorage-based href reconstruction
and just links to "/" since the cookie already remembers the right week
across navigations.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-30 08:39:20 -04:00
parent 44d079efb9
commit 6447db3008
8 changed files with 56 additions and 32 deletions
+8 -9
View File
@@ -1,15 +1,14 @@
import { cookies } from "next/headers";
import { HomePageClient } from "@/components/HomePageClient";
import { getTodayLocal, formatDateLocal } from "@/lib/env";
const BACKEND_URL = process.env.BACKEND_URL ?? "http://localhost:3001";
interface PageProps {
searchParams: Promise<{ week?: string }>;
}
const WEEK_COOKIE = "tcWeek";
function getWeekStart(param: string | undefined): string {
if (param && /^\d{4}-\d{2}-\d{2}$/.test(param)) {
const d = new Date(param + "T00:00:00");
function getWeekStart(saved: string | undefined): string {
if (saved && /^\d{4}-\d{2}-\d{2}$/.test(saved)) {
const d = new Date(saved + "T00:00:00");
if (!isNaN(d.getTime())) {
d.setDate(d.getDate() - d.getDay());
return formatDateLocal(d);
@@ -21,9 +20,9 @@ function getWeekStart(param: string | undefined): string {
return formatDateLocal(d);
}
export default async function HomePage({ searchParams }: PageProps) {
const params = await searchParams;
const weekStart = getWeekStart(params.week);
export default async function HomePage() {
const saved = (await cookies()).get(WEEK_COOKIE)?.value;
const weekStart = getWeekStart(saved);
const data = await fetch(
`${BACKEND_URL}/api/calendar/week?start=${weekStart}`,