// ** Next Import import Link from 'next/link' // ** MUI Imports import IconButton from '@mui/material/IconButton' import Box, { BoxProps } from '@mui/material/Box' import { styled, useTheme } from '@mui/material/styles' import Typography, { TypographyProps } from '@mui/material/Typography' // ** Type Import import { LayoutProps } from 'src/@core/layouts/types' // ** Custom Icon Import import Icon from 'src/@core/components/icon' // ** Configs import themeConfig from 'src/configs/themeConfig' interface Props { navHover: boolean collapsedNavWidth: number hidden: LayoutProps['hidden'] navigationBorderWidth: number toggleNavVisibility: () => void settings: LayoutProps['settings'] saveSettings: LayoutProps['saveSettings'] navMenuBranding?: LayoutProps['verticalLayoutProps']['navMenu']['branding'] menuLockedIcon?: LayoutProps['verticalLayoutProps']['navMenu']['lockedIcon'] menuUnlockedIcon?: LayoutProps['verticalLayoutProps']['navMenu']['unlockedIcon'] } // ** Styled Components const MenuHeaderWrapper = styled(Box)(({ theme }) => ({ display: 'flex', alignItems: 'center', paddingRight: theme.spacing(4), justifyContent: 'space-between', transition: 'padding .25s ease-in-out', minHeight: theme.mixins.toolbar.minHeight })) const HeaderTitle = styled(Typography)({ fontWeight: 700, lineHeight: 1.2, transition: 'opacity .25s ease-in-out, margin .25s ease-in-out' }) const LinkStyled = styled(Link)({ display: 'flex', alignItems: 'center', textDecoration: 'none' }) const VerticalNavHeader = (props: Props) => { // ** Props const { hidden, navHover, settings, saveSettings, collapsedNavWidth, toggleNavVisibility, navigationBorderWidth, menuLockedIcon: userMenuLockedIcon, navMenuBranding: userNavMenuBranding, menuUnlockedIcon: userMenuUnlockedIcon } = props // ** Hooks & Vars const theme = useTheme() const { mode, direction, navCollapsed } = settings const menuCollapsedStyles = navCollapsed && !navHover ? { opacity: 0 } : { opacity: 1 } const svgFillSecondary = () => { if (mode === 'semi-dark') { return `rgba(${theme.palette.customColors.dark}, 0.6)` } else { return theme.palette.text.secondary } } const svgFillDisabled = () => { if (mode === 'semi-dark') { return `rgba(${theme.palette.customColors.dark}, 0.38)` } else { return theme.palette.text.disabled } } const menuHeaderPaddingLeft = () => { if (navCollapsed && !navHover) { if (userNavMenuBranding) { return 0 } else { return (collapsedNavWidth - navigationBorderWidth - 40) / 8 } } else { return 5.5 } } const svgRotationDeg = () => { if (navCollapsed) { if (direction === 'rtl') { if (navHover) { return 0 } else { return 180 } } else { if (navHover) { return 180 } else { return 0 } } } else { if (direction === 'rtl') { return 180 } else { return 0 } } } return ( {userNavMenuBranding ? ( userNavMenuBranding(props) ) : ( {themeConfig.templateName} )} {hidden ? ( ) : userMenuLockedIcon === null && userMenuUnlockedIcon === null ? null : ( saveSettings({ ...settings, navCollapsed: !navCollapsed })} sx={{ p: 0, color: 'text.primary', backgroundColor: 'transparent !important' }} > {userMenuLockedIcon && userMenuUnlockedIcon ? ( navCollapsed ? ( userMenuUnlockedIcon ) : ( userMenuLockedIcon ) ) : ( )} )} ) } export default VerticalNavHeader