|
|
@ -167,48 +167,52 @@ export function AICourseContent(props: AICourseContentProps) { |
|
|
|
<div className="flex flex-1 overflow-hidden"> |
|
|
|
<div className="flex flex-1 overflow-hidden"> |
|
|
|
<aside |
|
|
|
<aside |
|
|
|
className={cn( |
|
|
|
className={cn( |
|
|
|
'fixed inset-y-0 left-0 z-20 mt-16 w-80 transform overflow-y-auto border-r border-gray-200 bg-white pt-4 transition-transform duration-200 ease-in-out md:relative md:mt-0 md:translate-x-0', |
|
|
|
'fixed inset-y-0 left-0 z-20 w-80 transform overflow-y-auto border-r border-gray-200 bg-white transition-transform duration-200 ease-in-out md:relative md:mt-0 md:translate-x-0', |
|
|
|
sidebarOpen ? 'translate-x-0' : '-translate-x-full', |
|
|
|
sidebarOpen ? 'translate-x-0' : '-translate-x-full', |
|
|
|
)} |
|
|
|
)} |
|
|
|
> |
|
|
|
> |
|
|
|
<div className="mb-4 px-4"> |
|
|
|
<div |
|
|
|
<div className="flex items-center justify-between"> |
|
|
|
className={cn( |
|
|
|
<div className="flex items-center"> |
|
|
|
'relative mb-2 flex min-h-[40px] items-center border-b border-gray-200 px-3', |
|
|
|
{!isLoading && ( |
|
|
|
isLoading && 'striped-loader bg-gray-50', |
|
|
|
<div className="text-xs text-black"> |
|
|
|
)} |
|
|
|
<span className="rounded-full bg-yellow-400 px-1.5 py-0.5"> |
|
|
|
> |
|
|
|
{finishedPercentage}% |
|
|
|
{!isLoading && ( |
|
|
|
</span>{' '} |
|
|
|
<div className="text-xs text-black"> |
|
|
|
Completed |
|
|
|
<span className="relative z-10 rounded-full bg-yellow-400 px-1.5 py-0.5"> |
|
|
|
</div> |
|
|
|
{finishedPercentage}% |
|
|
|
)} |
|
|
|
</span>{' '} |
|
|
|
|
|
|
|
Completed |
|
|
|
{isLoading && ( |
|
|
|
<span |
|
|
|
<div className="flex flex-row items-center gap-1 text-xs text-gray-500"> |
|
|
|
style={{ |
|
|
|
<Loader2 |
|
|
|
width: `${finishedPercentage}%`, |
|
|
|
size={16} |
|
|
|
}} |
|
|
|
className="mr-2 animate-spin text-gray-400" |
|
|
|
className={cn( |
|
|
|
/> |
|
|
|
'absolute bottom-0 left-0 top-0', |
|
|
|
|
|
|
|
'bg-gray-200/50', |
|
|
|
Please wait .. |
|
|
|
)} |
|
|
|
</div> |
|
|
|
></span> |
|
|
|
)} |
|
|
|
|
|
|
|
<button |
|
|
|
|
|
|
|
onClick={() => setSidebarOpen(false)} |
|
|
|
|
|
|
|
className="rounded-md p-1 hover:bg-gray-100 md:hidden" |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
<X size={18} /> |
|
|
|
|
|
|
|
</button> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
)} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<button |
|
|
|
|
|
|
|
onClick={() => setSidebarOpen(false)} |
|
|
|
|
|
|
|
className="rounded-md p-1 hover:bg-gray-100 md:hidden" |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
<X size={18} /> |
|
|
|
|
|
|
|
</button> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<AICourseModuleList |
|
|
|
<AICourseModuleList |
|
|
|
course={course} |
|
|
|
course={course} |
|
|
|
courseSlug={courseSlug} |
|
|
|
courseSlug={courseSlug} |
|
|
|
activeModuleIndex={activeModuleIndex} |
|
|
|
activeModuleIndex={ |
|
|
|
|
|
|
|
viewMode === 'module' ? activeModuleIndex : undefined |
|
|
|
|
|
|
|
} |
|
|
|
setActiveModuleIndex={setActiveModuleIndex} |
|
|
|
setActiveModuleIndex={setActiveModuleIndex} |
|
|
|
activeLessonIndex={activeLessonIndex} |
|
|
|
activeLessonIndex={ |
|
|
|
|
|
|
|
viewMode === 'module' ? activeLessonIndex : undefined |
|
|
|
|
|
|
|
} |
|
|
|
setActiveLessonIndex={setActiveLessonIndex} |
|
|
|
setActiveLessonIndex={setActiveLessonIndex} |
|
|
|
setSidebarOpen={setSidebarOpen} |
|
|
|
setSidebarOpen={setSidebarOpen} |
|
|
|
viewMode={viewMode} |
|
|
|
viewMode={viewMode} |
|
|
|