import React, { useState } from 'react'; import { useQuery } from '@tanstack/react-query'; import { cardService } from '../services/api'; import CardImageDisplay from '../components/CardImageDisplay'; import GlowingCard from '../components/GlowingCard'; interface Card { id: number; name: string; set_name: string; set_code: string; card_number: string; rarity: string; game: string; mana_cost?: string; cmc?: number; card_type: string; colors?: string[]; oracle_text?: string; power?: string; toughness?: string; current_price?: number; market_price?: number; verified: boolean; stock_image_url?: string; image_url?: string; artwork_crop_coords?: { x: number; y: number; width: number; height: number; }; } const Cards: React.FC = () => { const [searchTerm, setSearchTerm] = useState(''); const [selectedGame, setSelectedGame] = useState(''); const [selectedRarity, setSelectedRarity] = useState(''); const [viewMode, setViewMode] = useState<'card' | 'table'>('card'); const { data: cards = [], isLoading, error } = useQuery({ queryKey: ['cards', selectedGame, searchTerm], queryFn: () => cardService.getAllCards({ game: selectedGame || undefined, search: searchTerm || undefined }), }); // Filter cards based on rarity (client-side for now) const filteredCards = cards.filter((card: Card) => { if (selectedRarity && card.rarity !== selectedRarity) { return false; } return true; }); const getGameBadgeColor = (game: string) => { switch (game) { case 'MTG': return 'bg-orange-100 text-orange-800'; case 'POKEMON': return 'bg-yellow-100 text-yellow-800'; case 'LORCANA': return 'bg-purple-100 text-purple-800'; default: return 'bg-gray-100 text-gray-800'; } }; const getRarityBadgeColor = (rarity: string) => { switch (rarity.toLowerCase()) { case 'common': return 'bg-gray-100 text-gray-800'; case 'uncommon': return 'bg-green-100 text-green-800'; case 'rare': return 'bg-blue-100 text-blue-800'; case 'super rare': return 'bg-purple-100 text-purple-800'; case 'legendary': return 'bg-yellow-100 text-yellow-800'; case 'mythic': return 'bg-red-100 text-red-800'; default: return 'bg-gray-100 text-gray-800'; } }; const getRarityColor = (rarity: string) => { switch (rarity.toLowerCase()) { case 'common': return '#6B7280'; case 'uncommon': return '#22C55E'; case 'rare': return '#3B82F6'; case 'super rare': return '#9333EA'; case 'legendary': return '#F59E0B'; case 'mythic': return '#EF4444'; default: return '#6B7280'; } }; return (
Browse and search all trading cards - {filteredCards.length} cards found
Loading cards...
Error loading cards. Please try again.
Try adjusting your search filters or add some cards to your collection
{card.set_name}
{card.card_type}
)}| Card | Type | Cost | P/T | Rarity | Price | Actions |
|---|---|---|---|---|---|---|
|
{card.name}
{card.set_name}
{card.game}
|
{card.card_type} | {card.mana_cost || 'β'} | {(card.power && card.toughness) ? `${card.power}/${card.toughness}` : 'β'} | {card.rarity} | {card.current_price ? `$${card.current_price.toFixed(2)}` : 'β'} |