Untitled
unknown
plain_text
a year ago
6.3 kB
21
Indexable
import { lazy, Suspense, useContext } from 'react'
import { Navigate, Outlet, useRoutes } from 'react-router-dom'
import {
ADMIN_EXAM_ADD,
ADMIN_EXAM_DETAIL,
ADMIN_EXAM_EDIT,
ADMIN_EXAM_LIST,
ADMIN_EXAM_MANAGE,
EXAM_LEADERBOARD,
EXAM_LOG,
EXAM_USER,
EXAM_USER_DETAIL,
EXAM_USER_DETAIL_LIST,
LOGIN,
REGISTER
} from './constants/routes'
import Test from './pages/Test'
import Header from './layout/header'
import ExamLayout from './layout/ExamLayout'
import MainLayout from './layout/MainLayout'
import { AppContext } from './contexts/app.context'
const AdminExamManage = lazy(() => import('./pages/admin/ExamDetail/AdminExamManage'))
const AdminExamDetail = lazy(() => import('./pages/admin/ExamDetail'))
const AdminExamEdit = lazy(() => import('./pages/admin/ExamEdit/AdminExamEdit'))
const AdminExamList = lazy(() => import('./pages/admin/ExamList/AdminExamList'))
const ExamUserDetailList = lazy(() => import('./pages/ExamUserDetailList'))
const ExamUserDetail = lazy(() => import('./pages/ExamUserDetail/ExamUserDetail'))
const LeaderBoardPage = lazy(() => import('./pages/LeaderBoard/LeaderBoardPage'))
const Log = lazy(() => import('./pages/Log'))
const Register = lazy(() => import('./pages/Register'))
const ExamUserList = lazy(() => import('./pages/ExamUserList/ExamUserList'))
const Login = lazy(() => import('./pages/Login'))
const NotFound = lazy(() => import('./pages/NotFound'))
export default function useRouteElements() {
function ProtectedRoute() {
const { isAuthenticated } = useContext(AppContext)
return isAuthenticated ? <Outlet /> : <Navigate to='/login' />
}
function RejectedRoute() {
const { isAuthenticated, user } = useContext(AppContext)
return !isAuthenticated ? (
<Outlet />
) : (
<Navigate to={user?.role === 'ROLE_USER' ? '/exams/users' : '/admin/b20dccn327/exams'} />
)
}
function AdminRoute() {
const { user } = useContext(AppContext)
return user?.role === 'ROLE_ADMIN' ? <Outlet /> : <Navigate to='/not-found' />
}
function UserRoute() {
const { user } = useContext(AppContext)
return user?.role === 'ROLE_USER' ? <Outlet /> : <Navigate to='/not-found' />
}
const routeElements = useRoutes([
{
path: '',
element: <RejectedRoute />,
children: [
{
path: LOGIN,
element: (
<Suspense>
<Login />
</Suspense>
)
},
{
path: REGISTER,
element: (
<Suspense>
<Register />
</Suspense>
)
}
]
},
{
path: '',
element: <ProtectedRoute />,
children: [
{
path: '',
element: <UserRoute />,
children: [
{
path: '/test',
element: (
<Suspense>
<Test />
</Suspense>
)
},
{
path: EXAM_USER,
element: (
<Suspense>
<Header />
<ExamUserList />
</Suspense>
)
},
{
path: EXAM_LOG,
element: (
<Suspense>
<Header />
<ExamLayout>
<Log />
</ExamLayout>
</Suspense>
)
},
{
path: EXAM_USER_DETAIL_LIST,
element: (
<Suspense>
<Header />
<ExamLayout>
<ExamUserDetailList />
</ExamLayout>
</Suspense>
)
},
{
path: EXAM_USER_DETAIL,
element: (
<Suspense>
<Header />
<ExamLayout>
<ExamUserDetail />
</ExamLayout>
</Suspense>
)
},
{
path: EXAM_LEADERBOARD,
element: (
<Suspense>
<Header />
<ExamLayout>
<LeaderBoardPage />
</ExamLayout>
</Suspense>
)
}
]
},
{
path: '',
element: <AdminRoute />,
children: [
{
path: ADMIN_EXAM_LIST,
element: (
<Suspense>
<Header />
<MainLayout>
<AdminExamList />
</MainLayout>
</Suspense>
)
},
{
path: ADMIN_EXAM_EDIT,
element: (
<Suspense>
<Header />
<MainLayout>
<AdminExamEdit />
</MainLayout>
</Suspense>
)
},
{
path: ADMIN_EXAM_ADD,
element: (
<Suspense>
<Header />
<MainLayout>
<AdminExamEdit />
</MainLayout>
</Suspense>
)
},
{
path: ADMIN_EXAM_DETAIL,
element: (
<Suspense>
<Header />
<MainLayout>
<AdminExamDetail />
</MainLayout>
</Suspense>
)
},
{
path: ADMIN_EXAM_MANAGE,
element: (
<Suspense>
<Header />
<MainLayout>
<AdminExamManage />
</MainLayout>
</Suspense>
)
}
]
}
]
},
{
path: '/not-found',
element: (
<Suspense>
<NotFound />
</Suspense>
)
}
])
return routeElements
}
Editor is loading...
Leave a Comment