From 7d1b38581b02dbc1d1c80923132b54d9791fa91a Mon Sep 17 00:00:00 2001 From: A R R R Associates Date: Fri, 10 Jul 2026 20:57:07 +0530 Subject: [PATCH] Add secondary mobile menu to Staff dashboard --- .../templates/employees/portal_dashboard.html | 104 +++++++++++++++--- 1 file changed, 87 insertions(+), 17 deletions(-) diff --git a/app/modules/employees/templates/employees/portal_dashboard.html b/app/modules/employees/templates/employees/portal_dashboard.html index 5265ff8..71ea14e 100644 --- a/app/modules/employees/templates/employees/portal_dashboard.html +++ b/app/modules/employees/templates/employees/portal_dashboard.html @@ -30,15 +30,57 @@ ('reports','Reports') ] %} -
-
Employee Workspace
-
-
- {% for code, label in main_tabs %} - - {% endfor %} +
+
+
+ + + + + Dashboard Menu + + Employee workspace sections + + + +
+
+ +
@@ -52,6 +94,7 @@ (function () { const panel = document.getElementById('employee-portal-panel'); const mainTabs = Array.from(document.querySelectorAll('.employee-portal-main-tab')); + const mobileMenu = document.getElementById('employee-dashboard-mobile-menu'); if (!panel || !mainTabs.length) return; const groupMap = { @@ -80,20 +123,47 @@ const activeGroup = groupMap[tabName] || tabName || 'overview'; mainTabs.forEach(function (button) { const active = button.dataset.tab === activeGroup; - button.classList.toggle('bg-brand-600', active); - button.classList.toggle('text-white', active); - button.classList.toggle('shadow-soft', active); - button.classList.toggle('border', !active); - button.classList.toggle('border-slate-300', !active); - button.classList.toggle('bg-white', !active); - button.classList.toggle('text-slate-700', !active); - button.classList.toggle('hover:bg-slate-50', !active); + const isMobileButton = button.closest('#employee-dashboard-mobile-menu') !== null; + + if (isMobileButton) { + button.classList.toggle('bg-brand-50', active); + button.classList.toggle('text-brand-700', active); + button.classList.toggle('bg-white', !active); + button.classList.toggle('text-slate-800', !active); + button.classList.toggle('hover:bg-slate-100', !active); + if (active) { + button.setAttribute('aria-current', 'page'); + } else { + button.removeAttribute('aria-current'); + } + + let marker = button.querySelector('[data-active-marker]'); + if (active && !marker) { + marker = document.createElement('span'); + marker.dataset.activeMarker = 'true'; + marker.className = 'h-2 w-2 rounded-full bg-brand-600'; + marker.setAttribute('aria-hidden', 'true'); + button.appendChild(marker); + } else if (!active && marker) { + marker.remove(); + } + } else { + button.classList.toggle('bg-brand-600', active); + button.classList.toggle('text-white', active); + button.classList.toggle('shadow-soft', active); + button.classList.toggle('border', !active); + button.classList.toggle('border-slate-300', !active); + button.classList.toggle('bg-white', !active); + button.classList.toggle('text-slate-700', !active); + button.classList.toggle('hover:bg-slate-50', !active); + } }); } async function loadTab(tabName, pushState) { const safeTab = tabName || 'overview'; setActive(safeTab); + if (mobileMenu) mobileMenu.open = false; panel.innerHTML = '
Loading...
'; try { const response = await fetch('/employee/dashboard/tab/' + encodeURIComponent(safeTab), {