import { useState, useMemo, useEffect } from "react"; import styles from "./calendar.module.css"; import { formatDateLetterJS } from "../../utils/date/formatDateLetter.js"; function Calendar({ events = [] }) { const monthNames = [ "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre" ]; const today = new Date(); const [currentMonth, setCurrentMonth] = useState(today.getMonth()); const [currentYear] = useState(today.getFullYear()); const [selectedDay, setSelectedDay] = useState(null); const eventsByDate = useMemo(() => { return events.reduce((acc, ev) => { if (!ev?.start) return acc; const dateKey = ev.start.split(" ")[0]; // YYYY-MM-DD if (!acc[dateKey]) acc[dateKey] = []; acc[dateKey].push(ev); return acc; }, {}); }, [events]); useEffect(() => { const key = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, "0")}-${String(today.getDate()).padStart(2, "0")}`; setSelectedDay({ date: key, events: eventsByDate[key] || [] }); }, [eventsByDate]); const daysInMonth = new Date(currentYear, currentMonth + 1, 0).getDate(); const firstDay = new Date(currentYear, currentMonth, 1).getDay(); const startDay = (firstDay + 6) % 7; const days = []; for (let i = 0; i < startDay; i++) days.push(null); for (let i = 1; i <= daysInMonth; i++) days.push(i); const selectDay = (year, month, day) => { const key = `${year}-${String(month + 1).padStart(2, "0")}-${String(day).padStart(2, "0")}`; setSelectedDay({ date: key, events: eventsByDate[key] || [] }); }; const handleDayClick = (day) => { if (!day) return; selectDay(currentYear, currentMonth, day); }; return (
{monthNames[currentMonth]} {currentYear}
| Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
|---|---|---|---|---|---|---|
| ; const key = `${currentYear}-${String(currentMonth + 1).padStart(2, "0")}-${String(day).padStart(2, "0")}`; const hasEvent = (eventsByDate[key]?.length ?? 0) > 0; return ( | handleDayClick(day)} > {day} | ); })}
Aucun événement ce jour-là.
)}