diff --git a/components/Account/DexOrdersData.js b/components/Account/DexOrdersData.js
index 4646f3ed..79012714 100644
--- a/components/Account/DexOrdersData.js
+++ b/components/Account/DexOrdersData.js
@@ -161,7 +161,7 @@ export default function DexOrdersData({ account, offerList, ledgerTimestamp, set
{offerList.length > 5 ? (
<>
The last 5 DEX orders{historicalTitle} [
-
+
View all ({offerList.length} total)
{' '}
]
@@ -169,7 +169,7 @@ export default function DexOrdersData({ account, offerList, ledgerTimestamp, set
) : (
<>
{offerList.length} DEX orders{historicalTitle} [
-
+
View details
]
@@ -204,7 +204,7 @@ export default function DexOrdersData({ account, offerList, ledgerTimestamp, set
{offerList.length > 5 ? (
<>
The last 5 DEX orders{historicalTitle} [
-
+
View all ({offerList.length} total)
{' '}
]
@@ -212,7 +212,7 @@ export default function DexOrdersData({ account, offerList, ledgerTimestamp, set
) : (
<>
{offerList.length} DEX orders{historicalTitle} [
-
+
View details
]
diff --git a/components/Account/NFTokenData.js b/components/Account/NFTokenData.js
index 39867b3d..3304b27b 100644
--- a/components/Account/NFTokenData.js
+++ b/components/Account/NFTokenData.js
@@ -1,16 +1,35 @@
import Link from 'next/link'
+import { useState, useEffect } from 'react'
+import axios from 'axios'
+import { useTranslation } from 'next-i18next'
+import { xahauNetwork, useWidth } from '../../utils'
+import { nftName, nftNameLink, nftThumbnail, nftUrl } from '../../utils/nft'
+import LinkIcon from '../../public/images/link.svg'
+import { LinkTx } from '../../utils/links'
+import {
+ amountFormat,
+ fullDateAndTime,
+ nftLink,
+ nftOfferLink,
+ addressUsernameOrServiceLink,
+ AddressWithIconFilled,
+ dateFormat
+} from '../../utils/format'
-import { AddressWithIconFilled, fullDateAndTime } from '../../utils/format'
-
-export default function NFTokenData({ data, objects, ledgerTimestamp }) {
- if (
- !data?.ledgerInfo?.nftokenMinter &&
- !data.ledgerInfo?.burnedNFTokens &&
- !data.ledgerInfo?.mintedNFTokens &&
- !(objects?.nftOfferList?.length > 0) &&
- !(objects?.nftList?.length > 0)
- )
- return ''
+export default function NFTokenData({ data, address, objects, ledgerTimestamp, selectedCurrency }) {
+ const windowWidth = useWidth()
+ const { t } = useTranslation()
+ const [ownedNfts, setOwnedNfts] = useState([])
+ const [soldNfts, setSoldNfts] = useState([])
+ const [createdOffers, setCreatedOffers] = useState([])
+ const [receivedOffers, setReceivedOffers] = useState([])
+ const [errorMessage, setErrorMessage] = useState('')
+ const [loading, setLoading] = useState({
+ owned: true,
+ sold: true,
+ createdOffers: true,
+ receivedOffers: true
+ })
const title = 'NFT Data'
@@ -25,7 +44,7 @@ export default function NFTokenData({ data, objects, ledgerTimestamp }) {
) : objects?.nftList?.length > 0 ? (
<>
{!ledgerTimestamp ? (
-
+
View owned NFTs ({objects.nftList.length})
) : (
@@ -41,7 +60,7 @@ export default function NFTokenData({ data, objects, ledgerTimestamp }) {
) : objects?.nftOfferList?.length > 0 ? (
<>
{!ledgerTimestamp ? (
-
+
View NFT Offers ({objects.nftOfferList.length})
) : (
@@ -55,7 +74,7 @@ export default function NFTokenData({ data, objects, ledgerTimestamp }) {
const mintedNftsNode = (
<>
{!ledgerTimestamp ? (
-
+
View minted NFTs ({data.ledgerInfo.mintedNFTokens})
) : (
@@ -68,11 +87,7 @@ export default function NFTokenData({ data, objects, ledgerTimestamp }) {
<>
{!ledgerTimestamp ? (
View burned NFTs ({data.ledgerInfo.burnedNFTokens})
@@ -84,90 +99,448 @@ export default function NFTokenData({ data, objects, ledgerTimestamp }) {
const nftMinterNode =
{historicalTitle || title} | ++ {nfts?.length > 1 ? nfts.length : ''} {title} + {nfts?.length > 0 && ( + <> + {' '} + [ + + View All + + ] + > + )} + | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Owned NFTs | -{ownedNftsNode} | -||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Minted NFTs | -{mintedNftsNode} | -||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Burned NFTs | -{burnedNftsNode} | -||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NFT Offers | -{nftOffersNode} | -||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
First NFT sequence | -{data.ledgerInfo.firstNFTokenSequence} | -||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ {nfts?.map((nft, i) => (
+
+ |
+ ) : (
+
+ We couldn't find any NFTs. + |
+ )}
+
NFT minter | -{nftMinterNode} | +{titleNode} | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+ {t('table.offer')} + | + )} +NFT | +{t('table.type')} | +{t('table.amount')} | +{t('table.placed')} | + {type === 'created' &&{t('table.destination')} | } +||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
+ + {t('general.loading')} + + |
+ |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
+ |
+ )}
+ {nftThumbnail(offer?.nftoken)} | ++ {offer?.flags?.sellToken === true || xahauNetwork ? t('table.text.sell') : t('table.text.buy')} + | +{amountFormat(offer?.amount, { tooltip: true, maxFractionDigits: 2 })} | +
+ {dateFormat(offer?.createdAt)} |
+ {type === 'created' && {nftLink(offer, 'destination')} | } +||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ {errorMessage} + | +
+ + + + {t('general.loading')} + + + |
+ |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{titleNode} | +|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ {nftThumbnail(offer.nftoken)} + |
+
+ {!xahauNetwork && (
+ + {t('table.offer')}: {nftOfferLink(offer.offerIndex)} + + )} ++ NFT: {nftName(offer.nftoken) ? nftNameLink(offer.nftoken) : nftOfferLink(offer.offerIndex)} + ++ {t('table.type')}:{' '} + {offer.flags?.sellToken === true || xahauNetwork ? t('table.text.sell') : t('table.text.buy')} + ++ {t('table.amount')}: {amountFormat(offer.amount)} + +
+ {t('table.placed')}: {dateFormat(offer.createdAt)}{' '}
+ + {t('table.destination')}: {addressUsernameOrServiceLink(offer, 'destination')} + + )} + {!offer.valid && ( ++ {t('table.status')}: {t('table.text.invalid')} + + )} + |
+ ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ {errorMessage} + | + )} + {!offers?.length && ( ++ {t('nft-offers.no-nft-offers')} + | + )} +
Incoming NFT offers | -disallowed | +{historicalTitle || title} |
---|
{ownedNftsNode}
} - {data.ledgerInfo?.mintedNFTokens &&{mintedNftsNode}
} - {data.ledgerInfo?.burnedNFTokens &&{burnedNftsNode}
} - {data?.ledgerInfo?.activated &&{nftOffersNode}
} - {data.ledgerInfo?.firstNFTokenSequence && ( -- First NFT sequence {data.ledgerInfo.firstNFTokenSequence} -
- )} - {data.ledgerInfo?.nftokenMinter && ( + {!isEmpty && ( <> -- NFT minter -
- {nftMinterNode} + {data?.ledgerInfo?.activated &&{ownedNftsNode}
} + {data.ledgerInfo?.mintedNFTokens &&{mintedNftsNode}
} + {data.ledgerInfo?.burnedNFTokens &&{burnedNftsNode}
} + {data?.ledgerInfo?.activated &&{nftOffersNode}
} + {data.ledgerInfo?.firstNFTokenSequence && ( ++ First NFT sequence {data.ledgerInfo.firstNFTokenSequence} +
+ )} + {data.ledgerInfo?.nftokenMinter && ( + <> ++ NFT minter +
+ {nftMinterNode} + > + )} + {data.ledgerInfo?.flags?.disallowIncomingNFTokenOffer && ( ++ Incoming NFT offers disallowed +
+ )} + {data.ledgerInfo?.flags?.uriTokenIssuer && ( ++ URI token issuer true +
+ )} > )} - {data.ledgerInfo?.flags?.disallowIncomingNFTokenOffer && ( -- Incoming NFT offers disallowed -
- )} - {data.ledgerInfo?.flags?.uriTokenIssuer && ( -- URI token issuer true -
- )}