"use client"; import { useEffect } from "react"; import { useRouter } from "next/navigation"; interface WeekNavProps { weekStart: string; // YYYY-MM-DD (Sunday) weekDates: string[]; // 7 dates YYYY-MM-DD isCurrentWeek: boolean; } const MONTHS = [ "Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec", ]; function formatLabel(dates: string[]): string { const s = new Date(dates[0] + "T00:00:00"); const e = new Date(dates[6] + "T00:00:00"); if (s.getFullYear() === e.getFullYear() && s.getMonth() === e.getMonth()) { return `${MONTHS[s.getMonth()]} ${s.getDate()}–${e.getDate()}, ${s.getFullYear()}`; } const startStr = `${MONTHS[s.getMonth()]} ${s.getDate()}`; const endStr = `${MONTHS[e.getMonth()]} ${e.getDate()}, ${e.getFullYear()}`; return `${startStr} – ${endStr}`; } function shiftWeek(weekStart: string, delta: number): string { const d = new Date(weekStart + "T00:00:00"); d.setDate(d.getDate() + delta * 7); return d.toISOString().slice(0, 10); } export function WeekNav({ weekStart, weekDates, isCurrentWeek }: WeekNavProps) { const router = useRouter(); const nav = (delta: number) => { router.push(`/?week=${shiftWeek(weekStart, delta)}`); }; useEffect(() => { const onKey = (e: KeyboardEvent) => { if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) return; if (e.key === "ArrowLeft") nav(-1); if (e.key === "ArrowRight") nav(1); }; window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); }, [weekStart]); return (
{!isCurrentWeek && ( )} {formatLabel(weekDates)}
); } const navBtnStyle: React.CSSProperties = { padding: "10px 16px", borderRadius: 8, border: "1px solid var(--color-border)", background: "var(--color-surface)", color: "var(--color-text-muted)", cursor: "pointer", fontSize: "1rem", lineHeight: 1, transition: "background 150ms ease, border-color 150ms ease, color 150ms ease", minWidth: 44, textAlign: "center", }; const navBtnHover: React.CSSProperties = { padding: "10px 16px", borderRadius: 8, border: "1px solid var(--color-text-dim)", background: "var(--color-surface-2)", color: "var(--color-text-secondary)", cursor: "pointer", fontSize: "1rem", lineHeight: 1, transition: "background 150ms ease, border-color 150ms ease, color 150ms ease", minWidth: 44, textAlign: "center", }; const todayBtnStyle: React.CSSProperties = { padding: "5px 12px", borderRadius: 6, border: "1px solid var(--color-accent-muted)", background: "transparent", color: "var(--color-accent)", cursor: "pointer", fontSize: "0.75rem", fontWeight: 600, letterSpacing: "0.04em", textTransform: "uppercase", lineHeight: 1, transition: "background 150ms ease, color 150ms ease", }; const todayBtnHover: React.CSSProperties = { padding: "5px 12px", borderRadius: 6, border: "1px solid var(--color-accent-muted)", background: "var(--color-accent-muted)", color: "var(--color-accent-text)", cursor: "pointer", fontSize: "0.75rem", fontWeight: 600, letterSpacing: "0.04em", textTransform: "uppercase", lineHeight: 1, transition: "background 150ms ease, color 150ms ease", };