diff --git a/ipi-survey-platform/src/components/admin/AdminHeader.jsx b/ipi-survey-platform/src/components/admin/AdminHeader.jsx index eda1473..d0986b3 100644 --- a/ipi-survey-platform/src/components/admin/AdminHeader.jsx +++ b/ipi-survey-platform/src/components/admin/AdminHeader.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useRef, useEffect } from 'react'; import { NavLink, useNavigate } from 'react-router-dom'; const logoSrc = '/assets/images/FCSCLogo.svg'; @@ -40,6 +40,35 @@ const AdminHeader = () => { const [userName, setUserName] = React.useState('User'); const [userEmail, setUserEmail] = React.useState('user@example.com'); const navigate = useNavigate(); + const profileRef = useRef(null); + const mobileMenuRef = useRef(null); + 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)) { + setProfileOpen(false); + } + + // Close mobile menu if clicked outside + 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); + }; + }, [open, profileOpen]); React.useEffect(() => { try { @@ -90,8 +119,9 @@ const AdminHeader = () => { > Notifications */} -
+
-
+