'use client' import { useState, useCallback } from 'react' import { CardState } from '@/lib/data/reviewSimpleData' import { QuizHeader } from '../ui/QuizHeader' import { BluePlayButton } from '@/components/shared/BluePlayButton' interface VocabChoiceTestProps { card: CardState options: string[] onAnswer: (confidence: number) => void onSkip: () => void } export function VocabChoiceQuiz({ card, options, onAnswer, onSkip }: VocabChoiceTestProps) { const [selectedAnswer, setSelectedAnswer] = useState(null) const [showResult, setShowResult] = useState(false) const [hasAnswered, setHasAnswered] = useState(false) const handleAnswerSelect = useCallback((answer: string) => { if (showResult || hasAnswered) return setSelectedAnswer(answer) setShowResult(true) setHasAnswered(true) }, [showResult, hasAnswered]) const handleSkipClick = useCallback(() => { onSkip() }, [onSkip]) const handleNext = useCallback(() => { if (!hasAnswered || !selectedAnswer) return // 判斷答案是否正確,正確給2分,錯誤給0分 const isCorrect = selectedAnswer === card.word const confidence = isCorrect ? 2 : 0 onAnswer(confidence) // 重置狀態為下一題準備 setSelectedAnswer(null) setShowResult(false) setHasAnswered(false) }, [hasAnswered, selectedAnswer, card.word, onAnswer]) const isCorrect = selectedAnswer === card.word return (
{/* 問題區域 */}

定義

{card.definition}

請選擇符合上述定義的英文詞彙:

{/* 選項區域 */}
{options.map((option, index) => { const isSelected = selectedAnswer === option const isCorrectOption = option === card.word let buttonClass = 'p-4 rounded-lg border-2 text-center font-medium transition-all duration-200 cursor-pointer active:scale-95' if (showResult) { if (isSelected && isCorrectOption) { // 選中且正確 buttonClass += ' bg-green-100 text-green-700 border-green-200 ring-2 ring-green-400' } else if (isSelected && !isCorrectOption) { // 選中但錯誤 buttonClass += ' bg-red-100 text-red-700 border-red-200 ring-2 ring-red-400' } else if (!isSelected && isCorrectOption) { // 未選中但是正確答案 buttonClass += ' bg-green-50 text-green-600 border-green-200' } else { // 未選中且非正確答案 buttonClass += ' bg-gray-50 text-gray-500 border-gray-200' } } else { // 未答題狀態 buttonClass += ' bg-blue-50 text-blue-700 border-blue-200 hover:bg-blue-100' } return ( ) })}
{/* 結果顯示區域 */} {showResult && (
{isCorrect ? '✅' : '❌'}

{isCorrect ? '答對了!' : '答錯了'}

正確答案: {card.word}

發音: {card.pronunciation} e.stopPropagation()}>

例句: "{card.example}" e.stopPropagation()}>

{card.exampleTranslation}

)}
{/* 按鈕區域 - 根據答題狀態顯示不同按鈕 */}
{!hasAnswered ? ( // 未答題時顯示跳過按鈕 ) : ( // 已答題時顯示下一題按鈕 )}
) }