summaryrefslogtreecommitdiff
path: root/src/app/AuthenticatedApp.js
blob: b4a9412797065554adb119b8600773ec3044be8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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';

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];

  const routeResolver = role => {
    switch (role) {
      case 'STUDENT':
        return <StudentRoutes />;
      case 'PROFESSOR':
        return <ProfessorRoutes />;
      default:
        return null;
    }
  };

  return (
    state &&
    state.user && (
      <>
        <Toolbar
          title={
            <p style={toolbar}>
              Olá, <strong>{state.user.firstName}</strong> 👋
            </p>
          }
          layoutType={layoutType}
          avatarMenuOptions={avatarMenuOptions(navigate, logout)}
          user={state.user}
        />
        <Container maxWidth="false" sx={container}>
          <MainMenu
            options={menuOptions(state.pathname)}
            layoutType={layoutType}
          />
          {routeResolver(state.user.role)}
        </Container>
      </>
    )
  );
}

export default AuthenticatedApp;