@@ -27,15 +27,25 @@ const intervals = [1, 3, 7, 14, 30];
2727
2828const NeetCodeTracker = ( ) => {
2929 // --- Local state with localStorage ---
30- const [ progress , setProgress ] = useState ( ( ) => {
31- try {
32- const savedProgress = localStorage . getItem ( "leetcode-progress" ) ;
33- return savedProgress ? JSON . parse ( savedProgress ) : { } ;
34- } catch ( error ) {
35- console . error ( "Error loading progress from localStorage:" , error ) ;
36- return { } ;
37- }
38- } ) ;
30+ const [ progress , setProgress ] = useState ( ( ) => {
31+ try {
32+ const savedProgress = localStorage . getItem ( "leetcode-progress-v2" ) ;
33+ return savedProgress
34+ ? JSON . parse ( savedProgress )
35+ : {
36+ "Blind 75" : { } ,
37+ "LeetCode 75" : { } ,
38+ "NeetCode 150" : { } ,
39+ } ;
40+ } catch ( error ) {
41+ console . error ( "Error loading progress from localStorage:" , error ) ;
42+ return {
43+ "Blind 75" : { } ,
44+ "LeetCode 75" : { } ,
45+ "NeetCode 150" : { } ,
46+ } ;
47+ }
48+ } ) ;
3949
4050 const [ filterCategory , setFilterCategory ] = useState ( "All" ) ;
4151 const [ filterDifficulty , setFilterDifficulty ] = useState ( "All" ) ;
@@ -44,15 +54,16 @@ const NeetCodeTracker = () => {
4454 const [ selectedList , setSelectedList ] = useState ( "NeetCode 150" ) ;
4555
4656
47- // Save progress to localStorage whenever it changes
57+ // Save progress to localStorage whenever it changes
4858 useEffect ( ( ) => {
4959 try {
50- localStorage . setItem ( "leetcode-progress" , JSON . stringify ( progress ) ) ;
60+ localStorage . setItem ( "leetcode-progress-v2 " , JSON . stringify ( progress ) ) ;
5161 } catch ( error ) {
5262 console . error ( "Error saving progress to localStorage:" , error ) ;
5363 }
5464 } , [ progress ] ) ;
5565
66+
5667 // --- Helpers ---
5768 const today = new Date ( ) . toISOString ( ) . split ( "T" ) [ 0 ] ;
5869
@@ -70,7 +81,8 @@ const NeetCodeTracker = () => {
7081 const toggleComplete = ( problemId , reviewIndex = null ) => {
7182 const todayStr = new Date ( ) . toISOString ( ) . split ( "T" ) [ 0 ] ;
7283 setProgress ( ( prev ) => {
73- const current = prev [ problemId ] || {
84+ const listProgress = prev [ selectedList ] || { } ;
85+ const current = listProgress [ problemId ] || {
7486 solved : false ,
7587 reviews : Array ( 5 ) . fill ( false ) ,
7688 dates : { } ,
@@ -80,12 +92,15 @@ const NeetCodeTracker = () => {
8092 const newSolved = ! current . solved ;
8193 return {
8294 ...prev ,
83- [ problemId ] : {
84- ...current ,
85- solved : newSolved ,
86- solvedDate : newSolved ? todayStr : null ,
87- reviews : newSolved ? current . reviews : Array ( 5 ) . fill ( false ) ,
88- dates : newSolved ? { ...current . dates , initial : todayStr } : { } ,
95+ [ selectedList ] : {
96+ ...listProgress ,
97+ [ problemId ] : {
98+ ...current ,
99+ solved : newSolved ,
100+ solvedDate : newSolved ? todayStr : null ,
101+ reviews : newSolved ? current . reviews : Array ( 5 ) . fill ( false ) ,
102+ dates : newSolved ? { ...current . dates , initial : todayStr } : { } ,
103+ } ,
89104 } ,
90105 } ;
91106 } else {
@@ -99,36 +114,41 @@ const NeetCodeTracker = () => {
99114 }
100115 return {
101116 ...prev ,
102- [ problemId ] : { ...current , reviews : newReviews , dates : newDates } ,
117+ [ selectedList ] : {
118+ ...listProgress ,
119+ [ problemId ] : { ...current , reviews : newReviews , dates : newDates } ,
120+ } ,
103121 } ;
104122 }
105123 } ) ;
106124 } ;
107125
108126 const problems = problemLists [ selectedList ] ;
127+ const currentProgress = progress [ selectedList ] || { } ;
128+
109129 const categories = [
110130 "All" ,
111131 ...Array . from ( new Set ( problems . map ( ( p ) => p . category ) ) ) ,
112132 ] ;
113133 const difficulties = [ "All" , "Easy" , "Medium" , "Hard" ] ;
114134
115- const stats = {
116- total : problems . length ,
117- solved : Object . values ( progress ) . filter ( ( p ) => p . solved ) . length ,
118- easy : problems . filter (
119- ( p ) => p . difficulty === "Easy" && progress [ p . id ] ?. solved
120- ) . length ,
121- medium : problems . filter (
122- ( p ) => p . difficulty === "Medium" && progress [ p . id ] ?. solved
123- ) . length ,
124- hard : problems . filter (
125- ( p ) => p . difficulty === "Hard" && progress [ p . id ] ?. solved
126- ) . length ,
127- } ;
135+ const stats = {
136+ total : problems . length ,
137+ solved : problems . filter ( ( p ) => currentProgress [ p . id ] ? .solved ) . length ,
138+ easy : problems . filter (
139+ ( p ) => p . difficulty === "Easy" && currentProgress [ p . id ] ?. solved
140+ ) . length ,
141+ medium : problems . filter (
142+ ( p ) => p . difficulty === "Medium" && currentProgress [ p . id ] ?. solved
143+ ) . length ,
144+ hard : problems . filter (
145+ ( p ) => p . difficulty === "Hard" && currentProgress [ p . id ] ?. solved
146+ ) . length ,
147+ } ;
128148
129149 const getDueProblems = ( ) => {
130150 return problems . filter ( ( problem ) => {
131- const prob = progress [ problem . id ] ;
151+ const prob = currentProgress [ problem . id ] ;
132152 if ( ! prob || ! prob . solved ) return false ;
133153 const nextReviews = calculateNextReviews ( prob . solvedDate ) ;
134154 return nextReviews . some (
@@ -282,7 +302,7 @@ const NeetCodeTracker = () => {
282302 { /* Problems Table */ }
283303 < ProblemTable
284304 problems = { problems }
285- progress = { progress }
305+ progress = { currentProgress }
286306 toggleComplete = { toggleComplete }
287307 calculateNextReviews = { calculateNextReviews }
288308 filterCategory = { filterCategory }
0 commit comments