diff --git a/frontend/src/components/AppSidebar.vue b/frontend/src/components/AppSidebar.vue index a0b94a831..7dba321cb 100644 --- a/frontend/src/components/AppSidebar.vue +++ b/frontend/src/components/AppSidebar.vue @@ -99,6 +99,7 @@ import { getSidebarLinks } from '../utils' import { usersStore } from '@/stores/user' import { sessionStore } from '@/stores/session' import { useSidebar } from '@/stores/sidebar' +import { useSettings } from '@/stores/settings' import { ChevronRight, Plus } from 'lucide-vue-next' import { createResource, Button } from 'frappe-ui' import PageModal from '@/components/Modals/PageModal.vue' @@ -114,6 +115,7 @@ const isModerator = ref(false) const isInstructor = ref(false) const pageToEdit = ref(null) const showWebPages = ref(false) +const settingsStore = useSettings() onMounted(() => { socket.on('publish_lms_notifications', (data) => { @@ -183,6 +185,28 @@ const addQuizzes = () => { } } +const addPrograms = () => { + if (settingsStore.learningPaths.data) { + let activeFor = ['Programs', 'ProgramForm'] + let index = 1 + if (!isInstructor.value && !isModerator.value) { + sidebarLinks.value = sidebarLinks.value.filter( + (link) => link.label !== 'Courses' + ) + activeFor.push('CourseDetail') + activeFor.push('Lesson') + index = 0 + } + + sidebarLinks.value.splice(index, 0, { + label: 'Programs', + icon: 'Route', + to: 'Programs', + activeFor: activeFor, + }) + } +} + const openPageModal = (link) => { showPageModal.value = true pageToEdit.value = link @@ -215,6 +239,7 @@ watch(userResource, () => { isModerator.value = userResource.data.is_moderator isInstructor.value = userResource.data.is_instructor addQuizzes() + addPrograms() } }) diff --git a/frontend/src/components/Controls/Autocomplete.vue b/frontend/src/components/Controls/Autocomplete.vue index 81f5358be..c4c18efac 100644 --- a/frontend/src/components/Controls/Autocomplete.vue +++ b/frontend/src/components/Controls/Autocomplete.vue @@ -92,7 +92,7 @@ {{ option.label }}
diff --git a/frontend/src/components/Controls/Link.vue b/frontend/src/components/Controls/Link.vue index b80484baf..6c2de9a58 100644 --- a/frontend/src/components/Controls/Link.vue +++ b/frontend/src/components/Controls/Link.vue @@ -44,6 +44,7 @@ +

{{ description }}

@@ -67,6 +68,10 @@ const props = defineProps({ type: String, default: '', }, + description: { + type: String, + default: '', + }, }) const emit = defineEmits(['update:modelValue', 'change']) @@ -118,7 +123,7 @@ const options = createResource({ transform: (data) => { return data.map((option) => { return { - label: option.value, + label: option.label || option.value, value: option.value, description: option.description, } diff --git a/frontend/src/components/CourseOutline.vue b/frontend/src/components/CourseOutline.vue index d93dbc2d7..04f739375 100644 --- a/frontend/src/components/CourseOutline.vue +++ b/frontend/src/components/CourseOutline.vue @@ -303,9 +303,9 @@ const trashChapter = (chapterName) => { } const redirectToChapter = (chapter) => { + if (!chapter.is_scorm_package) return event.preventDefault() if (props.allowEdit) return - if (!chapter.is_scorm_package) return if (!user.data) { showToast( __('You are not enrolled'), diff --git a/frontend/src/components/DesktopLayout.vue b/frontend/src/components/DesktopLayout.vue index 79a4a1dc9..70818bbea 100644 --- a/frontend/src/components/DesktopLayout.vue +++ b/frontend/src/components/DesktopLayout.vue @@ -8,6 +8,7 @@
+
@@ -16,4 +17,5 @@ diff --git a/frontend/src/components/Modals/ChapterModal.vue b/frontend/src/components/Modals/ChapterModal.vue index 3d041e84c..2f02a9e99 100644 --- a/frontend/src/components/Modals/ChapterModal.vue +++ b/frontend/src/components/Modals/ChapterModal.vue @@ -17,10 +17,15 @@