"use client"; import { useState, useEffect, useCallback } from "react"; import Link from "next/link"; import { getProgressData } from "@/lib/progress"; import { getReviewSuggestions } from "@/lib/spaced-repetition"; import { getQuestions, getPatterns } from "@/lib/api"; import { ProgressOverview, PatternProgress, ReviewSuggestions, ProgressExport, } from "@/components/progress"; import type { ProgressData, Pattern, QuestionListItem, ReviewCandidate, } from "@/types"; import { Loader2 } from "lucide-react"; export default function ProgressPage() { const [progressData, setProgressData] = useState(null); const [questions, setQuestions] = useState([]); const [patterns, setPatterns] = useState([]); const [reviewCandidates, setReviewCandidates] = useState( [] ); const [isLoading, setIsLoading] = useState(true); const loadData = useCallback(async () => { setIsLoading(true); try { const progress = getProgressData(); setProgressData(progress); const [questionsRes, patternsRes] = await Promise.all([ getQuestions({ limit: 1000 }), getPatterns(), ]); setQuestions(questionsRes.items); setPatterns(patternsRes.items); const candidates = getReviewSuggestions(progress, questionsRes.items); setReviewCandidates(candidates); } catch (error) { console.error("Failed to load progress data:", error); } finally { setIsLoading(false); } }, []); useEffect(() => { loadData(); }, [loadData]); const handleImportSuccess = () => { loadData(); }; if (isLoading || !progressData) { return (
); } const hasProgress = Object.keys(progressData.questions).length > 0; return (

Progress Dashboard

Track your learning journey and review questions using spaced repetition.

{!hasProgress && (

Get Started

Complete some questions to start tracking your progress. Your data is stored locally in your browser.

Browse Questions
)} {hasProgress && (
)}
); }