From ac2278bba21e601e740fa9e50c827a46a3269c99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Szor=C3=A1d?= Date: Wed, 22 Mar 2023 09:24:33 +0100 Subject: [PATCH] Refactor media type check --- src/components/NftPreview/NftPreview.tsx | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/components/NftPreview/NftPreview.tsx b/src/components/NftPreview/NftPreview.tsx index 8a95e2cd32..8ebf320b80 100644 --- a/src/components/NftPreview/NftPreview.tsx +++ b/src/components/NftPreview/NftPreview.tsx @@ -3,7 +3,7 @@ import {Image, ImageResizeMode, ImageStyle, StyleProp} from 'react-native' import {SvgUri} from 'react-native-svg' import placeholder from '../../assets/img/nft-placeholder.png' -import {isString, YoroiNft} from '../../yoroi-wallets' +import {isArray, isString, YoroiNft} from '../../yoroi-wallets' export const NftPreview = ({ nft, @@ -25,10 +25,14 @@ export const NftPreview = ({ blurRadius?: number }) => { const uri = showThumbnail ? nft.thumbnail : nft.logo - const isUriSvg = uri?.toLowerCase().endsWith('.svg') || isSvgMediaType(nft.metadata.originalMetadata?.mediaType) - nft.metadata.originalMetadata?.files?.some((file) => file.src === uri && isSvgMediaType(file.mediaType)) + const isUriSvg = + isString(uri) && + (uri.toLowerCase().endsWith('.svg') || + isSvgMediaType(nft.metadata.originalMetadata?.mediaType) || + isSvgMediaType(getNftFilenameMediaType(nft, uri))) + const shouldShowPlaceholder = !isString(uri) || showPlaceholder || (isUriSvg && blurRadius !== undefined) - if (!isString(uri) || showPlaceholder || (isUriSvg && blurRadius !== undefined)) { + if (shouldShowPlaceholder) { // Since SvgUri does not support blur radius, we show a placeholder return } @@ -58,3 +62,11 @@ export const NftPreview = ({ const isSvgMediaType = (mediaType: string | undefined): boolean => { return mediaType === 'image/svg+xml' } + +const getNftFilenameMediaType = (nft: YoroiNft, filename: string): string | undefined => { + const files = nft.metadata.originalMetadata?.files ?? [] + const file = files.find((file) => { + return isArray(file.src) ? file.src.join('') === filename : file.src === filename + }) + return file?.mediaType +}