diff --git a/frontend/components.d.ts b/frontend/components.d.ts index 88e57b82..cd85de64 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -88,6 +88,7 @@ declare module 'vue' { PageModal: typeof import('./src/components/Modals/PageModal.vue')['default'] PaymentSettings: typeof import('./src/components/Settings/PaymentSettings.vue')['default'] Play: typeof import('./src/components/Icons/Play.vue')['default'] + ProgramForm: typeof import('./src/components/Modals/ProgramForm.vue')['default'] ProgressBar: typeof import('./src/components/ProgressBar.vue')['default'] Question: typeof import('./src/components/Modals/Question.vue')['default'] Quiz: typeof import('./src/components/Quiz.vue')['default'] diff --git a/frontend/src/components/AppSidebar.vue b/frontend/src/components/AppSidebar.vue index f1421537..2f99bbed 100644 --- a/frontend/src/components/AppSidebar.vue +++ b/frontend/src/components/AppSidebar.vue @@ -196,7 +196,7 @@ import { usersStore } from '@/stores/user' import { sessionStore } from '@/stores/session' import { useSidebar } from '@/stores/sidebar' import { useSettings } from '@/stores/settings' -import { Button, createResource, Tooltip } from 'frappe-ui' +import { Button, call, createResource, Tooltip } from 'frappe-ui' import PageModal from '@/components/Modals/PageModal.vue' import { capture } from '@/telemetry' import LMSLogo from '@/components/Icons/LMSLogo.vue' @@ -214,6 +214,7 @@ import { Users, BookText, Zap, + Check, } from 'lucide-vue-next' import { TrialBanner, @@ -360,35 +361,26 @@ const addProgrammingExercises = () => { } } -const addPrograms = () => { - let activeFor = ['Programs', 'ProgramForm'] +const addPrograms = async () => { + let canAddProgram = await checkIfCanAddProgram() + if (!canAddProgram) return + let activeFor = ['Programs', 'ProgramDetail'] let index = 1 - let canAddProgram = false - if ( - !isInstructor.value && - !isModerator.value && - settingsStore.learningPaths.data - ) { - sidebarLinks.value = sidebarLinks.value.filter( - (link) => link.label !== 'Courses' - ) - activeFor.push('CourseDetail') - activeFor.push('Lesson') - index = 0 - canAddProgram = true - } else if (isInstructor.value || isModerator.value) { - canAddProgram = true - } + sidebarLinks.value.splice(index, 0, { + label: 'Programs', + icon: 'Route', + to: 'Programs', + activeFor: activeFor, + }) +} - if (canAddProgram) { - sidebarLinks.value.splice(index, 0, { - label: 'Programs', - icon: 'Route', - to: 'Programs', - activeFor: activeFor, - }) +const checkIfCanAddProgram = async () => { + if (isModerator.value || isInstructor.value) { + return true } + const programs = await call('lms.lms.utils.get_programs') + return programs.enrolled.length > 0 || programs.published.length > 0 } const openPageModal = (link) => { diff --git a/frontend/src/components/BatchOverlay.vue b/frontend/src/components/BatchOverlay.vue index fdd3a893..cc846d37 100644 --- a/frontend/src/components/BatchOverlay.vue +++ b/frontend/src/components/BatchOverlay.vue @@ -56,7 +56,7 @@
- {{ isModerator ? __('Manage Batch') : __('Visit Batch') }} + {{ isStudent ? __('Visit Batch') : __('Manage Batch') }} @@ -204,4 +204,12 @@ const isStudent = computed(() => { const isModerator = computed(() => { return user.data?.is_moderator }) + +const isEvaluator = computed(() => { + return user.data?.is_evaluator +}) + +const canAccessBatch = computed(() => { + return isModerator.value || isStudent.value || isEvaluator.value +}) diff --git a/frontend/src/components/CourseCard.vue b/frontend/src/components/CourseCard.vue index 00b13bb1..c1740b46 100644 --- a/frontend/src/components/CourseCard.vue +++ b/frontend/src/components/CourseCard.vue @@ -1,7 +1,7 @@