feat: Gestion du planning [3]

This commit is contained in:
Luc SORIGNET
2025-05-03 15:12:17 +02:00
parent cb4fe74a9e
commit 58144ba0d0
39 changed files with 939 additions and 1864 deletions

View File

@ -23,13 +23,25 @@ import { useEstablishment } from '@/context/EstablishmentContext';
*/
const PlanningContext = createContext();
export function PlanningProvider({ children }) {
// const [events, setEvents] = useState([]);
// const [schedules, setSchedules] = useState([]);
// const [selectedSchedule, setSelectedSchedule] = useState(null);
export const RecurrenceType = Object.freeze({
NONE: 0,
DAILY: 1,
WEEKLY: 2,
MONTHLY: 3,
CUSTOM: 4,
});
export const PlanningModes = Object.freeze({
CLASS_SCHEDULE: 'classSchedule',
PLANNING: 'planning'
});
export function PlanningProvider({ children, modeSet=PlanningModes.PLANNING}) {
const [events, setEvents] = useState([]);
const [schedules, setSchedules] = useState([]);
const [selectedSchedule, setSelectedSchedule] = useState(0);
const [planningMode, setPlanningMode] = useState(modeSet);
const [currentDate, setCurrentDate] = useState(new Date());
const [viewType, setViewType] = useState('week'); // Changer 'month' en 'week'
const [hiddenSchedules, setHiddenSchedules] = useState([]);
@ -37,60 +49,61 @@ export function PlanningProvider({ children }) {
const csrfToken = useCsrfToken();
useEffect(() => {
fetchPlannings().then((data) => {
setSchedules(data);
if (data.length > 0) {
setSelectedSchedule(data[0].id);
}
});
fetchEvents().then((data) => {
setEvents(data);
});
}, []);
reloadPlanning();
reloadEvents();
}, [planningMode, selectedEstablishmentId]);
const reloadEvents = () =>{
fetchEvents(selectedEstablishmentId, planningMode).then((data) => {
setEvents(data);
});
}
const reloadPlanning = () =>{
fetchPlannings(selectedEstablishmentId, planningMode).then((data) => {
setSchedules(data);
if (data.length > 0) {
setSelectedSchedule(data[0].id);
}
});
}
const addEvent = (newEvent) => {
createEvent(newEvent).then((data) => {
setEvents((prevEvents) => [...prevEvents, data]);
createEvent(newEvent).then(() => {
reloadEvents();
});
};
const handleUpdateEvent = (id, updatedEvent) => {
updateEvent(id, updatedEvent, csrfToken).then((data) => {
setEvents((prevEvents) =>
prevEvents.map((event) => (event.id === id ? updatedEvent : event))
);
reloadEvents();
});
};
const handleDeleteEvent = (id) => {
deleteEvent(id, csrfToken).then((data) => {
setEvents((prevEvents) => prevEvents.filter((event) => event.id !== id));
reloadEvents();
});
};
const addSchedule = (newSchedule) => {
logger.debug('newSchedule', newSchedule);
newSchedule.establishment = selectedEstablishmentId;
createPlanning(newSchedule, csrfToken).then((data) => {
setSchedules((prevSchedules) => [...prevSchedules, data]);
createPlanning(newSchedule, csrfToken).then((_) => {
reloadPlanning();
});
};
const updateSchedule = (id, updatedSchedule) => {
updatePlanning(id, updatedSchedule, csrfToken).then((data) => {
setSchedules((prevSchedules) =>
prevSchedules.map((schedule) =>
schedule.id === id ? updatedSchedule : schedule
)
);
reloadPlanning();
});
};
const deleteSchedule = (id) => {
deletePlanning(id, csrfToken).then((data) => {
setSchedules((prevSchedules) =>
prevSchedules.filter((schedule) => schedule.id !== id)
);
reloadPlanning();
reloadEvents();
});
};
@ -123,6 +136,9 @@ export function PlanningProvider({ children }) {
setViewType,
hiddenSchedules,
toggleScheduleVisibility,
planningMode,
reloadEvents,
reloadPlanning,
};
return (