import { useState, useEffect } from 'react' import AudioPlayer from '@/components/AudioPlayer' interface SentenceReorderTestProps { word: string definition: string example: string exampleTranslation: string difficultyLevel: string exampleImage?: string onAnswer: (answer: string) => void onReportError: () => void onImageClick?: (image: string) => void disabled?: boolean } export const SentenceReorderTest: React.FC = ({ word, definition, example, exampleTranslation, difficultyLevel, exampleImage, onAnswer, onReportError, onImageClick, disabled = false }) => { const [shuffledWords, setShuffledWords] = useState([]) const [arrangedWords, setArrangedWords] = useState([]) const [showResult, setShowResult] = useState(false) const [reorderResult, setReorderResult] = useState(null) // 初始化單字順序 useEffect(() => { const words = example.split(/\s+/).filter(word => word.length > 0) const shuffled = [...words].sort(() => Math.random() - 0.5) setShuffledWords(shuffled) setArrangedWords([]) }, [example]) const handleWordClick = (word: string) => { if (disabled || showResult) return setShuffledWords(prev => prev.filter(w => w !== word)) setArrangedWords(prev => [...prev, word]) } const handleRemoveFromArranged = (word: string) => { if (disabled || showResult) return setArrangedWords(prev => prev.filter(w => w !== word)) setShuffledWords(prev => [...prev, word]) } const handleCheckAnswer = () => { if (disabled || showResult || arrangedWords.length === 0) return const userSentence = arrangedWords.join(' ') const isCorrect = userSentence.toLowerCase().trim() === example.toLowerCase().trim() setReorderResult(isCorrect) setShowResult(true) onAnswer(userSentence) } const handleReset = () => { if (disabled || showResult) return const words = example.split(/\s+/).filter(word => word.length > 0) const shuffled = [...words].sort(() => Math.random() - 0.5) setShuffledWords(shuffled) setArrangedWords([]) setReorderResult(null) } return (
{/* 錯誤回報按鈕 */}
{/* 標題區 */}

例句重組

{difficultyLevel}
{/* 圖片區(如果有) */} {exampleImage && (

圖片提示

Example illustration onImageClick?.(exampleImage)} />
)} {/* 重組區域 */}

重組區域:

{arrangedWords.length === 0 ? (
將下方單字拖拽到這裡組成完整句子
) : (
{arrangedWords.map((word, index) => (
handleRemoveFromArranged(word)} > {word} ×
))}
)}
{/* 指示文字 */}

點擊下方單字,依序重組成正確的句子:

{/* 可用單字區域 */}

可用單字:

{shuffledWords.length === 0 ? (
所有單字都已使用
) : (
{shuffledWords.map((word, index) => ( ))}
)}
{/* 控制按鈕 */}
{arrangedWords.length > 0 && !showResult && ( )}
{/* 結果反饋區 */} {showResult && reorderResult !== null && (

{reorderResult ? '正確!' : '錯誤!'}

{!reorderResult && (

正確答案是:"{example}"

)}
發音:

中文翻譯:{exampleTranslation}

)}
) }