Files
n3wt-school/Front-End/src/context/PlanningContext.js
2024-12-14 15:28:07 +01:00

96 lines
2.8 KiB
JavaScript

import { createContext, useContext, useState } from 'react';
import { mockEvents, mockSchedules } from '@/data/mockData';
/**
* Contexte de planification pour gérer l'état global du planning
* Fournit des fonctionnalités pour :
* - Gestion des événements (ajout, modification, suppression)
* - Gestion des emplois du temps (ajout, modification, suppression)
* - Gestion de la visibilité des emplois du temps
* - Contrôle de la vue du calendrier (date courante, type de vue)
* - Stockage de l'état des événements et des emplois du temps
*/
const PlanningContext = createContext();
export function PlanningProvider({ children }) {
// const [events, setEvents] = useState([]);
// const [schedules, setSchedules] = useState([]);
// const [selectedSchedule, setSelectedSchedule] = useState(null);
const [events, setEvents] = useState(mockEvents);
const [schedules, setSchedules] = useState(mockSchedules);
const [selectedSchedule, setSelectedSchedule] = useState(mockSchedules[0].id);
const [currentDate, setCurrentDate] = useState(new Date());
const [viewType, setViewType] = useState('week'); // Changer 'month' en 'week'
const [hiddenSchedules, setHiddenSchedules] = useState([]);
const addEvent = (newEvent) => {
setEvents((prevEvents) => [...prevEvents, newEvent]);
};
const updateEvent = (id, updatedEvent) => {
setEvents((prevEvents) =>
prevEvents.map((event) => (event.id === id ? updatedEvent : event))
);
};
const deleteEvent = (id) => {
setEvents((prevEvents) => prevEvents.filter((event) => event.id !== id));
};
const addSchedule = (newSchedule) => {
setSchedules((prevSchedules) => [...prevSchedules, newSchedule]);
};
const updateSchedule = (id, updatedSchedule) => {
setSchedules((prevSchedules) =>
prevSchedules.map((schedule) =>
schedule.id === id ? updatedSchedule : schedule
)
);
};
const deleteSchedule = (id) => {
setSchedules((prevSchedules) =>
prevSchedules.filter((schedule) => schedule.id !== id)
);
};
const toggleScheduleVisibility = (scheduleId) => {
setHiddenSchedules((prev) => {
const isHidden = prev.includes(scheduleId);
const newHiddenSchedules = isHidden
? prev.filter((id) => id !== scheduleId)
: [...prev, scheduleId];
return newHiddenSchedules;
});
};
const value = {
events,
setEvents,
schedules,
setSchedules,
selectedSchedule,
setSelectedSchedule,
addEvent,
updateEvent,
deleteEvent,
addSchedule,
updateSchedule,
deleteSchedule,
currentDate,
setCurrentDate,
viewType,
setViewType,
hiddenSchedules,
toggleScheduleVisibility
};
return (
<PlanningContext.Provider value={value}>
{children}
</PlanningContext.Provider>
);
}
export const usePlanning = () => useContext(PlanningContext);