SideNav
Description
The SideNav component
Parameters
{ children, sx, width, headerHeight, header, endAdorner, ...rest }
SideNavProps
=>
react_jsx_runtime.JSX.Element
The react function component.
Example
Inspect
Source code
/packages/react-ui/SideNav/SideNav.tsx
import { AppBar, AppBarProps, Drawer, List, Stack, Toolbar } from '@mui/material';
import useMediaQuery from '@mui/material/useMediaQuery';
import { ReactNode } from 'react';
import { useControllableState } from '@enterwell/react-hooks';
/**
* The props for the SideNav component
* @public
*/
export type SideNavProps = AppBarProps & {
/**
* @defaultValue 230px
*/
width?: number | string;
/**
* @defaultValue 65px
*/
headerHeight?: number | string;
header?: ReactNode;
endAdorner?: ReactNode;
};
/**
* The SideNav component
*
* @param props - The props
* @returns The react function component.
* @public
*/
export function SideNav({ children, sx, width = 230, headerHeight = 65, header, endAdorner, ...rest }: SideNavProps) {
const [navOpen, setNavOpen] = useControllableState(false);
const isMobile = useMediaQuery((theme) => theme.breakpoints.down('md'));
const handleClose = () => setNavOpen(false);
return (
<>
<AppBar
sx={{
position: 'fixed',
left: 0,
zIndex: (theme) => theme.zIndex.drawer + 1999,
borderRadius: 0,
boxShadow: 'none',
borderBottom: '1px solid',
borderColor: 'divider',
backgroundImage: 'none',
backgroundColor: 'transparent',
width: {
xs: '100vw',
md: width
},
...sx
}}
{...rest}>
<Toolbar
sx={(theme) => ({
zIndex: 1500,
height: headerHeight,
width: {
md: width,
xs: '100vw'
},
padding: {
xs: 1.5,
md: theme.spacing(1.5, 2.5)
}
})}>
{header}
</Toolbar>
</AppBar>
<Drawer
anchor="top"
open={navOpen}
variant={isMobile ? 'temporary' : 'permanent'}
onClose={handleClose}
slotProps={{
paper: {
sx: {
borderRadius: 0,
backgroundImage: 'none',
height: {
md: '100vh',
xs: navOpen ? '100vh' : 0
},
width: {
xs: '100vw',
md: width
}
}
}
}}
>
<Toolbar />
<Stack height={1} justifyContent="space-between">
<nav>
<List sx={{ paddingX: 1.25, paddingY: 2 }}>
{children}
</List>
</nav>
{endAdorner}
</Stack>
</Drawer>
</>
);
};
Last updated on