forked from expertiza/reimplementation-front-end
-
Notifications
You must be signed in to change notification settings - Fork 0
/
App.tsx
114 lines (111 loc) · 3.82 KB
/
App.tsx
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import React from "react";
import Home from "pages/Home";
import RootLayout from "layout/Root";
import ErrorPage from "./router/ErrorPage";
import { createBrowserRouter, Navigate, RouterProvider } from "react-router-dom";
import Users from "./pages/Users/User";
import UserEditor from "./pages/Users/UserEditor";
import { loadUserDataRolesAndInstitutions } from "./pages/Users/userUtil";
import ManageUserTypes, { loader as loadUsers } from "./pages/Administrator/ManageUserTypes";
import InstitutionEditor, { loadInstitution } from "./pages/Institutions/InstitutionEditor";
import Institutions, { loadInstitutions } from "./pages/Institutions/Institutions";
import RoleEditor, { loadAvailableRole } from "./pages/Roles/RoleEditor";
import Roles, { loadRoles } from "./pages/Roles/Roles";
import Login from "./pages/Authentication/Login";
import Logout from "./pages/Authentication/Logout";
import ProtectedRoute from "./router/ProtectedRoute";
import { ROLE } from "./utils/interfaces";
import AdministratorLayout from "./layout/Administrator";
import NotFound from "./router/NotFound";
import Courses from "./pages/Manage/Courses";
function App() {
const router = createBrowserRouter([
{
path: "/",
element: <RootLayout />,
errorElement: <ErrorPage />,
children: [
{ index: true, element: <ProtectedRoute element={<Home />} /> },
{ path: "login", element: <Login /> },
{ path: "logout", element: <ProtectedRoute element={<Logout />} /> },
{
path: "users",
element: <ProtectedRoute element={<Users />} leastPrivilegeRole={ROLE.TA} />,
children: [
{
path: "new",
element: <UserEditor mode="create" />,
loader: loadUserDataRolesAndInstitutions,
},
{
path: "edit/:id",
element: <UserEditor mode="update" />,
loader: loadUserDataRolesAndInstitutions,
},
],
},
{
path: "administrator",
element: (
<ProtectedRoute element={<AdministratorLayout />} leastPrivilegeRole={ROLE.ADMIN} />
),
children: [
{
id: "roles",
path: "roles",
element: <Roles />,
loader: loadRoles,
children: [
{
path: "new",
element: <RoleEditor mode="create" />,
},
{
id: "edit-role",
path: "edit/:id",
element: <RoleEditor mode="update" />,
loader: loadAvailableRole,
},
],
},
{
path: "institutions",
element: <Institutions />,
loader: loadInstitutions,
children: [
{
path: "new",
element: <InstitutionEditor mode="create" />,
},
{
path: "edit/:id",
element: <InstitutionEditor mode="update" />,
loader: loadInstitution,
},
],
},
{
path: ":user_type",
element: <ManageUserTypes />,
loader: loadUsers,
children: [
{
path: "new",
element: <Navigate to="/users/new" />,
},
{
path: "edit/:id",
element: <Navigate to="/users/edit/:id" />,
},
],
},
],
},
{ path: "courses", element: <ProtectedRoute element={<Courses />} /> },
{ path: "*", element: <NotFound /> },
],
},
]);
return <RouterProvider router={router} />;
}
export default App;