diff --git a/frontend/app/review-simple/page.tsx b/frontend/app/review-dev/page.tsx similarity index 96% rename from frontend/app/review-simple/page.tsx rename to frontend/app/review-dev/page.tsx index 3c6f04c..9cb9158 100644 --- a/frontend/app/review-simple/page.tsx +++ b/frontend/app/review-dev/page.tsx @@ -7,7 +7,7 @@ import { QuizProgress } from '@/components/review/ui/QuizProgress' import { QuizResult } from '@/components/review/quiz/QuizResult' import { useReviewSession } from '@/hooks/review/useReviewSession' -export default function SimpleReviewPage() { +export default function ReviewDevPage() { // 使用重構後的 Hook 管理線性複習狀態 const { quizItems, diff --git a/frontend/app/review/page.tsx b/frontend/app/review/page.tsx new file mode 100644 index 0000000..5d27b20 --- /dev/null +++ b/frontend/app/review/page.tsx @@ -0,0 +1,161 @@ +'use client' + +import { Navigation } from '@/components/shared/Navigation' +import { FlipMemory } from '@/components/review/quiz/FlipMemory' +import { VocabChoiceQuiz } from '@/components/review/quiz/VocabChoiceQuiz' +import { QuizProgress } from '@/components/review/ui/QuizProgress' +import { QuizResult } from '@/components/review/quiz/QuizResult' +import { useReviewSession } from '@/hooks/review/useReviewSession' + +export default function ReviewPage() { + // 使用重構後的 Hook 管理線性複習狀態 + const { + quizItems, + score, + isComplete, + currentQuizItem, + currentCard, + vocabOptions, + totalQuizItems, + completedQuizItems, + handleAnswer, + handleSkip, + handleRestart, + isLoading, + error, + flashcards + } = useReviewSession() + + // 顯示載入狀態 + if (isLoading) { + return ( +
+ +
+
+
+
+

載入詞卡中...

+

正在從後端獲取您的複習詞卡

+
+
+
+
+ ) + } + + // 顯示錯誤狀態 + if (error) { + return ( +
+ +
+
+
+
⚠️
+

載入失敗

+

{error}

+ +
+
+
+
+ ) + } + + // 顯示結果頁面 + if (isComplete) { + return ( +
+ +
+
+ + + {/* 線性測驗完成統計 */} +
+

測驗統計

+
+
+
{completedQuizItems}
+
完成測驗項目
+
+
+
{flashcards.length}
+
練習詞卡數
+
+
+
+ {score.total > 0 ? Math.round((score.correct / score.total) * 100) : 0}% +
+
正確率
+
+
+
+
+
+
+ ) + } + + // 主要線性測驗頁面 + return ( +
+ + +
+
+ {/* 使用修改後的 SimpleProgress 組件 */} + + + {/* 根據當前測驗項目類型渲染對應組件 */} + {currentQuizItem && currentCard && ( + <> + {currentQuizItem.quizType === 'flip-card' && ( + + )} + + {currentQuizItem.quizType === 'vocab-choice' && ( + + )} + + )} + + {/* 控制按鈕 */} +
+ +
+
+
+
+ ) +} \ No newline at end of file