import type { EventSummary } from '../../types' import { monthGridDays, isSameDay, eventOccursOnDay, formatTime, WEEKDAY_LABELS } from '../../dateUtils' const MAX_VISIBLE = 3 export default function MonthGrid({ events, date, onSelectDate, onSelectEvent }: { events: EventSummary[] date: Date onSelectDate?: (d: Date) => void onSelectEvent: (ev: EventSummary) => void }) { const days = monthGridDays(date) const today = new Date() return (
{WEEKDAY_LABELS.map(d => (
{d}
))} {days.map(day => { const dayEvents = events .filter(ev => eventOccursOnDay(ev, day)) .sort((a, b) => a.start_at.localeCompare(b.start_at)) const cls = [ 'cal-day', day.getMonth() !== date.getMonth() ? 'other-month' : '', isSameDay(day, today) ? 'today' : '', ].filter(Boolean).join(' ') return (
onSelectDate?.(day)}>
{day.getDate()}
{dayEvents.slice(0, MAX_VISIBLE).map(ev => ( { e.stopPropagation(); onSelectEvent(ev) }} > {!ev.all_day && `${formatTime(ev.start_at)} `}{ev.title} ))} {dayEvents.length > MAX_VISIBLE && ( +{dayEvents.length - MAX_VISIBLE} more )}
) })}
) }