mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-04-04 04:01:27 +00:00
Fonction PWA et ajout du responsive design Planning mobile : - Nouvelle vue DayView avec bandeau semaine scrollable, date picker natif et navigation integree - ScheduleNavigation converti en drawer overlay sur mobile, sidebar fixe sur desktop - Suppression double barre navigation mobile, controles deplaces dans DayView - Date picker natif via label+input sur mobile Suivi pedagogique : - Refactorisation page grades avec composant Table partage - Colonnes stats par periode, absences, actions (Fiche + Evaluer) - Lien cliquable sur la classe vers SchoolClassManagement feat(backend): ajout associated_class_id dans StudentByRFCreationSerializer [#NEWTS-4] UI global : - Remplacement fleches texte par icones Lucide ChevronDown/ChevronRight - Pagination conditionnelle sur tous les tableaux plats - Layout responsive mobile : cartes separees fond transparent - Table.js : pagination optionnelle, wrapper md uniquement
82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
'use client';
|
|
import {
|
|
PlanningModes,
|
|
PlanningProvider,
|
|
RecurrenceType,
|
|
} from '@/context/PlanningContext';
|
|
import Calendar from '@/components/Calendar/Calendar';
|
|
import EventModal from '@/components/Calendar/EventModal';
|
|
import ScheduleNavigation from '@/components/Calendar/ScheduleNavigation';
|
|
import { useState } from 'react';
|
|
import { useEstablishment } from '@/context/EstablishmentContext';
|
|
|
|
export default function Page() {
|
|
const [isModalOpen, setIsModalOpen] = useState(false);
|
|
const [isDrawerOpen, setIsDrawerOpen] = useState(false);
|
|
const [eventData, setEventData] = useState({
|
|
title: '',
|
|
description: '',
|
|
start: '',
|
|
end: '',
|
|
location: '',
|
|
planning: '', // Enlever la valeur par défaut ici
|
|
recursionType: RecurrenceType.NONE,
|
|
selectedDays: [],
|
|
recursionEnd: '',
|
|
customInterval: 1,
|
|
customUnit: 'days',
|
|
viewType: 'week', // Ajouter la vue semaine par défaut
|
|
});
|
|
const { selectedEstablishmentId } = useEstablishment();
|
|
|
|
const initializeNewEvent = (date = new Date()) => {
|
|
// S'assurer que date est un objet Date valide
|
|
const eventDate = date instanceof Date ? date : new Date();
|
|
|
|
setEventData({
|
|
title: '',
|
|
description: '',
|
|
start: eventDate.toISOString(),
|
|
end: new Date(eventDate.getTime() + 2 * 60 * 60 * 1000).toISOString(),
|
|
location: '',
|
|
planning: '', // Ne pas définir de valeur par défaut ici non plus
|
|
recursionType: RecurrenceType.NONE,
|
|
selectedDays: [],
|
|
recursionEnd: new Date(
|
|
eventDate.getTime() + 2 * 60 * 60 * 1000
|
|
).toISOString(),
|
|
customInterval: 1,
|
|
customUnit: 'days',
|
|
});
|
|
setIsModalOpen(true);
|
|
};
|
|
|
|
return (
|
|
<PlanningProvider
|
|
establishmentId={selectedEstablishmentId}
|
|
modeSet={PlanningModes.PLANNING}
|
|
>
|
|
<div className="flex h-full overflow-hidden">
|
|
<ScheduleNavigation
|
|
isOpen={isDrawerOpen}
|
|
onClose={() => setIsDrawerOpen(false)}
|
|
/>
|
|
<Calendar
|
|
onDateClick={initializeNewEvent}
|
|
onEventClick={(event) => {
|
|
setEventData(event);
|
|
setIsModalOpen(true);
|
|
}}
|
|
onOpenDrawer={() => setIsDrawerOpen(true)}
|
|
/>
|
|
<EventModal
|
|
isOpen={isModalOpen}
|
|
onClose={() => setIsModalOpen(false)}
|
|
eventData={eventData}
|
|
setEventData={setEventData}
|
|
/>
|
|
</div>
|
|
</PlanningProvider>
|
|
);
|
|
}
|