From 5e607c3b8e76ed085dc23ea29c35dc626f5002ad Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Wed, 20 Aug 2025 13:11:22 +0530 Subject: [PATCH] refactor: sidebar visibility of programs --- frontend/src/components/AppSidebar.vue | 15 ++++++- frontend/src/components/MobileLayout.vue | 40 ++++++++++++++++--- frontend/src/pages/Programs/Programs.vue | 2 +- .../src/pages/Programs/StudentPrograms.vue | 7 +++- .../lms_course_progress.py | 2 + .../doctype/lms_enrollment/lms_enrollment.py | 27 ++++++------- lms/lms/doctype/lms_program/lms_program.json | 11 ++++- lms/lms/utils.py | 4 +- 8 files changed, 80 insertions(+), 28 deletions(-) diff --git a/frontend/src/components/AppSidebar.vue b/frontend/src/components/AppSidebar.vue index b09f2536..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,7 +361,9 @@ const addProgrammingExercises = () => { } } -const addPrograms = () => { +const addPrograms = async () => { + let canAddProgram = await checkIfCanAddProgram() + if (!canAddProgram) return let activeFor = ['Programs', 'ProgramDetail'] let index = 1 @@ -372,6 +375,14 @@ const addPrograms = () => { }) } +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) => { showPageModal.value = true pageToEdit.value = link diff --git a/frontend/src/components/MobileLayout.vue b/frontend/src/components/MobileLayout.vue index 40cb3855..7fb29b87 100644 --- a/frontend/src/components/MobileLayout.vue +++ b/frontend/src/components/MobileLayout.vue @@ -56,6 +56,7 @@