'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 { 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) // 使用業務邏輯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 ( {/* 導航欄 */} router.push('/flashcards')} className="text-gray-600 hover:text-gray-900 flex items-center gap-2" > 返回詞卡列表 {/* 主要詞卡內容 */} {/* CEFR標籤 - 右上角 */} {flashcard.cefr || 'A1'} {/* 標題區 */} {/* 內容區塊 */} {/* 詞卡資訊區塊 */} {/* 編輯模式控制 */} {isEditing && ( )} {/* 底部操作區 */} {/* Toast 通知系統 */} ) }