'use client' import { use } from 'react' import { useRouter } from 'next/navigation' import { Navigation } from '@/components/shared/Navigation' import { ProtectedRoute } from '@/components/shared/ProtectedRoute' import { useToast } from '@/components/shared/Toast' import { getCEFRColor } from '@/lib/utils/flashcardUtils' import { useTTSPlayer } from '@/hooks/shared/useTTSPlayer' import { useFlashcardDetailData } from '@/hooks/flashcards/useFlashcardDetailData' import { useFlashcardActions } from '@/hooks/flashcards/useFlashcardActions' import { useImageGeneration } from '@/hooks/flashcards/useImageGeneration' import { FlashcardDetailHeader } from '@/components/flashcards/FlashcardDetailHeader' import { FlashcardContentBlocks } from '@/components/flashcards/FlashcardContentBlocks' import { FlashcardInfoBlock } from '@/components/flashcards/FlashcardInfoBlock' import { FlashcardActions } from '@/components/flashcards/FlashcardActions' import { EditingControls } from '@/components/flashcards/EditingControls' import { LoadingState } from '@/components/shared/LoadingState' import { ErrorState } from '@/components/shared/ErrorState' interface FlashcardDetailPageProps { params: Promise<{ id: string }> } export default function FlashcardDetailPage({ params }: FlashcardDetailPageProps) { const { id } = use(params) return ( ) } function FlashcardDetailContent({ cardId }: { cardId: string }) { const router = useRouter() const toast = useToast() // 使用數據管理Hook const { flashcard, loading, error, isEditing, editedCard, setFlashcard, setIsEditing, setEditedCard } = useFlashcardDetailData(cardId) // 使用TTS Hook const { isPlayingWord, isPlayingExample, toggleWordTTS, toggleExampleTTS } = useTTSPlayer() // 使用業務邏輯Hooks const { toggleFavorite, saveEdit, deleteFlashcard, isLoading: isActionLoading } = useFlashcardActions({ flashcard, editedCard, onFlashcardUpdate: setFlashcard, onEditingChange: setIsEditing }) const { generateImage, isGenerating: isGeneratingImage, progress: generationProgress } = useImageGeneration({ flashcard, onFlashcardUpdate: setFlashcard }) // 編輯變更處理函數 const handleEditChange = (field: string, value: string) => { setEditedCard((prev: any) => ({ ...prev, [field]: value })) } // 編輯操作處理 const handleToggleEdit = () => { if (isEditing) { setEditedCard(flashcard) } setIsEditing(!isEditing) } const handleCancelEdit = () => { setIsEditing(false) setEditedCard(flashcard) } if (loading) { return } if (error || !flashcard) { return ( router.push('/flashcards')} /> ) } return (
{/* 導航欄 */}
{/* 主要詞卡內容 */}
{/* CEFR標籤 - 右上角 */}
{flashcard.cefr || 'A1'}
{/* 標題區 */} {/* 內容區塊 */} {/* 詞卡資訊區塊 */}
{/* 編輯模式控制 */} {isEditing && ( )}
{/* 底部操作區 */} {/* Toast 通知系統 */}
) }