diff --git a/app/components/NavBar.tsx b/app/components/NavBar.tsx index 7ad410f..09f86d9 100644 --- a/app/components/NavBar.tsx +++ b/app/components/NavBar.tsx @@ -105,6 +105,12 @@ function Icon({ name }: { name: string }) { ); + case 'chevron-down': + return ( + + + + ); default: return null; } @@ -115,7 +121,9 @@ export default function NavBar() { const [user, setUser] = useState(null); const [pendingCount, setPendingCount] = useState(0); const [adminMenuOpen, setAdminMenuOpen] = useState(false); + const [userMenuOpen, setUserMenuOpen] = useState(false); const adminMenuRef = useRef(null); + const userMenuRef = useRef(null); async function loadUser() { try { @@ -133,7 +141,10 @@ export default function NavBar() { }, []); useEffect(() => { - if (!user) setAdminMenuOpen(false); + if (!user) { + setAdminMenuOpen(false); + setUserMenuOpen(false); + } }, [user]); useEffect(() => { @@ -167,15 +178,19 @@ export default function NavBar() { const showAdminMenu = Boolean(user && (showApprovals || isAdmin)); useEffect(() => { - if (!adminMenuOpen) return; + if (!userMenuOpen && !adminMenuOpen) return; const onMouseDown = (e: MouseEvent) => { const target = e.target as Node | null; - if (target && adminMenuRef.current && !adminMenuRef.current.contains(target)) { - setAdminMenuOpen(false); - } + const insideAdmin = adminMenuRef.current && target && adminMenuRef.current.contains(target); + const insideUser = userMenuRef.current && target && userMenuRef.current.contains(target); + if (!insideAdmin) setAdminMenuOpen(false); + if (!insideUser) setUserMenuOpen(false); }; const onKeyDown = (e: KeyboardEvent) => { - if (e.key === 'Escape') setAdminMenuOpen(false); + if (e.key === 'Escape') { + setAdminMenuOpen(false); + setUserMenuOpen(false); + } }; document.addEventListener('mousedown', onMouseDown); document.addEventListener('keydown', onKeyDown); @@ -183,7 +198,7 @@ export default function NavBar() { document.removeEventListener('mousedown', onMouseDown); document.removeEventListener('keydown', onKeyDown); }; - }, [adminMenuOpen]); + }, [adminMenuOpen, userMenuOpen]); return (
@@ -199,18 +214,46 @@ export default function NavBar() {