import { useWeb3React } from '@web3-react/core' import { IS_BROWSER } from '../../configs' import { TokenList } from '../../configs/tokens' import { bigNumberToDecimal, getBep20Contract, simpleRpcProvider } from '../../utils' import { useCustomQuery } from '../customQuery/useCustomQuery' import { userKeys } from './userKeys' export const fetchBalances = async (tokenList: TokenList, params: any) => { const { publicAddress } = params const resultList = await Promise.all( Object.values(tokenList).map((token, key) => { const TokenContract = getBep20Contract(token.tokenAddress) if (token.tokenName === tokenList.BLOCKCHAIN.tokenName) { return simpleRpcProvider.getBalance(publicAddress) } return TokenContract.balanceOf(publicAddress) }), ) // const balanceList = Object.values(tokenList).map((token, key) => { // const balance = resultList[key].toString() // return { // ...token, // balance, // adjustedBalance: parseFloat(bigNumberToDecimal(balance)), // } // }) let key = 0 const balanceList = JSON.parse(JSON.stringify(tokenList)) for (let tokenSymbol in tokenList) { const balance = resultList[key].toString() balanceList[tokenSymbol] = { ...balanceList[tokenSymbol], balance, adjustedBalance: parseFloat(bigNumberToDecimal(balance)), } key++ } return balanceList } export const useUserBalance = (tokenList: TokenList) => { const { account } = useWeb3React() const userBalance = useCustomQuery( userKeys.balances(), async () => await fetchBalances(tokenList, { publicAddress: account, }), { // The query will not execute until the userId exists enabled: !!account && !!simpleRpcProvider, }, ) return userBalance }