'use client' import { useEffect } from 'react' import { useRouter } from 'next/navigation' import { Navigation } from '@/components/Navigation' import LearningComplete from '@/components/LearningComplete' import { Modal } from '@/components/ui/Modal' // 新架構組件 import { ProgressTracker } from '@/components/learn/ProgressTracker' import { TaskListModal } from '@/components/learn/TaskListModal' import { LoadingStates } from '@/components/learn/LoadingStates' import { TestRunner } from '@/components/learn/TestRunner' // 狀態管理 import { useLearnStore } from '@/store/useLearnStore' import { useUIStore } from '@/store/useUIStore' import { LearnService } from '@/lib/services/learn/learnService' export default function LearnPage() { const router = useRouter() // Zustand stores const { mounted, isLoading, currentCard, dueCards, testItems, completedTests, totalTests, score, showComplete, showNoDueCards, error, setMounted, loadDueCards, initializeTestQueue, resetSession } = useLearnStore() const { showTaskListModal, showReportModal, modalImage, reportReason, reportingCard, setShowTaskListModal, closeReportModal, closeImageModal, setReportReason } = useUIStore() // 初始化 useEffect(() => { setMounted(true) initializeSession() }, []) // 初始化學習會話 const initializeSession = async () => { try { await loadDueCards() if (dueCards.length > 0) { const cardIds = dueCards.map(c => c.id) const completedTests = await LearnService.loadCompletedTests(cardIds) initializeTestQueue(completedTests) } } catch (error) { console.error('初始化學習會話失敗:', error) } } // 重新開始 const handleRestart = async () => { resetSession() await initializeSession() } // 載入狀態 if (!mounted || isLoading) { return ( ) } if (showNoDueCards) { return ( ) } if (!currentCard) { return } return (
{/* 進度追蹤 */} setShowTaskListModal(true)} /> {/* 測驗執行器 */} {/* 任務清單Modal */} setShowTaskListModal(false)} testItems={testItems} completedTests={completedTests} totalTests={totalTests} /> {/* 學習完成 */} {showComplete && ( router.push('/dashboard')} /> )} {/* 圖片Modal */} {modalImage && (
放大圖片
)} {/* 錯誤回報Modal */}

單字:{reportingCard?.word}

) }