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.
104 lines (98 loc) • 2.92 kB
JavaScript
// ** MUI Imports
import Button from '@mui/material/Button'
import Drawer from '@mui/material/Drawer'
import Checkbox from '@mui/material/Checkbox'
import Typography from '@mui/material/Typography'
import FormControlLabel from '@mui/material/FormControlLabel'
const SidebarLeft = props => {
const {
store,
mdAbove,
dispatch,
calendarsColor,
leftSidebarOpen,
leftSidebarWidth,
handleSelectEvent,
handleAllCalendars,
handleCalendarsUpdate,
handleLeftSidebarToggle,
handleAddEventSidebarToggle
} = props
const colorsArr = calendarsColor ? Object.entries(calendarsColor) : []
const renderFilters = colorsArr.length
? colorsArr.map(([key, value]) => {
return (
<FormControlLabel
key={key}
label={key}
control={
<Checkbox
checked={store.selectedCalendars.includes(key)}
onChange={() => dispatch(handleCalendarsUpdate(key))}
sx={{ color: `${value}.main`, '&.Mui-checked': { color: `${value}.main` } }}
/>
}
/>
)
})
: null
const handleSidebarToggleSidebar = () => {
handleAddEventSidebarToggle()
dispatch(handleSelectEvent(null))
}
if (renderFilters) {
return (
<Drawer
open={leftSidebarOpen}
onClose={handleLeftSidebarToggle}
variant={mdAbove ? 'permanent' : 'temporary'}
ModalProps={{
disablePortal: true,
disableAutoFocus: true,
disableScrollLock: true,
keepMounted: true // Better open performance on mobile.
}}
sx={{
zIndex: 2,
display: 'block',
position: mdAbove ? 'static' : 'absolute',
'& .MuiDrawer-paper': {
borderRadius: 1,
boxShadow: 'none',
width: leftSidebarWidth,
borderTopRightRadius: 0,
borderBottomRightRadius: 0,
p: theme => theme.spacing(5),
zIndex: mdAbove ? '2' : 'drawer',
position: mdAbove ? 'static' : 'absolute'
},
'& .MuiBackdrop-root': {
borderRadius: 1,
position: 'absolute'
}
}}
>
<Button variant='contained' onClick={handleSidebarToggleSidebar}>
Add Event
</Button>
<Typography variant='caption' sx={{ mt: 7, mb: 2, textTransform: 'uppercase' }}>
Calendars
</Typography>
<FormControlLabel
label='View All'
control={
<Checkbox
color='secondary'
checked={store.selectedCalendars.length === colorsArr.length}
onChange={e => dispatch(handleAllCalendars(e.target.checked))}
/>
}
/>
{renderFilters}
</Drawer>
)
} else {
return null
}
}
export default SidebarLeft