Skip to content

Commit 3ea8920

Browse files
authored
Merge pull request #2384 from frappe/mergify/bp/main/pr-2381
perf: refactor course outline and lesson to use qb (backport #2381)
2 parents 9d3fccc + c93e239 commit 3ea8920

3 files changed

Lines changed: 233 additions & 104 deletions

File tree

frontend/src/components/CourseOutline.vue

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -228,9 +228,9 @@ const props = defineProps({
228228
type: Boolean,
229229
default: false,
230230
},
231-
lessonProgress: {
232-
type: Number,
233-
default: 0,
231+
completedLesson: {
232+
type: String,
233+
default: null,
234234
},
235235
})
236236
@@ -254,9 +254,16 @@ watch(
254254
)
255255
256256
watch(
257-
() => props.lessonProgress,
258-
() => {
259-
outline.reload()
257+
() => props.completedLesson,
258+
(lessonName) => {
259+
if (!lessonName || !outline.data) return
260+
for (const chapter of outline.data) {
261+
const found = chapter.lessons?.find((l) => l.name === lessonName)
262+
if (found) {
263+
found.is_complete = true
264+
break
265+
}
266+
}
260267
}
261268
)
262269

frontend/src/pages/Lesson.vue

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@
313313
:courseName="courseName"
314314
:key="chapterNumber"
315315
:getProgress="lesson.data.membership ? true : false"
316-
:lessonProgress="lessonProgress"
316+
:completedLesson="completedLesson"
317317
/>
318318
</div>
319319
</div>
@@ -405,6 +405,7 @@ const sidebarStore = useSidebar()
405405
const plyrSources = ref([])
406406
const showInlineMenu = ref(false)
407407
const currentTab = ref(null)
408+
const completedLesson = ref(null)
408409
let timerInterval = null
409410
410411
const tabs = ref([])
@@ -545,6 +546,7 @@ const progress = createResource({
545546
},
546547
onSuccess(data) {
547548
lessonProgress.value = data
549+
completedLesson.value = lesson.data?.name
548550
},
549551
})
550552
@@ -782,11 +784,17 @@ onBeforeUnmount(() => {
782784
783785
const checkIfDiscussionsAllowed = () => {
784786
hasQuiz.value = false
785-
JSON.parse(lesson.data?.content)?.blocks?.forEach((block) => {
786-
if (block.type === 'quiz') {
787-
hasQuiz.value = true
787+
if (lesson.data?.content) {
788+
try {
789+
JSON.parse(lesson.data.content)?.blocks?.forEach((block) => {
790+
if (block.type === 'quiz') {
791+
hasQuiz.value = true
792+
}
793+
})
794+
} catch {
795+
// legacy markdown lessons
788796
}
789-
})
797+
}
790798
791799
if (
792800
!hasQuiz.value &&

0 commit comments

Comments
 (0)