import { logger } from '../utils/logger.js'; // Sidebar functionality export function initSidebar() { const sidebar = document.querySelector('.nav-left-sidebar'); const sidebarToggle = document.querySelector('.sidebar-toggler'); // This is the hamburger in the header const _dashboardWrapper = document.querySelector('.dashboard-wrapper'); // Create overlay element const overlay = document.createElement('div'); overlay.className = 'sidebar-overlay'; document.body.appendChild(overlay); // Toggle sidebar function function toggleSidebar() { sidebar.classList.toggle('active'); overlay.classList.toggle('active'); document.body.classList.toggle('sidebar-open'); } // Close sidebar function function closeSidebar() { sidebar.classList.remove('active'); overlay.classList.remove('active'); document.body.classList.remove('sidebar-open'); } if (sidebarToggle && sidebar) { sidebarToggle.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); toggleSidebar(); }); } // Close sidebar when clicking overlay overlay.addEventListener('click', closeSidebar); // Handle sidebar menu clicks const sidebarLinks = document.querySelectorAll('.nav-left-sidebar .nav-link'); sidebarLinks.forEach((link) => { link.addEventListener('click', function (_e) { // Don't prevent default for actual navigation links if (!this.hasAttribute('data-bs-toggle')) { // This is a navigation link, not a dropdown toggle logger.info('Navigating to:', this.href); // Don't prevent the navigation return; } // Remove active class from all links sidebarLinks.forEach((l) => l.classList.remove('active')); // Add active class to clicked link this.classList.add('active'); // Handle submenu active states const parentLi = this.closest('li'); if (parentLi) { const submenu = parentLi.querySelector('.collapse'); if (submenu && !this.hasAttribute('data-bs-toggle')) { // This is a submenu item const parentToggle = parentLi.closest('.collapse')?.previousElementSibling; if (parentToggle) { parentToggle.classList.add('active'); } } } }); }); // Close sidebar when clicking on a link (mobile only) // But NOT when clicking on dropdown toggles sidebarLinks.forEach((link) => { link.addEventListener('click', (_e) => { // Don't close if this is a dropdown toggle if ( link.hasAttribute('data-bs-toggle') && link.getAttribute('data-bs-toggle') === 'collapse' ) { return; // Don't close sidebar for dropdown toggles } // Only close for actual navigation links on mobile (not parent menu items) const isLeafLink = !link.querySelector('span.badge'); // Links without badges are usually leaf links const isInSubmenu = link.closest('.collapse') !== null; if (window.innerWidth <= 991 && (isLeafLink || isInSubmenu)) { setTimeout(() => { closeSidebar(); }, 300); } }); }); // Handle window resize let resizeTimer; window.addEventListener('resize', () => { clearTimeout(resizeTimer); resizeTimer = setTimeout(() => { if (window.innerWidth > 991) { closeSidebar(); } }, 250); }); }