diff --git a/src/components/TimelineChapters.tsx b/src/components/TimelineChapters.tsx index 694ff3f..d36805f 100644 --- a/src/components/TimelineChapters.tsx +++ b/src/components/TimelineChapters.tsx @@ -1,6 +1,7 @@ import { Clock } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Card } from '@/components/ui/card'; +import DOMPurify from 'dompurify'; interface VideoChapter { time: number; // Time in seconds @@ -58,9 +59,10 @@ export function TimelineChapters({ {/* Scrollable chapter list with max-height */} -
+
{chapters.map((chapter, index) => { const active = isChapterActive(index); + const isLast = index === chapters.length - 1; return ( - ); - })} + return ( +
+ {/* Module Header - Collapsible */} + + + {/* Lessons - Hidden if module is collapsed */} + {!isModuleCollapsed && ( +
+ {module.lessons.map((lesson) => { + const isCompleted = isLessonCompleted(lesson.id); + const isSelected = selectedLesson?.id === lesson.id; + const isReleased = !lesson.release_at || new Date(lesson.release_at) <= new Date(); + const isLessonCollapsed = collapsedLessons.has(lesson.id); + const hasChapters = lesson.chapters && lesson.chapters.length > 0; + + return ( +
+ {/* Lesson Button - Collapsible if has chapters */} + + + {/* Timeline Chapters - Shown if lesson is expanded */} + {hasChapters && !isLessonCollapsed && ( +
+ {lesson.chapters?.map((chapter, index) => { + const isChapterActive = currentTime >= chapter.time && + (!lesson.chapters?.[index + 1] || currentTime < lesson.chapters[index + 1].time); + + return ( + + ); + })} +
+ )} +
+ ); + })} +
+ )}
-
- ))} + ); + })}
);