import './admin.scss' import * as Turbo from "@hotwired/turbo" // Cette fonction initialise tous les écouteurs d'événements function initAdminLayout() { const sidebar = document.getElementById('sidebar'); const overlay = document.getElementById('sidebar-overlay'); const toggleBtn = document.getElementById('sidebar-toggle'); const settingsToggle = document.getElementById('settings-toggle'); const settingsSubmenu = document.getElementById('settings-submenu'); const settingsChevron = document.getElementById('settings-chevron'); // --- TOGGLE SIDEBAR MOBILE --- if (toggleBtn && sidebar && overlay) { // On clone pour éviter de doubler les events avec Turbo toggleBtn.replaceWith(toggleBtn.cloneNode(true)); const newToggleBtn = document.getElementById('sidebar-toggle'); newToggleBtn.addEventListener('click', () => { sidebar.classList.toggle('-translate-x-full'); overlay.classList.toggle('hidden'); }); overlay.addEventListener('click', () => { sidebar.classList.add('-translate-x-full'); overlay.classList.add('hidden'); }); } // --- GESTION SOUS-MENU PARAMÈTRES --- if (settingsToggle) { settingsToggle.replaceWith(settingsToggle.cloneNode(true)); const newSettingsToggle = document.getElementById('settings-toggle'); newSettingsToggle.addEventListener('click', (e) => { e.preventDefault(); if (settingsSubmenu) settingsSubmenu.classList.toggle('hidden'); if (settingsChevron) settingsChevron.classList.toggle('rotate-180'); }); // Persistance : Garder ouvert si on est dans une sous-route admin if (window.location.pathname.includes('administrateur')) { if (settingsSubmenu) settingsSubmenu.classList.remove('hidden'); if (settingsChevron) settingsChevron.classList.add('rotate-180'); } } // --- GESTION DES MESSAGES FLASH (Auto-suppression 10s) --- const flashes = document.querySelectorAll('.flash-message'); flashes.forEach((flash) => { // Supprime le message après 10 secondes setTimeout(() => { // Animation de sortie flash.classList.add('opacity-0', 'translate-x-10'); // Retrait du DOM après l'animation setTimeout(() => flash.remove(), 500); }, 10000); }); } // --- CORRECTIF DATA-TURBO-CONFIRM --- // Force l'affichage de la confirmation native sur les liens avec data-turbo-confirm document.addEventListener("turbo:click", (event) => { const message = event.target.getAttribute("data-turbo-confirm"); if (message && !confirm(message)) { event.preventDefault(); } }); // S'exécute au premier chargement ET à chaque navigation Turbo document.addEventListener('turbo:load', initAdminLayout); // Fermer la sidebar mobile avant que Turbo ne mette en cache la page document.addEventListener('turbo:before-cache', () => { const sidebar = document.getElementById('sidebar'); const overlay = document.getElementById('sidebar-overlay'); if (sidebar) sidebar.classList.add('-translate-x-full'); if (overlay) overlay.classList.add('hidden'); });