From 9bd0c0877d326475670700d97a944f656621f830 Mon Sep 17 00:00:00 2001 From: austinkelsay Date: Mon, 12 May 2025 08:20:02 -0500 Subject: [PATCH] fix completed lesson state for all lessons in sidebar --- src/pages/course/[slug]/index.js | 38 ++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/pages/course/[slug]/index.js b/src/pages/course/[slug]/index.js index fa7ac71..ee6c9cf 100644 --- a/src/pages/course/[slug]/index.js +++ b/src/pages/course/[slug]/index.js @@ -67,9 +67,43 @@ const Course = () => { } }, [router.isReady, router.query.slug, showToast, router]); + // Load completed lessons from localStorage when course is loaded + useEffect(() => { + if (router.isReady && router.query.slug && session?.user) { + const courseId = router.query.slug; + const storageKey = `course_${courseId}_${session.user.pubkey}_completed`; + const savedCompletedLessons = localStorage.getItem(storageKey); + + if (savedCompletedLessons) { + try { + const parsedLessons = JSON.parse(savedCompletedLessons); + setCompletedLessons(parsedLessons); + } catch (error) { + console.error('Error parsing completed lessons from storage:', error); + } + } + } + }, [router.isReady, router.query.slug, session]); + const setCompleted = useCallback(lessonId => { - setCompletedLessons(prev => [...prev, lessonId]); - }, []); + setCompletedLessons(prev => { + // Avoid duplicates + if (prev.includes(lessonId)) { + return prev; + } + + const newCompletedLessons = [...prev, lessonId]; + + // Save to localStorage + if (router.query.slug && session?.user) { + const courseId = router.query.slug; + const storageKey = `course_${courseId}_${session.user.pubkey}_completed`; + localStorage.setItem(storageKey, JSON.stringify(newCompletedLessons)); + } + + return newCompletedLessons; + }); + }, [router.query.slug, session]); const fetchAuthor = useCallback( async pubkey => {