* feat: added simulateTrade * MP-3330: added vault positions to the useUpdated Account * tidy: format * tidy: refactor * Health indicator change preview (#410) * fix: adjusted the AccountDetail width * feat: added health indicator updates * Update src/components/Account/AccountDetails.tsx Co-authored-by: Yusuf Seyrek <yusufseyrek@users.noreply.github.com> * fix: created a function for the back- and foregroundColors * fix: updated tailwind conf * fix: fixed the useHealthColorAndLabel function --------- Co-authored-by: Yusuf Seyrek <yusufseyrek@users.noreply.github.com> Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> * fix: added updatedAccount to AccountSummary (#414) Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> * fix: added a new way of calulating values to vaults * fix: refactored the displayCurrency * fix: fixed the subtitles, to not nest <p> tags * MP-3330: added comparison to the vault mechanics * fix: fixed tests * fix: updated the borrow slider percentage on vaults * fix: addressed change request * update displayValue stuff * fixed wrong display conversions * fix: fixed the display price and renamed getDepositsAndLendsAfterCoinSpent * fix test and update DisplayCurrency * tidy: refactor * tidy: rename method --------- Co-authored-by: Yusuf Seyrek <yusufseyrek@users.noreply.github.com> Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com>
76 lines
2.2 KiB
TypeScript
76 lines
2.2 KiB
TypeScript
import classNames from 'classnames'
|
|
import { useMemo } from 'react'
|
|
|
|
import { FormattedNumber } from 'components/FormattedNumber'
|
|
import { DEFAULT_SETTINGS } from 'constants/defaultSettings'
|
|
import { DISPLAY_CURRENCY_KEY } from 'constants/localStore'
|
|
import useLocalStorage from 'hooks/useLocalStorage'
|
|
import usePrices from 'hooks/usePrices'
|
|
import { BNCoin } from 'types/classes/BNCoin'
|
|
import { getDisplayCurrencies } from 'utils/assets'
|
|
import { getCoinValue } from 'utils/formatters'
|
|
import { BN } from 'utils/helpers'
|
|
import { ORACLE_DENOM } from 'constants/oracle'
|
|
|
|
interface Props {
|
|
coin: BNCoin
|
|
className?: string
|
|
isApproximation?: boolean
|
|
parentheses?: boolean
|
|
}
|
|
|
|
export default function DisplayCurrency(props: Props) {
|
|
const displayCurrencies = getDisplayCurrencies()
|
|
const [displayCurrency] = useLocalStorage<string>(
|
|
DISPLAY_CURRENCY_KEY,
|
|
DEFAULT_SETTINGS.displayCurrency,
|
|
)
|
|
const { data: prices } = usePrices()
|
|
|
|
const displayCurrencyAsset = useMemo(
|
|
() =>
|
|
displayCurrencies.find((asset) => asset.denom === displayCurrency) ?? displayCurrencies[0],
|
|
[displayCurrency, displayCurrencies],
|
|
)
|
|
|
|
const isUSD = displayCurrencyAsset.id === 'USD'
|
|
const prefix = isUSD
|
|
? `${props.isApproximation ? '~ ' : ''}$`
|
|
: `${props.isApproximation ? '~ ' : ''}`
|
|
const suffix = isUSD
|
|
? ''
|
|
: ` ${displayCurrencyAsset.symbol ? ` ${displayCurrencyAsset.symbol}` : ''}`
|
|
|
|
const amount = useMemo(() => {
|
|
const coinValue = getCoinValue(props.coin, prices)
|
|
|
|
if (displayCurrency === ORACLE_DENOM) return coinValue.toNumber()
|
|
|
|
const displayDecimals = displayCurrencyAsset.decimals
|
|
const displayPrice = getCoinValue(
|
|
BNCoin.fromDenomAndBigNumber(displayCurrency, BN(1).shiftedBy(displayDecimals)),
|
|
prices,
|
|
)
|
|
|
|
return coinValue.div(displayPrice).toNumber()
|
|
}, [displayCurrency, displayCurrencyAsset.decimals, prices, props.coin])
|
|
|
|
return (
|
|
<FormattedNumber
|
|
className={classNames(
|
|
props.className,
|
|
props.parentheses && 'before:content-["("] after:content-[")"]',
|
|
)}
|
|
amount={amount}
|
|
options={{
|
|
minDecimals: isUSD ? 2 : 0,
|
|
maxDecimals: 2,
|
|
abbreviated: true,
|
|
prefix,
|
|
suffix,
|
|
}}
|
|
animate
|
|
/>
|
|
)
|
|
}
|