import {useCallback, useEffect, useState} from 'react'; import {BigNumber} from 'ethers'; import useUnicornFinance from './useUnicornFinance'; import {Bank, ContractName} from '../unicorn-finance'; import config from '../config'; const useEarningsAll = (banks: Bank[]) => { const [balances, setBalances] = useState>(new Map()); const unicornFinance = useUnicornFinance(); const isUnlocked = unicornFinance?.isUnlocked; const args = banks.map((bank: Bank) => ({poolName: bank.contract, earnTokenName: bank.earnTokenName, poolId: bank.poolId})); const fetchBalance = useCallback(async () => { const balances = await Promise.all( args.map(async (arg: {poolName: ContractName; earnTokenName: string; poolId: Number}) => { const {poolName, earnTokenName, poolId} = arg; const balance = await unicornFinance.earnedFromBank(poolName, earnTokenName, poolId, unicornFinance.myAccount); return [`${poolName}-${poolId}`, balance]; }), ); setBalances(new Map(balances as any)); }, [JSON.stringify(args), unicornFinance]); useEffect(() => { if (isUnlocked) { fetchBalance().catch((err) => console.error(err.stack)); const refreshBalance = setInterval(fetchBalance, config.refreshInterval); return () => clearInterval(refreshBalance); } }, [isUnlocked, JSON.stringify(args), unicornFinance, fetchBalance]); return balances; }; export default useEarningsAll;