import { useState } from 'react'; import { useRouter } from 'next/router'; // Expanding Add Button Component function ExpandingAddButton({ card, onAddToCollection, onAddToDeck, onMarkAsOwned }) { const [isExpanded, setIsExpanded] = useState(false); const handleMainClick = (e) => { e.stopPropagation(); if (!isExpanded) { setIsExpanded(true); } else { // Default action when expanded - add to collection onAddToCollection([card]); setIsExpanded(false); } }; const handleOptionClick = (e, action) => { e.stopPropagation(); action(); setIsExpanded(false); }; return (
{/* Expanded Options */} {isExpanded && (
)} {/* Main Add Button */} {/* Click outside to close */} {isExpanded && (
{ e.stopPropagation(); setIsExpanded(false); }} /> )}
); } export default function CardItem({ card, viewMode = 'grid', isSelected = false, onToggleSelect, onAddToCollection, onAddToDeck, onToggleFavorite, isFavorited = false }) { const [imageError, setImageError] = useState(false); const router = useRouter(); const handleSelectChange = (e) => { e.stopPropagation(); onToggleSelect(card); }; const handleImageError = () => { setImageError(true); }; const handleCardClick = (e) => { // Don't navigate if clicking on interactive elements if (e.target.closest('input, button, a')) { return; } router.push(`/card/${card.id}`); }; // Get rarity-based styling const getRarityEffects = (rarity) => { const rarityLower = rarity?.toLowerCase() || ''; if (rarityLower.includes('mythic') || rarityLower.includes('legendary')) { return { glow: 'rarity-glow-mythic', particles: 'rarity-particles-mythic', border: 'border-yellow-400', shadow: 'shadow-yellow-400/50' }; } else if (rarityLower.includes('rare') || rarityLower.includes('holo')) { return { glow: 'rarity-glow-rare', particles: 'rarity-particles-rare', border: 'border-purple-400', shadow: 'shadow-purple-400/50' }; } else if (rarityLower.includes('uncommon')) { return { glow: 'rarity-glow-uncommon', particles: 'rarity-particles-uncommon', border: 'border-blue-400', shadow: 'shadow-blue-400/30' }; } else if (rarityLower.includes('enchanted') || rarityLower.includes('secret')) { return { glow: 'rarity-glow-enchanted', particles: 'rarity-particles-enchanted', border: 'border-pink-400', shadow: 'shadow-pink-400/60' }; } return { glow: '', particles: '', border: 'border-gray-200', shadow: '' }; }; const rarityEffects = getRarityEffects(card.rarity); // Panel positioning no longer needed - using simple hover buttons if (viewMode === 'list') { return (
{/* Selection Checkbox */}
{/* Card Image */}
{!imageError ? ( {card.name} ) : (
No Image
)}
{/* Card Info */}

{card.name}

{card.set_name} • {card.rarity}

{card.card_type}

{/* Game Badge */}
{card.game}
{/* Price */}
${card.market_price}
{/* Actions */}
); } // Grid view return (
{/* Main Card Container */}
{/* Rarity Particles */} {rarityEffects.particles && (
)} {/* Card Image */}
{!imageError ? ( {card.name} ) : (

No Image

)}
{/* Hover Action Buttons */} {/* Top Left - Checkbox */}
{/* Top Right - Favorite */}
{/* Bottom Left - Expanding Add Button */}
alert('Mark as owned (coming soon)')} />
); }