diff --git a/src/app/AuthenticatedApp.js b/src/app/AuthenticatedApp.js index 80d66be..b4a9412 100644 --- a/src/app/AuthenticatedApp.js +++ b/src/app/AuthenticatedApp.js @@ -1,22 +1,20 @@ -import { Navigate, Route, Routes, useNavigate } from 'react-router-dom'; +import { lazy } from 'react'; +import { useNavigate } from 'react-router-dom'; import { Container } from '@mui/system'; -import { useUser } from '../context/user'; import { useAuthState } from '../context/auth'; +import { useUser } from '../context/user'; 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'; +const StudentRoutes = lazy(() => import('./StudentRoutes')); +const ProfessorRoutes = lazy(() => import('./ProfessorRoutes')); + function AuthenticatedApp() { const navigate = useNavigate(); const { state } = useUser(); @@ -24,6 +22,17 @@ function AuthenticatedApp() { const layoutType = useLayoutType(); const { container, toolbar } = styles[layoutType]; + const routeResolver = role => { + switch (role) { + case 'STUDENT': + return ; + case 'PROFESSOR': + return ; + default: + return null; + } + }; + return ( state && state.user && ( @@ -43,21 +52,7 @@ function AuthenticatedApp() { options={menuOptions(state.pathname)} layoutType={layoutType} /> - - } /> - } /> - } /> - } /> - - } /> - - - } /> - - } /> - } /> - } /> - + {routeResolver(state.user.role)} ) diff --git a/src/app/ProfessorRoutes.js b/src/app/ProfessorRoutes.js new file mode 100644 index 0000000..419cb42 --- /dev/null +++ b/src/app/ProfessorRoutes.js @@ -0,0 +1,17 @@ +import { Navigate, Route, Routes } from 'react-router-dom'; + +function ProfessorRoutes() { + return ( + + Calendar} /> + Profile} /> + Information} /> + Home} /> + } /> + } /> + } /> + + ); +} + +export default ProfessorRoutes; 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 655b8d1..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 }); @@ -35,10 +34,9 @@ function AuthProvider(props) { const login = (email, password) => { setState({ ...state, status: 'pending' }); - let shouldFail = email !== 'teste@teste.com' || password !== '#teste1234'; - return getUser(shouldFail).then(data => { - if (shouldFail) { + return getUser(email, password).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/mocks.js b/src/services/mocks.js index fce3b29..a3bfb97 100644 --- a/src/services/mocks.js +++ b/src/services/mocks.js @@ -534,7 +534,7 @@ const allPeople = [ }, ]; -const user = { +const studentUser = { id: '123', ra: '0021123', username: 'ronaldosilva', @@ -548,6 +548,24 @@ const user = { course: 0, termsAgreed: true, year: 2018, + role: 'STUDENT', +}; + +const professorUser = { + id: '321', + ra: '0021123', + username: 'cazalbe', + email: 'carlos.junior@ifmg.edu.br', + password: '#carlos1234', // TODO: Remove this! + firstName: 'Carlos', + lastName: 'Severiano', + token: 'xkhfb9458hnsdfsi9q8345bsdf9b834yr', + phone: '31111111111', + avatar: 'https://i.pravatar.cc/300?img=61', + course: 0, + termsAgreed: true, + year: 2018, + role: 'PROFESSOR', }; const authFailure = { @@ -560,7 +578,8 @@ export { allClassroomAnnouncements, allPeople, faq, - user, + studentUser, + professorUser, authFailure, allUpcomingAssignments, }; diff --git a/src/services/user-service.js b/src/services/user-service.js index d256832..0f0fb92 100644 --- a/src/services/user-service.js +++ b/src/services/user-service.js @@ -3,7 +3,8 @@ import { allClassrooms, allAssignments, faq, - user, + studentUser, + professorUser, authFailure, allClassroomAnnouncements, allUpcomingAssignments, @@ -84,25 +85,32 @@ const getFaq = () => }; }); -const getUser = shouldFail => +const getUser = (email, password) => sleep(300).then(() => { - if (shouldFail) { - return authFailure; + let user; + if (email === 'p@test.com' && password === 'p123') { + user = professorUser; + } else if (email === 's@test.com' && password === 's123') { + user = studentUser; } else { - window.localStorage.setItem('$USER', JSON.stringify(user)); - return user; + return authFailure; } + window.localStorage.setItem('$USER', JSON.stringify(user)); + 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 {