import classNames from 'classnames'; import { useRouter } from 'next/router'; import React, { useContext } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import TriangleSVG from '../../assets/svgs/triangle.svg'; import { NAVIGATION, UI } from '../../constants'; import { ScreenContext } from '../../contexts/screen'; import { collapseSideMenu, expandSideMenu, PageType, } from '../../state/navigation'; import { IState } from '../../state/reducers'; export enum SideBarMode { MENU = 'MENU', LABEL = 'LABEL', } interface Props { mode: SideBarMode; } export function SideMenuSideBar({ mode }: Props) { const { isMobile, isTablet, isHuge } = useContext(ScreenContext); const { sideMenuExpanded: expanded, pageType, postTitle } = useSelector( (state: IState) => state.navigation, ); const router = useRouter(); const dispatch = useDispatch(); const selectedSideMenuItem = Object.values(NAVIGATION.SIDE_MENU_ITEMS ?? {}).find( item => item.href === router.asPath, )?.label ?? 'Menu'; const isBlog = pageType === PageType.BLOG; const isPost = pageType === PageType.POST; const label = isPost ? postTitle?.substr(0, 120) : isBlog ? 'Blog' : selectedSideMenuItem; const isCollapsible = (isTablet || isMobile) && !isPost && !isBlog; const toggleSideMenu = () => dispatch(expanded ? collapseSideMenu() : expandSideMenu()); return (
{isCollapsible && ( isCollapsible && toggleSideMenu()} className={classNames( 'h-4 transform outline-none duration-300 cursor-pointer', expanded ? 'rotate-180' : '-rotate-60', )} /> )} {(isBlog || isPost) && !isCollapsible && ( )}
{mode === SideBarMode.LABEL ? label : 'Menu'}
); }