diff --git a/components/AsideMenu.tsx b/components/AsideMenu.tsx index f32d31d..275a17a 100644 --- a/components/AsideMenu.tsx +++ b/components/AsideMenu.tsx @@ -1,21 +1,30 @@ import React from 'react' +import { MenuAsideItem } from '../interfaces' import AsideMenuLayer from './AsideMenuLayer' import OverlayLayer from './OverlayLayer' +type Props = { + menu: MenuAsideItem[] + isAsideMobileExpanded: boolean + isAsideLgActive: boolean + onAsideLgClose: Function +} + export default function AsideMenu({ - menu, isAsideMobileExpanded = false, isAsideLgActive = false, -}) { + ...props +}: Props) { return ( <> - {isAsideLgActive && } + {isAsideLgActive && } ) } diff --git a/components/AsideMenuItem.tsx b/components/AsideMenuItem.tsx index 21131d0..54e0697 100644 --- a/components/AsideMenuItem.tsx +++ b/components/AsideMenuItem.tsx @@ -1,5 +1,4 @@ - -import React, { useState } from 'react' +import React, { useEffect, useState } from 'react' import { mdiMinus, mdiPlus } from '@mdi/js' import BaseIcon from './BaseIcon' import Link from 'next/link' @@ -7,25 +6,55 @@ import { getButtonColor } from '../src/colors' import AsideMenuList from './AsideMenuList' import { MenuAsideItem } from '../interfaces' import { useAppSelector } from '../src/stores/hooks' +import { useRouter } from 'next/router' type Props = { - item: MenuAsideItem, + item: MenuAsideItem isDropdownList?: boolean } -export default function AsideMenuItem({ item, isDropdownList = false }: Props) { +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 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 + + if (linkPathName === activePathname) { + setIsLinkActive(true) + } + } + }) const asideMenuItemInnerContents = ( <> - {item.icon && } - + {item.icon && ( + + )} + {item.label} {item.menu && ( - + )} ) @@ -41,11 +70,15 @@ export default function AsideMenuItem({ item, isDropdownList = false }: Props) { return (
  • {item.href && ( - + {asideMenuItemInnerContents} )} - {!item.href &&
    {asideMenuItemInnerContents}
    } + {!item.href && ( +
    setIsDropdownActive(!isDropdownActive)}> + {asideMenuItemInnerContents} +
    + )} {item.menu && ( ) } + +export default AsideMenuItem diff --git a/components/AsideMenuLayer.tsx b/components/AsideMenuLayer.tsx index 3ddf6c9..b72ec0b 100644 --- a/components/AsideMenuLayer.tsx +++ b/components/AsideMenuLayer.tsx @@ -7,11 +7,12 @@ import { MenuAsideItem } from '../interfaces' import { useAppSelector } from '../src/stores/hooks' type Props = { - menu: MenuAsideItem[], + menu: MenuAsideItem[] className?: string + onAsideLgCloseClick: Function } -export default function AsideMenuLayer({ menu, className='' }: Props) { +export default function AsideMenuLayer({ menu, className = '', ...props }: Props) { const asideStyle = useAppSelector((state) => state.style.asideStyle) const asideBrandStyle = useAppSelector((state) => state.style.asideBrandStyle) const asideScrollbarsStyle = useAppSelector((state) => state.style.asideScrollbarsStyle) @@ -24,6 +25,11 @@ export default function AsideMenuLayer({ menu, className='' }: Props) { isLogout: true, } + const handleAsideLgCloseClick = (e: React.MouseEvent) => { + e.preventDefault() + props.onAsideLgCloseClick() + } + return (