comissions-app-ui/core/layouts/VerticalLayout.tsx

119 lines
3.1 KiB
TypeScript
Raw Permalink Normal View History

2024-02-18 01:44:48 -05:00
// ** React Imports
import { useState } from 'react'
// ** MUI Imports
import Fab from '@mui/material/Fab'
import { styled } from '@mui/material/styles'
import Box, { BoxProps } from '@mui/material/Box'
// ** Icons Imports
import ArrowUp from 'mdi-material-ui/ArrowUp'
// ** Theme Config Import
import themeConfig from '../../configs/themeConfig'
// ** Type Import
import { LayoutProps } from '../../core/layouts/types'
// ** Components
import AppBar from './components/vertical/appBar'
import Navigation from './components/vertical/navigation'
import Footer from './components/shared-components/footer'
import ScrollToTop from '../../core/components/scroll-to-top'
// ** Styled Component
import DatePickerWrapper from '../../core/styles/libs/react-datepicker'
const VerticalLayoutWrapper = styled('div')({
height: '100%',
display: 'flex'
})
const MainContentWrapper = styled(Box)<BoxProps>({
flexGrow: 1,
minWidth: 0,
display: 'flex',
minHeight: '100vh',
flexDirection: 'column'
})
const ContentWrapper = styled('main')(({ theme }) => ({
flexGrow: 1,
width: '100%',
padding: theme.spacing(6),
transition: 'padding .25s ease-in-out',
[theme.breakpoints.down('sm')]: {
paddingLeft: theme.spacing(4),
paddingRight: theme.spacing(4)
}
}))
const VerticalLayout = (props: LayoutProps) => {
// ** Props
const { settings, children, scrollToTop } = props
// ** Vars
const { contentWidth } = settings
const navWidth = themeConfig.navigationSize
// ** States
const [navVisible, setNavVisible] = useState<boolean>(false)
// ** Toggle Functions
const toggleNavVisibility = () => setNavVisible(!navVisible)
return (
<>
<VerticalLayoutWrapper className='layout-wrapper'>
{/* Navigation Menu */}
<Navigation
navWidth={navWidth}
navVisible={navVisible}
setNavVisible={setNavVisible}
toggleNavVisibility={toggleNavVisibility}
{...props}
/>
<MainContentWrapper className='layout-content-wrapper'>
{/* AppBar Component */}
<AppBar toggleNavVisibility={toggleNavVisibility} {...props} />
{/* Content */}
<ContentWrapper
className='layout-page-content'
sx={{
...(contentWidth === 'boxed' && {
mx: 'auto',
'@media (min-width:1440px)': { maxWidth: 1440 },
'@media (min-width:1200px)': { maxWidth: '100%' }
})
}}
>
{children}
</ContentWrapper>
{/* Footer Component */}
<Footer {...props} />
{/* Portal for React Datepicker */}
<DatePickerWrapper sx={{ zIndex: 11 }}>
<Box id='react-datepicker-portal'></Box>
</DatePickerWrapper>
</MainContentWrapper>
</VerticalLayoutWrapper>
{/* Scroll to top button */}
{scrollToTop ? (
scrollToTop(props)
) : (
<ScrollToTop className='mui-fixed'>
<Fab color='primary' size='small' aria-label='scroll back to top'>
<ArrowUp />
</Fab>
</ScrollToTop>
)}
</>
)
}
export default VerticalLayout