// Les librairies JS sont importées depuis crvi_libraries.js // Import de vos modules locaux /* import './extra/agenda-loading-feedback.js'; */ import { initializeCalendar } from './modules/agenda-fullcalendar.js'; import { initializeIntervenantCalendar, initializeIntervenantAgendaTabs } from './modules/agenda-intervenant-calendar.js'; import { initializeIntervenantHub } from './modules/agenda-intervenant-hub.js'; import { initializeProfile } from './modules/agenda-intervenant-profile.js'; import { initializePermanences } from './modules/agenda-intervenant-permanences.js'; import { initializeAdminPermanences } from './modules/agenda-admin-permanences.js'; import { initStatsTable } from './modules/agenda-stats-table.js'; import AgendaVisualFilters from './modules/agenda-visual-filters.js'; /** * FIX GLOBAL : Corriger le stacking context de TOUTES les modales Bootstrap * pour éviter que le backdrop passe devant les modales (problème avec Avada) */ function fixAllModalsStackingContext() { // Attendre que Bootstrap soit chargé if (typeof window.bootstrap === 'undefined') { setTimeout(fixAllModalsStackingContext, 100); return; } // Récupérer TOUTES les modales Bootstrap const allModals = document.querySelectorAll('.modal'); allModals.forEach(modal => { // 1. Forcer la modal à être enfant direct du body (échappe au stacking context Avada) if (modal.parentNode !== document.body) { document.body.appendChild(modal); } // 2. Fixer l'ordre backdrop/modal à chaque ouverture modal.addEventListener('shown.bs.modal', function fixBackdropOrder() { const backdrop = document.querySelector('.modal-backdrop'); if (backdrop && modal && document.body && document.body.children) { try { // Vérifier l'ordre dans le DOM const bodyChildren = Array.from(document.body.children); const modalIndex = bodyChildren.indexOf(modal); const backdropIndex = bodyChildren.indexOf(backdrop); // Si backdrop vient après modal, réordonner (backdrop AVANT modal) if (backdropIndex > modalIndex && modalIndex !== -1 && backdropIndex !== -1) { document.body.insertBefore(backdrop, modal); } } catch (error) { console.warn('Erreur lors de la réorganisation du backdrop:', error); } } }); }); console.log(`✅ Fix stacking context appliqué à ${allModals.length} modal(es)`); } // Initialisation au chargement de la page document.addEventListener('DOMContentLoaded', function() { console.log('DOM chargé, initialisation des modules...'); console.log('CRVI crviACFData', crviACFData); /* configureToastr(); */ // ✨ FIX : Appliquer le fix stacking context à TOUTES les modales fixAllModalsStackingContext(); // Détecter le contexte : intervenant ou admin const isIntervenantContext = detectIntervenantContext(); if (isIntervenantContext) { console.log('🔄 Contexte détecté : Espace Intervenant'); // Initialiser les modules selon la page const hubEl = document.getElementById('intervenant-hub-container'); if (hubEl) { console.log('📋 Initialisation du Hub intervenant...'); initializeIntervenantHub(); } const agendaEl = document.getElementById('intervenant-agenda-container'); if (agendaEl) { console.log('📅 Initialisation de l\'agenda intervenant...'); // Vérifier si on a des onglets (agenda + collègues) ou juste l'agenda simple const agendaTabs = document.getElementById('agendaTabs'); if (agendaTabs) { console.log('📑 Onglets détectés, initialisation avec basculement...'); initializeIntervenantAgendaTabs(); } else { console.log('📅 Mode simple, initialisation agenda seul...'); initializeIntervenantCalendar(); } } const profileEl = document.getElementById('intervenant-profile-container'); if (profileEl) { console.log('👤 Initialisation du profil intervenant...'); initializeProfile(); } const permanencesEl = document.getElementById('intervenant-permanences-container'); if (permanencesEl) { console.log('📝 Initialisation du formulaire permanences...'); initializePermanences(); } } else { // Contexte admin - vérifier quelle page on est console.log('🔄 Contexte détecté : Admin'); // Vérifier si on est sur la page stats (priorité) const statsTableEl = document.getElementById('stats-events-table'); const statsFiltersEl = document.querySelector('.stats-filters-container'); if (statsTableEl || statsFiltersEl) { console.log('📊 Initialisation du tableau de stats...'); initStatsTable(); } else { // Sinon, vérifier si on est sur la page agenda avec calendrier const calendarEl = document.getElementById('agenda-calendar'); if (calendarEl) { console.log('📅 Initialisation du calendrier admin...'); const calendar = initializeCalendar(); if (calendar) { console.log('✅ Calendrier initialisé avec succès'); } else { console.warn('⚠️ Échec de l\'initialisation du calendrier'); } // Initialiser les filtres visuels si présents const visualFiltersEl = document.getElementById('departements-filter-buttons'); if (visualFiltersEl) { console.log('🔍 Initialisation des filtres visuels...'); window.agendaVisualFilters = new AgendaVisualFilters(); } const modal = document.getElementById('eventModal'); if (modal) { // Vérifier que bootstrap est disponible if (typeof window.bootstrap !== 'undefined' && window.bootstrap.Modal) { const bsModal = new window.bootstrap.Modal(modal); } else { console.warn('Bootstrap n\'est pas encore chargé, modal ne sera pas initialisé'); } } else { console.warn('Modal eventModal non trouvé (normal si pas sur page agenda admin)'); } } else { console.log('ℹ️ Élément agenda-calendar non trouvé (normal si pas sur page agenda)'); } } // Vérifier si on est sur la page admin permanences const adminPermanencesEl = document.getElementById('admin-permanences-container'); if (adminPermanencesEl) { console.log('📝 Initialisation du formulaire permanences admin...'); initializeAdminPermanences(); } } // Initialiser Select2 sur les