Skip to content
Snippets Groups Projects
App.tsx 2.64 KiB
Newer Older
import React, { FC, useEffect, useState } from 'react';
Defendi Alberto's avatar
Defendi Alberto committed
import { ThemeProvider } from '@material-ui/core/styles';
Defendi Alberto's avatar
Defendi Alberto committed
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
Defendi Alberto's avatar
Defendi Alberto committed
import { AuthUser } from 'components/AuthUser/AuthUser';
import { LandingPage } from 'components/NonAuthUser/LandingPage/LandingPage';
import { PrivateRoute } from 'components/PrivateRoute/PrivateRoute';
import { AuthRoutes, NonAuthRoutes } from 'api/routes';
import { NotFound } from 'components/NonAuthUser/NotFound/NotFound';
Defendi Alberto's avatar
Defendi Alberto committed
import { ProfilePage } from 'components/AuthUser/Dashboard/ProfilePage/ProfilePage';
import { Roles } from 'api/userRoles';
import { Unauthorized } from 'components/NonAuthUser/Unauthorized/Unauthorized';
Defendi Alberto's avatar
Defendi Alberto committed
import { HomePage } from 'components/AuthUser/Dashboard/HomePage/HomePage';
import { AuthContext } from 'components/AuthUser/AuthContext';
import { configDjangoCookieName } from 'api/configDjangoCookieName';
Defendi Alberto's avatar
Defendi Alberto committed
import { Dashboard } from 'components/AuthUser/Dashboard/Dashboard';
import { isAuthenticated } from 'api/isAuthenticated';
import { muiTheme } from 'App.style';
import { getRole } from 'api/getRole';
Defendi Alberto's avatar
Defendi Alberto committed

Defendi Alberto's avatar
Defendi Alberto committed
/**
 * Entry point of the app.
 */
export const App: FC = () => {
  configDjangoCookieName();
  const [role, setRole] = useState('');
Defendi Alberto's avatar
Defendi Alberto committed
  const [isAuth, setIsAuth] = useState<boolean>(false);

  const value = { role, setRole, isAuth, setIsAuth };

  useEffect(() => {
    // Initialize asking the server if this session is already logged in.
    isAuthenticated().then((responseState) => setIsAuth(responseState));
    getRole().then((responseRole) => setRole(responseRole));
  }, [isAuth, role]);
  return (
Defendi Alberto's avatar
Defendi Alberto committed
    <ThemeProvider theme={muiTheme}>
      <AuthContext.Provider value={value}>
        <Router>
          <Switch>
            <Route exact path={NonAuthRoutes.home} component={LandingPage} />
Defendi Alberto's avatar
Defendi Alberto committed

            <Route path={NonAuthRoutes.auth} component={AuthUser} />
            <PrivateRoute
              Component={Dashboard}
              path={AuthRoutes.dashboard}
              requiredRoles={[Roles.admin, Roles.operator, Roles.senior]}
            />
            <PrivateRoute
              Component={HomePage}
              path={AuthRoutes.dashboard}
              requiredRoles={[Roles.admin, Roles.operator, Roles.senior]}
            />
            <PrivateRoute
              Component={ProfilePage}
              path={AuthRoutes.profile}
              requiredRoles={[Roles.admin, Roles.operator, Roles.senior]}
            />
            <Route path={NonAuthRoutes.unauthorized} component={Unauthorized} />
            <Route component={NotFound} />
          </Switch>
Defendi Alberto's avatar
Defendi Alberto committed
        </Router>
      </AuthContext.Provider>
    </ThemeProvider>