Skip to content
Snippets Groups Projects
App.tsx 2.1 KiB
Newer Older
Defendi Alberto's avatar
Defendi Alberto committed
import React, { FC } 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';
import { AuthRoutes, NonAuthRoutes } from 'api/routes';
import { Roles } from 'api/userRoles';
import { configDjangoCookieName } from 'api/configDjangoCookieName';
Defendi Alberto's avatar
Defendi Alberto committed
import { muiTheme } from 'App.style';
import { withAuthorization } from 'components/Authorization/Authorization';
import { useRole } from 'hooks/useRole';
import { useAuth } from 'hooks/useAuth';
Defendi Alberto's avatar
Defendi Alberto committed
import { AuthUser } from 'components/Auth/Auth';
import { AuthContext } from 'components/Auth/AuthContext';
import { Dashboard } from 'components/Dashboard/Dashboard';
import { NotFound } from 'components/NotFound/NotFound';
import { Unauthorized } from 'components/Unauthorized/Unauthorized';
import { LandingPage } from 'components/LandingPage/LandingPage';

const Personal = withAuthorization(Dashboard);
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] = useRole();
  const [isAuth, setIsAuth] = useAuth();
Defendi Alberto's avatar
Defendi Alberto committed

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

  return (
Defendi Alberto's avatar
Defendi Alberto committed
    <div data-testid="App">
      <ThemeProvider theme={muiTheme}>
        <AuthContext.Provider value={value}>
          <Router>
            <Switch>
              <Route exact path={NonAuthRoutes.home} component={LandingPage} />
              <Route path={NonAuthRoutes.auth} component={AuthUser} />
              <Route
Defendi Alberto's avatar
Defendi Alberto committed
                path={AuthRoutes.dashboard}
                render={() => (
                  <Personal
Defendi Alberto's avatar
Defendi Alberto committed
                    allowedRoles={[
                      Roles.admin,
                      Roles.operator,
                      Roles.senior,
                      Roles.driver,
                    ]}
Defendi Alberto's avatar
Defendi Alberto committed
              />
              <Route
                path={NonAuthRoutes.unauthorized}
                component={Unauthorized}
              />
              <Route component={NotFound} />
            </Switch>
          </Router>
        </AuthContext.Provider>
      </ThemeProvider>
    </div>