feat: add sequential progression and video watch lesson completion

Gate student content by completion order, track per-video watch progress
with seek enforcement, and auto-complete lessons at the configured
threshold. Show ring progress in the lesson header, keep watch progress
on rewatch, and sync progression locks client-side so the next item
unlocks after completion.
This commit is contained in:
Rotimi Best
2026-06-11 14:48:34 +01:00
parent c8154409f5
commit 52d9bf18c3
94 changed files with 3499 additions and 564 deletions
@@ -0,0 +1,36 @@
import { ContentType } from '@cio/utils/constants/content';
import type { Course } from './types';
import { syncProgressionAccessToCourse } from './progression-utils';
export function updateLessonCompletionInCourseContent(course: Course, lessonId: string, isComplete: boolean): Course {
if (!course.content) return course;
let updatedCourse: Course;
if (course.content.grouped) {
updatedCourse = {
...course,
content: {
...course.content,
sections: course.content.sections.map((section) => ({
...section,
items: section.items.map((item) =>
item.type === ContentType.Lesson && item.id === lessonId ? { ...item, isComplete } : item
)
}))
}
};
} else {
updatedCourse = {
...course,
content: {
...course.content,
items: course.content.items.map((item) =>
item.type === ContentType.Lesson && item.id === lessonId ? { ...item, isComplete } : item
)
}
};
}
return syncProgressionAccessToCourse(updatedCourse);
}