/* eslint-disable no-console */ import { useCallback, useEffect, useState } from 'react' import { getTokenSwapRate } from '../apis/exchangeApi' import { Token } from '../configs/tokens/types' import Logger from '../utils/logger/logger' import { getFullDisplayBalance } from '../utils/utils' import useRefresh from './useRefresh' export interface TokenRateProps { token: Token rateUSD: number rateBNB: number isRateLoaded: boolean getPriceUSD: (number) => string getPriceBNB: (number) => string } export const useTokenSwapRate = (token: Token): TokenRateProps => { const { slowRefresh } = useRefresh() const [tokenRate, setTokenRate] = useState({ rateUSD: 0, rateBNB: 0, isRateLoaded: false, }) const getPriceUSD = useCallback( (priceToken) => { return getFullDisplayBalance(priceToken * tokenRate.rateUSD) }, [tokenRate], ) const getPriceBNB = useCallback( (priceToken: number) => { return getFullDisplayBalance(priceToken * tokenRate.rateBNB) }, [tokenRate], ) useEffect(() => { const fetchTokenSwapRate = async () => { try { const result = await getTokenSwapRate(token) const { data: { data: { price = 0, price_BNB = 0 } } = { data: {} } } = result setTokenRate({ rateUSD: parseFloat(price), rateBNB: parseFloat(price_BNB), isRateLoaded: true, }) } catch { Logger.error('fetch token swap rate failed') setTokenRate({ rateBNB: 0, rateUSD: 0, isRateLoaded: true, }) } } fetchTokenSwapRate() }, [token, slowRefresh]) return { token, ...tokenRate, getPriceUSD, getPriceBNB } }