mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-29 07:53:23 +00:00
chore: Initial Commit
feat: Gestion des inscriptions [#1] feat(frontend): Création des vues pour le paramétrage de l'école [#2] feat: Gestion du login [#6] fix: Correction lors de la migration des modèle [#8] feat: Révision du menu principal [#9] feat: Ajout d'un footer [#10] feat: Création des dockers compose pour les environnements de développement et de production [#12] doc(ci): Mise en place de Husky et d'un suivi de version automatique [#14]
This commit is contained in:
26
Front-End/src/hooks/useCalendar.js
Normal file
26
Front-End/src/hooks/useCalendar.js
Normal file
@ -0,0 +1,26 @@
|
||||
import { useState } from 'react';
|
||||
import { addDays, addMonths, addYears } from 'date-fns';
|
||||
|
||||
export function useCalendar() {
|
||||
const [currentDate, setCurrentDate] = useState(new Date());
|
||||
const [viewType, setViewType] = useState('week');
|
||||
|
||||
const navigateDate = (direction) => {
|
||||
const newDate = new Date(currentDate);
|
||||
const operations = {
|
||||
week: (date) => direction === 'prev' ? addDays(date, -7) : addDays(date, 7),
|
||||
month: (date) => direction === 'prev' ? addMonths(date, -1) : addMonths(date, 1),
|
||||
year: (date) => direction === 'prev' ? addYears(date, -1) : addYears(date, 1)
|
||||
};
|
||||
|
||||
setCurrentDate(operations[viewType](newDate));
|
||||
};
|
||||
|
||||
return {
|
||||
currentDate,
|
||||
setCurrentDate,
|
||||
viewType,
|
||||
setViewType,
|
||||
navigateDate
|
||||
};
|
||||
}
|
||||
29
Front-End/src/hooks/useCsrfToken.js
Normal file
29
Front-End/src/hooks/useCsrfToken.js
Normal file
@ -0,0 +1,29 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
import { BK_GET_CSRF } from '@/utils/Url';
|
||||
|
||||
const useCsrfToken = () => {
|
||||
const [token, setToken] = useState('');
|
||||
|
||||
useEffect(() => {
|
||||
fetch(`${BK_GET_CSRF}`, {
|
||||
method: 'GET',
|
||||
credentials: 'include' // Inclut les cookies dans la requête
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data) {
|
||||
if(data.csrfToken != token) {
|
||||
setToken(data.csrfToken);
|
||||
console.log('------------> CSRF Token reçu:', data.csrfToken);
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error fetching CSRF token:', error);
|
||||
});
|
||||
}, []);
|
||||
|
||||
return token;
|
||||
};
|
||||
|
||||
export default useCsrfToken;
|
||||
63
Front-End/src/hooks/useEvents.js
Normal file
63
Front-End/src/hooks/useEvents.js
Normal file
@ -0,0 +1,63 @@
|
||||
import { useState } from 'react';
|
||||
|
||||
export function useSchedules() {
|
||||
const [schedules, setSchedules] = useState([
|
||||
{ id: 'default', name: 'Planning principal', color: '#10b981' },
|
||||
{ id: 'secondary', name: 'Planning secondaire', color: '#3b82f6' },
|
||||
{ id: 'special', name: 'Événements spéciaux', color: '#ef4444' },
|
||||
{ id: 'exam', name: 'Planning examens', color: '#f59e0b' }
|
||||
]);
|
||||
|
||||
const addSchedule = (newSchedule) => {
|
||||
setSchedules(prev => [...prev, {
|
||||
...newSchedule,
|
||||
id: `schedule-${Date.now()}`
|
||||
}]);
|
||||
};
|
||||
|
||||
const updateSchedule = (id, updates) => {
|
||||
setSchedules(prev => prev.map(schedule =>
|
||||
schedule.id === id ? { ...schedule, ...updates } : schedule
|
||||
));
|
||||
};
|
||||
|
||||
const deleteSchedule = (id) => {
|
||||
setSchedules(prev => prev.filter(schedule => schedule.id !== id));
|
||||
};
|
||||
|
||||
return {
|
||||
schedules,
|
||||
addSchedule,
|
||||
updateSchedule,
|
||||
deleteSchedule
|
||||
};
|
||||
}
|
||||
|
||||
export function useEvents(initialEvents = []) {
|
||||
const [events, setEvents] = useState(initialEvents);
|
||||
|
||||
const addEvent = (newEvent) => {
|
||||
setEvents(prev => [...prev, {
|
||||
...newEvent,
|
||||
id: `event-${Date.now()}`
|
||||
}]);
|
||||
};
|
||||
|
||||
const updateEvent = (id, updates) => {
|
||||
setEvents(prev => prev.map(event =>
|
||||
event.id === id ? { ...event, ...updates } : event
|
||||
));
|
||||
};
|
||||
|
||||
const deleteEvent = (id) => {
|
||||
setEvents(prev => prev.filter(event => event.id !== id));
|
||||
};
|
||||
|
||||
return {
|
||||
events,
|
||||
setEvents,
|
||||
addEvent,
|
||||
updateEvent,
|
||||
deleteEvent
|
||||
};
|
||||
}
|
||||
31
Front-End/src/hooks/useLocalStorage.js
Normal file
31
Front-End/src/hooks/useLocalStorage.js
Normal file
@ -0,0 +1,31 @@
|
||||
import { useState } from "react"
|
||||
|
||||
const useLocalStorage = (key, initialValue) => {
|
||||
const [state, setState] = useState(() => {
|
||||
// Initialize the state
|
||||
try {
|
||||
const value = window.localStorage.getItem(key)
|
||||
// Check if the local storage already has any values,
|
||||
// otherwise initialize it with the passed initialValue
|
||||
return value ? JSON.parse(value) : initialValue
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
}
|
||||
})
|
||||
|
||||
const setValue = value => {
|
||||
try {
|
||||
// If the passed value is a callback function,
|
||||
// then call it with the existing state.
|
||||
const valueToStore = value instanceof Function ? value(state) : value
|
||||
window.localStorage.setItem(key, JSON.stringify(valueToStore))
|
||||
setState(value)
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
}
|
||||
}
|
||||
|
||||
return [state, setValue]
|
||||
}
|
||||
|
||||
export default useLocalStorage
|
||||
60
Front-End/src/hooks/useSchedules.js
Normal file
60
Front-End/src/hooks/useSchedules.js
Normal file
@ -0,0 +1,60 @@
|
||||
import { useState } from 'react';
|
||||
import { mockEvents, mockSchedules } from '@/data/mockData';
|
||||
|
||||
export default function useSchedules() {
|
||||
const [schedules, setSchedules] = useState(mockSchedules);
|
||||
const [events, setEvents] = useState(mockEvents);
|
||||
const [selectedSchedule, setSelectedSchedule] = useState(mockSchedules[0].id);
|
||||
|
||||
const addEvent = async (eventData) => {
|
||||
const newEvent = {
|
||||
...eventData,
|
||||
id: `event-${Date.now()}`,
|
||||
color: schedules.find(s => s.id === eventData.scheduleId)?.color || '#10b981'
|
||||
};
|
||||
setEvents(prev => [...prev, newEvent]);
|
||||
return newEvent;
|
||||
};
|
||||
|
||||
const updateEvent = async (eventId, updates) => {
|
||||
setEvents(prev => prev.map(event =>
|
||||
event.id === eventId ? { ...event, ...updates } : event
|
||||
));
|
||||
return updates;
|
||||
};
|
||||
|
||||
const deleteEvent = async (eventId) => {
|
||||
setEvents(prev => prev.filter(event => event.id !== eventId));
|
||||
return eventId;
|
||||
};
|
||||
|
||||
const addSchedule = (newSchedule) => {
|
||||
setSchedules(prev => [...prev, {
|
||||
...newSchedule,
|
||||
id: `schedule-${Date.now()}`
|
||||
}]);
|
||||
};
|
||||
|
||||
const updateSchedule = (id, updates) => {
|
||||
setSchedules(prev => prev.map(schedule =>
|
||||
schedule.id === id ? { ...schedule, ...updates } : schedule
|
||||
));
|
||||
};
|
||||
|
||||
const deleteSchedule = (id) => {
|
||||
setSchedules(prev => prev.filter(schedule => schedule.id !== id));
|
||||
};
|
||||
|
||||
return {
|
||||
events,
|
||||
schedules,
|
||||
selectedSchedule,
|
||||
setSelectedSchedule,
|
||||
addEvent,
|
||||
updateEvent,
|
||||
deleteEvent,
|
||||
addSchedule,
|
||||
updateSchedule,
|
||||
deleteSchedule
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user