import type { EventSummary } from '../../types' import { startOfWeek, addDays, isSameDay, eventOccursOnDay, formatDayHeader, formatTime, HOURS, HOUR_PX, timedLayout, } from '../../dateUtils' export default function WeekGrid({ events, date, onSelectDate, onSelectEvent }: { events: EventSummary[] date: Date onSelectDate?: (d: Date) => void onSelectEvent: (id: number) => void }) { const weekStart = startOfWeek(date) const days = Array.from({ length: 7 }, (_, i) => addDays(weekStart, i)) const today = new Date() const allDayByDay = days.map(day => events.filter(ev => ev.all_day && eventOccursOnDay(ev, day))) const timedByDay = days.map(day => events.filter(ev => !ev.all_day && eventOccursOnDay(ev, day))) return (
{days.map(day => (
onSelectDate?.(day)} style={{ cursor: 'pointer' }} > {formatDayHeader(day)}
))}
{days.map((day, i) => (
{allDayByDay[i].map(ev => ( onSelectEvent(ev.id)} > {ev.title} ))}
))}
{HOURS.map(h => (
{h === 0 ? '' : `${h}:00`}
))}
{days.map((day, i) => (
onSelectDate?.(day)} > {HOURS.map(h =>
)} {timedByDay[i].map(ev => { const { top, height } = timedLayout(ev, day) return (
{ e.stopPropagation(); onSelectEvent(ev.id) }} title={ev.title} > {formatTime(ev.start_at)} {ev.title}
) })}
))}
) }