diff --git a/ipi-survey-platform/src/components/admin/AdminHeader.jsx b/ipi-survey-platform/src/components/admin/AdminHeader.jsx
index 97248ce..bac1a82 100644
--- a/ipi-survey-platform/src/components/admin/AdminHeader.jsx
+++ b/ipi-survey-platform/src/components/admin/AdminHeader.jsx
@@ -1,5 +1,6 @@
import React, { useRef, useEffect } from 'react';
import { NavLink, useNavigate } from 'react-router-dom';
+import { logout as logoutApi } from '@/services/auth/authService';
const logoSrc = '/assets/images/FCSCLogo.svg';
const dashboardIconActiveSrc = '/assets/images/cuida_dashboard-outline.svg';
@@ -18,15 +19,25 @@ const NavItem = ({ label, to, iconActive, iconInactive, end = false }) => (
end={end}
className={({ isActive }) =>
`inline-flex items-center gap-2 pb-1 border-b-2 text-[14px] leading-5 ` +
- (isActive ? 'text-[#92722A] font-medium border-[#92722A]' : 'text-[#232528] border-transparent hover:text-gray-900')
+ (isActive
+ ? 'text-[#92722A] font-medium border-[#92722A]'
+ : 'text-[#232528] border-transparent hover:text-gray-900')
}
>
{({ isActive }) => (
<>
{iconActive && iconInactive ? (
-
+
) : (
-
+
)}
{label}
>
@@ -45,26 +56,31 @@ const AdminHeader = () => {
const profileButtonRef = useRef(null);
const mobileMenuButtonRef = useRef(null);
- // Handle click outside for profile dropdown and mobile menu
useEffect(() => {
const handleClickOutside = (event) => {
- // Close profile dropdown if clicked outside
- if (profileOpen && profileRef.current && !profileRef.current.contains(event.target) &&
- profileButtonRef.current && !profileButtonRef.current.contains(event.target)) {
+ if (
+ profileOpen &&
+ profileRef.current &&
+ !profileRef.current.contains(event.target) &&
+ profileButtonRef.current &&
+ !profileButtonRef.current.contains(event.target)
+ ) {
setProfileOpen(false);
}
-
- // Close mobile menu if clicked outside
- if (open && mobileMenuRef.current && !mobileMenuRef.current.contains(event.target) &&
- mobileMenuButtonRef.current && !mobileMenuButtonRef.current.contains(event.target)) {
+
+ if (
+ open &&
+ mobileMenuRef.current &&
+ !mobileMenuRef.current.contains(event.target) &&
+ mobileMenuButtonRef.current &&
+ !mobileMenuButtonRef.current.contains(event.target)
+ ) {
setOpen(false);
}
};
- // Add event listener when the component mounts
document.addEventListener('mousedown', handleClickOutside);
-
- // Clean up the event listener when the component unmounts
+
return () => {
document.removeEventListener('mousedown', handleClickOutside);
};
@@ -82,22 +98,26 @@ const AdminHeader = () => {
setUserEmail(parsed.email);
}
}
- } catch {
- // ignore corrupt storage
- }
+ } catch {}
}, []);
- const handleLogout = () => {
+ // 🚀 UPDATED: LOGOUT VIA API
+ const handleLogout = async () => {
try {
- sessionStorage.removeItem('auth_token');
- sessionStorage.removeItem('user_profile');
- sessionStorage.removeItem('user_role');
- sessionStorage.removeItem('establishment_id');
- } catch {
- // ignore storage errors
+ await logoutApi(); // <-- API CALL
+
+ sessionStorage.clear();
+ localStorage.removeItem('auth_token');
+ localStorage.removeItem('user_profile');
+ localStorage.removeItem('user_role');
+ localStorage.removeItem('establishment_id');
+
+ setProfileOpen(false);
+ navigate('/index');
+ } catch (error) {
+ console.error('Logout failed:', error);
+ navigate('/index');
}
- setProfileOpen(false);
- navigate('/index');
};
return (
@@ -105,52 +125,51 @@ const AdminHeader = () => {
- {userName?.replace(/([a-z])([A-Z])/g, '$1 $2')} -
-{userEmail}
++ {userName?.replace(/([a-z])([A-Z])/g, '$1 $2')} +
++ {userEmail} +