import React, { useEffect, useState } from 'react'; import { getCardById, getCardsByIds } from '../services/api'; import { Deck } from '../types'; import { supabase } from "../lib/supabase"; import DeckCard from "./DeckCard"; interface DeckListProps { onDeckEdit?: (deckId: string) => void; } const DeckList = ({ onDeckEdit }: DeckListProps) => { const [decks, setDecks] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const fetchDecks = async () => { const { data: decksData, error: decksError } = await supabase.from('decks').select('*'); if (decksError) { console.error('Error fetching decks:', decksError); setLoading(false); return; } const decksWithCards = await Promise.all(decksData.map(async (deck) => { const { data: cardEntities, error: cardsError } = await supabase .from('deck_cards') .select('*') .eq('deck_id', deck.id); if (cardsError) { console.error(`Error fetching cards for deck ${deck.id}:`, cardsError); return { ...deck, cards: [] }; } const cardIds = cardEntities.map((entity) => entity.card_id); const uniqueCardIds = [...new Set(cardIds)]; const scryfallCards = await getCardsByIds(uniqueCardIds); const cards = cardEntities.map((entity) => { const card = scryfallCards.find((c) => c.id === entity.card_id); return { card, quantity: entity.quantity, }; }); return { ...deck, cards, createdAt: new Date(deck.created_at), updatedAt: new Date(deck.updated_at), }; })); setDecks(decksWithCards); setLoading(false); }; fetchDecks(); }, []); if (loading) { return (
); } return (
{decks.map((deck) => ( ))}
); }; export default DeckList;