From 6938832076da7c025108faf9a6ca848e09159fde Mon Sep 17 00:00:00 2001 From: Rushikeshnimkar Date: Tue, 15 Oct 2024 17:30:19 +0530 Subject: [PATCH] fix : aptos nft --- components/NftdataCard.tsx | 119 ++++++++++++++++++------------------- components/UserNFTs.tsx | 74 +++++++++++++++++++++-- pages/subscription.tsx | 6 +- 3 files changed, 132 insertions(+), 67 deletions(-) diff --git a/components/NftdataCard.tsx b/components/NftdataCard.tsx index 4303765..e474366 100644 --- a/components/NftdataCard.tsx +++ b/components/NftdataCard.tsx @@ -68,72 +68,73 @@ const NftdataCard: React.FC = ({ }) => { const [imageSrc, setImageSrc] = React.useState(null); const [attributes, setAttributes] = React.useState(null); - const [isLoading, setIsLoading] = useState(true); + const getUserAddressFromCookie = () => { return Cookies.get("erebrus_wallet") || ""; }; const userAddress = getUserAddressFromCookie(); - const fetchMetaData = async () => { - if ( - !metaData || - !metaData.current_token_data || - !metaData.current_token_data.token_uri - ) { - console.log("Missing metadata or token URI"); - setIsLoading(false); - return; - } - - try { - let metadata; - if (chainSymbol === "sol") { - const response = await axios.get(metaData.current_token_data.token_uri); - metadata = response.data; - console.log("Solana Metadata:", metadata); - } else if (chainSymbol === "apt") { - const ipfsCid = metaData.current_token_data.token_uri.replace( - "ipfs://", - "" - ); - console.log("IPFS CID:", ipfsCid); - const metadataResponse = await axios.get( - `https://ipfs.io/ipfs/${ipfsCid}` - ); - metadata = metadataResponse.data; - console.log("Aptos Metadata:", metadata); - } else { - console.log("Unsupported chain"); + useEffect(() => { + const fetchMetaData = async () => { + if ( + !metaData || + !metaData.current_token_data || + !metaData.current_token_data.token_uri + ) { + console.log("Missing metadata or token URI"); setIsLoading(false); return; } - const imageUrl = - metadata?.image || - metadata?.image_url || - metadata?.imageUrl || - metadata?.url; - setImageSrc(imageUrl?.replace("ipfs://", "https://ipfs.io/ipfs/")); - setAttributes({ - name: metadata.name, - description: metadata.description, - symbol: metadata.symbol, - externalUrl: metadata.external_url, - collection: metadata.collection, - ...metadata.attributes, - }); - } catch (error) { - console.error("Error fetching metadata:", error); - } finally { - setIsLoading(false); - } - }; + try { + let metadata; + if (chainSymbol === "sol") { + const response = await axios.get(metaData.current_token_data.token_uri); + metadata = response.data; + console.log("Solana Metadata:", metadata); + } else if (chainSymbol === "apt") { + const ipfsCid = metaData.current_token_data.token_uri.replace( + "ipfs://", + "" + ); + console.log("IPFS CID:", ipfsCid); + const metadataResponse = await axios.get( + `https://ipfs.io/ipfs/${ipfsCid}` + ); + metadata = metadataResponse.data; + console.log("Aptos Metadata:", metadata); + } else { + console.log("Unsupported chain"); + setIsLoading(false); + return; + } + + const imageUrl = + metadata?.image || + metadata?.image_url || + metadata?.imageUrl || + metadata?.url || + metaData.current_token_data.cdn_asset_uris?.cdn_image_uri; + setImageSrc(imageUrl?.replace("ipfs://", "https://ipfs.io/ipfs/")); + setAttributes({ + name: metadata.name || metaData.current_token_data.token_name, + description: metadata.description || metaData.current_token_data.description, + symbol: metadata.symbol, + externalUrl: metadata.external_url, + collection: metadata.collection || metaData.current_token_data.current_collection, + ...metadata.attributes, + }); + } catch (error) { + console.error("Error fetching metadata:", error); + } finally { + setIsLoading(false); + } + }; - // Call fetchMetaData immediately if metaData is available - if (metaData && isLoading) { fetchMetaData(); - } + }, [metaData, chainSymbol]); + if (isLoading) { return (
@@ -151,6 +152,7 @@ const NftdataCard: React.FC = ({ return null; } + return (
= ({
- {metaData.current_token_data.token_name} { console.error( @@ -182,7 +181,7 @@ const NftdataCard: React.FC = ({ (e.target as HTMLImageElement).src ); (e.target as HTMLImageElement).src = - "/path/to/placeholder/image.png"; // Fallback image + "/path/to/placeholder/image.png"; }} />
diff --git a/components/UserNFTs.tsx b/components/UserNFTs.tsx index 45b1a1d..b27fb91 100644 --- a/components/UserNFTs.tsx +++ b/components/UserNFTs.tsx @@ -1,15 +1,19 @@ import { Connection, PublicKey } from '@solana/web3.js'; import { Metaplex } from '@metaplex-foundation/js'; import { AptosClient, TokenClient } from 'aptos'; +import axios from 'axios'; +import Cookies from 'js-cookie'; const ALLOWED_COLLECTIONS = { sol: ['SMB Gen2', 'sharx by sharky.fi', 'Superteam Member NFT', 'Deanslist', 'SMB Gen3', "Erebrus Community NFT #001"], apt: ["Undying City Equipment Collection"] }; -const fetchUserNFTs = async (userAddress: string, chainSymbol: string) => { +const fetchUserNFTs = async (chainSymbol: string) => { + const userAddress = Cookies.get('erebrus_wallet'); + if (!userAddress) { - console.log('No user address provided'); + console.log('No user address found in cookies'); return []; } @@ -56,8 +60,70 @@ const fetchUserNFTs = async (userAddress: string, chainSymbol: string) => { return filteredNFTs; - } - else { + } else if (chainSymbol === 'apt') { + const APTOS_GRAPHQL_ENDPOINT = process.env.NEXT_PUBLIC_APTOS_GRAPHQL_ENDPOINT; + + const query = ` + query GetAccountNfts($address: String) { + current_token_ownerships_v2( + where: {owner_address: {_eq: $address}, amount: {_gt: "0"}} + ) { + current_token_data { + collection_id + largest_property_version_v1 + current_collection { + collection_id + collection_name + description + creator_address + uri + __typename + } + description + token_name + token_data_id + token_standard + token_uri + __typename + } + owner_address + amount + __typename + } + } + `; + + const variables = { address: userAddress }; + + const response = await axios.post(APTOS_GRAPHQL_ENDPOINT, { + query, + variables + }); + + const nfts = response.data.data.current_token_ownerships_v2; + + const filteredNFTs = nfts + .filter(nft => nft.current_token_data.current_collection.collection_name === "Undying City Equipment Collection") + .map(nft => ({ + amount: nft.amount, + current_token_data: { + token_name: nft.current_token_data.token_name, + token_uri: nft.current_token_data.token_uri, + description: nft.current_token_data.description, + token_data_id: nft.current_token_data.token_data_id, + cdn_asset_uris: { + cdn_image_uri: nft.current_token_data.token_uri, + }, + collection: nft.current_token_data.current_collection.collection_name, + symbol: '', + current_collection: nft.current_token_data.current_collection, + }, + })); + + console.log('Filtered Aptos NFTs:', filteredNFTs); + return filteredNFTs; + + } else { console.log('NFT fetching for this chain not implemented yet'); return []; } diff --git a/pages/subscription.tsx b/pages/subscription.tsx index 592212a..72a1ec1 100644 --- a/pages/subscription.tsx +++ b/pages/subscription.tsx @@ -693,7 +693,7 @@ const Subscription = () => { ); setUniqueRegions(regions); - console.log("erebrus nodes", payload); + // console.log("erebrus nodes", payload); } } catch (error) { console.error("Error fetching nodes data:", error); @@ -796,11 +796,11 @@ const Subscription = () => { }; // Log activeNodesData and filtered result - console.log("Current activeNodesData:", activeNodesData); + // console.log("Current activeNodesData:", activeNodesData); const filteredNodes = activeNodesData.filter( (node) => node.region === regionname ); - console.log("Filtered nodes based on region:", filteredNodes, regionname); + // console.log("Filtered nodes based on region:", filteredNodes, regionname); if (!loggedin) { return (