import React, { useState } from 'react'; import { ThemeProvider } from '@material-ui/core/styles'; import { Switch, Route, useHistory } from 'react-router-dom'; import CssBaseline from '@material-ui/core/CssBaseline'; import { useDispatch, useSelector } from 'react-redux'; import { makeStyles, LinearProgress, useMediaQuery } from '@material-ui/core'; import MainPage from './MainPage'; import RouteReportPage from './reports/RouteReportPage'; import ServerPage from './admin/ServerPage'; import UsersPage from './admin/UsersPage'; import DevicePage from './DevicePage'; import UserPage from './UserPage'; import SocketController from './SocketController'; import NotificationsPage from './settings/NotificationsPage'; import NotificationPage from './settings/NotificationPage'; import GroupsPage from './settings/GroupsPage'; import GroupPage from './settings/GroupPage'; import PositionPage from './PositionPage'; import EventReportPage from './reports/EventReportPage'; import ReplayPage from './reports/ReplayPage'; import TripReportPage from './reports/TripReportPage'; import StopReportPage from './reports/StopReportPage'; import SummaryReportPage from './reports/SummaryReportPage'; import ChartReportPage from './reports/ChartReportPage'; import DriversPage from './settings/DriversPage'; import DriverPage from './settings/DriverPage'; import CalendarsPage from './settings/CalendarsPage'; import CalendarPage from './settings/CalendarPage'; import ComputedAttributesPage from './settings/ComputedAttributesPage'; import ComputedAttributePage from './settings/ComputedAttributePage'; import MaintenancesPage from './settings/MaintenancesPage'; import MaintenancePage from './settings/MaintenancePage'; import CommandsPage from './settings/CommandsPage'; import CommandPage from './settings/CommandPage'; import StatisticsPage from './admin/StatisticsPage'; import CachingController from './CachingController'; import LoginForm from './components/registration/LoginForm'; import RegisterForm from './components/registration/RegisterForm'; import ResetPasswordForm from './components/registration/ResetPasswordForm'; import theme from './theme'; import GeofencesPage from './GeofencesPage'; import GeofencePage from './GeofencePage'; import { LocalizationProvider } from './LocalizationProvider'; import useQuery from './common/useQuery'; import { useEffectAsync } from './reactHelper'; import { devicesActions } from './store'; import EventPage from './EventPage'; import PreferencesPage from './settings/PreferencesPage'; import BottomMenu from './components/BottomMenu'; const useStyles = makeStyles(() => ({ root: { display: 'flex', flexDirection: 'column', height: '100%', }, page: { flexGrow: 1, overflow: 'auto', }, menu: { zIndex: 4, }, })); const App = () => { const history = useHistory(); const dispatch = useDispatch(); const classes = useStyles(); const desktop = useMediaQuery(theme.breakpoints.up('lg')); const initialized = useSelector((state) => !!state.session.server && !!state.session.user); const [redirectsHandled, setRedirectsHandled] = useState(false); const query = useQuery(); useEffectAsync(async () => { if (query.get('token')) { const token = query.get('token'); await fetch(`/api/session?token=${encodeURIComponent(token)}`); history.push('/'); } else if (query.get('deviceId')) { const deviceId = query.get('deviceId'); const response = await fetch(`/api/devices?uniqueId=${deviceId}`); if (response.ok) { const items = await response.json(); if (items.length > 0) { dispatch(devicesActions.select(items[0].id)); } } history.push('/'); } else if (query.get('eventId')) { const eventId = parseInt(query.get('eventId'), 10); history.push(`/event/${eventId}`); } else { setRedirectsHandled(true); } }, [query]); return (!redirectsHandled ? () : ( {!initialized ? () : (
{!desktop && (
)}
)}
)); }; export default App;