diff --git a/frontend/src/components/RelatedCourses.vue b/frontend/src/components/RelatedCourses.vue
new file mode 100644
index 00000000..8a359294
--- /dev/null
+++ b/frontend/src/components/RelatedCourses.vue
@@ -0,0 +1,61 @@
+
+
+
+
+ {{ __('Related Courses') }}
+
+
+ {{ relatedCourses.data.length }} {{ __('courses') }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/pages/CourseDetail.vue b/frontend/src/pages/CourseDetail.vue
index b18eaefc..da16d37e 100644
--- a/frontend/src/pages/CourseDetail.vue
+++ b/frontend/src/pages/CourseDetail.vue
@@ -83,6 +83,7 @@
:avg_rating="course.data.rating"
:membership="course.data.membership"
/>
+
@@ -99,7 +100,7 @@ import {
Tooltip,
usePageMeta,
} from 'frappe-ui'
-import { computed } from 'vue'
+import { computed, watch } from 'vue'
import { Users, Star } from 'lucide-vue-next'
import { sessionStore } from '@/stores/session'
import CourseCardOverlay from '@/components/CourseCardOverlay.vue'
@@ -107,8 +108,11 @@ import CourseOutline from '@/components/CourseOutline.vue'
import CourseReviews from '@/components/CourseReviews.vue'
import UserAvatar from '@/components/UserAvatar.vue'
import CourseInstructors from '@/components/CourseInstructors.vue'
+import RelatedCourses from '@/components/RelatedCourses.vue'
+import { useRoute } from 'vue-router'
const { brand } = sessionStore()
+const route = useRoute()
const props = defineProps({
courseName: {
@@ -126,6 +130,19 @@ const course = createResource({
auto: true,
})
+watch(
+ () => route.params.courseName,
+ (newCourseName, oldCourseName) => {
+ if (newCourseName && newCourseName !== oldCourseName) {
+ course.update({
+ cache: ['course', newCourseName],
+ params: { course: newCourseName },
+ })
+ course.reload()
+ }
+ }
+)
+
const breadcrumbs = computed(() => {
let items = [{ label: 'Courses', route: { name: 'Courses' } }]
items.push({
diff --git a/lms/lms/utils.py b/lms/lms/utils.py
index ced178c6..dffb8d52 100644
--- a/lms/lms/utils.py
+++ b/lms/lms/utils.py
@@ -2172,5 +2172,17 @@ def get_palette(full_name):
return palette[idx % 8]
+@frappe.whitelist(allow_guest=True)
+def get_related_courses(course):
+ related_course_details = []
+ related_courses = frappe.get_all(
+ "Related Courses", {"parent": course}, order_by="idx", pluck="course"
+ )
+
+ for related_course in related_courses:
+ related_course_details.append(get_course_details(related_course))
+ return related_course_details
+
+
def persona_captured():
frappe.db.set_single_value("LMS Settings", "persona_captured", 1)