diff --git a/src/context/CardContext.jsx b/src/context/CardContext.jsx index 405c3c1..e699664 100644 --- a/src/context/CardContext.jsx +++ b/src/context/CardContext.jsx @@ -5,7 +5,8 @@ export const CardContext = createContext(); export function CardProvider({ children }) { const [ownedAmounts, setOwnedAmounts] = useState({}); const [expandedCardId, setExpandedCardId] = useState(null); - // cardImages[cardId] is an array of base64 strings, one per artwork index + // cardImages[cardId].blobs: string[] (base64 per artwork index) + // cardImages[cardId].ids: number[] (image_ids from API) const [cardImages, setCardImages] = useState({}); const updateAmount = (card_id, key, amount) => { @@ -15,11 +16,15 @@ export function CardProvider({ children }) { })); }; - const setCardImage = (card_id, index, blob) => { + const setCardImage = (card_id, index, blob, image_ids) => { setCardImages(prev => { - const existing = prev[card_id] ? [...prev[card_id]] : []; - existing[index] = blob; - return { ...prev, [card_id]: existing }; + const existing = prev[card_id] ?? { blobs: [], ids: [] }; + const blobs = [...existing.blobs]; + blobs[index] = blob; + return { + ...prev, + [card_id]: { blobs, ids: image_ids ?? existing.ids } + }; }); }; diff --git a/src/pages/HomePage.jsx b/src/pages/HomePage.jsx index f19f2de..c9db9e3 100644 --- a/src/pages/HomePage.jsx +++ b/src/pages/HomePage.jsx @@ -45,14 +45,14 @@ function HomePage() { useEffect(() => { if (!expandedCardId) return; - const card = cards.find(c => c.id === expandedCardId); - if (!card) return; - const imageId = card.image_ids?.[artworkIndex]; - if (!imageId || cardImages[expandedCardId]?.[artworkIndex]) return; + const imageIds = cardImages[expandedCardId]?.ids; + const imageId = imageIds?.[artworkIndex]; + if (cardImages[expandedCardId]?.blobs[artworkIndex]) return; + // imageId may be undefined on first load (ids not yet fetched) fetchCardImage(expandedCardId, imageId) - .then(image => setCardImage(expandedCardId, artworkIndex, image)) + .then(({ image, image_ids }) => setCardImage(expandedCardId, artworkIndex, image, image_ids)) .catch(err => console.error('Failed to load card image', err)); - }, [expandedCardId, artworkIndex, cards, cardImages, setCardImage]); + }, [expandedCardId, artworkIndex, cardImages, setCardImage]); const getTotal = useCallback((card) => card.printings?.reduce((sum, p) => { @@ -134,30 +134,27 @@ function HomePage() {