feat: edit related courses from frontend

This commit is contained in:
Jannat Patel
2025-06-16 15:13:30 +05:30
parent ec8bf6251f
commit 83ebfececf
7 changed files with 72 additions and 41 deletions

View File

@@ -148,7 +148,7 @@
</template>
<script setup>
import { Button, createResource, Tooltip, toast } from 'frappe-ui'
import { getCurrentInstance, inject, ref } from 'vue'
import { getCurrentInstance, inject, ref, watch } from 'vue'
import Draggable from 'vuedraggable'
import { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'
import {
@@ -197,13 +197,22 @@ const props = defineProps({
const outline = createResource({
url: 'lms.lms.utils.get_course_outline',
cache: ['course_outline', props.courseName],
params: {
course: props.courseName,
progress: props.getProgress,
makeParams() {
return {
course: props.courseName,
progress: props.getProgress,
}
},
auto: true,
})
watch(
() => props.courseName,
() => {
outline.reload()
}
)
const deleteLesson = createResource({
url: 'lms.lms.api.delete_lesson',
makeParams(values) {

View File

@@ -64,7 +64,7 @@
<script setup>
import { Star } from 'lucide-vue-next'
import { createResource, Button } from 'frappe-ui'
import { computed, ref, inject } from 'vue'
import { watch, ref, inject } from 'vue'
import UserAvatar from '@/components/UserAvatar.vue'
import ReviewModal from '@/components/Modals/ReviewModal.vue'
@@ -101,12 +101,21 @@ const hasReviewed = createResource({
const reviews = createResource({
url: 'lms.lms.utils.get_reviews',
cache: ['course_reviews', props.courseName],
params: {
course: props.courseName,
makeParams() {
return {
course: props.courseName,
}
},
auto: true,
})
watch(
() => props.courseName,
() => {
reviews.reload()
}
)
const showReviewModal = ref(false)
function openReviewModal() {

View File

@@ -4,15 +4,13 @@
<div class="text-2xl font-semibold text-ink-gray-9">
{{ __('Related Courses') }}
</div>
<div class="text-sm text-ink-gray-7">
{{ relatedCourses.data.length }} {{ __('courses') }}
</div>
</div>
<div
class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4 gap-4"
>
<router-link
v-for="course in relatedCourses.data"
:key="course.name"
:to="{ name: 'CourseDetail', params: { courseName: course.name } }"
class="cursor-pointer"
>
@@ -24,11 +22,8 @@
<script setup>
import { createResource } from 'frappe-ui'
import CourseCard from '@/components/CourseCard.vue'
import { useRoute } from 'vue-router'
import { watch } from 'vue'
const route = useRoute()
import CourseCard from '@/components/CourseCard.vue'
const props = defineProps({
courseName: {
@@ -40,22 +35,18 @@ const props = defineProps({
const relatedCourses = createResource({
url: 'lms.lms.utils.get_related_courses',
cache: ['related_courses', props.courseName],
params: {
course: props.courseName,
makeParams() {
return {
course: props.courseName,
}
},
auto: true,
})
watch(
() => route.params.courseName,
(newCourseName, oldCourseName) => {
if (newCourseName && newCourseName !== oldCourseName) {
relatedCourses.update({
cache: ['related_courses', newCourseName],
params: { course: newCourseName },
})
relatedCourses.reload()
}
() => props.courseName,
() => {
relatedCourses.reload()
}
)
</script>

View File

@@ -81,7 +81,7 @@
v-for="(quiz, index) in quizzes"
:key="index"
:style="getQuizMarkerStyle(quiz.time)"
class="absolute top-0 h-full w-0.5 bg-red-500"
class="absolute top-0 h-full w-2 bg-surface-amber-3"
></div>
</div>
</div>
@@ -303,7 +303,7 @@ const toggleFullscreen = () => {
}
const getQuizMarkerStyle = (time) => {
const percentage = ((time - 5) / Math.ceil(duration.value)) * 100
const percentage = ((time - 7) / Math.ceil(duration.value)) * 100
return {
left: `${percentage}%`,
}