import React, { useState } from 'react'; import { Route, Routes, useLocation, useNavigate, } from 'react-router-dom'; import { useDispatch } from 'react-redux'; import { LinearProgress } from '@mui/material'; import MainPage from './main/MainPage'; import RouteReportPage from './reports/RouteReportPage'; import ServerPage from './settings/ServerPage'; import UsersPage from './settings/UsersPage'; import DevicePage from './settings/DevicePage'; import UserPage from './settings/UserPage'; import NotificationsPage from './settings/NotificationsPage'; import NotificationPage from './settings/NotificationPage'; import GroupsPage from './settings/GroupsPage'; import GroupPage from './settings/GroupPage'; import PositionPage from './other/PositionPage'; import NetworkPage from './other/NetworkPage'; import EventReportPage from './reports/EventReportPage'; import ReplayPage from './other/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 './reports/StatisticsPage'; import LoginPage from './login/LoginPage'; import RegisterPage from './login/RegisterPage'; import ResetPasswordPage from './login/ResetPasswordPage'; import GeofencesPage from './other/GeofencesPage'; import GeofencePage from './settings/GeofencePage'; import useQuery from './common/util/useQuery'; import { useEffectAsync } from './reactHelper'; import { devicesActions } from './store'; import EventPage from './other/EventPage'; import PreferencesPage from './settings/PreferencesPage'; import AccumulatorsPage from './settings/AccumulatorsPage'; import CommandSendPage from './settings/CommandSendPage'; import App from './App'; import ChangeServerPage from './other/ChangeServerPage'; import DevicesPage from './settings/DevicesPage'; const Navigation = () => { const navigate = useNavigate(); const dispatch = useDispatch(); const [redirectsHandled, setRedirectsHandled] = useState(false); const { pathname } = useLocation(); const query = useQuery(); useEffectAsync(async () => { if (query.get('token')) { const token = query.get('token'); await fetch(`/api/session?token=${encodeURIComponent(token)}`); navigate(pathname); } 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)); } } else { throw Error(await response.text()); } navigate('/'); } else if (query.get('eventId')) { const eventId = parseInt(query.get('eventId'), 10); navigate(`/event/${eventId}`); } else { setRedirectsHandled(true); } }, [query]); if (!redirectsHandled) { return (); } return ( } /> } /> } /> } /> }> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); }; export default Navigation;