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.

127 lines (114 loc) 3.95 kB
// ** 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