11'use client'
22
3- import { useEffect , useState } from 'react'
3+ import { useState } from 'react'
44import { CheckCircle2 , Circle , ExternalLink , GraduationCap , Loader2 } from 'lucide-react'
55import Link from 'next/link'
66import { getCompletedLessons } from '@/lib/academy/local-progress'
@@ -14,17 +14,13 @@ interface CourseProgressProps {
1414}
1515
1616export function CourseProgress ( { course, courseSlug } : CourseProgressProps ) {
17- const [ completedIds , setCompletedIds ] = useState < Set < string > | null > ( null )
17+ const [ completedIds ] = useState < Set < string > > ( getCompletedLessons )
1818 const { data : session } = useSession ( )
1919 const { mutate : issueCertificate , isPending, data : certificate , error } = useIssueCertificate ( )
2020
21- useEffect ( ( ) => {
22- setCompletedIds ( getCompletedLessons ( ) )
23- } , [ ] )
24-
2521 const allLessons = course . modules . flatMap ( ( m ) => m . lessons )
2622 const totalLessons = allLessons . length
27- const completedCount = completedIds ? allLessons . filter ( ( l ) => completedIds . has ( l . id ) ) . length : 0
23+ const completedCount = allLessons . filter ( ( l ) => completedIds . has ( l . id ) ) . length
2824 const percentComplete = totalLessons > 0 ? Math . round ( ( completedCount / totalLessons ) * 100 ) : 0
2925
3026 return (
@@ -64,7 +60,7 @@ export function CourseProgress({ course, courseSlug }: CourseProgressProps) {
6460 href = { `/academy/${ courseSlug } /${ lesson . slug } ` }
6561 className = 'flex items-center gap-3 rounded-[8px] border border-[#2A2A2A] bg-[#222] px-4 py-3 text-[14px] transition-colors hover:border-[#3A3A3A] hover:bg-[#272727]'
6662 >
67- { completedIds ? .has ( lesson . id ) ? (
63+ { completedIds . has ( lesson . id ) ? (
6864 < CheckCircle2 className = 'h-4 w-4 flex-shrink-0 text-[#4CAF50]' />
6965 ) : (
7066 < Circle className = 'h-4 w-4 flex-shrink-0 text-[#444]' />
@@ -84,7 +80,7 @@ export function CourseProgress({ course, courseSlug }: CourseProgressProps) {
8480 </ div >
8581 </ section >
8682
87- { completedIds && totalLessons > 0 && completedCount === totalLessons && (
83+ { totalLessons > 0 && completedCount === totalLessons && (
8884 < section className = 'px-4 pb-16 sm:px-8 md:px-[80px]' >
8985 < div className = 'mx-auto max-w-3xl rounded-[8px] border border-[#3A4A3A] bg-[#1F2A1F] p-6' >
9086 { certificate ? (
0 commit comments