import BigNumber from 'bignumber.js' import classNames from 'classnames' import { useMemo } from 'react' import DisplayCurrency from 'components/DisplayCurrency' import { FormattedNumber } from 'components/FormattedNumber' import { ArrowRight } from 'components/Icons' import Text from 'components/Text' import { BN_ZERO } from 'constants/math' import { ORACLE_DENOM } from 'constants/oracle' import usePrices from 'hooks/usePrices' import { BNCoin } from 'types/classes/BNCoin' import { calculateAccountApr, calculateAccountBalanceValue, calculateAccountBorrowRate, calculateAccountPnL, getAccountPositionValues, } from 'utils/accounts' interface Props { account: Account change?: AccountChange } interface ItemProps { title: string current: BigNumber change: BigNumber className?: string isDecrease?: boolean isPercentage?: boolean } export default function AccountComposition(props: Props) { const { account, change } = props const { data: prices } = usePrices() const [depositsBalance, lendsBalance, debtsBalance] = useMemo( () => getAccountPositionValues(account, prices), [account, prices], ) const [depositsBalanceChange, lendsBalanceChange, debtsBalanceChange] = useMemo( () => (change ? getAccountPositionValues(change, prices) : [BN_ZERO, BN_ZERO, BN_ZERO]), [change, prices], ) const totalBalance = useMemo( () => calculateAccountBalanceValue(account, prices), [account, prices], ) const totalBalanceChange = useMemo( () => (change ? calculateAccountBalanceValue(change, prices) : BN_ZERO), [change, prices], ) const balance = depositsBalance.plus(lendsBalance) const balanceChange = depositsBalanceChange.plus(lendsBalanceChange) const apr = calculateAccountApr(account, prices) const aprChange = change ? calculateAccountPnL(change, prices) : BN_ZERO const borrowRate = calculateAccountBorrowRate(account, prices) const borrowRateChange = change ? calculateAccountPnL(change, prices) : BN_ZERO return (