Files
lms/frontend/src/router.js
Fahid Latheef Alungal 50fe94e47b fix: fix yarn dev not working due to const variable re-assignment
It was causing this error

  ✘ [ERROR] Cannot assign to "isLoggedIn" because it is a constant

    src/router.js:230:2:
      230 │     isLoggedIn = false
          ╵     ~~~~~~~~~~

  The symbol "isLoggedIn" was declared a constant here:

    src/router.js:222:7:
      222 │   const { isLoggedIn } = sessionStore()
          ╵         ^
2025-02-16 16:08:35 +05:30

244 lines
5.2 KiB
JavaScript

import { createRouter, createWebHistory } from 'vue-router'
import { usersStore } from './stores/user'
import { sessionStore } from './stores/session'
import { useSettings } from './stores/settings'
let defaultRoute = '/courses'
const routes = [
{
path: '/',
redirect: {
name: 'Courses',
},
},
{
path: '/courses',
name: 'Courses',
component: () => import('@/pages/Courses.vue'),
},
{
path: '/courses/:courseName',
name: 'CourseDetail',
component: () => import('@/pages/CourseDetail.vue'),
props: true,
},
{
path: '/courses/:courseName/learn/:chapterNumber-:lessonNumber',
name: 'Lesson',
component: () => import('@/pages/Lesson.vue'),
props: true,
},
{
path: '/courses/:courseName/learn/:chapterName',
name: 'SCORMChapter',
component: () => import('@/pages/SCORMChapter.vue'),
props: true,
},
{
path: '/batches',
name: 'Batches',
component: () => import('@/pages/Batches.vue'),
},
{
path: '/batches/details/:batchName',
name: 'BatchDetail',
component: () => import('@/pages/BatchDetail.vue'),
props: true,
},
{
path: '/batches/:batchName',
name: 'Batch',
component: () => import('@/pages/Batch.vue'),
props: true,
},
{
path: '/billing/:type/:name',
name: 'Billing',
component: () => import('@/pages/Billing.vue'),
props: true,
},
{
path: '/statistics',
name: 'Statistics',
component: () => import('@/pages/Statistics.vue'),
},
{
path: '/user/:username',
name: 'Profile',
component: () => import('@/pages/Profile.vue'),
props: true,
redirect: { name: 'ProfileAbout' },
children: [
{
name: 'ProfileAbout',
path: '',
component: () => import('@/pages/ProfileAbout.vue'),
},
{
name: 'ProfileCertificates',
path: 'certificates',
component: () => import('@/pages/ProfileCertificates.vue'),
},
{
name: 'ProfileRoles',
path: 'roles',
component: () => import('@/pages/ProfileRoles.vue'),
},
{
name: 'ProfileEvaluator',
path: 'slots',
component: () => import('@/pages/ProfileEvaluator.vue'),
},
{
name: 'ProfileEvaluationSchedule',
path: 'schedule',
component: () =>
import('@/pages/ProfileEvaluationSchedule.vue'),
},
],
},
{
path: '/job-openings',
name: 'Jobs',
component: () => import('@/pages/Jobs.vue'),
},
{
path: '/job-openings/:job',
name: 'JobDetail',
component: () => import('@/pages/JobDetail.vue'),
props: true,
},
{
path: '/courses/:courseName/edit',
name: 'CourseForm',
component: () => import('@/pages/CourseForm.vue'),
props: true,
},
{
path: '/courses/:courseName/learn/:chapterNumber-:lessonNumber/edit',
name: 'LessonForm',
component: () => import('@/pages/LessonForm.vue'),
props: true,
},
{
path: '/batches/:batchName/edit',
name: 'BatchForm',
component: () => import('@/pages/BatchForm.vue'),
props: true,
},
{
path: '/job-opening/:jobName/edit',
name: 'JobCreation',
component: () => import('@/pages/JobCreation.vue'),
props: true,
},
{
path: '/certified-participants',
name: 'CertifiedParticipants',
component: () => import('@/pages/CertifiedParticipants.vue'),
},
{
path: '/notifications',
name: 'Notifications',
component: () => import('@/pages/Notifications.vue'),
},
{
path: '/badges/:badgeName/:email',
name: 'Badge',
component: () => import('@/pages/Badge.vue'),
props: true,
},
{
path: '/quizzes',
name: 'Quizzes',
component: () => import('@/pages/Quizzes.vue'),
},
{
path: '/quizzes/:quizID',
name: 'QuizForm',
component: () => import('@/pages/QuizForm.vue'),
props: true,
},
{
path: '/quiz/:quizID',
name: 'QuizPage',
component: () => import('@/pages/QuizPage.vue'),
props: true,
},
{
path: '/quiz-submissions/:quizID',
name: 'QuizSubmissionList',
component: () => import('@/pages/QuizSubmissionList.vue'),
props: true,
},
{
path: '/quiz-submission/:submission',
name: 'QuizSubmission',
component: () => import('@/pages/QuizSubmission.vue'),
props: true,
},
{
path: '/programs/:programName',
name: 'ProgramForm',
component: () => import('@/pages/ProgramForm.vue'),
props: true,
},
{
path: '/programs',
name: 'Programs',
component: () => import('@/pages/Programs.vue'),
},
{
path: '/assignments',
name: 'Assignments',
component: () => import('@/pages/Assignments.vue'),
},
{
path: '/assignments/:assignmentID',
name: 'AssignmentForm',
component: () => import('@/pages/AssignmentForm.vue'),
props: true,
},
{
path: '/assignment-submission/:assignmentID/:submissionName',
name: 'AssignmentSubmission',
component: () => import('@/pages/AssignmentSubmission.vue'),
props: true,
},
{
path: '/assignment-submissions',
name: 'AssignmentSubmissionList',
component: () => import('@/pages/AssignmentSubmissionList.vue'),
},
]
let router = createRouter({
history: createWebHistory('/lms'),
routes,
})
router.beforeEach(async (to, from, next) => {
const { userResource } = usersStore()
let { isLoggedIn } = sessionStore()
const { allowGuestAccess } = useSettings()
try {
if (isLoggedIn) {
await userResource.promise
}
} catch (error) {
isLoggedIn = false
}
if (!isLoggedIn) {
await allowGuestAccess.promise
if (!allowGuestAccess.data) {
window.location.href = '/login'
return
}
}
return next()
})
export default router