'use client' import { useEffect } from 'react' import { useRouter } from 'next/navigation' import { Navigation } from '@/components/shared/Navigation' import LearningComplete from '@/components/flashcards/LearningComplete' import { Modal } from '@/components/ui/Modal' // 新架構組件 import { ProgressTracker } from '@/components/review/ui/ProgressTracker' import { TaskListModal } from '@/components/review/modals/TaskListModal' import { LoadingStates } from '@/components/review/ui/LoadingStates' import { ReviewRunner } from '@/components/review/core/ReviewRunner' // 狀態管理 import { useReviewSessionStore } from '@/store/review/useReviewSessionStore' import { useTestQueueStore } from '@/store/review/useTestQueueStore' import { useTestResultStore } from '@/store/review/useTestResultStore' import { useReviewDataStore } from '@/store/review/useReviewDataStore' import { useReviewUIStore } from '@/store/review/useReviewUIStore' import { ReviewService } from '@/lib/services/review/reviewService' export default function LearnPage() { const router = useRouter() // Zustand stores const { mounted, currentCard, error, setMounted, resetSession: resetSessionState } = useReviewSessionStore() const { testItems, completedTests, totalTests, initializeTestQueue, resetQueue } = useTestQueueStore() const { score, resetScore } = useTestResultStore() const { dueCards, showComplete, showNoDueCards, isLoadingCards, loadDueCards, resetData, setShowComplete } = useReviewDataStore() const { showTaskListModal, showReportModal, modalImage, reportReason, reportingCard, setShowTaskListModal, closeReportModal, closeImageModal, setReportReason } = useReviewUIStore() // 初始化 useEffect(() => { setMounted(true) initializeSession() }, []) // 初始化學習會話 const initializeSession = async () => { try { await loadDueCards() } catch (error) { console.error('初始化複習會話失敗:', error) } } // 監聽dueCards變化,初始化測試隊列 useEffect(() => { if (dueCards.length > 0) { const initQueue = async () => { try { const cardIds = dueCards.map(c => c.id) const completedTests = await ReviewService.loadCompletedTests(cardIds) initializeTestQueue(dueCards, completedTests) } catch (error) { console.error('初始化測試隊列失敗:', error) } } initQueue() } }, [dueCards, initializeTestQueue]) // 監聽測試隊列變化,設置當前卡片 useEffect(() => { if (testItems.length > 0 && dueCards.length > 0) { const currentTestItem = testItems.find(item => item.isCurrent) if (currentTestItem) { const card = dueCards.find(c => c.id === currentTestItem.cardId) if (card) { const { setCurrentCard } = useReviewSessionStore.getState() setCurrentCard(card) } } } }, [testItems, dueCards]) // 監聽測試完成狀態 useEffect(() => { if (totalTests > 0 && completedTests >= totalTests) { setShowComplete(true) } }, [completedTests, totalTests, setShowComplete]) // 重新開始 const handleRestart = async () => { resetSessionState() resetQueue() resetScore() resetData() await initializeSession() } // 載入狀態 if (!mounted || isLoadingCards) { 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}

) }