import React, { useEffect, useState } from 'react'; import { mdiMinus, mdiPlus } from '@mdi/js'; import BaseIcon from './BaseIcon'; import Link from 'next/link'; import { getButtonColor } from '../colors'; import AsideMenuList from './AsideMenuList'; import { MenuAsideItem } from '../interfaces'; import { useAppSelector } from '../stores/hooks'; import { useRouter } from 'next/router'; type Props = { item: MenuAsideItem; isDropdownList?: boolean; }; const AsideMenuItem = ({ item, isDropdownList = false }: Props) => { const [isLinkActive, setIsLinkActive] = useState(false); const [isDropdownActive, setIsDropdownActive] = useState(false); const asideMenuItemStyle = useAppSelector( (state) => state.style.asideMenuItemStyle, ); const asideMenuDropdownStyle = useAppSelector( (state) => state.style.asideMenuDropdownStyle, ); const asideMenuItemActiveStyle = useAppSelector( (state) => state.style.asideMenuItemActiveStyle, ); const borders = useAppSelector((state) => state.style.borders); const activeLinkColor = useAppSelector( (state) => state.style.activeLinkColor, ); const activeClassAddon = !item.color && isLinkActive ? asideMenuItemActiveStyle : ''; const { asPath, isReady } = useRouter(); useEffect(() => { if (item.href && isReady) { const linkPathName = new URL(item.href, location.href).pathname + '/'; const activePathname = new URL(asPath, location.href).pathname; const activeView = activePathname.split('/')[1]; const linkPathNameView = linkPathName.split('/')[1]; setIsLinkActive(linkPathNameView === activeView); } }, [item.href, isReady, asPath]); const asideMenuItemInnerContents = ( <> {item.icon && ( )} {item.label} {item.menu && ( )} ); const componentClass = [ 'flex cursor-pointer py-1.5 ', isDropdownList ? 'px-6 text-sm' : '', item.color ? getButtonColor(item.color, false, true) : `${asideMenuItemStyle}`, isLinkActive ? `text-black ${activeLinkColor} dark:text-white dark:bg-dark-800` : '', ].join(' '); return (
  • {item.withDevider &&
    } {item.href && ( {asideMenuItemInnerContents} )} {!item.href && (
    setIsDropdownActive(!isDropdownActive)} > {asideMenuItemInnerContents}
    )} {item.menu && ( )}
  • ); }; export default AsideMenuItem;