From 26b064f44dfa42ef855d827a674a30d939c031b5 Mon Sep 17 00:00:00 2001 From: Alberto Defendi <1369-ahl-berto@users.noreply.gitlab.inf.unibz.it> Date: Thu, 20 May 2021 12:14:54 +0200 Subject: [PATCH] Cleanup. - Wrap components in dashboard. - Move mui theme in App.style.ts. - Move api calls to separate files. - Insert AuthContext provider. --- src/App.tsx | 103 +++++++++++++++++++++++++--------------------------- 1 file changed, 50 insertions(+), 53 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index f03a403..c745244 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,78 +1,75 @@ import React, { FC, useEffect, useState } from 'react'; -import { createMuiTheme, ThemeProvider } from '@material-ui/core/styles'; +import { ThemeProvider } from '@material-ui/core/styles'; import { BrowserRouter as Router, Switch, Route } from 'react-router-dom'; import { AuthUser } from 'components/AuthUser/AuthUser'; import { LandingPage } from 'components/NonAuthUser/LandingPage/LandingPage'; import { PrivateRoute } from 'api/PrivateRoute/PrivateRoute'; import { AuthRoutes, NonAuthRoutes } from 'api/routes'; import { NotFound } from 'components/NonAuthUser/NotFound/NotFound'; -import { ProfilePage } from 'components/AuthUser/ProfilePage/ProfilePage'; +import { ProfilePage } from 'components/AuthUser/Dashboard/ProfilePage/ProfilePage'; import { Roles } from 'api/userRoles'; import { Unauthorized } from 'components/NonAuthUser/Unauthorized/Unauthorized'; -import { ReservationPage } from 'components/AuthUser/ReservationPage/ReservationPage'; -import { HomePage } from 'components/AuthUser/HomePage/HomePage'; -import { SignInForm } from 'components/AuthUser/SignInForm/SignInForm'; +import { HomePage } from 'components/AuthUser/Dashboard/HomePage/HomePage'; import { AuthContext } from 'components/AuthUser/AuthContext'; import { configDjangoCookieName } from 'api/configDjangoCookieName'; +import { fetchCookie } from 'api/fetchCookie'; +import { Dashboard } from 'components/AuthUser/Dashboard/Dashboard'; +import { isAuthenticated } from 'api/isAuthenticated'; +import { muiTheme } from 'App.style'; +import { getRole } from 'api/getRole'; -const theme = createMuiTheme({ - palette: { - primary: { - main: '#5e5ce4', - }, - secondary: { - main: '#e2e45c', - }, - }, - - typography: { - fontSize: 16, - }, - - overrides: { - MuiTabs: { - indicator: { - backgroundColor: 'white', - }, - }, - MuiTab: { - wrapper: { - flexDirection: 'row', - }, - }, - }, -}); - +/** + * Entry point of the app. + */ export const App: FC = () => { + let isMounted = true; configDjangoCookieName(); const [role, setRole] = useState(''); - const value = { role, setRole }; + const [isAuth, setIsAuth] = useState<boolean>(false); + const [isCookieFetched, setIsCookieFetched] = useState<string>(''); + + const value = { role, setRole, isAuth, setIsAuth }; + + useEffect(() => { + if (!isCookieFetched && isMounted) fetchCookie(setIsCookieFetched); + + // Initialize asking the server if this session is already logged in. + isAuthenticated(setIsAuth); + getRole(setRole); + + return () => { + isMounted = false; + }; + }, [isCookieFetched]); return ( - <ThemeProvider theme={theme}> - <Router> - <div data-testid="App"> + <ThemeProvider theme={muiTheme}> + <AuthContext.Provider value={value}> + <Router> <Switch> <Route exact path={NonAuthRoutes.home} component={LandingPage} /> - <AuthContext.Provider value={value}> - <Route path={NonAuthRoutes.auth} component={AuthUser} /> - <PrivateRoute - path={AuthRoutes.dashboard} - Component={HomePage} - requiredRoles={[Roles.admin, Roles.operator, Roles.senior]} - /> - <PrivateRoute - path={AuthRoutes.profile} - Component={ProfilePage} - requiredRoles={[Roles.admin, Roles.operator, Roles.senior]} - /> - </AuthContext.Provider> - <Route path={AuthRoutes.reservation} component={ReservationPage} /> + + <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> - </div> - </Router> + </Router> + </AuthContext.Provider> </ThemeProvider> ); }; -- GitLab