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 = ( <>