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.
127 lines (114 loc) • 3.95 kB
JavaScript
// ** React Imports
import { useEffect, useState } from 'react'
// ** MUI Imports
import Box from '@mui/material/Box'
import useMediaQuery from '@mui/material/useMediaQuery'
// ** Redux Imports
import { useDispatch, useSelector } from 'react-redux'
// ** Hooks
import { useSettings } from '~/@core/hooks/useSettings'
// ** FullCalendar & App Components Imports
import Calendar from '~/views/apps/calendar/Calendar'
import SidebarLeft from '~/views/apps/calendar/SidebarLeft'
import CalendarWrapper from '~/@core/styles/libs/fullcalendar'
import AddEventSidebar from '~/views/apps/calendar/AddEventSidebar'
// ** Actions
import {
addEvent,
fetchEvents,
deleteEvent,
updateEvent,
handleSelectEvent,
handleAllCalendars,
handleCalendarsUpdate
} from '~/store/apps/calendar'
// ** Third Party Styles Imports
// import 'react-datepicker/dist/react-datepicker.css'
// ** CalendarColors
const calendarsColor = {
Personal: 'error',
Business: 'primary',
Family: 'warning',
Holiday: 'success',
ETC: 'info'
}
const AppCalendar = () => {
// ** States
const [calendarApi, setCalendarApi] = useState(null)
const [leftSidebarOpen, setLeftSidebarOpen] = useState(false)
const [addEventSidebarOpen, setAddEventSidebarOpen] = useState(false)
// ** Hooks
const { settings } = useSettings()
const dispatch = useDispatch()
const store = useSelector(state => state.calendar)
// ** Vars
const leftSidebarWidth = 260
const addEventSidebarWidth = 400
const { skin, direction } = settings
const mdAbove = useMediaQuery(theme => theme.breakpoints.up('md'))
useEffect(() => {
dispatch(fetchEvents(store.selectedCalendars))
}, [dispatch, store.selectedCalendars])
const handleLeftSidebarToggle = () => setLeftSidebarOpen(!leftSidebarOpen)
const handleAddEventSidebarToggle = () => setAddEventSidebarOpen(!addEventSidebarOpen)
return (
<CalendarWrapper
className='app-calendar'
sx={{
boxShadow: skin === 'bordered' ? 0 : 6,
...(skin === 'bordered' && { border: theme => `1px solid ${theme.palette.divider}` })
}}
>
<SidebarLeft
store={store}
mdAbove={mdAbove}
dispatch={dispatch}
calendarsColor={calendarsColor}
leftSidebarOpen={leftSidebarOpen}
leftSidebarWidth={leftSidebarWidth}
handleSelectEvent={handleSelectEvent}
handleAllCalendars={handleAllCalendars}
handleCalendarsUpdate={handleCalendarsUpdate}
handleLeftSidebarToggle={handleLeftSidebarToggle}
handleAddEventSidebarToggle={handleAddEventSidebarToggle}
/>
<Box
sx={{
p: 5,
pb: 0,
flexGrow: 1,
borderRadius: 1,
boxShadow: 'none',
backgroundColor: 'background.paper',
...(mdAbove ? { borderTopLeftRadius: 0, borderBottomLeftRadius: 0 } : {})
}}
>
<Calendar
store={store}
dispatch={dispatch}
direction={direction}
updateEvent={updateEvent}
calendarApi={calendarApi}
calendarsColor={calendarsColor}
setCalendarApi={setCalendarApi}
handleSelectEvent={handleSelectEvent}
handleLeftSidebarToggle={handleLeftSidebarToggle}
handleAddEventSidebarToggle={handleAddEventSidebarToggle}
/>
</Box>
<AddEventSidebar
store={store}
dispatch={dispatch}
addEvent={addEvent}
updateEvent={updateEvent}
deleteEvent={deleteEvent}
calendarApi={calendarApi}
drawerWidth={addEventSidebarWidth}
handleSelectEvent={handleSelectEvent}
addEventSidebarOpen={addEventSidebarOpen}
handleAddEventSidebarToggle={handleAddEventSidebarToggle}
/>
</CalendarWrapper>
)
}
export default AppCalendar