@@ -13,6 +13,21 @@ const formatCurrency = ( value ) => {
1313 return `$${ numeric . toFixed ( 2 ) } ` ;
1414} ;
1515
16+ const normalizeOptionalString = ( value ) => {
17+ if ( value === null || value === undefined ) {
18+ return null ;
19+ }
20+
21+ const normalized = String ( value ) . trim ( ) ;
22+ return normalized || null ;
23+ } ;
24+
25+ const getPrimaryCardImage = ( card ) => (
26+ Array . isArray ( card ?. card_images )
27+ ? card . card_images . find ( ( image ) => image ?. id || image ?. image_url || image ?. image_url_cropped || image ?. image_url_small )
28+ : null
29+ ) ;
30+
1631const GridView = ( { aggregatedData, onDeleteCard, onUpdateCard, sortConfig, handleSortChange, selectedCardIds, onSelectedCardIdsChange, folderNameMap = { } } ) => {
1732 const [ edit , setEdit ] = useState ( { } ) ;
1833 const [ editValues , setEditValues ] = useState ( { } ) ;
@@ -116,10 +131,20 @@ const GridView = ( { aggregatedData, onDeleteCard, onUpdateCard, sortConfig, han
116131
117132 const getCardImageSources = useCallback (
118133 ( card ) => {
119- const localImageSrc = card ?. cardId ? getFullImagePath ( card . cardId ) : null ;
120- const remoteImageSrc = typeof card ?. remoteImageUrl === "string" && card . remoteImageUrl . trim ( )
121- ? card . remoteImageUrl . trim ( )
122- : null ;
134+ const primaryCardImage = getPrimaryCardImage ( card ) ;
135+ const imageId =
136+ normalizeOptionalString ( primaryCardImage ?. id ) ||
137+ normalizeOptionalString ( card ?. cardImageId ) ||
138+ normalizeOptionalString ( card ?. cardId ) ||
139+ normalizeOptionalString ( card ?. cardDetailId ) ||
140+ normalizeOptionalString ( card ?. id ) ;
141+ const localImageSrc = imageId ? getFullImagePath ( imageId ) : null ;
142+ const remoteImageSrc =
143+ normalizeOptionalString ( card ?. remoteImageUrl ) ||
144+ normalizeOptionalString ( card ?. image_url ) ||
145+ normalizeOptionalString ( primaryCardImage ?. image_url ) ||
146+ normalizeOptionalString ( primaryCardImage ?. image_url_cropped ) ||
147+ normalizeOptionalString ( primaryCardImage ?. image_url_small ) ;
123148 const primaryImageSrc = remoteImageSrc || localImageSrc || FALLBACK_IMAGE ;
124149 const secondaryImageSrc = primaryImageSrc === remoteImageSrc ? localImageSrc : remoteImageSrc ;
125150
@@ -252,6 +277,13 @@ const GridView = ( { aggregatedData, onDeleteCard, onUpdateCard, sortConfig, han
252277 if ( ! card ) return null ;
253278
254279 const { primaryImageSrc, secondaryImageSrc } = getCardImageSources ( card ) ;
280+ const primaryCardImage = getPrimaryCardImage ( card ) ;
281+ const detailCardId =
282+ normalizeOptionalString ( primaryCardImage ?. id ) ||
283+ normalizeOptionalString ( card ?. cardImageId ) ||
284+ normalizeOptionalString ( card ?. cardId ) ||
285+ normalizeOptionalString ( card ?. cardDetailId ) ||
286+ normalizeOptionalString ( card ?. id ) ;
255287 const cardId = String ( card . _id ?? "" ) ;
256288 const isSelected = isSelectionEnabled && selectedCardIds . has ( cardId ) ;
257289 const isFlipped = Boolean ( flippedCards [ card . _id ] ) ;
@@ -278,7 +310,7 @@ const GridView = ( { aggregatedData, onDeleteCard, onUpdateCard, sortConfig, han
278310 const cardDetailsQuery = ( ( ) => {
279311 const query = { source : "collection" } ;
280312
281- if ( card . cardId ) query . card = card . cardId ;
313+ if ( detailCardId ) query . card = detailCardId ;
282314 if ( computedLetter ) query . letter = computedLetter ;
283315 if ( card . setName ) query . set_name = card . setName ;
284316 if ( card . productName ) query . card_name = card . productName ;
0 commit comments