import { type Dispatch, type SetStateAction } from 'react'; import type { AiCourse } from '../../lib/ai'; import { Check, ChevronDownIcon, ChevronRightIcon } from 'lucide-react'; import { cn } from '../../lib/classname'; import { slugify } from '../../lib/slugger'; import { CheckIcon } from '../ReactIcons/CheckIcon'; import { CircularProgress } from './CircularProgress'; type AICourseModuleListProps = { course: AiCourse; courseSlug?: string; activeModuleIndex: number | undefined; setActiveModuleIndex: (index: number) => void; activeLessonIndex: number | undefined; setActiveLessonIndex: (index: number) => void; setSidebarOpen: (open: boolean) => void; viewMode: 'module' | 'outline'; setViewMode: (mode: 'module' | 'outline') => void; expandedModules: Record; setExpandedModules: Dispatch>>; isLoading: boolean; }; export function AICourseSidebarModuleList(props: AICourseModuleListProps) { const { course, courseSlug, activeModuleIndex, setActiveModuleIndex, activeLessonIndex, setActiveLessonIndex, setSidebarOpen, setViewMode, expandedModules, setExpandedModules, isLoading, } = props; const aiCourseProgress = course.done || []; const toggleModule = (index: number) => { setExpandedModules((prev) => { // If this module is already expanded, collapse it if (prev[index]) { return { ...prev, [index]: false, }; } // Otherwise, collapse all modules and expand only this one const newState: Record = {}; // Set all modules to collapsed course.modules.forEach((_, idx) => { newState[idx] = false; }); // Expand only the clicked module newState[index] = true; return newState; }); }; const done = aiCourseProgress || []; return ( ); }