UNPKG

react-garden

Version:

React + TypeScript + ThreeJS app using Material UI on NextJS, Apollo Client, GraphQL + WordPress REST APIs, for ThreeD web development.. a part of the threed.ai code family.

154 lines (138 loc) 4.47 kB
// ** Next Import import Link from 'next/link' import Image from 'next/future/image' // ** MUI Imports import { styled, useTheme } from '@mui/material/styles' import IconButton from '@mui/material/IconButton' import Box from '@mui/material/Box' import Typography from '@mui/material/Typography' // ** Icons import Close from 'mdi-material-ui/Close' import CircleOutline from 'mdi-material-ui/Menu' import RecordCircleOutline from 'mdi-material-ui/MenuOpen' // ** Configs import themeConfig from '~/configs/themeConfig' // images import favicon from "~/assets/images/logos/favicon.png" import appleIcon from "~/assets/images/logos/apple-icon.png" import brandLight from "~/assets/images/logos/logo-threedgarden.png" import brandDark from "~/assets/images/logos/logo-threedgarden-alt.png" import brandText from "~/assets/images/logos/logo-threedgarden-text.png" // ** Styled Components const MenuHeaderWrapper = styled(Box)(({ theme }) => ({ display: 'flex', alignItems: 'center', justifyContent: 'space-between', paddingRight: theme.spacing(4.5), transition: 'padding .25s ease-in-out', minHeight: theme.mixins.toolbar.minHeight })) const HeaderTitle = styled(Typography)(({ theme }) => ({ fontWeight: 600, lineHeight: 'normal', textTransform: 'uppercase', color: theme.palette.text.primary, transition: 'opacity .25s ease-in-out, margin .25s ease-in-out' })) const StyledLink = styled('a')({ display: 'flex', alignItems: 'center', textDecoration: 'none' }) const VerticalNavHeader = props => { // ** Props const { hidden, navHover, settings, saveSettings, collapsedNavWidth, toggleNavVisibility, navigationBorderWidth, menuLockedIcon: userMenuLockedIcon, menuUnlockedIcon: userMenuUnlockedIcon, verticalNavMenuBranding: userVerticalNavMenuBranding } = props // ** Hooks & Vars const theme = useTheme() const { navCollapsed } = settings const menuCollapsedStyles = navCollapsed && !navHover ? { opacity: 0 } : { opacity: 1 } const menuHeaderPaddingLeft = () => { if (navCollapsed && !navHover) { if (userVerticalNavMenuBranding) { return 0 } else { return (collapsedNavWidth - navigationBorderWidth - 30) / 14 } } else { return (collapsedNavWidth - navigationBorderWidth - 30) / 14 // return 6 } } const MenuLockedIcon = () => userMenuLockedIcon || ( <RecordCircleOutline sx={{ mr: '0.95rem', fontSize: '1.25rem', pointerEvents: 'none', ...menuCollapsedStyles, transition: 'opacity .25s ease-in-out' }} /> ) const MenuUnlockedIcon = () => userMenuUnlockedIcon || ( <CircleOutline sx={{ mr: '1rem', fontSize: '1.25rem', pointerEvents: 'none', ...menuCollapsedStyles, transition: 'opacity .25s ease-in-out' }} /> ) return ( <MenuHeaderWrapper className='nav-header' sx={{ pl: menuHeaderPaddingLeft() }}> {userVerticalNavMenuBranding ? ( userVerticalNavMenuBranding(props) ) : ( <Link href='/' passHref> <StyledLink> <Image src={brandDark.src} alt={themeConfig.templateName} width={48} height={48} layout='raw' /> <HeaderTitle variant='h6' sx={{ ...menuCollapsedStyles, ...(navCollapsed && !navHover ? {} : { ml: 3 }) }}> {themeConfig.templateName} </HeaderTitle> </StyledLink> </Link> )} {hidden ? ( <IconButton disableRipple disableFocusRipple onClick={toggleNavVisibility} sx={{ p: 0, backgroundColor: 'transparent !important' }} > <Close fontSize='small' /> </IconButton> ) : ( <IconButton disableRipple disableFocusRipple onClick={() => saveSettings({ ...settings, navCollapsed: !navCollapsed })} sx={{ p: 0, color: 'text.primary', backgroundColor: 'transparent !important' }} > {navCollapsed ? MenuUnlockedIcon() : MenuLockedIcon()} </IconButton> )} </MenuHeaderWrapper> ) } export default VerticalNavHeader