'use client' import { useState, useEffect } from 'react' import Link from 'next/link' import { ProtectedRoute } from '@/components/ProtectedRoute' import { flashcardsService, type CardSet, type Flashcard } from '@/lib/services/flashcards' function FlashcardsContent() { const [activeTab, setActiveTab] = useState('my-cards') const [selectedSet, setSelectedSet] = useState(null) const [searchTerm, setSearchTerm] = useState('') // Real data from API const [cardSets, setCardSets] = useState([]) const [flashcards, setFlashcards] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) // Load data from API useEffect(() => { loadCardSets() loadFlashcards() }, []) const loadCardSets = async () => { try { const result = await flashcardsService.getCardSets() if (result.success && result.data) { setCardSets(result.data.sets) } else { setError(result.error || 'Failed to load card sets') } } catch (err) { setError('Failed to load card sets') } } const loadFlashcards = async () => { try { setLoading(true) const result = await flashcardsService.getFlashcards(selectedSet || undefined) if (result.success && result.data) { setFlashcards(result.data.flashcards) } else { setError(result.error || 'Failed to load flashcards') } } catch (err) { setError('Failed to load flashcards') } finally { setLoading(false) } } // Reload flashcards when selectedSet changes useEffect(() => { loadFlashcards() }, [selectedSet]) // Filter data const filteredSets = cardSets.filter(set => set.name.toLowerCase().includes(searchTerm.toLowerCase()) || set.description.toLowerCase().includes(searchTerm.toLowerCase()) ) const filteredCards = flashcards.filter(card => { if (searchTerm) { return card.word?.toLowerCase().includes(searchTerm.toLowerCase()) || card.translation?.toLowerCase().includes(searchTerm.toLowerCase()) } return true }) // Add loading and error states if (loading) { return (
載入中...
) } if (error) { return (
{error}
) } return (
{/* Header */}

詞卡管理

管理你的詞卡集合

AI 生成詞卡
{/* Tabs */}
{/* Content */}
{/* Search */}
setSearchTerm(e.target.value)} placeholder="搜尋詞卡或卡組..." className="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary focus:border-transparent" />
{/* Card Sets Tab */} {activeTab === 'my-cards' && (

共 {filteredSets.length} 個卡組

{filteredSets.length === 0 ? (

還沒有詞卡集合

創建第一個卡組
) : (
{filteredSets.map(set => (
{ setSelectedSet(set.id) setActiveTab('all-cards') }} >

{set.name}

{set.description}

{set.cardCount} 張詞卡 進度: {set.progress}%
))}
)}
)} {/* All Cards Tab */} {activeTab === 'all-cards' && (

共 {filteredCards.length} 個詞卡

{selectedSet && ( )}
{filteredCards.length === 0 ? (

沒有找到詞卡

創建新詞卡
) : (
{filteredCards.map(card => (

{card.word || '未設定'}

{card.partOfSpeech} {card.pronunciation && ( {card.pronunciation} )}

{card.translation || '未設定'}

{card.example && (

例句: {card.example}

)}
卡組: {card.cardSet.name} 熟練度: {card.masteryLevel}/5 複習: {card.timesReviewed} 次 下次複習: {new Date(card.nextReviewDate).toLocaleDateString()}
))}
)}
)}
) } export default function FlashcardsPage() { return ( ) }