import React, { useEffect, useState } from 'react'; import { usePlanning, PlanningModes } from '@/context/PlanningContext'; import WeekView from '@/components/Calendar/WeekView'; import MonthView from '@/components/Calendar/MonthView'; import YearView from '@/components/Calendar/YearView'; import PlanningView from '@/components/Calendar/PlanningView'; import DayView from '@/components/Calendar/DayView'; import ToggleView from '@/components/ToggleView'; import { ChevronLeft, ChevronRight, Plus, ChevronDown } from 'lucide-react'; import { format, addWeeks, addMonths, addYears, addDays, subWeeks, subMonths, subYears, subDays, getWeek, setMonth, setYear, } from 'date-fns'; import { fr } from 'date-fns/locale'; import { AnimatePresence, motion } from 'framer-motion'; // Ajouter cet import import logger from '@/utils/logger'; const Calendar = ({ modeSet, onDateClick, onEventClick, planningClassName = '', onOpenDrawer = () => {} }) => { const { currentDate, setCurrentDate, viewType, setViewType, events, hiddenSchedules, planningMode, parentView } = usePlanning(); const [visibleEvents, setVisibleEvents] = useState([]); const [showDatePicker, setShowDatePicker] = useState(false); const [isMobile, setIsMobile] = useState(false); useEffect(() => { const check = () => setIsMobile(window.innerWidth < 768); check(); window.addEventListener('resize', check); return () => window.removeEventListener('resize', check); }, []); // Ajouter ces fonctions pour la gestion des mois et années const months = Array.from({ length: 12 }, (_, i) => ({ value: i, label: format(new Date(2024, i, 1), 'MMMM', { locale: fr }), })); const years = Array.from({ length: 10 }, (_, i) => ({ value: new Date().getFullYear() - 5 + i, label: new Date().getFullYear() - 5 + i, })); const handleMonthSelect = (monthIndex) => { setCurrentDate(setMonth(currentDate, monthIndex)); setShowDatePicker(false); }; const handleYearSelect = (year) => { setCurrentDate(setYear(currentDate, year)); setShowDatePicker(false); }; useEffect(() => { // S'assurer que le filtrage est fait au niveau parent const filtered = events?.filter( (event) => !hiddenSchedules.includes(event.planning) ); setVisibleEvents(filtered); logger.debug('Events filtrés:', filtered); // Debug }, [events, hiddenSchedules]); const navigateDate = (direction) => { const getNewDate = () => { const effectiveView = isMobile ? 'day' : viewType; switch (effectiveView) { case 'day': return direction === 'next' ? addDays(currentDate, 1) : subDays(currentDate, 1); case 'week': return direction === 'next' ? addWeeks(currentDate, 1) : subWeeks(currentDate, 1); case 'month': return direction === 'next' ? addMonths(currentDate, 1) : subMonths(currentDate, 1); case 'year': return direction === 'next' ? addYears(currentDate, 1) : subYears(currentDate, 1); default: return currentDate; } }; setCurrentDate(getNewDate()); }; return (