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 {