import classNames from 'classnames' import { HTMLAttributes, useCallback, useMemo } from 'react' import Accordion from 'components/common/Accordion' import AccountBalancesTable from 'components/account/AccountBalancesTable' import AccountComposition from 'components/account/AccountComposition' import HealthBar from 'components/account/Health/HealthBar' import Card from 'components/common/Card' import DisplayCurrency from 'components/common/DisplayCurrency' import { FormattedNumber } from 'components/common/FormattedNumber' import { ArrowRight } from 'components/common/Icons' import Text from 'components/common/Text' import { DEFAULT_SETTINGS } from 'constants/defaultSettings' import { LocalStorageKeys } from 'constants/localStorageKeys' import { BN_ZERO } from 'constants/math' import { ORACLE_DENOM } from 'constants/oracle' import useAllAssets from 'hooks/assets/useAllAssets' import useLocalStorage from 'hooks/localStorage/useLocalStorage' import useBorrowMarketAssetsTableData from 'hooks/useBorrowMarketAssetsTableData' import useHealthComputer from 'hooks/useHealthComputer' import useLendingMarketAssetsTableData from 'hooks/useLendingMarketAssetsTableData' import usePrices from 'hooks/usePrices' import useStore from 'store' import { BNCoin } from 'types/classes/BNCoin' import { calculateAccountBalanceValue, calculateAccountLeverage } from 'utils/accounts' interface Props { account: Account isHls?: boolean } export default function AccountSummary(props: Props) { const [accountSummaryTabs, setAccountSummaryTabs] = useLocalStorage( LocalStorageKeys.ACCOUNT_SUMMARY_TABS, DEFAULT_SETTINGS.accountSummaryTabs, ) const { data: prices } = usePrices() const assets = useAllAssets() const updatedAccount = useStore((s) => s.updatedAccount) const accountBalance = useMemo( () => props.account ? calculateAccountBalanceValue(updatedAccount ?? props.account, prices, assets) : BN_ZERO, [props.account, updatedAccount, prices, assets], ) const { data } = useBorrowMarketAssetsTableData(false) const borrowAssetsData = useMemo(() => data?.allAssets || [], [data]) const { availableAssets: lendingAvailableAssets, accountLentAssets } = useLendingMarketAssetsTableData() const lendingAssetsData = useMemo( () => [...lendingAvailableAssets, ...accountLentAssets], [lendingAvailableAssets, accountLentAssets], ) const { health, healthFactor } = useHealthComputer(props.account) const { health: updatedHealth, healthFactor: updatedHealthFactor } = useHealthComputer(updatedAccount) const leverage = useMemo( () => (props.account ? calculateAccountLeverage(props.account, prices, assets) : BN_ZERO), [props.account, prices, assets], ) const updatedLeverage = useMemo(() => { if (!updatedAccount) return null const updatedLeverage = calculateAccountLeverage(updatedAccount, prices, assets) if (updatedLeverage.eq(leverage)) return null return updatedLeverage }, [updatedAccount, prices, assets, leverage]) const handleToggle = useCallback( (index: number) => { setAccountSummaryTabs(accountSummaryTabs.map((tab, i) => (i === index ? !tab : tab))) }, [accountSummaryTabs, setAccountSummaryTabs], ) if (!props.account) return null return (
{updatedLeverage && ( <> )} props.account ? ( ) : null, isOpen: accountSummaryTabs[0], toggleOpen: (index: number) => handleToggle(index), renderSubTitle: () => <>, }, { title: 'Balances', renderContent: () => props.account ? ( ) : null, isOpen: accountSummaryTabs[1], toggleOpen: (index: number) => handleToggle(index), renderSubTitle: () => <>, }, ]} allowMultipleOpen />
) } interface ItemProps extends HTMLAttributes { label: string classes?: string } function Item(props: ItemProps) { return (
{props.label}
{props.children}
) }