import React from 'react' import Link from 'next/link' import { Flashcard } from '@/lib/services/flashcards' import { getCEFRColor, getFlashcardImageUrl } from '@/lib/utils/flashcardUtils' interface FlashcardCardProps { flashcard: Flashcard searchTerm?: string onEdit: () => void onDelete: () => void onFavorite: () => void onImageGenerate: () => void isGenerating?: boolean generationProgress?: string highlightSearchTerm?: (text: string, term: string) => React.ReactNode } export const FlashcardCard: React.FC = ({ flashcard, searchTerm = '', onEdit, onDelete, onFavorite, onImageGenerate, isGenerating = false, generationProgress = '', highlightSearchTerm = (text: string) => text }) => { const hasExampleImage = (card: Flashcard): boolean => { return card.hasExampleImage || !!getFlashcardImageUrl(card) } const getExampleImage = (card: Flashcard): string | null => { return getFlashcardImageUrl(card) } return (
{/* CEFR標註 */}
{flashcard.cefr || 'A1'}
{/* 例句圖片區域 - 響應式設計 */}
{hasExampleImage(flashcard) ? ( // 有例句圖片時顯示圖片 {`${flashcard.word} { const target = e.target as HTMLImageElement target.style.display = 'none' target.parentElement!.innerHTML = `
圖片載入失敗
` }} /> ) : ( // 沒有例句圖片時顯示新增按鈕
{isGenerating ? (
{generationProgress}
) : (
新增例句圖
)}
)}
{/* 詞卡信息 */}

{searchTerm ? highlightSearchTerm(flashcard.word || '未設定', searchTerm) : (flashcard.word || '未設定')}

{flashcard.partOfSpeech}
{searchTerm ? highlightSearchTerm(flashcard.translation || '未設定', searchTerm) : (flashcard.translation || '未設定')} {flashcard.pronunciation && (
{flashcard.pronunciation}
)}
創建: {new Date(flashcard.createdAt).toLocaleDateString()} 掌握度: {flashcard.masteryLevel}%
{/* 操作按鈕 - 響應式設計 */}
{/* 收藏按鈕 */} {/* 編輯按鈕 */} {/* 刪除按鈕 */} {/* 詳細按鈕 */}
詳細
) }