import React, { useEffect, useRef } from 'react'; import Link from 'next/link'; import { useState } from 'react'; import { mdiChevronUp, mdiChevronDown } from '@mdi/js'; import BaseDivider from './BaseDivider'; import BaseIcon from './BaseIcon'; import UserAvatarCurrentUser from './UserAvatarCurrentUser'; import NavBarMenuList from './NavBarMenuList'; import { useAppDispatch, useAppSelector } from '../stores/hooks'; import { MenuNavBarItem } from '../interfaces'; import { setDarkMode } from '../stores/styleSlice'; import { logoutUser } from '../stores/authSlice'; import { useRouter } from 'next/router'; import ClickOutside from './ClickOutside'; type Props = { item: MenuNavBarItem; }; export default function NavBarItem({ item }: Props) { const router = useRouter(); const dispatch = useAppDispatch(); const excludedRef = useRef(null); const navBarItemLabelActiveColorStyle = useAppSelector( (state) => state.style.navBarItemLabelActiveColorStyle, ); const navBarItemLabelStyle = useAppSelector( (state) => state.style.navBarItemLabelStyle, ); const navBarItemLabelHoverStyle = useAppSelector( (state) => state.style.navBarItemLabelHoverStyle, ); const currentUser = useAppSelector((state) => state.auth.currentUser); const userName = `${currentUser?.firstName ? currentUser?.firstName : ''} ${ currentUser?.lastName ? currentUser?.lastName : '' }`; const [isDropdownActive, setIsDropdownActive] = useState(false); useEffect(() => { return () => setIsDropdownActive(false); }, [router.pathname]); const componentClass = [ 'block lg:flex items-center relative cursor-pointer', isDropdownActive ? `${navBarItemLabelActiveColorStyle} dark:text-slate-400` : `${navBarItemLabelStyle} dark:text-white dark:hover:text-slate-400 ${navBarItemLabelHoverStyle}`, item.menu ? 'lg:py-2 lg:px-3' : 'py-2 px-3', item.isDesktopNoLabel ? 'lg:w-16 lg:justify-center' : '', ].join(' '); const itemLabel = item.isCurrentUser ? userName : item.label; const handleMenuClick = () => { if (item.menu) { setIsDropdownActive(!isDropdownActive); } if (item.isToggleLightDark) { dispatch(setDarkMode(null)); } if (item.isLogout) { dispatch(logoutUser()); router.push('/login'); } }; const getItemId = (label) => { switch (label) { case 'Light/Dark': return 'themeToggle'; case 'Log out': return 'logout'; default: return undefined; } }; const NavBarItemComponentContents = ( <>