Skip to content

Commit

Permalink
Moving methods inside hooks
Browse files Browse the repository at this point in the history
  • Loading branch information
hide-on-bush-x committed Aug 24, 2023
1 parent 562acaa commit e1ab96f
Showing 1 changed file with 61 additions and 78 deletions.
139 changes: 61 additions & 78 deletions src/refactor/masa/use-custom-sbt.ts
Expand Up @@ -14,31 +14,6 @@ import {
TokenWithMetadata,
} from './interfaces';

const fetchContracts = async (
masa?: Masa,
customGallerySBT?: CustomGallerySBT[]
): Promise<FullContract[]> => {
if (!masa || !customGallerySBT || customGallerySBT.length === 0) return [];

const filteredSBTs = customGallerySBT.filter(
(sbt: CustomGallerySBT) =>
!sbt.network || sbt.network === masa.config.networkName
);

const contractPromises = filteredSBTs.map(async (sbt: CustomGallerySBT) => {
try {
const sbtContract = await masa.sbt.connect(sbt.address);
return { ...sbtContract, ...sbt } as FullContract;
} catch (error) {
console.log(error);
return null;
}
});

const contracts = await Promise.all(contractPromises);
return contracts.filter(Boolean) as FullContract[];
};

export const useCustomGallerySBT = () => {
const { masaAddress, masaNetwork, sdk: masa } = useMasaClient();
const canQuery = useCanQuery();
Expand All @@ -48,10 +23,27 @@ export const useCustomGallerySBT = () => {
const { hasSession, sessionAddress } = useSession();
const [, getContractsAsync] = useAsyncFn(async () => {
if (!canQuery) return null;
const result = await fetchContracts(masa, customSBTs);
// const result = await fetchContracts(masa, customSBTs);

if (!masa || !customSBTs || customSBTs.length === 0) return [];

const filteredSBTs = customSBTs.filter(
(sbt: CustomGallerySBT) =>
!sbt.network || sbt.network === masa.config.networkName
);

const contractPromises = filteredSBTs.map(async (sbt: CustomGallerySBT) => {
try {
const sbtContract = await masa.sbt.connect(sbt.address);
return { ...sbtContract, ...sbt } as FullContract;
} catch (error) {
console.log(error);
return null;
}
});

if (!result) return null;
return result;
const contracts = await Promise.all(contractPromises);
return contracts.filter(Boolean) as FullContract[];
}, [canQuery, customSBTs, masa]);

const {
Expand Down Expand Up @@ -81,52 +73,6 @@ export const useCustomGallerySBT = () => {
};
};

// NEXT: refactor this function
export const fetchCustomSBTs = async (
customContracts: FullContract[]
): Promise<HydratedContracts[]> => {
const hydratedContractsPromises = customContracts.map(
async (contract: FullContract) => {
if (!contract.contract) return null;

try {
const tokens: Token[] = await contract.list();

// Fetch metadata for all tokens concurrently if the getMetadata method exists
const tokensWithMetadataPromises = contract.getMetadata
? tokens.map(async (token: Token) => {
try {
const metadata = await contract.getMetadata(token);
return { metadata, ...token } as TokenWithMetadata;
} catch (error) {
console.log('METADATA ERROR', error);
return null;
}
})
: [];

let tokensWithMetadata = await Promise.all(tokensWithMetadataPromises);
tokensWithMetadata = tokensWithMetadata.filter(
Boolean
) as TokenWithMetadata[];

return {
...contract,
tokens: tokensWithMetadata,
} as HydratedContracts;
} catch (error) {
console.log('LIST TOKENS ERROR', error);
return null;
}
}
);

const hydratedContracts = (
await Promise.all(hydratedContractsPromises)
).filter(Boolean) as HydratedContracts[];
return hydratedContracts;
};

export const useCustomSBTs = () => {
const { masaAddress, masaNetwork } = useMasaClient();
const canQuery = useCanQuery();
Expand All @@ -137,11 +83,48 @@ export const useCustomSBTs = () => {
const [, getCustomContracts] = useAsyncFn(async () => {
if (!canQuery) return null;

const result = await fetchCustomSBTs(customContracts);

if (!result) return null;
const hydratedContractsPromises = customContracts.map(
async (contract: FullContract) => {
if (!contract.contract) return null;

try {
const tokens: Token[] = await contract.list();

// Fetch metadata for all tokens concurrently if the getMetadata method exists
const tokensWithMetadataPromises = contract.getMetadata
? tokens.map(async (token: Token) => {
try {
const metadata = await contract.getMetadata(token);
return { metadata, ...token } as TokenWithMetadata;
} catch (error) {
console.log('METADATA ERROR', error);
return null;
}
})
: [];

let tokensWithMetadata = await Promise.all(
tokensWithMetadataPromises
);
tokensWithMetadata = tokensWithMetadata.filter(
Boolean
) as TokenWithMetadata[];

return {
...contract,
tokens: tokensWithMetadata,
} as HydratedContracts;
} catch (error) {
console.log('LIST TOKENS ERROR', error);
return null;
}
}
);

return result;
const hydratedContracts = (
await Promise.all(hydratedContractsPromises)
).filter(Boolean) as HydratedContracts[];
return hydratedContracts;
}, [canQuery, customContracts]);

const {
Expand Down

0 comments on commit e1ab96f

Please sign in to comment.