"use client"; import { useMemo } from "react"; import { cn } from "@/shared/lib/utils"; import type { DeskReservation } from "../types"; import { DESKS } from "../types"; import { getMonday, toDateKey, formatDateShort, getReservationsForDate, isDateBookable, } from "../services/reservation-service"; interface DeskCalendarProps { /** The week anchor date */ weekStart: Date; selectedDate: string; reservations: DeskReservation[]; onSelectDate: (dateKey: string) => void; onPrevWeek: () => void; onNextWeek: () => void; canGoPrev: boolean; canGoNext: boolean; } export function DeskCalendar({ weekStart, selectedDate, reservations, onSelectDate, onPrevWeek, onNextWeek, canGoPrev, canGoNext, }: DeskCalendarProps) { const monday = useMemo(() => getMonday(weekStart), [weekStart]); const weekDays = useMemo(() => { const days: string[] = []; for (let i = 0; i < 5; i++) { const d = new Date(monday); d.setDate(monday.getDate() + i); days.push(toDateKey(d)); } return days; }, [monday]); const todayKey = toDateKey(new Date()); return (
{/* Week navigation */}
{/* Day cells */}
{weekDays.map((dateKey) => { const dayReservations = getReservationsForDate(dateKey, reservations); const bookedCount = dayReservations.length; const totalDesks = DESKS.length; const isSelected = dateKey === selectedDate; const isToday = dateKey === todayKey; const bookable = isDateBookable(dateKey); const isPast = dateKey < todayKey; const hasNoBookings = bookedCount === 0 && !isPast; return ( ); })}
); }