From 9035f7f1023ed2e32fd4ab4c730ac1c9de08e3f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Mur=C3=A7a?= Date: Tue, 22 Nov 2022 23:32:26 -0300 Subject: [PATCH] Split only routes and fix register redirect --- src/app/AuthenticatedApp.js | 57 +++++++++++++++++++++++++++++++---- src/app/ProfessorApp.js | 5 ---- src/app/ProfessorRoutes.js | 14 +++++++++ src/app/StudentApp.js | 58 ------------------------------------ src/app/StudentRoutes.js | 30 +++++++++++++++++++ src/app/data.js | 1 + src/context/auth.js | 5 ++-- src/services/user-service.js | 15 ++++++---- 8 files changed, 107 insertions(+), 78 deletions(-) delete mode 100644 src/app/ProfessorApp.js create mode 100644 src/app/ProfessorRoutes.js delete mode 100644 src/app/StudentApp.js create mode 100644 src/app/StudentRoutes.js diff --git a/src/app/AuthenticatedApp.js b/src/app/AuthenticatedApp.js index 0d6b9cf..b4a9412 100644 --- a/src/app/AuthenticatedApp.js +++ b/src/app/AuthenticatedApp.js @@ -1,16 +1,61 @@ import { lazy } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { Container } from '@mui/system'; +import { useAuthState } from '../context/auth'; import { useUser } from '../context/user'; -const ProfessorApp = lazy(() => import('./ProfessorApp')); -const StudentApp = lazy(() => import('./StudentApp')); +import MainMenu from '../components/MainMenu'; +import useLayoutType from '../hooks/useLayoutType'; +import Toolbar from '../components/Toolbar'; + +import { avatarMenuOptions, menuOptions } from './data'; + +import styles from './styles'; + +const StudentRoutes = lazy(() => import('./StudentRoutes')); +const ProfessorRoutes = lazy(() => import('./ProfessorRoutes')); function AuthenticatedApp() { + const navigate = useNavigate(); const { state } = useUser(); + const { logout } = useAuthState(); + const layoutType = useLayoutType(); + const { container, toolbar } = styles[layoutType]; - return state && state.user && state.user.role === 'STUDENT' ? ( - - ) : ( - + const routeResolver = role => { + switch (role) { + case 'STUDENT': + return ; + case 'PROFESSOR': + return ; + default: + return null; + } + }; + + return ( + state && + state.user && ( + <> + + Olá, {state.user.firstName} 👋 +

+ } + layoutType={layoutType} + avatarMenuOptions={avatarMenuOptions(navigate, logout)} + user={state.user} + /> + + + {routeResolver(state.user.role)} + + + ) ); } diff --git a/src/app/ProfessorApp.js b/src/app/ProfessorApp.js deleted file mode 100644 index a29f32d..0000000 --- a/src/app/ProfessorApp.js +++ /dev/null @@ -1,5 +0,0 @@ -function ProfessorApp() { - return

Professor app

; -} - -export default ProfessorApp; diff --git a/src/app/ProfessorRoutes.js b/src/app/ProfessorRoutes.js new file mode 100644 index 0000000..0daac42 --- /dev/null +++ b/src/app/ProfessorRoutes.js @@ -0,0 +1,14 @@ +import { Navigate, Route, Routes } from 'react-router-dom'; + +function ProfessorRoutes() { + return ( + + Home} /> + } /> + } /> + } /> + + ); +} + +export default ProfessorRoutes; diff --git a/src/app/StudentApp.js b/src/app/StudentApp.js deleted file mode 100644 index 1122807..0000000 --- a/src/app/StudentApp.js +++ /dev/null @@ -1,58 +0,0 @@ -import { Navigate, Route, Routes, useNavigate } from 'react-router-dom'; -import { Container } from '@mui/system'; -import { useAuthState } from '../context/auth'; - -import MainMenu from '../components/MainMenu'; -import Home from '../screens/Home'; -import Information from '../screens/Information'; -import Calendar from '../screens/Calendar'; -import useLayoutType from '../hooks/useLayoutType'; -import Toolbar from '../components/Toolbar'; -import Classroom from '../screens/Classroom'; -import Assignment from '../screens/Assignment'; -import Profile from '../screens/Profile'; - -import { avatarMenuOptions, menuOptions } from './data'; - -import styles from './styles'; -function StudentApp({ user, pathname }) { - const navigate = useNavigate(); - const { logout } = useAuthState(); - const layoutType = useLayoutType(); - const { container, toolbar } = styles[layoutType]; - - return ( - <> - - Olá, {user.firstName} 👋 -

- } - layoutType={layoutType} - avatarMenuOptions={avatarMenuOptions(navigate, logout)} - user={user} - /> - - - - } /> - } /> - } /> - } /> - - } /> - - - } /> - - } /> - } /> - } /> - - - - ); -} - -export default StudentApp; diff --git a/src/app/StudentRoutes.js b/src/app/StudentRoutes.js new file mode 100644 index 0000000..b3d2961 --- /dev/null +++ b/src/app/StudentRoutes.js @@ -0,0 +1,30 @@ +import { Navigate, Route, Routes } from 'react-router-dom'; + +import Home from '../screens/Home'; +import Information from '../screens/Information'; +import Calendar from '../screens/Calendar'; +import Classroom from '../screens/Classroom'; +import Assignment from '../screens/Assignment'; +import Profile from '../screens/Profile'; + +function StudentRoutes() { + return ( + + } /> + } /> + } /> + } /> + + } /> + + + } /> + + } /> + } /> + } /> + + ); +} + +export default StudentRoutes; diff --git a/src/app/data.js b/src/app/data.js index e7048f5..647eb01 100644 --- a/src/app/data.js +++ b/src/app/data.js @@ -28,6 +28,7 @@ const menuOptions = activePath => [ isActive: activePath === '/home' || activePath === '/login' || + activePath === '/register' || activePath === '/profile' || activePath === '/' || activePath.indexOf('class') !== -1 || diff --git a/src/context/auth.js b/src/context/auth.js index bed6354..fd5104b 100644 --- a/src/context/auth.js +++ b/src/context/auth.js @@ -22,10 +22,9 @@ function AuthProvider(props) { const register = data => { setState({ ...state, status: 'pending' }); - let shouldFail = false; - return registerUser(data, shouldFail).then(data => { - if (shouldFail) { + return registerUser(data).then(data => { + if (data.message) { return setState({ status: 'error', user: null, error: data }); } else { return setState({ status: 'success', user: data, error: null }); diff --git a/src/services/user-service.js b/src/services/user-service.js index 998d760..0f0fb92 100644 --- a/src/services/user-service.js +++ b/src/services/user-service.js @@ -99,15 +99,18 @@ const getUser = (email, password) => return user; }); -const registerUser = (data, shouldFail) => +const registerUser = data => sleep(300).then(() => { - if (shouldFail) { - return authFailure; + let userData; + if (data.email === 'p@test.com') { + userData = { ...data, role: 'PROFESSOR' }; + } else if (data.email === 's@test.com') { + userData = { ...data, role: 'STUDENT' }; } else { - console.log(data); - window.localStorage.setItem('$USER', JSON.stringify(data)); - return data; + return authFailure; } + window.localStorage.setItem('$USER', JSON.stringify(data)); + return userData; }); export {