diff --git a/__tests__/components/Account/AccountDetails.test.tsx b/__tests__/components/Account/AccountDetails.test.tsx index 30194e75..5dc5e226 100644 --- a/__tests__/components/Account/AccountDetails.test.tsx +++ b/__tests__/components/Account/AccountDetails.test.tsx @@ -10,6 +10,8 @@ jest.mock('hooks/useHealthComputer', () => health: 0, })), ) +// AccountBalancesTable component has wallet provider dependency, so we mock it +jest.mock('components/Account/AccountBalancesTable', () => jest.fn(() => null)) const mockedUseCurrentAccount = useCurrentAccount as jest.Mock diff --git a/src/components/Account/AccountBalancesTable.tsx b/src/components/Account/AccountBalancesTable.tsx index acd6ef19..6e8df143 100644 --- a/src/components/Account/AccountBalancesTable.tsx +++ b/src/components/Account/AccountBalancesTable.tsx @@ -8,7 +8,10 @@ import { } from '@tanstack/react-table' import classNames from 'classnames' import React from 'react' +import { useLocation, useNavigate } from 'react-router-dom' +import AccountFund from 'components/Account/AccountFund' +import Button from 'components/Button' import DisplayCurrency from 'components/DisplayCurrency' import { FormattedNumber } from 'components/FormattedNumber' import { SortAsc, SortDesc, SortNone } from 'components/Icons' @@ -16,14 +19,17 @@ import Text from 'components/Text' import { ASSETS } from 'constants/assets' import { DEFAULT_SETTINGS } from 'constants/defaultSettings' import { DISPLAY_CURRENCY_KEY } from 'constants/localStore' +import useCurrentAccount from 'hooks/useCurrentAccount' import useLocalStorage from 'hooks/useLocalStorage' import usePrices from 'hooks/usePrices' +import useStore from 'store' import { BNCoin } from 'types/classes/BNCoin' import { byDenom } from 'utils/array' import { getAssetByDenom } from 'utils/assets' import { convertLiquidityRateToAPR, convertToDisplayAmount, demagnify } from 'utils/formatters' import { BN } from 'utils/helpers' import { convertAprToApy } from 'utils/parsers' +import { getPage, getRoute } from 'utils/route' interface Props { account: Account @@ -62,7 +68,10 @@ export default function AccountBalancesTable(props: Props) { DEFAULT_SETTINGS.displayCurrency, ) const { data: prices } = usePrices() - + const currentAccount = useCurrentAccount() + const navigate = useNavigate() + const { pathname } = useLocation() + const address = useStore((s) => s.address) const [sorting, setSorting] = React.useState([]) const balanceData = React.useMemo(() => { const accountDeposits = props.account?.deposits ?? [] @@ -172,6 +181,30 @@ export default function AccountBalancesTable(props: Props) { getSortedRowModel: getSortedRowModel(), }) + if (balanceData.length === 0) + return ( +
+
+ ) + return ( diff --git a/src/components/Account/AccountComposition.tsx b/src/components/Account/AccountComposition.tsx index b02736a6..e962ed54 100644 --- a/src/components/Account/AccountComposition.tsx +++ b/src/components/Account/AccountComposition.tsx @@ -85,7 +85,7 @@ export default function AccountComposition(props: Props) { ) return ( -
+
s.updatedAccount) - const { health } = useHealthComputer(props.account) + const [isExpanded, setIsExpanded] = useToggle() + const { health } = useHealthComputer(account) const { health: updatedHealth } = useHealthComputer(updatedAccount) const { data: prices } = usePrices() const accountBalanceValue = useMemo( - () => calculateAccountBalanceValue(updatedAccount ? updatedAccount : props.account, prices), - [updatedAccount, props.account, prices], + () => calculateAccountBalanceValue(updatedAccount ? updatedAccount : account, prices), + [updatedAccount, account, prices], ) const coin = BNCoin.fromDenomAndBigNumber(ORACLE_DENOM, accountBalanceValue) const leverage = useMemo( - () => calculateAccountLeverage(updatedAccount ? updatedAccount : props.account, prices), - [props.account, updatedAccount, prices], + () => calculateAccountLeverage(updatedAccount ? updatedAccount : account, prices), + [account, updatedAccount, prices], ) const { availableAssets: borrowAvailableAssets, accountBorrowedAssets } = useBorrowMarketAssetsTableData() @@ -63,76 +69,110 @@ function AccountDetails(props: Props) { const apr = useMemo( () => calculateAccountApr( - props.account, + account, accountBalanceValue, borrowAssetsData, lendingAssetsData, prices, ), - [props.account, accountBalanceValue, borrowAssetsData, lendingAssetsData, prices], + [account, accountBalanceValue, borrowAssetsData, lendingAssetsData, prices], ) return (
-
- } /> - - Health - -
- - {updatedHealth > 0 && health !== updatedHealth && ( - <> - updatedHealth ? 'text-loss' : 'text-success')} - /> - - +
setIsExpanded(!isExpanded)} + > +
+ {isExpanded ? : }
-
-
- - Leverage - - +
+ } /> + + Health + +
+ + {updatedHealth > 0 && health !== updatedHealth && ( + <> + updatedHealth ? 'text-loss' : 'text-success')} + /> + + + )} +
+
+
+ + Leverage + + + + +
+
+ + Net worth + + +
+
+ + APR + - +
-
- - Net worth - - -
-
- - APR - - +
+ + + Balances + +
) diff --git a/src/components/Account/AccountOverview.tsx b/src/components/Account/AccountOverview.tsx index 77d7491f..98796469 100644 --- a/src/components/Account/AccountOverview.tsx +++ b/src/components/Account/AccountOverview.tsx @@ -48,7 +48,7 @@ function Content() { {account.map((account: Account, index: number) => ( - Balances + Balances -1) { prevAssets[assetToUpdateIdx].amount = amount } - setChange({ [isAutoLendEnabled ? "lends" : "deposits"]: prevAssets }) + setChange({ [isAutoLendEnabled ? 'lends' : 'deposits']: prevAssets }) return prevAssets }) }, @@ -99,7 +99,7 @@ export default function FundAccount(props: Props) { ) useEffect(() => { - setChange({ [isAutoLendEnabled ? "lends" : "deposits"]: fundingAssets }) + setChange({ [isAutoLendEnabled ? 'lends' : 'deposits']: fundingAssets }) }, [isAutoLendEnabled, fundingAssets, setChange]) useEffect(() => { diff --git a/src/pages/_layout.tsx b/src/pages/_layout.tsx index 46b6e59b..dde3a7e3 100644 --- a/src/pages/_layout.tsx +++ b/src/pages/_layout.tsx @@ -48,7 +48,7 @@ export default function Layout({ children }: { children: React.ReactNode }) { className={classNames( 'lg:min-h-[calc(100vh-65px)]', 'lg:mt-[65px]', - 'min-h-screen gap-6 p-6 w-full', + 'min-h-screen gap-6 p-6 w-full relative', focusComponent || isMobile ? 'flex justify-center' : 'grid grid-cols-[auto_min-content] place-items-start',