import { cn } from '../../lib/classname'; import type { AiCourse } from '../../lib/ai'; import { slugify } from '../../lib/slugger'; import { CheckIcon } from '../ReactIcons/CheckIcon'; import type { Dispatch, SetStateAction } from 'react'; import { Loader2Icon } from 'lucide-react'; import type { AICourseViewMode } from './AICourseContent'; import { AICourseOutlineHeader } from './AICourseOutlineHeader'; type AICourseOutlineViewProps = { course: AiCourse; isLoading: boolean; onRegenerateOutline: (prompt?: string) => void; setActiveModuleIndex: (index: number) => void; setActiveLessonIndex: (index: number) => void; setSidebarOpen: (open: boolean) => void; setViewMode: (mode: AICourseViewMode) => void; setExpandedModules: Dispatch>>; viewMode: AICourseViewMode; }; export function AICourseOutlineView(props: AICourseOutlineViewProps) { const { course, isLoading, onRegenerateOutline, setActiveModuleIndex, setActiveLessonIndex, setSidebarOpen, setViewMode, setExpandedModules, viewMode, } = props; const aiCourseProgress = course.done || []; return (
{course.title ? (
{course.modules.map((courseModule, moduleIdx) => { return (

{courseModule.title}

{courseModule.lessons.map((lesson, lessonIdx) => { const key = `${slugify(String(moduleIdx))}-${slugify(String(lessonIdx))}`; const isCompleted = aiCourseProgress.includes(key); return (
{ setActiveModuleIndex(moduleIdx); setActiveLessonIndex(lessonIdx); setExpandedModules((prev) => { const newState: Record = {}; course.modules.forEach((_, idx) => { newState[idx] = false; }); newState[moduleIdx] = true; return newState; }); setSidebarOpen(false); setViewMode('module'); }} > {!isCompleted && ( {lessonIdx + 1} )} {isCompleted && ( )}

{lesson.replace(/^Lesson\s*?\d+[\.:]\s*/, '')}

{isCompleted ? 'View' : 'Start'} →
); })}
); })}
) : (
)}
); }