import React from 'react' import { startOfMonth, endOfMonth, startOfWeek, endOfWeek, eachDayOfInterval, format, isSameMonth, isSameDay, isToday, } from 'date-fns' import { parseLocalDate, sortAppointmentsByTime } from '../../utils/agendaDate.js' export function AgendaMonthlyView({ baseDate, appointments, onDayClick }) { const monthStart = startOfMonth(baseDate) const monthEnd = endOfMonth(monthStart) const startDate = startOfWeek(monthStart, { weekStartsOn: 0 }) const endDate = endOfWeek(monthEnd, { weekStartsOn: 0 }) const days = eachDayOfInterval({ start: startDate, end: endDate }) const weekDays = ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'] return (
{weekDays.map((day) => (
{day}
))}
{days.map((day) => { const isCurrentMonth = isSameMonth(day, monthStart) const dayAppointments = sortAppointmentsByTime( appointments.filter((appointment) => { if (!appointment.date) return false const appointmentDate = parseLocalDate(appointment.date) return appointmentDate && isSameDay(appointmentDate, day) }), ) return ( ) })}
) } function getStatusToneClass(status) { switch (status) { case 'Confirmada': return 'agenda-event-confirmed' case 'Em triagem': return 'agenda-event-triage' case 'Cancelada': return 'agenda-event-cancelled' case 'Bloqueado': return 'agenda-event-blocked' case 'Aguardando': default: return 'agenda-event-waiting' } } function getDotColor(status) { switch (status) { case 'Confirmada': return 'bg-[#10b981]' case 'Em triagem': return 'bg-[#f59e0b]' case 'Aguardando': return 'bg-[#a3a3a3]' case 'Bloqueado': return 'bg-[#737373]' default: return 'bg-[#3b82f6]' } }