import {useState, useMemo, useEffect, useContext} from "react"; import styles from "./Calendar.module.css"; import {formatDateLetterJS} from "../../../../utils/date/formatDateLetter.js"; import {AuthContext} from "../../../../contexts/Auth/AuthContext.ts"; import ExportBtn from "../../../../components/ExportCalendarBtn/ExportBtn.tsx"; function Calendar() { const { user } = useContext(AuthContext); 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, setCurrentYear] = useState(today.getFullYear()); const [selectedDay, setSelectedDay] = useState(null); const eventsByDate = useMemo(() => { if (!user?.tasks) return {}; return user.tasks.reduce((eventsByDate, task) => { if (!task?.start) return eventsByDate; const dateKey = task.start.split(" ")[0]; if (!eventsByDate[dateKey]) eventsByDate[dateKey] = []; eventsByDate[dateKey].push(task); return eventsByDate; }, {}); }, [user]); 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à.
)}