mars-v2-frontend/src/hooks/useDisplayCurrencyPrice.ts
2023-10-23 14:04:17 +02:00

55 lines
1.6 KiB
TypeScript

import { useCallback, useMemo } from 'react'
import { DEFAULT_SETTINGS } from 'constants/defaultSettings'
import { LocalStorageKeys } from 'constants/localStorageKeys'
import { BN_ZERO } from 'constants/math'
import useLocalStorage from 'hooks/useLocalStorage'
import usePrices from 'hooks/usePrices'
import { byDenom } from 'utils/array'
import { getDisplayCurrencies } from 'utils/assets'
import { BN } from 'utils/helpers'
function useDisplayCurrencyPrice() {
const { data: prices } = usePrices()
const displayCurrencies = getDisplayCurrencies()
const [displayCurrency] = useLocalStorage<string>(
LocalStorageKeys.DISPLAY_CURRENCY,
DEFAULT_SETTINGS.displayCurrency,
)
const displayCurrencyAsset = useMemo(
() =>
displayCurrencies.find((asset) => asset.denom === displayCurrency) ?? displayCurrencies[0],
[displayCurrency, displayCurrencies],
)
const getConversionRate = useCallback(
(denom: string) => {
const assetPrice = prices.find(byDenom(denom))
const displayCurrencyPrice = prices.find(byDenom(displayCurrency))
if (assetPrice && displayCurrencyPrice) {
return BN(assetPrice.amount).dividedBy(displayCurrencyPrice.amount)
}
return BN_ZERO
},
[prices, displayCurrency],
)
const convertAmount = useCallback(
(asset: Asset, amount: string | number | BigNumber) =>
getConversionRate(asset.denom)?.multipliedBy(BN(amount).shiftedBy(-asset.decimals)) ??
BN_ZERO,
[getConversionRate],
)
return {
getConversionRate,
convertAmount,
symbol: displayCurrencyAsset?.symbol,
}
}
export default useDisplayCurrencyPrice