import React, { useState } from 'react'; import { useMoralis, useMoralisWeb3Api, useMoralisWeb3ApiCall, } from 'react-moralis'; import styles from './NFT.styles'; import colors from '../../styles/colors'; import { Button } from '../Button'; import NFTModal from './NFT.modal'; import { INFTProps, TNFTMetadata } from './types'; import NFTUtils from './NFT.utils'; import { Skeleton } from '../Skeleton'; import { Typography } from '../Typography'; import FetchedNFT from './NFT.fetched'; import { Tooltip } from '../Tooltip'; import { Icon } from '../Icon'; const { DivStyled } = styles; const { image } = NFTUtils; const NFT: React.FC = ({ address, chain, name, tokenId, fetchMetadata, metadata, ...props }) => { const { isInitialized, isInitializing } = useMoralis(); const Web3API = useMoralisWeb3Api(); const { data, error, isLoading, isFetching } = useMoralisWeb3ApiCall( Web3API.token.getTokenIdMetadata, { address, chain, token_id: String(tokenId), }, { autoFetch: isInitialized && fetchMetadata && /^0x[a-fA-F0-9]{40}$/.test(address), }, ); const [showTraits, setShowModal] = useState(false); if (!/^0x[a-fA-F0-9]{40}$/.test(address)) { return
No valid address
; } if (!fetchMetadata) { return ; } if (!isInitialized && !isInitializing) { return
; } if (isLoading || isFetching) { return (
); } if (error) { return
{error.message}
; } if (!data) { return
No response
; } if (!data?.metadata) { return (
} content={'There is no metadata'} position={'top'} />
); } return (
{image( (JSON.parse(String(data.metadata)) as TNFTMetadata) ?.animation_url, (JSON.parse(String(data.metadata)) as TNFTMetadata) ?.image || (JSON.parse(String(data.metadata)) as TNFTMetadata) ?.image_url, )}
{(JSON.parse(String(data.metadata)) as TNFTMetadata) ?.name || name} {data.contract_type || 'ERC721'}
); }; export default NFT;