From 39d7ff5c61ec3bdbf3ebe28b68b469d7791c5b37 Mon Sep 17 00:00:00 2001 From: Daniel Schiavini Date: Wed, 3 Dec 2025 11:01:52 +0100 Subject: [PATCH 1/8] refactor: move lend market pages together --- .../components/InpChipVaultShareUsdRate.tsx | 2 +- apps/main/src/lend/components/InpToken.tsx | 2 +- .../src/lend/components/InpTokenBorrow.tsx | 2 +- .../src/lend/components/InpTokenRemove.tsx | 2 +- .../PageLendMarket/LendMarketPage.tsx | 1 + .../LoanBorrowMore/components/DetailInfo.tsx | 0 .../components/DetailInfoLeverage.tsx | 2 +- .../LoanBorrowMore/index.tsx | 14 +++---- .../LoanBorrowMore/types.ts | 5 +-- .../LoanBorrowMore/utils.ts | 4 +- .../LoanCollateralAdd/index.tsx | 6 +-- .../LoanCollateralAdd/types.ts | 2 +- .../LoanCollateralRemove/index.tsx | 8 ++-- .../LoanCollateralRemove/types.ts | 4 +- .../LoanCreatePage.tsx} | 2 +- .../LoanCreateTabs.tsx | 6 +-- .../LoanFormCreate/LoanCreateForm.tsx} | 11 ++---- .../LoanFormCreate/components/DetailInfo.tsx | 6 +-- .../components/DetailInfoLeverage.tsx | 4 +- .../components/DetailInfoNonLeverage.tsx | 2 +- .../LoanRepay/components/DetailInfo.tsx | 6 +-- .../LoanRepay/index.tsx | 12 +++--- .../LoanRepay/types.ts | 5 +-- .../LoanRepay/utils.ts | 4 +- .../LoanSelfLiquidation/index.tsx | 4 +- .../LoanSelfLiquidation/types.ts | 3 +- .../ManageLoanPage.tsx} | 13 +------ .../ManageLoanTabs.tsx | 10 ++--- .../types.ts | 12 +++++- .../utils.ts | 26 +++++++++++-- .../lend/components/PageLoanManage/types.ts | 27 ------------- .../lend/components/PageLoanManage/utils.ts | 20 ---------- .../components/PageVault/VaultClaim/types.ts | 2 +- .../components/PageVault/VaultClaim/utils.ts | 2 +- .../PageVault/VaultDepositMint/index.tsx | 2 +- .../PageVault/VaultDepositMint/types.ts | 2 +- .../PageVault/VaultDepositMint/utils.ts | 2 +- .../components/PageVault/VaultStake/index.tsx | 2 +- .../components/PageVault/VaultStake/types.ts | 2 +- .../components/PageVault/VaultStake/utils.ts | 2 +- .../PageVault/VaultUnstake/index.tsx | 2 +- .../PageVault/VaultUnstake/types.ts | 2 +- .../PageVault/VaultUnstake/utils.ts | 2 +- .../PageVault/VaultWithdrawRedeem/index.tsx | 2 +- .../PageVault/VaultWithdrawRedeem/types.ts | 2 +- .../components/{PageLoanManage => }/styles.ts | 0 .../lend/store/createLoanBorrowMoreSlice.ts | 8 ++-- .../store/createLoanCollateralAddSlice.ts | 6 +-- .../store/createLoanCollateralRemoveSlice.ts | 6 +-- .../src/lend/store/createLoanCreateSlice.ts | 22 ++++++----- .../src/lend/store/createLoanRepaySlice.ts | 8 ++-- .../store/createLoanSelfLiquidationSlice.ts | 6 +-- .../src/lend/store/createVaultClaimSlice.ts | 2 +- .../lend/store/createVaultDepositMintSlice.ts | 4 +- .../src/lend/store/createVaultStakeSlice.ts | 4 +- .../src/lend/store/createVaultUnstakeSlice.ts | 4 +- .../store/createVaultWithdrawRedeemSlice.ts | 4 +- apps/main/src/lend/types/lend.types.ts | 9 +++++ apps/main/src/routes/lend.routes.tsx | 38 +++++-------------- tests/cypress/support/routes.ts | 7 +++- 60 files changed, 173 insertions(+), 208 deletions(-) create mode 100644 apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanBorrowMore/components/DetailInfo.tsx (100%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanBorrowMore/components/DetailInfoLeverage.tsx (98%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanBorrowMore/index.tsx (97%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanBorrowMore/types.ts (67%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanBorrowMore/utils.ts (92%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanCollateralAdd/index.tsx (98%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanCollateralAdd/types.ts (69%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanCollateralRemove/index.tsx (98%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanCollateralRemove/types.ts (56%) rename apps/main/src/lend/components/{PageLoanCreate/Page.tsx => PageLendMarket/LoanCreatePage.tsx} (98%) rename apps/main/src/lend/components/{PageLoanCreate => PageLendMarket}/LoanCreateTabs.tsx (91%) rename apps/main/src/lend/components/{PageLoanCreate/LoanFormCreate/index.tsx => PageLendMarket/LoanFormCreate/LoanCreateForm.tsx} (98%) rename apps/main/src/lend/components/{PageLoanCreate => PageLendMarket}/LoanFormCreate/components/DetailInfo.tsx (89%) rename apps/main/src/lend/components/{PageLoanCreate => PageLendMarket}/LoanFormCreate/components/DetailInfoLeverage.tsx (98%) rename apps/main/src/lend/components/{PageLoanCreate => PageLendMarket}/LoanFormCreate/components/DetailInfoNonLeverage.tsx (98%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanRepay/components/DetailInfo.tsx (96%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanRepay/index.tsx (98%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanRepay/types.ts (81%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanRepay/utils.ts (97%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanSelfLiquidation/index.tsx (98%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/LoanSelfLiquidation/types.ts (55%) rename apps/main/src/lend/components/{PageLoanManage/Page.tsx => PageLendMarket/ManageLoanPage.tsx} (94%) rename apps/main/src/lend/components/{PageLoanManage => PageLendMarket}/ManageLoanTabs.tsx (93%) rename apps/main/src/lend/components/{PageLoanCreate => PageLendMarket}/types.ts (86%) rename apps/main/src/lend/components/{PageLoanCreate => PageLendMarket}/utils.ts (69%) delete mode 100644 apps/main/src/lend/components/PageLoanManage/types.ts delete mode 100644 apps/main/src/lend/components/PageLoanManage/utils.ts rename apps/main/src/lend/components/{PageLoanManage => }/styles.ts (100%) diff --git a/apps/main/src/lend/components/InpChipVaultShareUsdRate.tsx b/apps/main/src/lend/components/InpChipVaultShareUsdRate.tsx index 4532b0843b..41122fac41 100644 --- a/apps/main/src/lend/components/InpChipVaultShareUsdRate.tsx +++ b/apps/main/src/lend/components/InpChipVaultShareUsdRate.tsx @@ -1,4 +1,4 @@ -import { StyledInpChip } from '@/lend/components/PageLoanManage/styles' +import { StyledInpChip } from '@/lend/components/styles' import useVaultShares from '@/lend/hooks/useVaultShares' import { ChainId } from '@/lend/types/lend.types' import Box from '@ui/Box' diff --git a/apps/main/src/lend/components/InpToken.tsx b/apps/main/src/lend/components/InpToken.tsx index ed7aac3c16..8133727650 100644 --- a/apps/main/src/lend/components/InpToken.tsx +++ b/apps/main/src/lend/components/InpToken.tsx @@ -1,6 +1,6 @@ import { useCallback } from 'react' import InpChipUsdRate from '@/lend/components/InpChipUsdRate' -import { StyledInpChip } from '@/lend/components/PageLoanManage/styles' +import { StyledInpChip } from '@/lend/components/styles' import type { NetworkConfig } from '@/lend/types/lend.types' import Box from '@ui/Box' import InputProvider, { InputDebounced, InputMaxBtn } from '@ui/InputComp' diff --git a/apps/main/src/lend/components/InpTokenBorrow.tsx b/apps/main/src/lend/components/InpTokenBorrow.tsx index c413cfa824..d285d0e020 100644 --- a/apps/main/src/lend/components/InpTokenBorrow.tsx +++ b/apps/main/src/lend/components/InpTokenBorrow.tsx @@ -1,7 +1,7 @@ import { useCallback } from 'react' import InpChipUsdRate from '@/lend/components/InpChipUsdRate' -import { StyledInpChip } from '@/lend/components/PageLoanManage/styles' import { FieldsTitle } from '@/lend/components/SharedFormStyles/FieldsWrapper' +import { StyledInpChip } from '@/lend/components/styles' import type { NetworkConfig } from '@/lend/types/lend.types' import Box from '@ui/Box' import type { BoxProps } from '@ui/Box/types' diff --git a/apps/main/src/lend/components/InpTokenRemove.tsx b/apps/main/src/lend/components/InpTokenRemove.tsx index 9fe82ecd58..cff03d2140 100644 --- a/apps/main/src/lend/components/InpTokenRemove.tsx +++ b/apps/main/src/lend/components/InpTokenRemove.tsx @@ -1,7 +1,7 @@ import { useCallback } from 'react' import InpChipUsdRate from '@/lend/components/InpChipUsdRate' -import { StyledInpChip } from '@/lend/components/PageLoanManage/styles' import { FieldsTitle } from '@/lend/components/SharedFormStyles/FieldsWrapper' +import { StyledInpChip } from '@/lend/components/styles' import type { NetworkConfig } from '@/lend/types/lend.types' import Box from '@ui/Box' import type { BoxProps } from '@ui/Box/types' diff --git a/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx b/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx new file mode 100644 index 0000000000..63d56725c8 --- /dev/null +++ b/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx @@ -0,0 +1 @@ +export const LendMarketPage = () => null diff --git a/apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/components/DetailInfo.tsx b/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/components/DetailInfo.tsx similarity index 100% rename from apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/components/DetailInfo.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/components/DetailInfo.tsx diff --git a/apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/components/DetailInfoLeverage.tsx b/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/components/DetailInfoLeverage.tsx similarity index 98% rename from apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/components/DetailInfoLeverage.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/components/DetailInfoLeverage.tsx index e675cee7fc..ddca91556c 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/components/DetailInfoLeverage.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/components/DetailInfoLeverage.tsx @@ -7,7 +7,7 @@ import DetailInfoLiqRange from '@/lend/components/DetailInfoLiqRange' import DetailInfoPriceImpact from '@/lend/components/DetailInfoPriceImpact' import DetailInfoRate from '@/lend/components/DetailInfoRate' import DetailInfoSlippageTolerance from '@/lend/components/DetailInfoSlippageTolerance' -import { _parseValues } from '@/lend/components/PageLoanManage/LoanBorrowMore/utils' +import { _parseValues } from '@/lend/components/PageLendMarket/LoanBorrowMore/utils' import networks from '@/lend/networks' import useStore from '@/lend/store/useStore' import { PageContentProps } from '@/lend/types/lend.types' diff --git a/apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/index.tsx b/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/index.tsx similarity index 97% rename from apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/index.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/index.tsx index a0b2b5e301..c4d1bbc92a 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/index.tsx @@ -6,13 +6,13 @@ import DialogFormWarning from '@/lend/components/DialogFormWarning' import InpToken from '@/lend/components/InpToken' import InpTokenBorrow from '@/lend/components/InpTokenBorrow' import LoanFormConnect from '@/lend/components/LoanFormConnect' -import DetailInfo from '@/lend/components/PageLoanManage/LoanBorrowMore/components/DetailInfo' -import DetailInfoLeverage from '@/lend/components/PageLoanManage/LoanBorrowMore/components/DetailInfoLeverage' -import type { FormStatus, FormValues, StepKey } from '@/lend/components/PageLoanManage/LoanBorrowMore/types' -import { _parseValues, DEFAULT_FORM_VALUES } from '@/lend/components/PageLoanManage/LoanBorrowMore/utils' -import { StyledDetailInfoWrapper } from '@/lend/components/PageLoanManage/styles' -import type { FormEstGas } from '@/lend/components/PageLoanManage/types' -import { DEFAULT_CONFIRM_WARNING } from '@/lend/components/PageLoanManage/utils' +import DetailInfo from '@/lend/components/PageLendMarket/LoanBorrowMore/components/DetailInfo' +import DetailInfoLeverage from '@/lend/components/PageLendMarket/LoanBorrowMore/components/DetailInfoLeverage' +import type { FormStatus, FormValues, StepKey } from '@/lend/components/PageLendMarket/LoanBorrowMore/types' +import { _parseValues, DEFAULT_FORM_VALUES } from '@/lend/components/PageLendMarket/LoanBorrowMore/utils' +import type { FormEstGas } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_CONFIRM_WARNING } from '@/lend/components/PageLendMarket/utils' +import { StyledDetailInfoWrapper } from '@/lend/components/styles' import { NOFITY_MESSAGE } from '@/lend/constants' import { useUserLoanDetails } from '@/lend/hooks/useUserLoanDetails' import { helpers } from '@/lend/lib/apiLending' diff --git a/apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/types.ts b/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/types.ts similarity index 67% rename from apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/types.ts rename to apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/types.ts index 6f79f9ecb5..8e788dbb39 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/types.ts +++ b/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/types.ts @@ -1,6 +1,5 @@ -import type { InpError } from '@/lend/components/PageLoanCreate/types' -import type { FormDetailInfo, FormStatus as Fs } from '@/lend/components/PageLoanManage/types' -import { ExpectedCollateral } from '@/lend/types/lend.types' +import type { FormDetailInfo, InpError } from '@/lend/components/PageLendMarket/types' +import { ExpectedCollateral, type FormStatus as Fs } from '@/lend/types/lend.types' export type FormValues = { userCollateral: string diff --git a/apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/utils.ts b/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/utils.ts similarity index 92% rename from apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/utils.ts rename to apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/utils.ts index f03bb8670b..82132d2db7 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/utils.ts +++ b/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/utils.ts @@ -1,5 +1,5 @@ -import { FormStatus, FormValues } from '@/lend/components/PageLoanManage/LoanBorrowMore/types' -import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLoanManage/utils' +import { FormStatus, FormValues } from '@/lend/components/PageLendMarket/LoanBorrowMore/types' +import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLendMarket/utils' import { OneWayMarketTemplate } from '@/lend/types/lend.types' import { _parseStepTokensList } from '@/lend/utils/helpers' diff --git a/apps/main/src/lend/components/PageLoanManage/LoanCollateralAdd/index.tsx b/apps/main/src/lend/components/PageLendMarket/LoanCollateralAdd/index.tsx similarity index 98% rename from apps/main/src/lend/components/PageLoanManage/LoanCollateralAdd/index.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanCollateralAdd/index.tsx index eea70678a7..d48ae46779 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanCollateralAdd/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanCollateralAdd/index.tsx @@ -7,9 +7,9 @@ import DetailInfoHealth from '@/lend/components/DetailInfoHealth' import DetailInfoLiqRange from '@/lend/components/DetailInfoLiqRange' import InpToken from '@/lend/components/InpToken' import LoanFormConnect from '@/lend/components/LoanFormConnect' -import type { FormStatus, FormValues, StepKey } from '@/lend/components/PageLoanManage/LoanCollateralAdd/types' -import { StyledDetailInfoWrapper } from '@/lend/components/PageLoanManage/styles' -import type { FormEstGas } from '@/lend/components/PageLoanManage/types' +import type { FormStatus, FormValues, StepKey } from '@/lend/components/PageLendMarket/LoanCollateralAdd/types' +import type { FormEstGas } from '@/lend/components/PageLendMarket/types' +import { StyledDetailInfoWrapper } from '@/lend/components/styles' import { NOFITY_MESSAGE } from '@/lend/constants' import { useUserLoanDetails } from '@/lend/hooks/useUserLoanDetails' import { helpers } from '@/lend/lib/apiLending' diff --git a/apps/main/src/lend/components/PageLoanManage/LoanCollateralAdd/types.ts b/apps/main/src/lend/components/PageLendMarket/LoanCollateralAdd/types.ts similarity index 69% rename from apps/main/src/lend/components/PageLoanManage/LoanCollateralAdd/types.ts rename to apps/main/src/lend/components/PageLendMarket/LoanCollateralAdd/types.ts index de9878c137..d280644e35 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanCollateralAdd/types.ts +++ b/apps/main/src/lend/components/PageLendMarket/LoanCollateralAdd/types.ts @@ -1,4 +1,4 @@ -import type { FormStatus as Fs } from '@/lend/components/PageLoanManage/types' +import type { FormStatus as Fs } from '@/lend/types/lend.types' export type FormValues = { collateral: string diff --git a/apps/main/src/lend/components/PageLoanManage/LoanCollateralRemove/index.tsx b/apps/main/src/lend/components/PageLendMarket/LoanCollateralRemove/index.tsx similarity index 98% rename from apps/main/src/lend/components/PageLoanManage/LoanCollateralRemove/index.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanCollateralRemove/index.tsx index 0a2e54f410..b9a6b7c2f4 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanCollateralRemove/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanCollateralRemove/index.tsx @@ -8,10 +8,10 @@ import DetailInfoLiqRange from '@/lend/components/DetailInfoLiqRange' import DialogFormWarning from '@/lend/components/DialogFormWarning' import InpTokenRemove from '@/lend/components/InpTokenRemove' import LoanFormConnect from '@/lend/components/LoanFormConnect' -import type { FormStatus, FormValues, StepKey } from '@/lend/components/PageLoanManage/LoanCollateralRemove/types' -import { StyledDetailInfoWrapper } from '@/lend/components/PageLoanManage/styles' -import type { FormEstGas } from '@/lend/components/PageLoanManage/types' -import { DEFAULT_CONFIRM_WARNING } from '@/lend/components/PageLoanManage/utils' +import type { FormStatus, FormValues, StepKey } from '@/lend/components/PageLendMarket/LoanCollateralRemove/types' +import type { FormEstGas } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_CONFIRM_WARNING } from '@/lend/components/PageLendMarket/utils' +import { StyledDetailInfoWrapper } from '@/lend/components/styles' import { NOFITY_MESSAGE } from '@/lend/constants' import { useUserLoanDetails } from '@/lend/hooks/useUserLoanDetails' import { helpers } from '@/lend/lib/apiLending' diff --git a/apps/main/src/lend/components/PageLoanManage/LoanCollateralRemove/types.ts b/apps/main/src/lend/components/PageLendMarket/LoanCollateralRemove/types.ts similarity index 56% rename from apps/main/src/lend/components/PageLoanManage/LoanCollateralRemove/types.ts rename to apps/main/src/lend/components/PageLendMarket/LoanCollateralRemove/types.ts index 20d8e5ec05..1e3e373fe5 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanCollateralRemove/types.ts +++ b/apps/main/src/lend/components/PageLendMarket/LoanCollateralRemove/types.ts @@ -1,5 +1,5 @@ -import type { InpError } from '@/lend/components/PageLoanCreate/types' -import type { FormStatus as Fs } from '@/lend/components/PageLoanManage/types' +import type { InpError } from '@/lend/components/PageLendMarket/types' +import type { FormStatus as Fs } from '@/lend/types/lend.types' export type FormValues = { collateral: string diff --git a/apps/main/src/lend/components/PageLoanCreate/Page.tsx b/apps/main/src/lend/components/PageLendMarket/LoanCreatePage.tsx similarity index 98% rename from apps/main/src/lend/components/PageLoanCreate/Page.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanCreatePage.tsx index 64d881c17b..374ce5d415 100644 --- a/apps/main/src/lend/components/PageLoanCreate/Page.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanCreatePage.tsx @@ -3,7 +3,7 @@ import type { Address } from 'viem' import CampaignRewardsBanner from '@/lend/components/CampaignRewardsBanner' import { MarketInformationComp } from '@/lend/components/MarketInformationComp' import { MarketInformationTabs } from '@/lend/components/MarketInformationTabs' -import { LoanCreateTabs } from '@/lend/components/PageLoanCreate/LoanCreateTabs' +import { LoanCreateTabs } from '@/lend/components/PageLendMarket/LoanCreateTabs' import { useOneWayMarket } from '@/lend/entities/chain' import { useLendPageTitle } from '@/lend/hooks/useLendPageTitle' import { useMarketDetails } from '@/lend/hooks/useMarketDetails' diff --git a/apps/main/src/lend/components/PageLoanCreate/LoanCreateTabs.tsx b/apps/main/src/lend/components/PageLendMarket/LoanCreateTabs.tsx similarity index 91% rename from apps/main/src/lend/components/PageLoanCreate/LoanCreateTabs.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanCreateTabs.tsx index c9c3a66383..cb8d28c1fc 100644 --- a/apps/main/src/lend/components/PageLoanCreate/LoanCreateTabs.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanCreateTabs.tsx @@ -1,7 +1,7 @@ import { useCallback } from 'react' -import LoanFormCreate from '@/lend/components/PageLoanCreate/LoanFormCreate' -import type { FormValues } from '@/lend/components/PageLoanCreate/types' -import { DEFAULT_FORM_VALUES } from '@/lend/components/PageLoanCreate/utils' +import LoanFormCreate from '@/lend/components/PageLendMarket/LoanFormCreate/LoanCreate' +import type { FormValues } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_FORM_VALUES } from '@/lend/components/PageLendMarket/utils' import networks from '@/lend/networks' import useStore from '@/lend/store/useStore' import { type MarketUrlParams, type PageContentProps } from '@/lend/types/lend.types' diff --git a/apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/index.tsx b/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/LoanCreateForm.tsx similarity index 98% rename from apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/index.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanFormCreate/LoanCreateForm.tsx index f9f4426a09..7ad97bbb80 100644 --- a/apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/LoanCreateForm.tsx @@ -5,10 +5,9 @@ import DialogFormWarning from '@/lend/components/DialogFormWarning' import InpToken from '@/lend/components/InpToken' import InpTokenBorrow from '@/lend/components/InpTokenBorrow' import LoanFormConnect from '@/lend/components/LoanFormConnect' -import DetailInfo from '@/lend/components/PageLoanCreate/LoanFormCreate/components/DetailInfo' -import type { FormEstGas, FormStatus, FormValues, StepKey } from '@/lend/components/PageLoanCreate/types' -import { _parseValue, DEFAULT_FORM_VALUES } from '@/lend/components/PageLoanCreate/utils' -import { DEFAULT_CONFIRM_WARNING } from '@/lend/components/PageLoanManage/utils' +import DetailInfo from '@/lend/components/PageLendMarket/LoanFormCreate/components/DetailInfo' +import type { FormEstGas, FormStatus, FormValues, StepKey } from '@/lend/components/PageLendMarket/types' +import { _parseValue, DEFAULT_CONFIRM_WARNING, DEFAULT_FORM_VALUES } from '@/lend/components/PageLendMarket/utils' import { FieldsTitle, FieldsWrapper } from '@/lend/components/SharedFormStyles/FieldsWrapper' import { NOFITY_MESSAGE } from '@/lend/constants' import useMarketAlert from '@/lend/hooks/useMarketAlert' @@ -39,7 +38,7 @@ import usePageVisibleInterval from '@ui-kit/hooks/usePageVisibleInterval' import { t } from '@ui-kit/lib/i18n' import { REFRESH_INTERVAL } from '@ui-kit/lib/model' -const LoanCreate = ({ +export const LoanCreateForm = ({ isLeverage = false, ...pageProps }: PageContentProps & { isLeverage?: boolean; params: MarketUrlParams }) => { @@ -446,5 +445,3 @@ const LoanCreate = ({ ) } - -export default LoanCreate diff --git a/apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/components/DetailInfo.tsx b/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/components/DetailInfo.tsx similarity index 89% rename from apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/components/DetailInfo.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanFormCreate/components/DetailInfo.tsx index df124c19b5..66d740c518 100644 --- a/apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/components/DetailInfo.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/components/DetailInfo.tsx @@ -1,7 +1,7 @@ import { useMemo } from 'react' -import DetailInfoLeverage from '@/lend/components/PageLoanCreate/LoanFormCreate/components/DetailInfoLeverage' -import DetailInfoNonLeverage from '@/lend/components/PageLoanCreate/LoanFormCreate/components/DetailInfoNonLeverage' -import type { DetailInfoCompAdditionalProps, DetailInfoCompProps } from '@/lend/components/PageLoanCreate/types' +import DetailInfoLeverage from '@/lend/components/PageLendMarket/LoanFormCreate/components/DetailInfoLeverage' +import DetailInfoNonLeverage from '@/lend/components/PageLendMarket/LoanFormCreate/components/DetailInfoNonLeverage' +import type { DetailInfoCompAdditionalProps, DetailInfoCompProps } from '@/lend/components/PageLendMarket/types' import type { LiqRangeSliderIdx } from '@/lend/store/types' import useStore from '@/lend/store/useStore' import { PageContentProps } from '@/lend/types/lend.types' diff --git a/apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/components/DetailInfoLeverage.tsx b/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/components/DetailInfoLeverage.tsx similarity index 98% rename from apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/components/DetailInfoLeverage.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanFormCreate/components/DetailInfoLeverage.tsx index 2991dc0411..0b49d0e904 100644 --- a/apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/components/DetailInfoLeverage.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/components/DetailInfoLeverage.tsx @@ -9,8 +9,8 @@ import DetailInfoN from '@/lend/components/DetailInfoN' import DetailInfoPriceImpact from '@/lend/components/DetailInfoPriceImpact' import DetailInfoRate from '@/lend/components/DetailInfoRate' import DetailInfoSlippageTolerance from '@/lend/components/DetailInfoSlippageTolerance' -import type { DetailInfoCompProps, DetailInfoCompAdditionalProps } from '@/lend/components/PageLoanCreate/types' -import { _parseValue } from '@/lend/components/PageLoanCreate/utils' +import type { DetailInfoCompProps, DetailInfoCompAdditionalProps } from '@/lend/components/PageLendMarket/types' +import { _parseValue } from '@/lend/components/PageLendMarket/utils' import networks from '@/lend/networks' import useStore from '@/lend/store/useStore' import { PageContentProps } from '@/lend/types/lend.types' diff --git a/apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/components/DetailInfoNonLeverage.tsx b/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/components/DetailInfoNonLeverage.tsx similarity index 98% rename from apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/components/DetailInfoNonLeverage.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanFormCreate/components/DetailInfoNonLeverage.tsx index 3517ad6206..ccf742b5f2 100644 --- a/apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/components/DetailInfoNonLeverage.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/components/DetailInfoNonLeverage.tsx @@ -4,7 +4,7 @@ import DetailInfoLiqRange from '@/lend/components/DetailInfoLiqRange' import DetailInfoLTV from '@/lend/components/DetailInfoLTV' import DetailInfoN from '@/lend/components/DetailInfoN' import DetailInfoRate from '@/lend/components/DetailInfoRate' -import type { DetailInfoCompProps, DetailInfoCompAdditionalProps } from '@/lend/components/PageLoanCreate/types' +import type { DetailInfoCompProps, DetailInfoCompAdditionalProps } from '@/lend/components/PageLendMarket/types' import useStore from '@/lend/store/useStore' import { PageContentProps } from '@/lend/types/lend.types' import { useUserProfileStore } from '@ui-kit/features/user-profile' diff --git a/apps/main/src/lend/components/PageLoanManage/LoanRepay/components/DetailInfo.tsx b/apps/main/src/lend/components/PageLendMarket/LoanRepay/components/DetailInfo.tsx similarity index 96% rename from apps/main/src/lend/components/PageLoanManage/LoanRepay/components/DetailInfo.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanRepay/components/DetailInfo.tsx index 47e39285a1..f31a57504c 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanRepay/components/DetailInfo.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanRepay/components/DetailInfo.tsx @@ -6,9 +6,9 @@ import DetailInfoLiqRange from '@/lend/components/DetailInfoLiqRange' import DetailInfoPriceImpact from '@/lend/components/DetailInfoPriceImpact' import DetailInfoRate from '@/lend/components/DetailInfoRate' import DetailInfoSlippageTolerance from '@/lend/components/DetailInfoSlippageTolerance' -import type { DetailProps, FormDetailInfoLeverage } from '@/lend/components/PageLoanManage/LoanRepay/types' -import { _parseValues } from '@/lend/components/PageLoanManage/LoanRepay/utils' -import type { FormDetailInfo } from '@/lend/components/PageLoanManage/types' +import type { DetailProps, FormDetailInfoLeverage } from '@/lend/components/PageLendMarket/LoanRepay/types' +import { _parseValues } from '@/lend/components/PageLendMarket/LoanRepay/utils' +import type { FormDetailInfo } from '@/lend/components/PageLendMarket/types' import networks from '@/lend/networks' import useStore from '@/lend/store/useStore' import { PageContentProps } from '@/lend/types/lend.types' diff --git a/apps/main/src/lend/components/PageLoanManage/LoanRepay/index.tsx b/apps/main/src/lend/components/PageLendMarket/LoanRepay/index.tsx similarity index 98% rename from apps/main/src/lend/components/PageLoanManage/LoanRepay/index.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanRepay/index.tsx index 8c4c51015e..0462e6575a 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanRepay/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanRepay/index.tsx @@ -5,12 +5,12 @@ import AlertNoLoanFound from '@/lend/components/AlertNoLoanFound' import DialogFormWarning from '@/lend/components/DialogFormWarning' import InpToken from '@/lend/components/InpToken' import LoanFormConnect from '@/lend/components/LoanFormConnect' -import DetailInfo from '@/lend/components/PageLoanManage/LoanRepay/components/DetailInfo' -import type { FormStatus, FormValues, StepKey } from '@/lend/components/PageLoanManage/LoanRepay/types' -import { _parseValues, DEFAULT_FORM_VALUES } from '@/lend/components/PageLoanManage/LoanRepay/utils' -import { StyledDetailInfoWrapper } from '@/lend/components/PageLoanManage/styles' -import type { FormEstGas } from '@/lend/components/PageLoanManage/types' -import { DEFAULT_CONFIRM_WARNING } from '@/lend/components/PageLoanManage/utils' +import DetailInfo from '@/lend/components/PageLendMarket/LoanRepay/components/DetailInfo' +import type { FormStatus, FormValues, StepKey } from '@/lend/components/PageLendMarket/LoanRepay/types' +import { _parseValues, DEFAULT_FORM_VALUES } from '@/lend/components/PageLendMarket/LoanRepay/utils' +import type { FormEstGas } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_CONFIRM_WARNING } from '@/lend/components/PageLendMarket/utils' +import { StyledDetailInfoWrapper } from '@/lend/components/styles' import { NOFITY_MESSAGE } from '@/lend/constants' import { useUserLoanDetails } from '@/lend/hooks/useUserLoanDetails' import { helpers } from '@/lend/lib/apiLending' diff --git a/apps/main/src/lend/components/PageLoanManage/LoanRepay/types.ts b/apps/main/src/lend/components/PageLendMarket/LoanRepay/types.ts similarity index 81% rename from apps/main/src/lend/components/PageLoanManage/LoanRepay/types.ts rename to apps/main/src/lend/components/PageLendMarket/LoanRepay/types.ts index f3da5c0bb5..713bfce186 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanRepay/types.ts +++ b/apps/main/src/lend/components/PageLendMarket/LoanRepay/types.ts @@ -1,7 +1,6 @@ import { Dispatch, SetStateAction } from 'react' -import type { InpError } from '@/lend/components/PageLoanCreate/types' -import type { FormDetailInfo, FormStatus as Fs } from '@/lend/components/PageLoanManage/types' -import { ExpectedBorrowed, PageContentProps } from '@/lend/types/lend.types' +import type { FormDetailInfo, InpError } from '@/lend/components/PageLendMarket/types' +import { ExpectedBorrowed, type FormStatus as Fs, PageContentProps } from '@/lend/types/lend.types' import type { HealthMode } from '@/llamalend/llamalend.types' import type { Step } from '@ui/Stepper/types' diff --git a/apps/main/src/lend/components/PageLoanManage/LoanRepay/utils.ts b/apps/main/src/lend/components/PageLendMarket/LoanRepay/utils.ts similarity index 97% rename from apps/main/src/lend/components/PageLoanManage/LoanRepay/utils.ts rename to apps/main/src/lend/components/PageLendMarket/LoanRepay/utils.ts index b728ac0d75..27acf22704 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanRepay/utils.ts +++ b/apps/main/src/lend/components/PageLendMarket/LoanRepay/utils.ts @@ -1,5 +1,5 @@ -import type { FormStatus, FormValues } from '@/lend/components/PageLoanManage/LoanRepay/types' -import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLoanManage/utils' +import type { FormStatus, FormValues } from '@/lend/components/PageLendMarket/LoanRepay/types' +import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLendMarket/utils' import { type OneWayMarketTemplate } from '@/lend/types/lend.types' export const DEFAULT_FORM_STATUS: FormStatus = { diff --git a/apps/main/src/lend/components/PageLoanManage/LoanSelfLiquidation/index.tsx b/apps/main/src/lend/components/PageLendMarket/LoanSelfLiquidation/index.tsx similarity index 98% rename from apps/main/src/lend/components/PageLoanManage/LoanSelfLiquidation/index.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanSelfLiquidation/index.tsx index 15efbecd39..da8e1e7b12 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanSelfLiquidation/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanSelfLiquidation/index.tsx @@ -8,8 +8,8 @@ import DetailInfoEstimateGas from '@/lend/components/DetailInfoEstimateGas' import DetailInfoRate from '@/lend/components/DetailInfoRate' import DetailInfoSlippageTolerance from '@/lend/components/DetailInfoSlippageTolerance' import LoanFormConnect from '@/lend/components/LoanFormConnect' -import type { FormStatus, StepKey } from '@/lend/components/PageLoanManage/LoanSelfLiquidation/types' -import type { FormEstGas } from '@/lend/components/PageLoanManage/types' +import type { FormStatus, StepKey } from '@/lend/components/PageLendMarket/LoanSelfLiquidation/types' +import type { FormEstGas } from '@/lend/components/PageLendMarket/types' import { NOFITY_MESSAGE } from '@/lend/constants' import { useUserLoanDetails } from '@/lend/hooks/useUserLoanDetails' import { helpers } from '@/lend/lib/apiLending' diff --git a/apps/main/src/lend/components/PageLoanManage/LoanSelfLiquidation/types.ts b/apps/main/src/lend/components/PageLendMarket/LoanSelfLiquidation/types.ts similarity index 55% rename from apps/main/src/lend/components/PageLoanManage/LoanSelfLiquidation/types.ts rename to apps/main/src/lend/components/PageLendMarket/LoanSelfLiquidation/types.ts index bbd963c6de..099688142e 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanSelfLiquidation/types.ts +++ b/apps/main/src/lend/components/PageLendMarket/LoanSelfLiquidation/types.ts @@ -1,5 +1,4 @@ -import type { FormStatus as Fs } from '@/lend/components/PageLoanManage/types' -import { FormWarning } from '@/lend/types/lend.types' +import { type FormStatus as Fs, FormWarning } from '@/lend/types/lend.types' export type StepKey = 'APPROVAL' | 'SELF_LIQUIDATE' | '' diff --git a/apps/main/src/lend/components/PageLoanManage/Page.tsx b/apps/main/src/lend/components/PageLendMarket/ManageLoanPage.tsx similarity index 94% rename from apps/main/src/lend/components/PageLoanManage/Page.tsx rename to apps/main/src/lend/components/PageLendMarket/ManageLoanPage.tsx index b8d3ddf400..10b2e64191 100644 --- a/apps/main/src/lend/components/PageLoanManage/Page.tsx +++ b/apps/main/src/lend/components/PageLendMarket/ManageLoanPage.tsx @@ -3,8 +3,7 @@ import type { Address } from 'viem' import CampaignRewardsBanner from '@/lend/components/CampaignRewardsBanner' import { MarketInformationComp } from '@/lend/components/MarketInformationComp' import { MarketInformationTabs } from '@/lend/components/MarketInformationTabs' -import { ManageLoanTabs } from '@/lend/components/PageLoanManage/ManageLoanTabs' -import type { DetailInfoTypes } from '@/lend/components/PageLoanManage/types' +import { ManageLoanTabs } from '@/lend/components/PageLendMarket/ManageLoanTabs' import { useOneWayMarket } from '@/lend/entities/chain' import { useBorrowPositionDetails } from '@/lend/hooks/useBorrowPositionDetails' import { useLendPageTitle } from '@/lend/hooks/useLendPageTitle' @@ -36,7 +35,7 @@ import { SizesAndSpaces } from '@ui-kit/themes/design/1_sizes_spaces' const { Spacing } = SizesAndSpaces -const Page = () => { +export const ManageLoanPage = () => { const params = useParams() const { rMarket, rChainId } = parseMarketParams(params) const { llamaApi: api = null, connectState } = useConnection() @@ -88,12 +87,6 @@ const Page = () => { const isInSoftLiquidation = borrowPositionDetails.liquidationAlert.softLiquidation || borrowPositionDetails.liquidationAlert.hardLiquidation - // set tabs - const DETAIL_INFO_TYPES: { key: DetailInfoTypes; label: string }[] = [{ label: t`Market Details`, key: 'market' }] - if (signerAddress) { - DETAIL_INFO_TYPES.push({ label: t`Your Details`, key: 'user' }) - } - useEffect(() => { if (api && market && isPageVisible) { if (loanExists) setMarketsStateKey('marketDetailsView', 'user') @@ -192,5 +185,3 @@ const Page = () => { ) } - -export default Page diff --git a/apps/main/src/lend/components/PageLoanManage/ManageLoanTabs.tsx b/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx similarity index 93% rename from apps/main/src/lend/components/PageLoanManage/ManageLoanTabs.tsx rename to apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx index a87328b466..7317e941ae 100644 --- a/apps/main/src/lend/components/PageLoanManage/ManageLoanTabs.tsx +++ b/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx @@ -1,11 +1,11 @@ -import LoanBorrowMore, { LoanBorrowMoreWrapped } from '@/lend/components/PageLoanManage/LoanBorrowMore' -import LoanCollateralAdd, { LoanAddCollateralTab } from '@/lend/components/PageLoanManage/LoanCollateralAdd' -import LoanCollateralRemove, { LoanRemoveCollateralTab } from '@/lend/components/PageLoanManage/LoanCollateralRemove' +import LoanBorrowMore, { LoanBorrowMoreWrapped } from '@/lend/components/PageLendMarket/LoanBorrowMore' +import LoanCollateralAdd, { LoanAddCollateralTab } from '@/lend/components/PageLendMarket/LoanCollateralAdd' +import LoanCollateralRemove, { LoanRemoveCollateralTab } from '@/lend/components/PageLendMarket/LoanCollateralRemove' import LoanRepay, { LoanRepayFromCollateralTab, LoanRepayFromWalletTab, -} from '@/lend/components/PageLoanManage/LoanRepay' -import LoanSelfLiquidation from '@/lend/components/PageLoanManage/LoanSelfLiquidation' +} from '@/lend/components/PageLendMarket/LoanRepay' +import LoanSelfLiquidation from '@/lend/components/PageLendMarket/LoanSelfLiquidation' import networks from '@/lend/networks' import { type MarketUrlParams, PageContentProps } from '@/lend/types/lend.types' import { useClosePositionTab } from '@/llamalend/features/manage-soft-liquidation/hooks/useClosePositionTab' diff --git a/apps/main/src/lend/components/PageLoanCreate/types.ts b/apps/main/src/lend/components/PageLendMarket/types.ts similarity index 86% rename from apps/main/src/lend/components/PageLoanCreate/types.ts rename to apps/main/src/lend/components/PageLendMarket/types.ts index 4293951e40..2d52908381 100644 --- a/apps/main/src/lend/components/PageLoanCreate/types.ts +++ b/apps/main/src/lend/components/PageLendMarket/types.ts @@ -1,10 +1,11 @@ import { Dispatch, SetStateAction } from 'react' -import type { FormStatus as Fs } from '@/lend/components/PageLoanManage/types' import type { LiqRangeSliderIdx } from '@/lend/store/types' import { DetailInfoLeverageResp, DetailInfoResp, ExpectedCollateral, + type FormStatus as Fs, + FutureRates, OneWayMarketTemplate, } from '@/lend/types/lend.types' import type { HealthMode } from '@/llamalend/llamalend.types' @@ -60,3 +61,12 @@ export type DetailInfoLeverage = DetailInfoLeverageResp & { loading: boolean error: string } +export type FormDetailInfo = { + healthFull: string + healthNotFull: string + futureRates: FutureRates | null + bands: [number, number] + prices: string[] + loading: boolean + error: string +} diff --git a/apps/main/src/lend/components/PageLoanCreate/utils.ts b/apps/main/src/lend/components/PageLendMarket/utils.ts similarity index 69% rename from apps/main/src/lend/components/PageLoanCreate/utils.ts rename to apps/main/src/lend/components/PageLendMarket/utils.ts index 8f212ae0dc..61e93d569d 100644 --- a/apps/main/src/lend/components/PageLoanCreate/utils.ts +++ b/apps/main/src/lend/components/PageLendMarket/utils.ts @@ -1,10 +1,18 @@ -import type { FormStatus, FormValues } from '@/lend/components/PageLoanCreate/types' -import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLoanManage/utils' -import { type OneWayMarketTemplate } from '@/lend/types/lend.types' +import type { FormEstGas, FormStatus, FormValues } from '@/lend/components/PageLendMarket/types' +import { type FormStatus, type OneWayMarketTemplate } from '@/lend/types/lend.types' import { _parseStepTokensList } from '@/lend/utils/helpers' export const DEFAULT_FORM_STATUS: FormStatus = { - ...FORM_STATUS, + isApproved: false, + isApprovedCompleted: false, + isComplete: false, + isInProgress: false, + error: '', + stepError: '', +} + +export const DEFAULT_CREATE_FORM_STATUS: FormStatus = { + ...DEFAULT_FORM_STATUS, warning: '', step: '', } @@ -50,3 +58,13 @@ export function _parseValue({ getStepTokensStr: _getStepTokensStr, } } + +export const DEFAULT_FORM_EST_GAS: FormEstGas = { + estimatedGas: 0, + loading: false, +} + +export const DEFAULT_CONFIRM_WARNING = { + isConfirming: false, + confirmedWarning: false, +} diff --git a/apps/main/src/lend/components/PageLoanManage/types.ts b/apps/main/src/lend/components/PageLoanManage/types.ts deleted file mode 100644 index a1a7aef085..0000000000 --- a/apps/main/src/lend/components/PageLoanManage/types.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { FutureRates } from '@/lend/types/lend.types' - -export type DetailInfoTypes = 'user' | 'market' - -export type FormStatus = { - isApproved: boolean - isApprovedCompleted: boolean - isComplete: boolean - isInProgress: boolean - error: string - stepError: string -} - -export type FormEstGas = { - estimatedGas: number - loading?: boolean -} - -export type FormDetailInfo = { - healthFull: string - healthNotFull: string - futureRates: FutureRates | null - bands: [number, number] - prices: string[] - loading: boolean - error: string -} diff --git a/apps/main/src/lend/components/PageLoanManage/utils.ts b/apps/main/src/lend/components/PageLoanManage/utils.ts deleted file mode 100644 index d86f786f30..0000000000 --- a/apps/main/src/lend/components/PageLoanManage/utils.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { FormEstGas, FormStatus } from '@/lend/components/PageLoanManage/types' - -export const DEFAULT_FORM_EST_GAS: FormEstGas = { - estimatedGas: 0, - loading: false, -} - -export const DEFAULT_FORM_STATUS: FormStatus = { - isApproved: false, - isApprovedCompleted: false, - isComplete: false, - isInProgress: false, - error: '', - stepError: '', -} - -export const DEFAULT_CONFIRM_WARNING = { - isConfirming: false, - confirmedWarning: false, -} diff --git a/apps/main/src/lend/components/PageVault/VaultClaim/types.ts b/apps/main/src/lend/components/PageVault/VaultClaim/types.ts index aa48862a2b..a6b63e02bd 100644 --- a/apps/main/src/lend/components/PageVault/VaultClaim/types.ts +++ b/apps/main/src/lend/components/PageVault/VaultClaim/types.ts @@ -1,4 +1,4 @@ -import type { FormStatus as Fs } from '@/lend/components/PageLoanManage/types' +import type { FormStatus as Fs } from '@/lend/types/lend.types' export type RewardType = 'crv' | 'rewards' export type StepKey = 'CLAIM_CRV' | 'CLAIM_REWARDS' | '' diff --git a/apps/main/src/lend/components/PageVault/VaultClaim/utils.ts b/apps/main/src/lend/components/PageVault/VaultClaim/utils.ts index e5963ec3b4..e0ffae62c5 100644 --- a/apps/main/src/lend/components/PageVault/VaultClaim/utils.ts +++ b/apps/main/src/lend/components/PageVault/VaultClaim/utils.ts @@ -1,4 +1,4 @@ -import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLoanManage/utils' +import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLendMarket/utils' import type { FormStatus } from '@/lend/components/PageVault/VaultClaim/types' export const DEFAULT_FORM_STATUS: FormStatus = { diff --git a/apps/main/src/lend/components/PageVault/VaultDepositMint/index.tsx b/apps/main/src/lend/components/PageVault/VaultDepositMint/index.tsx index 695a6f43b6..91e5a38942 100644 --- a/apps/main/src/lend/components/PageVault/VaultDepositMint/index.tsx +++ b/apps/main/src/lend/components/PageVault/VaultDepositMint/index.tsx @@ -4,8 +4,8 @@ import DetailInfoEstimateGas from '@/lend/components/DetailInfoEstimateGas' import DetailInfoRate from '@/lend/components/DetailInfoRate' import InpChipUsdRate from '@/lend/components/InpChipUsdRate' import LoanFormConnect from '@/lend/components/LoanFormConnect' -import { StyledDetailInfoWrapper, StyledInpChip } from '@/lend/components/PageLoanManage/styles' import type { FormStatus, FormValues, StepKey } from '@/lend/components/PageVault/VaultDepositMint/types' +import { StyledDetailInfoWrapper, StyledInpChip } from '@/lend/components/styles' import useMarketAlert from '@/lend/hooks/useMarketAlert' import { helpers } from '@/lend/lib/apiLending' import networks from '@/lend/networks' diff --git a/apps/main/src/lend/components/PageVault/VaultDepositMint/types.ts b/apps/main/src/lend/components/PageVault/VaultDepositMint/types.ts index c99114f43a..50ad49a3c0 100644 --- a/apps/main/src/lend/components/PageVault/VaultDepositMint/types.ts +++ b/apps/main/src/lend/components/PageVault/VaultDepositMint/types.ts @@ -1,4 +1,4 @@ -import type { FormStatus as Fs } from '@/lend/components/PageLoanManage/types' +import type { FormStatus as Fs } from '@/lend/types/lend.types' export type FormValues = { amount: string diff --git a/apps/main/src/lend/components/PageVault/VaultDepositMint/utils.ts b/apps/main/src/lend/components/PageVault/VaultDepositMint/utils.ts index 0c3eb0140e..ab7f21432a 100644 --- a/apps/main/src/lend/components/PageVault/VaultDepositMint/utils.ts +++ b/apps/main/src/lend/components/PageVault/VaultDepositMint/utils.ts @@ -1,4 +1,4 @@ -import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLoanManage/utils' +import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLendMarket/utils' import type { FormStatus, FormValues } from '@/lend/components/PageVault/VaultDepositMint/types' export const DEFAULT_FORM_STATUS: FormStatus = { diff --git a/apps/main/src/lend/components/PageVault/VaultStake/index.tsx b/apps/main/src/lend/components/PageVault/VaultStake/index.tsx index c88b03bf1c..8cf3ec390f 100644 --- a/apps/main/src/lend/components/PageVault/VaultStake/index.tsx +++ b/apps/main/src/lend/components/PageVault/VaultStake/index.tsx @@ -4,8 +4,8 @@ import DetailInfoCrvIncentives from '@/lend/components/DetailInfoCrvIncentives' import DetailInfoEstimateGas from '@/lend/components/DetailInfoEstimateGas' import InpChipVaultSharesUsdRate from '@/lend/components/InpChipVaultShareUsdRate' import LoanFormConnect from '@/lend/components/LoanFormConnect' -import { StyledDetailInfoWrapper, StyledInpChip } from '@/lend/components/PageLoanManage/styles' import type { FormStatus, FormValues, StepKey } from '@/lend/components/PageVault/VaultStake/types' +import { StyledDetailInfoWrapper, StyledInpChip } from '@/lend/components/styles' import { helpers } from '@/lend/lib/apiLending' import networks from '@/lend/networks' import useStore from '@/lend/store/useStore' diff --git a/apps/main/src/lend/components/PageVault/VaultStake/types.ts b/apps/main/src/lend/components/PageVault/VaultStake/types.ts index 5ceab8701f..64a09891ca 100644 --- a/apps/main/src/lend/components/PageVault/VaultStake/types.ts +++ b/apps/main/src/lend/components/PageVault/VaultStake/types.ts @@ -1,4 +1,4 @@ -import type { FormStatus as Fs } from '@/lend/components/PageLoanManage/types' +import type { FormStatus as Fs } from '@/lend/types/lend.types' export type FormValues = { amount: string diff --git a/apps/main/src/lend/components/PageVault/VaultStake/utils.ts b/apps/main/src/lend/components/PageVault/VaultStake/utils.ts index 77f5dbce8b..df2618b7ea 100644 --- a/apps/main/src/lend/components/PageVault/VaultStake/utils.ts +++ b/apps/main/src/lend/components/PageVault/VaultStake/utils.ts @@ -1,4 +1,4 @@ -import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLoanManage/utils' +import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLendMarket/utils' import type { FormStatus, FormValues } from '@/lend/components/PageVault/VaultStake/types' export const DEFAULT_FORM_STATUS: FormStatus = { diff --git a/apps/main/src/lend/components/PageVault/VaultUnstake/index.tsx b/apps/main/src/lend/components/PageVault/VaultUnstake/index.tsx index 4949ab340f..be55fed906 100644 --- a/apps/main/src/lend/components/PageVault/VaultUnstake/index.tsx +++ b/apps/main/src/lend/components/PageVault/VaultUnstake/index.tsx @@ -3,8 +3,8 @@ import AlertFormError from '@/lend/components/AlertFormError' import DetailInfoEstimateGas from '@/lend/components/DetailInfoEstimateGas' import InpChipVaultSharesUsdRate from '@/lend/components/InpChipVaultShareUsdRate' import LoanFormConnect from '@/lend/components/LoanFormConnect' -import { StyledDetailInfoWrapper, StyledInpChip } from '@/lend/components/PageLoanManage/styles' import type { FormStatus, FormValues, StepKey } from '@/lend/components/PageVault/VaultUnstake/types' +import { StyledDetailInfoWrapper, StyledInpChip } from '@/lend/components/styles' import { helpers } from '@/lend/lib/apiLending' import networks from '@/lend/networks' import useStore from '@/lend/store/useStore' diff --git a/apps/main/src/lend/components/PageVault/VaultUnstake/types.ts b/apps/main/src/lend/components/PageVault/VaultUnstake/types.ts index 350e2bce2f..291329bce2 100644 --- a/apps/main/src/lend/components/PageVault/VaultUnstake/types.ts +++ b/apps/main/src/lend/components/PageVault/VaultUnstake/types.ts @@ -1,4 +1,4 @@ -import type { FormStatus as Fs } from '@/lend/components/PageLoanManage/types' +import type { FormStatus as Fs } from '@/lend/types/lend.types' export type FormValues = { amount: string diff --git a/apps/main/src/lend/components/PageVault/VaultUnstake/utils.ts b/apps/main/src/lend/components/PageVault/VaultUnstake/utils.ts index 63a9e7d4ab..23351595d0 100644 --- a/apps/main/src/lend/components/PageVault/VaultUnstake/utils.ts +++ b/apps/main/src/lend/components/PageVault/VaultUnstake/utils.ts @@ -1,4 +1,4 @@ -import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLoanManage/utils' +import { DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLendMarket/utils' import type { FormStatus, FormValues } from '@/lend/components/PageVault/VaultUnstake/types' export const DEFAULT_FORM_STATUS: FormStatus = { diff --git a/apps/main/src/lend/components/PageVault/VaultWithdrawRedeem/index.tsx b/apps/main/src/lend/components/PageVault/VaultWithdrawRedeem/index.tsx index e4a2d01044..746696be34 100644 --- a/apps/main/src/lend/components/PageVault/VaultWithdrawRedeem/index.tsx +++ b/apps/main/src/lend/components/PageVault/VaultWithdrawRedeem/index.tsx @@ -3,8 +3,8 @@ import AlertFormError from '@/lend/components/AlertFormError' import DetailInfoEstimateGas from '@/lend/components/DetailInfoEstimateGas' import DetailInfoRate from '@/lend/components/DetailInfoRate' import LoanFormConnect from '@/lend/components/LoanFormConnect' -import { StyledDetailInfoWrapper, StyledInpChip } from '@/lend/components/PageLoanManage/styles' import type { FormStatus, FormValues, StepKey } from '@/lend/components/PageVault/VaultWithdrawRedeem/types' +import { StyledDetailInfoWrapper, StyledInpChip } from '@/lend/components/styles' import { helpers } from '@/lend/lib/apiLending' import networks from '@/lend/networks' import { _getMaxActiveKey } from '@/lend/store/createVaultDepositMintSlice' diff --git a/apps/main/src/lend/components/PageVault/VaultWithdrawRedeem/types.ts b/apps/main/src/lend/components/PageVault/VaultWithdrawRedeem/types.ts index 25cb886eb4..0dfa015fc3 100644 --- a/apps/main/src/lend/components/PageVault/VaultWithdrawRedeem/types.ts +++ b/apps/main/src/lend/components/PageVault/VaultWithdrawRedeem/types.ts @@ -1,4 +1,4 @@ -import type { FormStatus as Fs } from '@/lend/components/PageLoanManage/types' +import type { FormStatus as Fs } from '@/lend/types/lend.types' export type FormValues = { amount: string diff --git a/apps/main/src/lend/components/PageLoanManage/styles.ts b/apps/main/src/lend/components/styles.ts similarity index 100% rename from apps/main/src/lend/components/PageLoanManage/styles.ts rename to apps/main/src/lend/components/styles.ts diff --git a/apps/main/src/lend/store/createLoanBorrowMoreSlice.ts b/apps/main/src/lend/store/createLoanBorrowMoreSlice.ts index 6bbcecac08..b0ad5dcc79 100644 --- a/apps/main/src/lend/store/createLoanBorrowMoreSlice.ts +++ b/apps/main/src/lend/store/createLoanBorrowMoreSlice.ts @@ -4,14 +4,14 @@ import type { FormDetailInfoLeverage, FormStatus, FormValues, -} from '@/lend/components/PageLoanManage/LoanBorrowMore/types' +} from '@/lend/components/PageLendMarket/LoanBorrowMore/types' import { _parseValues, DEFAULT_FORM_STATUS, DEFAULT_FORM_VALUES, -} from '@/lend/components/PageLoanManage/LoanBorrowMore/utils' -import type { FormDetailInfo, FormEstGas } from '@/lend/components/PageLoanManage/types' -import { DEFAULT_FORM_EST_GAS } from '@/lend/components/PageLoanManage/utils' +} from '@/lend/components/PageLendMarket/LoanBorrowMore/utils' +import type { FormDetailInfo, FormEstGas } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_FORM_EST_GAS } from '@/lend/components/PageLendMarket/utils' import { invalidateMarketDetails } from '@/lend/entities/market-details' import { invalidateAllUserBorrowDetails } from '@/lend/entities/user-loan-details' import apiLending, { helpers } from '@/lend/lib/apiLending' diff --git a/apps/main/src/lend/store/createLoanCollateralAddSlice.ts b/apps/main/src/lend/store/createLoanCollateralAddSlice.ts index ab83e9aeaf..0c1fcdbef8 100644 --- a/apps/main/src/lend/store/createLoanCollateralAddSlice.ts +++ b/apps/main/src/lend/store/createLoanCollateralAddSlice.ts @@ -1,8 +1,8 @@ import lodash from 'lodash' import { StoreApi } from 'zustand' -import type { FormStatus, FormValues } from '@/lend/components/PageLoanManage/LoanCollateralAdd/types' -import type { FormDetailInfo, FormEstGas } from '@/lend/components/PageLoanManage/types' -import { DEFAULT_FORM_EST_GAS, DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLoanManage/utils' +import type { FormStatus, FormValues } from '@/lend/components/PageLendMarket/LoanCollateralAdd/types' +import type { FormDetailInfo, FormEstGas } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_FORM_EST_GAS, DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLendMarket/utils' import { invalidateMarketDetails } from '@/lend/entities/market-details' import { invalidateAllUserBorrowDetails } from '@/lend/entities/user-loan-details' import apiLending, { helpers } from '@/lend/lib/apiLending' diff --git a/apps/main/src/lend/store/createLoanCollateralRemoveSlice.ts b/apps/main/src/lend/store/createLoanCollateralRemoveSlice.ts index 906c13f276..928ac49b78 100644 --- a/apps/main/src/lend/store/createLoanCollateralRemoveSlice.ts +++ b/apps/main/src/lend/store/createLoanCollateralRemoveSlice.ts @@ -1,8 +1,8 @@ import lodash from 'lodash' import { StoreApi } from 'zustand' -import type { FormStatus, FormValues } from '@/lend/components/PageLoanManage/LoanCollateralRemove/types' -import type { FormDetailInfo, FormEstGas } from '@/lend/components/PageLoanManage/types' -import { DEFAULT_FORM_EST_GAS, DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLoanManage/utils' +import type { FormStatus, FormValues } from '@/lend/components/PageLendMarket/LoanCollateralRemove/types' +import type { FormDetailInfo, FormEstGas } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_FORM_EST_GAS, DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLendMarket/utils' import { invalidateMarketDetails } from '@/lend/entities/market-details' import { invalidateAllUserBorrowDetails } from '@/lend/entities/user-loan-details' import apiLending, { helpers } from '@/lend/lib/apiLending' diff --git a/apps/main/src/lend/store/createLoanCreateSlice.ts b/apps/main/src/lend/store/createLoanCreateSlice.ts index b6ead6dd6b..d6c34588ae 100644 --- a/apps/main/src/lend/store/createLoanCreateSlice.ts +++ b/apps/main/src/lend/store/createLoanCreateSlice.ts @@ -6,9 +6,13 @@ import type { FormEstGas, FormStatus, FormValues, -} from '@/lend/components/PageLoanCreate/types' -import { _parseValue, DEFAULT_FORM_STATUS, DEFAULT_FORM_VALUES } from '@/lend/components/PageLoanCreate/utils' -import { DEFAULT_FORM_EST_GAS } from '@/lend/components/PageLoanManage/utils' +} from '@/lend/components/PageLendMarket/types' +import { + _parseValue, + DEFAULT_FORM_EST_GAS, + DEFAULT_CREATE_FORM_STATUS, + DEFAULT_FORM_VALUES, +} from '@/lend/components/PageLendMarket/utils' import { invalidateMarketDetails } from '@/lend/entities/market-details' import { invalidateAllUserBorrowDetails } from '@/lend/entities/user-loan-details' import apiLending, { helpers } from '@/lend/lib/apiLending' @@ -73,7 +77,7 @@ const DEFAULT_STATE: SliceState = { detailInfo: {}, detailInfoLeverage: {}, formEstGas: {}, - formStatus: DEFAULT_FORM_STATUS, + formStatus: DEFAULT_CREATE_FORM_STATUS, formValues: DEFAULT_FORM_VALUES, liqRanges: {}, liqRangesMapper: {}, @@ -224,7 +228,7 @@ const createLoanCreate = (set: StoreApi['setState'], get: StoreApi debtError: '', } const cFormStatus: FormStatus = { - ...DEFAULT_FORM_STATUS, + ...DEFAULT_CREATE_FORM_STATUS, isApproved: formStatus.isApproved, isApprovedCompleted: formStatus.isApprovedCompleted, } @@ -267,7 +271,7 @@ const createLoanCreate = (set: StoreApi['setState'], get: StoreApi if (!provider) return setMissingProvider(get()[sliceKey]) // update formStatus - sliceState.setStateByKey('formStatus', { ...DEFAULT_FORM_STATUS, isInProgress: true, step: 'APPROVAL' }) + sliceState.setStateByKey('formStatus', { ...DEFAULT_CREATE_FORM_STATUS, isInProgress: true, step: 'APPROVAL' }) // api calls const { userCollateral, userBorrowed } = formValues @@ -283,7 +287,7 @@ const createLoanCreate = (set: StoreApi['setState'], get: StoreApi if (resp.activeKey === get()[sliceKey].activeKey) { // update formStatus sliceState.setStateByKey('formStatus', { - ...DEFAULT_FORM_STATUS, + ...DEFAULT_CREATE_FORM_STATUS, isApproved: !error, isApprovedCompleted: !error, stepError: error, @@ -304,7 +308,7 @@ const createLoanCreate = (set: StoreApi['setState'], get: StoreApi // update formStatus sliceState.setStateByKey('formStatus', { - ...DEFAULT_FORM_STATUS, + ...DEFAULT_CREATE_FORM_STATUS, isApproved: true, isApprovedCompleted: formStatus.isApprovedCompleted, isInProgress: true, @@ -354,7 +358,7 @@ const createLoanCreate = (set: StoreApi['setState'], get: StoreApi // update formStatus sliceState.setStateByKeys({ ...DEFAULT_STATE, - formStatus: { ...DEFAULT_FORM_STATUS, isApproved: true, isComplete: true }, + formStatus: { ...DEFAULT_CREATE_FORM_STATUS, isApproved: true, isComplete: true }, }) } invalidateMarketDetails({ chainId: api.chainId, marketId: market.id }) diff --git a/apps/main/src/lend/store/createLoanRepaySlice.ts b/apps/main/src/lend/store/createLoanRepaySlice.ts index 25598979b1..00651cc13f 100644 --- a/apps/main/src/lend/store/createLoanRepaySlice.ts +++ b/apps/main/src/lend/store/createLoanRepaySlice.ts @@ -1,13 +1,13 @@ import lodash from 'lodash' import type { StoreApi } from 'zustand' -import type { FormDetailInfoLeverage, FormStatus, FormValues } from '@/lend/components/PageLoanManage/LoanRepay/types' +import type { FormDetailInfoLeverage, FormStatus, FormValues } from '@/lend/components/PageLendMarket/LoanRepay/types' import { _parseValues, DEFAULT_FORM_STATUS, DEFAULT_FORM_VALUES, -} from '@/lend/components/PageLoanManage/LoanRepay/utils' -import type { FormDetailInfo, FormEstGas } from '@/lend/components/PageLoanManage/types' -import { DEFAULT_FORM_EST_GAS } from '@/lend/components/PageLoanManage/utils' +} from '@/lend/components/PageLendMarket/LoanRepay/utils' +import type { FormDetailInfo, FormEstGas } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_FORM_EST_GAS } from '@/lend/components/PageLendMarket/utils' import { invalidateMarketDetails } from '@/lend/entities/market-details' import { invalidateAllUserBorrowDetails } from '@/lend/entities/user-loan-details' import apiLending, { helpers } from '@/lend/lib/apiLending' diff --git a/apps/main/src/lend/store/createLoanSelfLiquidationSlice.ts b/apps/main/src/lend/store/createLoanSelfLiquidationSlice.ts index 5f6396986e..a731bd1cd9 100644 --- a/apps/main/src/lend/store/createLoanSelfLiquidationSlice.ts +++ b/apps/main/src/lend/store/createLoanSelfLiquidationSlice.ts @@ -1,8 +1,8 @@ import lodash from 'lodash' import type { StoreApi } from 'zustand' -import type { FormStatus } from '@/lend/components/PageLoanManage/LoanSelfLiquidation/types' -import type { FormEstGas } from '@/lend/components/PageLoanManage/types' -import { DEFAULT_FORM_EST_GAS, DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLoanManage/utils' +import type { FormStatus } from '@/lend/components/PageLendMarket/LoanSelfLiquidation/types' +import type { FormEstGas } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_FORM_EST_GAS, DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLendMarket/utils' import { invalidateMarketDetails } from '@/lend/entities/market-details' import { invalidateAllUserBorrowDetails } from '@/lend/entities/user-loan-details' import apiLending from '@/lend/lib/apiLending' diff --git a/apps/main/src/lend/store/createVaultClaimSlice.ts b/apps/main/src/lend/store/createVaultClaimSlice.ts index f8c1082384..5ab8220a06 100644 --- a/apps/main/src/lend/store/createVaultClaimSlice.ts +++ b/apps/main/src/lend/store/createVaultClaimSlice.ts @@ -1,6 +1,6 @@ import lodash from 'lodash' import type { StoreApi } from 'zustand' -import type { FormEstGas } from '@/lend/components/PageLoanManage/types' +import type { FormEstGas } from '@/lend/components/PageLendMarket/types' import type { FormStatus, RewardType } from '@/lend/components/PageVault/VaultClaim/types' import { DEFAULT_FORM_STATUS } from '@/lend/components/PageVault/VaultClaim/utils' import apiLending from '@/lend/lib/apiLending' diff --git a/apps/main/src/lend/store/createVaultDepositMintSlice.ts b/apps/main/src/lend/store/createVaultDepositMintSlice.ts index 1929371c29..f3c90ce1fd 100644 --- a/apps/main/src/lend/store/createVaultDepositMintSlice.ts +++ b/apps/main/src/lend/store/createVaultDepositMintSlice.ts @@ -1,7 +1,7 @@ import lodash from 'lodash' import type { StoreApi } from 'zustand' -import type { FormEstGas } from '@/lend/components/PageLoanManage/types' -import { DEFAULT_FORM_EST_GAS, DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLoanManage/utils' +import type { FormEstGas } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_FORM_EST_GAS, DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLendMarket/utils' import type { FormStatus, FormValues } from '@/lend/components/PageVault/VaultDepositMint/types' import { DEFAULT_FORM_STATUS, DEFAULT_FORM_VALUES } from '@/lend/components/PageVault/VaultDepositMint/utils' import { invalidateMarketDetails } from '@/lend/entities/market-details' diff --git a/apps/main/src/lend/store/createVaultStakeSlice.ts b/apps/main/src/lend/store/createVaultStakeSlice.ts index c9af5b09c3..07fcd2660c 100644 --- a/apps/main/src/lend/store/createVaultStakeSlice.ts +++ b/apps/main/src/lend/store/createVaultStakeSlice.ts @@ -1,7 +1,7 @@ import lodash from 'lodash' import type { StoreApi } from 'zustand' -import type { FormEstGas } from '@/lend/components/PageLoanManage/types' -import { DEFAULT_FORM_EST_GAS, DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLoanManage/utils' +import type { FormEstGas } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_FORM_EST_GAS, DEFAULT_FORM_STATUS as FORM_STATUS } from '@/lend/components/PageLendMarket/utils' import type { FormStatus, FormValues } from '@/lend/components/PageVault/VaultStake/types' import { DEFAULT_FORM_STATUS, DEFAULT_FORM_VALUES } from '@/lend/components/PageVault/VaultStake/utils' import { invalidateMarketDetails } from '@/lend/entities/market-details' diff --git a/apps/main/src/lend/store/createVaultUnstakeSlice.ts b/apps/main/src/lend/store/createVaultUnstakeSlice.ts index 7d3cd6116e..077027aaee 100644 --- a/apps/main/src/lend/store/createVaultUnstakeSlice.ts +++ b/apps/main/src/lend/store/createVaultUnstakeSlice.ts @@ -1,7 +1,7 @@ import lodash from 'lodash' import type { StoreApi } from 'zustand' -import type { FormEstGas } from '@/lend/components/PageLoanManage/types' -import { DEFAULT_FORM_EST_GAS } from '@/lend/components/PageLoanManage/utils' +import type { FormEstGas } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_FORM_EST_GAS } from '@/lend/components/PageLendMarket/utils' import type { FormStatus, FormValues } from '@/lend/components/PageVault/VaultUnstake/types' import { DEFAULT_FORM_STATUS, DEFAULT_FORM_VALUES } from '@/lend/components/PageVault/VaultUnstake/utils' import { invalidateMarketDetails } from '@/lend/entities/market-details' diff --git a/apps/main/src/lend/store/createVaultWithdrawRedeemSlice.ts b/apps/main/src/lend/store/createVaultWithdrawRedeemSlice.ts index 432e068006..c126108801 100644 --- a/apps/main/src/lend/store/createVaultWithdrawRedeemSlice.ts +++ b/apps/main/src/lend/store/createVaultWithdrawRedeemSlice.ts @@ -1,7 +1,7 @@ import lodash from 'lodash' import type { StoreApi } from 'zustand' -import type { FormEstGas } from '@/lend/components/PageLoanManage/types' -import { DEFAULT_FORM_EST_GAS } from '@/lend/components/PageLoanManage/utils' +import type { FormEstGas } from '@/lend/components/PageLendMarket/types' +import { DEFAULT_FORM_EST_GAS } from '@/lend/components/PageLendMarket/utils' import type { FormStatus, FormValues } from '@/lend/components/PageVault/VaultWithdrawRedeem/types' import { DEFAULT_FORM_STATUS, DEFAULT_FORM_VALUES } from '@/lend/components/PageVault/VaultWithdrawRedeem/utils' import { invalidateAllUserBorrowDetails } from '@/lend/entities/user-loan-details' diff --git a/apps/main/src/lend/types/lend.types.ts b/apps/main/src/lend/types/lend.types.ts index 9822e43cd2..6482d9c180 100644 --- a/apps/main/src/lend/types/lend.types.ts +++ b/apps/main/src/lend/types/lend.types.ts @@ -246,3 +246,12 @@ export enum FormError { LiquidationMode = 'error-liquidation-mode', TotalSupply = 'error-total-supply', } + +export type FormStatus = { + isApproved: boolean + isApprovedCompleted: boolean + isComplete: boolean + isInProgress: boolean + error: string + stepError: string +} diff --git a/apps/main/src/routes/lend.routes.tsx b/apps/main/src/routes/lend.routes.tsx index 6b0a942f70..74888adf00 100644 --- a/apps/main/src/routes/lend.routes.tsx +++ b/apps/main/src/routes/lend.routes.tsx @@ -1,13 +1,13 @@ import '@/global-extensions' import PageIntegrations from '@/lend/components/PageIntegrations/Page' -import PageLoanCreate from '@/lend/components/PageLoanCreate/Page' -import PageLoanManage from '@/lend/components/PageLoanManage/Page' +import { LendMarketPage } from '@/lend/components/PageLendMarket/LendMarketPage' import PageVault from '@/lend/components/PageVault/Page' +import { LendLayout } from '@/lend/LendLayout' +import type { MarketUrlParams } from '@/lend/types/lend.types' import Skeleton from '@mui/material/Skeleton' import { createRoute } from '@tanstack/react-router' import { SizesAndSpaces } from '@ui-kit/themes/design/1_sizes_spaces' import { LegalPage } from '@ui-kit/widgets/Legal' -import { LendLayout } from '../lend/LendLayout' import { rootRoute } from './root.routes' import { redirectTo } from './util' @@ -21,6 +21,9 @@ const lendLayoutRoute = createRoute({ const layoutProps = { getParentRoute: () => lendLayoutRoute } +const RedirectToMarketPage = ({ params: { network, market } }: { params: MarketUrlParams }) => + redirectTo(`/lend/${network}/markets/${market}/manage`) + export const lendRoutes = lendLayoutRoute.addChildren([ createRoute({ path: '/', @@ -63,35 +66,14 @@ export const lendRoutes = lendLayoutRoute.addChildren([ }), createRoute({ path: '$network/markets/$market', - loader: ({ params: { network, market } }) => redirectTo(`/lend/${network}/markets/${market}/manage`), - ...layoutProps, - }), - createRoute({ - path: '$network/markets/$market/create/$formType', - loader: ({ params: { network, market } }) => redirectTo(`/lend/${network}/markets/${market}/create`), - ...layoutProps, - }), - createRoute({ - path: '$network/markets/$market/create', - component: PageLoanCreate, - head: ({ params }) => ({ - meta: [{ title: `Create - ${params.market} - Curve Llamalend` }], - }), - ...layoutProps, - }), - createRoute({ - path: '$network/markets/$market/manage/$formType', - loader: ({ params: { network, market } }) => redirectTo(`/lend/${network}/markets/${market}/manage`), - ...layoutProps, - }), - createRoute({ - path: '$network/markets/$market/manage', - component: PageLoanManage, + component: LendMarketPage, head: ({ params }) => ({ - meta: [{ title: `Manage - ${params.market} - Curve Llamalend` }], + meta: [{ title: `${params.market} - Curve Llamalend` }], }), ...layoutProps, }), + createRoute({ path: '$network/markets/$market/create/{$-formType}', loader: RedirectToMarketPage, ...layoutProps }), + createRoute({ path: '$network/markets/$market/manage/{$-formType}', loader: RedirectToMarketPage, ...layoutProps }), createRoute({ path: '$network/markets/$market/vault/$formType', loader: ({ params: { network, market } }) => redirectTo(`/lend/${network}/markets/${market}/vault`), diff --git a/tests/cypress/support/routes.ts b/tests/cypress/support/routes.ts index 17b531d96f..52b4b7faa8 100644 --- a/tests/cypress/support/routes.ts +++ b/tests/cypress/support/routes.ts @@ -1,3 +1,4 @@ +import { MARKET_ROUTES } from '@/lend/constants' import { recordValues } from '@curvefi/prices-api/objects.util' import { oneAddress, oneOf } from '@cy/support/generators' import { type AppPath, oneAppPath } from '@cy/support/ui' @@ -22,8 +23,10 @@ export const oneAppRoute = () => lend: () => `lend/ethereum${oneOf( ...recordValues(LEND_ROUTES).map((r) => - // use market detail page, the list page redirects to the llamalend app - r == LEND_ROUTES.PAGE_MARKETS ? `${LEND_ROUTES.PAGE_MARKETS}/${SDOLA_LEND_POOL}/create` : r, + r == LEND_ROUTES.PAGE_MARKETS + ? // use market detail page, the list page redirects to the llamalend app + `${LEND_ROUTES.PAGE_MARKETS}/${SDOLA_LEND_POOL}${oneOf(...recordValues(MARKET_ROUTES))}` + : r, ), )}`, crvusd: () => From 1ce23f2115e638abb6df224ad435b9f018bd311a Mon Sep 17 00:00:00 2001 From: Daniel Schiavini Date: Wed, 3 Dec 2025 11:41:07 +0100 Subject: [PATCH 2/8] refactor: merge loan create and manage pages --- .../src/lend/components/AlertNoLoanFound.tsx | 4 +- apps/main/src/lend/components/BandsComp.tsx | 51 ++--- .../lend/components/MarketInformationComp.tsx | 13 +- .../PageLendMarket/LendMarketPage.tsx | 193 +++++++++++++++++- .../PageLendMarket/LoanBorrowMore/index.tsx | 37 ++-- .../LoanCollateralAdd/index.tsx | 35 +--- .../LoanCollateralRemove/index.tsx | 37 ++-- .../PageLendMarket/LoanCreatePage.tsx | 148 -------------- .../PageLendMarket/LoanCreateTabs.tsx | 6 +- .../LoanFormCreate/LoanCreateForm.tsx | 62 ++---- .../PageLendMarket/LoanRepay/index.tsx | 47 ++--- .../LoanSelfLiquidation/index.tsx | 29 +-- .../PageLendMarket/ManageLoanPage.tsx | 187 ----------------- .../PageLendMarket/ManageLoanTabs.tsx | 9 +- .../lend/components/PageLendMarket/utils.ts | 8 +- .../src/lend/components/PageVault/Page.tsx | 16 +- apps/main/src/lend/constants.ts | 3 +- .../lend/hooks/useBorrowPositionDetails.ts | 15 +- apps/main/src/lend/hooks/useLendPageTitle.ts | 7 +- apps/main/src/lend/hooks/useMarketDetails.tsx | 28 +-- apps/main/src/lend/types/lend.types.ts | 6 - apps/main/src/lend/utils/helpers.ts | 4 - apps/main/src/lend/utils/utilsRouter.ts | 11 +- apps/main/src/routes/lend.routes.tsx | 17 +- 24 files changed, 354 insertions(+), 619 deletions(-) delete mode 100644 apps/main/src/lend/components/PageLendMarket/LoanCreatePage.tsx delete mode 100644 apps/main/src/lend/components/PageLendMarket/ManageLoanPage.tsx diff --git a/apps/main/src/lend/components/AlertNoLoanFound.tsx b/apps/main/src/lend/components/AlertNoLoanFound.tsx index d37cb33e5d..d5377404be 100644 --- a/apps/main/src/lend/components/AlertNoLoanFound.tsx +++ b/apps/main/src/lend/components/AlertNoLoanFound.tsx @@ -1,7 +1,7 @@ import { styled } from 'styled-components' import useStore from '@/lend/store/useStore' import type { UrlParams } from '@/lend/types/lend.types' -import { getLoanCreatePathname } from '@/lend/utils/utilsRouter' +import { getLoanPathname } from '@/lend/utils/utilsRouter' import AlertBox from '@ui/AlertBox' import type { AlertType } from '@ui/AlertBox/types' import Button from '@ui/Button' @@ -25,7 +25,7 @@ const AlertNoLoanFound = ({ alertType, owmId }: { alertType?: AlertType; owmId: size="large" onClick={() => { setStateByKeyMarkets('marketDetailsView', 'market') - push(getLoanCreatePathname(params, owmId)) + push(getLoanPathname(params, owmId)) }} > Create loan diff --git a/apps/main/src/lend/components/BandsComp.tsx b/apps/main/src/lend/components/BandsComp.tsx index 885b959156..8f45e856d2 100644 --- a/apps/main/src/lend/components/BandsComp.tsx +++ b/apps/main/src/lend/components/BandsComp.tsx @@ -9,33 +9,31 @@ import { t } from '@ui-kit/lib/i18n' type BandsCompProps = { pageProps: PageContentProps - page: 'create' | 'manage' - loanExists: boolean + loanExists: boolean | undefined } -export const BandsComp = ({ pageProps, page, loanExists }: BandsCompProps) => { +export const BandsComp = ({ pageProps, loanExists }: BandsCompProps) => { const { rChainId, rOwmId, market } = pageProps - const [selectedBand, setSelectedBand] = useState<'user' | 'market'>(page === 'create' ? 'market' : 'user') + const [selectedBand, setSelectedBand] = useState<'user' | 'market'>(loanExists ? 'user' : 'market') - const SelectorMenu = - page === 'create' ? null : ( - - setSelectedBand('user')} - > - {t`Position Bands`} - - setSelectedBand('market')} - > - {t`Market Bands`} - - - ) + const SelectorMenu = loanExists && ( + + setSelectedBand('user')} + > + {t`Position Bands`} + + setSelectedBand('market')} + > + {t`Market Bands`} + + + ) return ( @@ -43,12 +41,7 @@ export const BandsComp = ({ pageProps, page, loanExists }: BandsCompProps) => { )} {(selectedBand === 'market' || !loanExists) && ( - + )} ) diff --git a/apps/main/src/lend/components/MarketInformationComp.tsx b/apps/main/src/lend/components/MarketInformationComp.tsx index aadaca4c5d..b40310e278 100644 --- a/apps/main/src/lend/components/MarketInformationComp.tsx +++ b/apps/main/src/lend/components/MarketInformationComp.tsx @@ -18,10 +18,9 @@ const { Spacing } = SizesAndSpaces type MarketInformationCompProps = { pageProps: PageContentProps - loanExists?: boolean + loanExists: boolean | undefined userActiveKey: string type: 'borrow' | 'supply' - page?: 'create' | 'manage' } const EMPTY_ARRAY: never[] = [] @@ -29,13 +28,7 @@ const EMPTY_ARRAY: never[] = [] /** * Reusable component for OHLC charts, Bands (if applicable), and market parameters. For /create, /manage, /vault pages. */ -export const MarketInformationComp = ({ - pageProps, - loanExists = false, - userActiveKey, - type, - page = 'manage', -}: MarketInformationCompProps) => { +export const MarketInformationComp = ({ pageProps, loanExists, userActiveKey, type }: MarketInformationCompProps) => { const { rChainId, rOwmId, market } = pageProps const collateralTokenAddress = market?.collateral_token.address const borrowedTokenAddress = market?.borrowed_token.address @@ -88,7 +81,7 @@ export const MarketInformationComp = ({ )} {type === 'borrow' && !newBandsChartEnabled && isAdvancedMode && ( t.design.Layer[1].Fill, gap: Spacing.md, padding: Spacing.md }}> - + )} {market && isAdvancedMode && ( diff --git a/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx b/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx index 63d56725c8..a56664fcfb 100644 --- a/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx @@ -1 +1,192 @@ -export const LendMarketPage = () => null +import { useEffect, useState } from 'react' +import type { Address } from 'viem' +import CampaignRewardsBanner from '@/lend/components/CampaignRewardsBanner' +import { MarketInformationComp } from '@/lend/components/MarketInformationComp' +import { MarketInformationTabs } from '@/lend/components/MarketInformationTabs' +import { LoanCreateTabs } from '@/lend/components/PageLendMarket/LoanCreateTabs' +import { ManageLoanTabs } from '@/lend/components/PageLendMarket/ManageLoanTabs' +import { useOneWayMarket } from '@/lend/entities/chain' +import { useBorrowPositionDetails } from '@/lend/hooks/useBorrowPositionDetails' +import { useLendPageTitle } from '@/lend/hooks/useLendPageTitle' +import { useMarketDetails } from '@/lend/hooks/useMarketDetails' +import useTitleMapper from '@/lend/hooks/useTitleMapper' +import { helpers } from '@/lend/lib/apiLending' +import networks from '@/lend/networks' +import useStore from '@/lend/store/useStore' +import { type MarketUrlParams } from '@/lend/types/lend.types' +import { getCollateralListPathname, parseMarketParams } from '@/lend/utils/helpers' +import { getVaultPathname } from '@/lend/utils/utilsRouter' +import { MarketDetails } from '@/llamalend/features/market-details' +import { BorrowPositionDetails, NoPosition } from '@/llamalend/features/market-position-details' +import { UserPositionHistory } from '@/llamalend/features/user-position-history' +import { useUserCollateralEvents } from '@/llamalend/features/user-position-history/hooks/useUserCollateralEvents' +import { useLoanExists } from '@/llamalend/queries/loan-exists' +import { DetailPageStack } from '@/llamalend/widgets/DetailPageStack' +import { isChain } from '@curvefi/prices-api' +import Stack from '@mui/material/Stack' +import { AppPageFormsWrapper } from '@ui/AppPage' +import Box from '@ui/Box' +import { ConnectWalletPrompt, isLoading, useConnection, useWallet } from '@ui-kit/features/connect-wallet' +import { useLayoutStore } from '@ui-kit/features/layout' +import { useParams } from '@ui-kit/hooks/router' +import { t } from '@ui-kit/lib/i18n' +import { REFRESH_INTERVAL } from '@ui-kit/lib/model' +import { ErrorPage } from '@ui-kit/pages/ErrorPage' +import { SizesAndSpaces } from '@ui-kit/themes/design/1_sizes_spaces' + +const { Spacing } = SizesAndSpaces + +export const LendMarketPage = () => { + const params = useParams() + const { rMarket: marketId, rChainId: chainId } = parseMarketParams(params) + + const { data: market, isSuccess } = useOneWayMarket(chainId, marketId) + const { llamaApi: api = null, connectState } = useConnection() + const titleMapper = useTitleMapper() + const { provider, connect } = useWallet() + + const isPageVisible = useLayoutStore((state) => state.isPageVisible) + const fetchAllMarketDetails = useStore((state) => state.markets.fetchAll) + const fetchUserMarketBalances = useStore((state) => state.user.fetchUserMarketBalances) + const fetchAllUserMarketDetails = useStore((state) => state.user.fetchAll) + const setMarketsStateKey = useStore((state) => state.markets.setStateByKey) + + const userActiveKey = helpers.getUserActiveKey(api, market!) + const { signerAddress } = api ?? {} + useLendPageTitle(market?.collateral_token?.symbol ?? marketId) + + const marketDetails = useMarketDetails({ chainId, market, marketId }) + const network = networks[chainId] + const { + data: userCollateralEvents, + isLoading: collateralEventsIsLoading, + isError: collateralEventsIsError, + } = useUserCollateralEvents({ + app: 'lend', + chain: isChain(network.id) ? network.id : undefined, + controllerAddress: market?.addresses?.controller as Address, + userAddress: signerAddress, + collateralToken: market?.collateral_token, + borrowToken: market?.borrowed_token, + network, + }) + const { data: loanExists, isLoading: isLoanExistsLoading } = useLoanExists({ + chainId, + marketId: marketId, + userAddress: signerAddress, + }) + + const [isLoaded, setLoaded] = useState(false) + + const borrowPositionDetails = useBorrowPositionDetails({ chainId, market: market, marketId: marketId }) + + useEffect(() => { + // delay fetch rest after form details are fetched first + const timer = setTimeout(async () => { + if (!api || !market || !isPageVisible) return + await fetchAllMarketDetails(api, market, true) + if (api.signerAddress) { + await fetchUserMarketBalances(api, market, true) + if (loanExists) { + void fetchAllUserMarketDetails(api, market, true) + } + } + }, REFRESH_INTERVAL['3s']) + return () => clearTimeout(timer) + }, [ + api, + fetchAllMarketDetails, + fetchUserMarketBalances, + fetchAllUserMarketDetails, + isPageVisible, + market, + loanExists, + ]) + + useEffect(() => { + if (api && market && isPageVisible) { + if (loanExists) setMarketsStateKey('marketDetailsView', 'user') + setLoaded(true) + } + }, [api, isPageVisible, loanExists, market, setMarketsStateKey]) + + const pageProps = { params, rChainId: chainId, rOwmId: marketId, isLoaded, api, market, userActiveKey, titleMapper } + + return isSuccess && !market ? ( + + ) : provider ? ( + <> + + + {chainId && + marketId && + !isLoanExistsLoading && + (loanExists ? ( + + ) : ( + + ))} + + + + + {loanExists ? ( + + ) : ( + t.design.Layer[1].Fill }}> + + {userCollateralEvents?.events && userCollateralEvents.events.length > 0 && ( + + )} + + )} + {userCollateralEvents?.events && userCollateralEvents.events.length > 0 && ( + t.design.Layer[1].Fill }} + > + + + )} + + + + + + + + + ) : ( + + connect()} + isLoading={isLoading(connectState)} + /> + + ) +} diff --git a/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/index.tsx b/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/index.tsx index c4d1bbc92a..e66f114997 100644 --- a/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/index.tsx @@ -1,7 +1,6 @@ import { ReactNode, useCallback, useEffect, useRef, useState } from 'react' import AlertFormError from '@/lend/components/AlertFormError' import AlertLoanSummary from '@/lend/components/AlertLoanSummary' -import AlertNoLoanFound from '@/lend/components/AlertNoLoanFound' import DialogFormWarning from '@/lend/components/DialogFormWarning' import InpToken from '@/lend/components/InpToken' import InpTokenBorrow from '@/lend/components/InpTokenBorrow' @@ -19,10 +18,8 @@ import { helpers } from '@/lend/lib/apiLending' import networks from '@/lend/networks' import useStore from '@/lend/store/useStore' import { Api, OneWayMarketTemplate, PageContentProps } from '@/lend/types/lend.types' -import { _showNoLoanFound } from '@/lend/utils/helpers' import { DEFAULT_HEALTH_MODE } from '@/llamalend/constants' import type { HealthMode } from '@/llamalend/llamalend.types' -import { useLoanExists } from '@/llamalend/queries/loan-exists' import Stack from '@mui/material/Stack' import Typography from '@mui/material/Typography' import AlertBox from '@ui/AlertBox' @@ -69,12 +66,6 @@ const LoanBorrowMore = ({ rChainId, rOwmId, isLoaded, api, market, userActiveKey const { signerAddress } = api ?? {} const { expectedCollateral } = detailInfoLeverage ?? {} - const { data: loanExists } = useLoanExists({ - chainId: rChainId, - marketId: market?.id, - userAddress: signerAddress, - }) - const updateFormValues = useCallback( ( updatedFormValues: Partial, @@ -408,22 +399,18 @@ const LoanBorrowMore = ({ rChainId, rOwmId, isLoaded, api, market, userActiveKey {/* actions */} - {_showNoLoanFound(signerAddress, formStatus.isComplete, loanExists) ? ( - - ) : ( - - {txInfoBar} - {healthMode.message && {healthMode.message}} - {(formStatus.error || formStatus.stepError) && ( - updateFormValues({})} - /> - )} - {steps && } - - )} + + {txInfoBar} + {healthMode.message && {healthMode.message}} + {(formStatus.error || formStatus.stepError) && ( + updateFormValues({})} + /> + )} + {steps && } + ) } diff --git a/apps/main/src/lend/components/PageLendMarket/LoanCollateralAdd/index.tsx b/apps/main/src/lend/components/PageLendMarket/LoanCollateralAdd/index.tsx index d48ae46779..a9ee8ee001 100644 --- a/apps/main/src/lend/components/PageLendMarket/LoanCollateralAdd/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanCollateralAdd/index.tsx @@ -1,7 +1,6 @@ import { ReactNode, useCallback, useEffect, useRef, useState } from 'react' import AlertFormError from '@/lend/components/AlertFormError' import AlertSummary from '@/lend/components/AlertLoanSummary' -import AlertNoLoanFound from '@/lend/components/AlertNoLoanFound' import DetailInfoEstimateGas from '@/lend/components/DetailInfoEstimateGas' import DetailInfoHealth from '@/lend/components/DetailInfoHealth' import DetailInfoLiqRange from '@/lend/components/DetailInfoLiqRange' @@ -17,10 +16,8 @@ import networks from '@/lend/networks' import { DEFAULT_FORM_VALUES } from '@/lend/store/createLoanCollateralAddSlice' import useStore from '@/lend/store/useStore' import { Api, OneWayMarketTemplate, PageContentProps } from '@/lend/types/lend.types' -import { _showNoLoanFound } from '@/lend/utils/helpers' import { DEFAULT_HEALTH_MODE } from '@/llamalend/constants' import { AddCollateralForm } from '@/llamalend/features/manage-loan/components/AddCollateralForm' -import { useLoanExists } from '@/llamalend/queries/loan-exists' import AlertBox from '@ui/AlertBox' import { getActiveStep } from '@ui/Stepper/helpers' import Stepper from '@ui/Stepper/Stepper' @@ -54,12 +51,6 @@ const LoanCollateralAdd = ({ rChainId, rOwmId, api, isLoaded, market, userActive const { signerAddress } = api ?? {} - const { data: loanExists } = useLoanExists({ - chainId: rChainId, - marketId: market?.id, - userAddress: signerAddress, - }) - const updateFormValues = useCallback( (updatedFormValues: Partial, isFullReset?: boolean) => { void setFormValues(isLoaded ? api : null, market, isFullReset ? DEFAULT_FORM_VALUES : updatedFormValues) @@ -239,21 +230,17 @@ const LoanCollateralAdd = ({ rChainId, rOwmId, api, isLoaded, market, userActive {/* actions */} - {_showNoLoanFound(signerAddress, formStatus.isComplete, loanExists) ? ( - - ) : ( - - {txInfoBar} - {(formStatus.error || formStatus.stepError) && ( - updateFormValues({}, true)} - /> - )} - {steps && } - - )} + + {txInfoBar} + {(formStatus.error || formStatus.stepError) && ( + updateFormValues({}, true)} + /> + )} + {steps && } + ) } diff --git a/apps/main/src/lend/components/PageLendMarket/LoanCollateralRemove/index.tsx b/apps/main/src/lend/components/PageLendMarket/LoanCollateralRemove/index.tsx index b9a6b7c2f4..88249492fa 100644 --- a/apps/main/src/lend/components/PageLendMarket/LoanCollateralRemove/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanCollateralRemove/index.tsx @@ -1,7 +1,6 @@ import { ReactNode, useCallback, useEffect, useRef, useState } from 'react' import AlertFormError from '@/lend/components/AlertFormError' import AlertSummary from '@/lend/components/AlertLoanSummary' -import AlertNoLoanFound from '@/lend/components/AlertNoLoanFound' import DetailInfoEstimateGas from '@/lend/components/DetailInfoEstimateGas' import DetailInfoHealth from '@/lend/components/DetailInfoHealth' import DetailInfoLiqRange from '@/lend/components/DetailInfoLiqRange' @@ -19,11 +18,9 @@ import networks from '@/lend/networks' import { DEFAULT_FORM_VALUES } from '@/lend/store/createLoanCollateralRemoveSlice' import useStore from '@/lend/store/useStore' import { Api, OneWayMarketTemplate, PageContentProps } from '@/lend/types/lend.types' -import { _showNoLoanFound } from '@/lend/utils/helpers' import { DEFAULT_HEALTH_MODE } from '@/llamalend/constants' import { RemoveCollateralForm } from '@/llamalend/features/manage-loan/components/RemoveCollateralForm' import type { HealthMode } from '@/llamalend/llamalend.types' -import { useLoanExists } from '@/llamalend/queries/loan-exists' import AlertBox from '@ui/AlertBox' import { getActiveStep } from '@ui/Stepper/helpers' import Stepper from '@ui/Stepper/Stepper' @@ -58,12 +55,6 @@ const LoanCollateralRemove = ({ rChainId, rOwmId, isLoaded, api, market, userAct const { signerAddress } = api ?? {} - const { data: loanExists } = useLoanExists({ - chainId: rChainId, - marketId: market?.id, - userAddress: signerAddress, - }) - const network = networks[rChainId] const updateFormValues = useCallback( @@ -276,22 +267,18 @@ const LoanCollateralRemove = ({ rChainId, rOwmId, isLoaded, api, market, userAct {/* actions */} - {_showNoLoanFound(signerAddress, formStatus.isComplete, loanExists) ? ( - - ) : ( - - {txInfoBar} - {healthMode.message && {healthMode.message}} - {(formStatus.error || formStatus.stepError) && ( - updateFormValues({})} - /> - )} - {steps && } - - )} + + {txInfoBar} + {healthMode.message && {healthMode.message}} + {(formStatus.error || formStatus.stepError) && ( + updateFormValues({})} + /> + )} + {steps && } + ) } diff --git a/apps/main/src/lend/components/PageLendMarket/LoanCreatePage.tsx b/apps/main/src/lend/components/PageLendMarket/LoanCreatePage.tsx deleted file mode 100644 index 374ce5d415..0000000000 --- a/apps/main/src/lend/components/PageLendMarket/LoanCreatePage.tsx +++ /dev/null @@ -1,148 +0,0 @@ -import { useEffect } from 'react' -import type { Address } from 'viem' -import CampaignRewardsBanner from '@/lend/components/CampaignRewardsBanner' -import { MarketInformationComp } from '@/lend/components/MarketInformationComp' -import { MarketInformationTabs } from '@/lend/components/MarketInformationTabs' -import { LoanCreateTabs } from '@/lend/components/PageLendMarket/LoanCreateTabs' -import { useOneWayMarket } from '@/lend/entities/chain' -import { useLendPageTitle } from '@/lend/hooks/useLendPageTitle' -import { useMarketDetails } from '@/lend/hooks/useMarketDetails' -import useTitleMapper from '@/lend/hooks/useTitleMapper' -import { helpers } from '@/lend/lib/apiLending' -import networks from '@/lend/networks' -import useStore from '@/lend/store/useStore' -import { type MarketUrlParams, PageContentProps } from '@/lend/types/lend.types' -import { getCollateralListPathname, parseMarketParams } from '@/lend/utils/helpers' -import { getVaultPathname } from '@/lend/utils/utilsRouter' -import { MarketDetails } from '@/llamalend/features/market-details' -import { NoPosition } from '@/llamalend/features/market-position-details' -import { UserPositionHistory } from '@/llamalend/features/user-position-history' -import { useUserCollateralEvents } from '@/llamalend/features/user-position-history/hooks/useUserCollateralEvents' -import { DetailPageStack } from '@/llamalend/widgets/DetailPageStack' -import { isChain } from '@curvefi/prices-api' -import Stack from '@mui/material/Stack' -import { AppPageFormsWrapper } from '@ui/AppPage' -import Box from '@ui/Box' -import { ConnectWalletPrompt, isLoading, useConnection, useWallet } from '@ui-kit/features/connect-wallet' -import { useLayoutStore } from '@ui-kit/features/layout' -import { useParams } from '@ui-kit/hooks/router' -import { t } from '@ui-kit/lib/i18n' -import { REFRESH_INTERVAL } from '@ui-kit/lib/model' -import { ErrorPage } from '@ui-kit/pages/ErrorPage' -import { SizesAndSpaces } from '@ui-kit/themes/design/1_sizes_spaces' - -const { Spacing } = SizesAndSpaces - -const Page = () => { - const params = useParams() - const { rMarket, rChainId } = parseMarketParams(params) - - const { data: market, isSuccess } = useOneWayMarket(rChainId, rMarket) - const { llamaApi: api = null, connectState } = useConnection() - const titleMapper = useTitleMapper() - const { provider, connect } = useWallet() - - const isPageVisible = useLayoutStore((state) => state.isPageVisible) - const fetchAllMarketDetails = useStore((state) => state.markets.fetchAll) - const fetchUserMarketBalances = useStore((state) => state.user.fetchUserMarketBalances) - - const userActiveKey = helpers.getUserActiveKey(api, market!) - const rOwmId = market?.id ?? '' - const { signerAddress } = api ?? {} - - const marketDetails = useMarketDetails({ - chainId: rChainId, - llamma: market, - llammaId: rOwmId, - }) - const network = networks[rChainId] - const { - data: userCollateralEvents, - isLoading: collateralEventsIsLoading, - isError: collateralEventsIsError, - } = useUserCollateralEvents({ - app: 'lend', - chain: isChain(network.id) ? network.id : undefined, - controllerAddress: market?.addresses?.controller as Address, - userAddress: signerAddress, - collateralToken: market?.collateral_token, - borrowToken: market?.borrowed_token, - network, - }) - - useEffect(() => { - // delay fetch rest after form details are fetched first - const timer = setTimeout(async () => { - if (!api || !market || !isPageVisible) return - await fetchAllMarketDetails(api, market, true) - if (api.signerAddress) { - await fetchUserMarketBalances(api, market, true) - } - }, REFRESH_INTERVAL['3s']) - return () => clearTimeout(timer) - }, [api, fetchAllMarketDetails, fetchUserMarketBalances, isPageVisible, market]) - - useLendPageTitle(market?.collateral_token?.symbol, 'Create') - - const pageProps: PageContentProps = { - params, - rChainId, - rOwmId, - api, - market, - titleMapper, - userActiveKey, - isLoaded: true, - } - const positionDetailsHrefs = { - borrow: '', - supply: getVaultPathname(params, rOwmId), - } - - return isSuccess && !market ? ( - - ) : provider ? ( - <> - - - {rChainId && rOwmId && } - - - - - t.design.Layer[1].Fill }}> - - {userCollateralEvents?.events && userCollateralEvents.events.length > 0 && ( - - )} - - - - - - - - - - ) : ( - - connect()} - isLoading={isLoading(connectState)} - /> - - ) -} - -export default Page diff --git a/apps/main/src/lend/components/PageLendMarket/LoanCreateTabs.tsx b/apps/main/src/lend/components/PageLendMarket/LoanCreateTabs.tsx index cb8d28c1fc..d5e483877b 100644 --- a/apps/main/src/lend/components/PageLendMarket/LoanCreateTabs.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanCreateTabs.tsx @@ -1,5 +1,5 @@ import { useCallback } from 'react' -import LoanFormCreate from '@/lend/components/PageLendMarket/LoanFormCreate/LoanCreate' +import { LoanCreateForm } from '@/lend/components/PageLendMarket/LoanFormCreate/LoanCreateForm' import type { FormValues } from '@/lend/components/PageLendMarket/types' import { DEFAULT_FORM_VALUES } from '@/lend/components/PageLendMarket/utils' import networks from '@/lend/networks' @@ -50,11 +50,11 @@ export const LendCreateTabsNewMenu = [ ] satisfies FormTab[] export const LendCreateTabsOldMenu = [ - { value: 'create', label: t`Create Loan`, component: LoanFormCreate }, + { value: 'create', label: t`Create Loan`, component: LoanCreateForm }, { value: 'leverage', label: t`Leverage`, - component: (p) => , + component: (p) => , visible: ({ market }) => market && hasLeverage(market), }, ] satisfies FormTab[] diff --git a/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/LoanCreateForm.tsx b/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/LoanCreateForm.tsx index 7ad97bbb80..18394c5895 100644 --- a/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/LoanCreateForm.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/LoanCreateForm.tsx @@ -16,16 +16,12 @@ import { helpers } from '@/lend/lib/apiLending' import networks from '@/lend/networks' import useStore from '@/lend/store/useStore' import { Api, type MarketUrlParams, OneWayMarketTemplate, PageContentProps } from '@/lend/types/lend.types' -import { getLoanManagePathname } from '@/lend/utils/utilsRouter' import { DEFAULT_HEALTH_MODE } from '@/llamalend/constants' import { MarketParameters } from '@/llamalend/features/market-parameters/MarketParameters' import type { HealthMode } from '@/llamalend/llamalend.types' -import { useLoanExists } from '@/llamalend/queries/loan-exists' import Accordion from '@ui/Accordion' import AlertBox from '@ui/AlertBox' import Box from '@ui/Box' -import Button from '@ui/Button' -import LinkButton from '@ui/LinkButton' import Stepper from '@ui/Stepper/Stepper' import type { Step } from '@ui/Stepper/types' import TextCaption from '@ui/TextCaption' @@ -33,7 +29,6 @@ import TxInfoBar from '@ui/TxInfoBar' import { formatNumber, scanTxPath } from '@ui/utils' import { notify } from '@ui-kit/features/connect-wallet' import { useUserProfileStore } from '@ui-kit/features/user-profile' -import { useNavigate } from '@ui-kit/hooks/router' import usePageVisibleInterval from '@ui-kit/hooks/usePageVisibleInterval' import { t } from '@ui-kit/lib/i18n' import { REFRESH_INTERVAL } from '@ui-kit/lib/model' @@ -41,10 +36,9 @@ import { REFRESH_INTERVAL } from '@ui-kit/lib/model' export const LoanCreateForm = ({ isLeverage = false, ...pageProps -}: PageContentProps & { isLeverage?: boolean; params: MarketUrlParams }) => { - const { rChainId, rOwmId, isLoaded, api, market, userActiveKey, params } = pageProps +}: PageContentProps & { isLeverage?: boolean }) => { + const { rChainId, rOwmId, isLoaded, api, market, userActiveKey } = pageProps const isSubscribed = useRef(false) - const push = useNavigate() const marketAlert = useMarketAlert(rChainId, rOwmId) const activeKey = useStore((state) => state.loanCreate.activeKey) @@ -60,7 +54,6 @@ export const LoanCreateForm = ({ const refetchMaxRecv = useStore((state) => state.loanCreate.refetchMaxRecv) const fetchStepApprove = useStore((state) => state.loanCreate.fetchStepApprove) const fetchStepCreate = useStore((state) => state.loanCreate.fetchStepCreate) - const setStateByKeyMarkets = useStore((state) => state.markets.setStateByKey) const setFormValues = useStore((state) => state.loanCreate.setFormValues) const resetState = useStore((state) => state.loanCreate.resetState) @@ -76,12 +69,6 @@ export const LoanCreateForm = ({ const { expectedCollateral } = detailInfoLeverage ?? {} const { borrowed_token, collateral_token } = market ?? {} - const { data: loanExists } = useLoanExists({ - chainId: rChainId, - marketId: market?.id, - userAddress: signerAddress, - }) - const updateFormValues = useCallback( (updatedFormValues: Partial, isFullReset?: boolean, shouldRefetch?: boolean) => { setConfirmWarning(DEFAULT_CONFIRM_WARNING) @@ -403,39 +390,18 @@ export const LoanCreateForm = ({ {marketAlert && {marketAlert.message}} {/* actions */} - {signerAddress && loanExists && !formStatus.isComplete ? ( - <> - {t`A loan has been found for this market.`} - - - ) : ( - - {txInfoBar} - {!!healthMode.message && {healthMode.message}} - {(formStatus.error || formStatus.stepError) && ( - updateFormValues({}, true)} - /> - )} - {steps && } - {formStatus.isComplete && market && ( - - Manage loan - - )} - - )} + + {txInfoBar} + {!!healthMode.message && {healthMode.message}} + {(formStatus.error || formStatus.stepError) && ( + updateFormValues({}, true)} + /> + )} + {steps && } + {!isAdvancedMode && ( {t`Market details`}}> diff --git a/apps/main/src/lend/components/PageLendMarket/LoanRepay/index.tsx b/apps/main/src/lend/components/PageLendMarket/LoanRepay/index.tsx index 0462e6575a..4f4a68d688 100644 --- a/apps/main/src/lend/components/PageLendMarket/LoanRepay/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanRepay/index.tsx @@ -1,7 +1,6 @@ import { ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react' import AlertFormError from '@/lend/components/AlertFormError' import AlertSummary from '@/lend/components/AlertLoanSummary' -import AlertNoLoanFound from '@/lend/components/AlertNoLoanFound' import DialogFormWarning from '@/lend/components/DialogFormWarning' import InpToken from '@/lend/components/InpToken' import LoanFormConnect from '@/lend/components/LoanFormConnect' @@ -17,12 +16,10 @@ import { helpers } from '@/lend/lib/apiLending' import networks from '@/lend/networks' import useStore from '@/lend/store/useStore' import { Api, FormError, type MarketUrlParams, OneWayMarketTemplate, PageContentProps } from '@/lend/types/lend.types' -import { _showNoLoanFound } from '@/lend/utils/helpers' import { getCollateralListPathname } from '@/lend/utils/utilsRouter' import { DEFAULT_HEALTH_MODE } from '@/llamalend/constants' import { RepayForm } from '@/llamalend/features/manage-loan/components/RepayForm' import type { HealthMode } from '@/llamalend/llamalend.types' -import { useLoanExists } from '@/llamalend/queries/loan-exists' import Stack from '@mui/material/Stack' import Typography from '@mui/material/Typography' import AlertBox from '@ui/AlertBox' @@ -80,12 +77,6 @@ const LoanRepay = ({ const { expectedBorrowed } = detailInfoLeverage ?? {} const hasExpectedBorrowed = !!expectedBorrowed - const { data: loanExists, isFetching: loanExistsLoading } = useLoanExists({ - chainId: rChainId, - marketId: market?.id, - userAddress: signerAddress, - }) - const updateFormValues = useCallback( ( updatedFormValues: Partial, @@ -376,7 +367,7 @@ const LoanRepay = ({ id="stateCollateral" inpError={formValues.stateCollateralError} inpDisabled={disable} - inpLabelLoading={loanExistsLoading && !!signerAddress && typeof userState?.collateral === 'undefined'} + inpLabelLoading={!!signerAddress && typeof userState?.collateral === 'undefined'} inpLabelDescription={formatNumber(userState?.collateral, { defaultValue: '-' })} inpValue={formValues.stateCollateral} tokenAddress={collateral_token?.address} @@ -512,27 +503,23 @@ const LoanRepay = ({ {/* actions */} - {_showNoLoanFound(signerAddress, formStatus.isComplete, loanExists) ? ( - - ) : ( - - {txInfoBar} - {!!healthMode.message && {healthMode.message}} - {formStatus.error === FormError.FullRepaymentRequired ? ( - - {t`Only partial repayment from wallet's ${borrowed_token?.symbol} or full repayment from collateral or wallet's ${collateral_token?.symbol} is + + {txInfoBar} + {!!healthMode.message && {healthMode.message}} + {formStatus.error === FormError.FullRepaymentRequired ? ( + + {t`Only partial repayment from wallet's ${borrowed_token?.symbol} or full repayment from collateral or wallet's ${collateral_token?.symbol} is allowed during liquidation mode.`} - - ) : formStatus.error || formStatus.stepError ? ( - updateFormValues({})} - /> - ) : null} - {steps && } - - )} + + ) : formStatus.error || formStatus.stepError ? ( + updateFormValues({})} + /> + ) : null} + {steps && } + ) } diff --git a/apps/main/src/lend/components/PageLendMarket/LoanSelfLiquidation/index.tsx b/apps/main/src/lend/components/PageLendMarket/LoanSelfLiquidation/index.tsx index da8e1e7b12..c76feb7caf 100644 --- a/apps/main/src/lend/components/PageLendMarket/LoanSelfLiquidation/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanSelfLiquidation/index.tsx @@ -3,7 +3,6 @@ import { styled } from 'styled-components' import AlertFormError from '@/lend/components/AlertFormError' import AlertFormWarning from '@/lend/components/AlertFormWarning' import AlertSummary from '@/lend/components/AlertLoanSummary' -import AlertNoLoanFound from '@/lend/components/AlertNoLoanFound' import DetailInfoEstimateGas from '@/lend/components/DetailInfoEstimateGas' import DetailInfoRate from '@/lend/components/DetailInfoRate' import DetailInfoSlippageTolerance from '@/lend/components/DetailInfoSlippageTolerance' @@ -22,9 +21,7 @@ import { PageContentProps, UserLoanState, } from '@/lend/types/lend.types' -import { _showNoLoanFound } from '@/lend/utils/helpers' import { getCollateralListPathname } from '@/lend/utils/utilsRouter' -import { useLoanExists } from '@/llamalend/queries/loan-exists' import AlertBox from '@ui/AlertBox' import InputReadOnly from '@ui/InputReadOnly' import InternalLink from '@ui/Link/InternalLink' @@ -65,12 +62,6 @@ const LoanSelfLiquidation = ({ const { signerAddress } = api ?? {} - const { data: loanExists } = useLoanExists({ - chainId: rChainId, - marketId: market?.id, - userAddress: signerAddress, - }) - const reset = useCallback(() => { setTxInfoBar(null) @@ -227,18 +218,14 @@ const LoanSelfLiquidation = ({ {/* actions */} - {_showNoLoanFound(signerAddress, formStatus.isComplete, loanExists) ? ( - - ) : ( - - {txInfoBar} - {!formStatus.loading && !!formStatus.warning && } - {(formStatus.error || formStatus.stepError) && ( - - )} - {steps && } - - )} + + {txInfoBar} + {!formStatus.loading && !!formStatus.warning && } + {(formStatus.error || formStatus.stepError) && ( + + )} + {steps && } + ) } diff --git a/apps/main/src/lend/components/PageLendMarket/ManageLoanPage.tsx b/apps/main/src/lend/components/PageLendMarket/ManageLoanPage.tsx deleted file mode 100644 index 10b2e64191..0000000000 --- a/apps/main/src/lend/components/PageLendMarket/ManageLoanPage.tsx +++ /dev/null @@ -1,187 +0,0 @@ -import { useEffect, useState } from 'react' -import type { Address } from 'viem' -import CampaignRewardsBanner from '@/lend/components/CampaignRewardsBanner' -import { MarketInformationComp } from '@/lend/components/MarketInformationComp' -import { MarketInformationTabs } from '@/lend/components/MarketInformationTabs' -import { ManageLoanTabs } from '@/lend/components/PageLendMarket/ManageLoanTabs' -import { useOneWayMarket } from '@/lend/entities/chain' -import { useBorrowPositionDetails } from '@/lend/hooks/useBorrowPositionDetails' -import { useLendPageTitle } from '@/lend/hooks/useLendPageTitle' -import { useMarketDetails } from '@/lend/hooks/useMarketDetails' -import useTitleMapper from '@/lend/hooks/useTitleMapper' -import { helpers } from '@/lend/lib/apiLending' -import networks from '@/lend/networks' -import useStore from '@/lend/store/useStore' -import { type MarketUrlParams } from '@/lend/types/lend.types' -import { getVaultPathname, parseMarketParams } from '@/lend/utils/helpers' -import { getCollateralListPathname } from '@/lend/utils/utilsRouter' -import { MarketDetails } from '@/llamalend/features/market-details' -import { BorrowPositionDetails, NoPosition } from '@/llamalend/features/market-position-details' -import { UserPositionHistory } from '@/llamalend/features/user-position-history' -import { useUserCollateralEvents } from '@/llamalend/features/user-position-history/hooks/useUserCollateralEvents' -import { useLoanExists } from '@/llamalend/queries/loan-exists' -import { DetailPageStack } from '@/llamalend/widgets/DetailPageStack' -import { isChain } from '@curvefi/prices-api' -import Stack from '@mui/material/Stack' -import { AppPageFormsWrapper } from '@ui/AppPage' -import Box from '@ui/Box' -import { ConnectWalletPrompt, isLoading, useConnection, useWallet } from '@ui-kit/features/connect-wallet' -import { useLayoutStore } from '@ui-kit/features/layout' -import { useParams } from '@ui-kit/hooks/router' -import { t } from '@ui-kit/lib/i18n' -import { REFRESH_INTERVAL } from '@ui-kit/lib/model' -import { ErrorPage } from '@ui-kit/pages/ErrorPage' -import { SizesAndSpaces } from '@ui-kit/themes/design/1_sizes_spaces' - -const { Spacing } = SizesAndSpaces - -export const ManageLoanPage = () => { - const params = useParams() - const { rMarket, rChainId } = parseMarketParams(params) - const { llamaApi: api = null, connectState } = useConnection() - const titleMapper = useTitleMapper() - const { data: market, isSuccess } = useOneWayMarket(rChainId, rMarket) - const rOwmId = market?.id ?? '' - const userActiveKey = helpers.getUserActiveKey(api, market!) - const isPageVisible = useLayoutStore((state) => state.isPageVisible) - const fetchAllMarketDetails = useStore((state) => state.markets.fetchAll) - const fetchAllUserMarketDetails = useStore((state) => state.user.fetchAll) - const setMarketsStateKey = useStore((state) => state.markets.setStateByKey) - const { provider, connect } = useWallet() - - const { signerAddress } = api ?? {} - - const { data: loanExists } = useLoanExists({ - chainId: rChainId, - marketId: market?.id, - userAddress: signerAddress, - }) - - const [isLoaded, setLoaded] = useState(false) - - const borrowPositionDetails = useBorrowPositionDetails({ - chainId: rChainId, - market: market ?? undefined, - marketId: rOwmId, - }) - const marketDetails = useMarketDetails({ - chainId: rChainId, - llamma: market, - llammaId: rOwmId, - }) - const network = networks[rChainId] - const { - data: userCollateralEvents, - isLoading: collateralEventsIsLoading, - isError: collateralEventsIsError, - } = useUserCollateralEvents({ - app: 'lend', - chain: isChain(network.id) ? network.id : undefined, - controllerAddress: market?.addresses?.controller as Address, - userAddress: signerAddress, - collateralToken: market?.collateral_token, - borrowToken: market?.borrowed_token, - network, - }) - - const isInSoftLiquidation = - borrowPositionDetails.liquidationAlert.softLiquidation || borrowPositionDetails.liquidationAlert.hardLiquidation - - useEffect(() => { - if (api && market && isPageVisible) { - if (loanExists) setMarketsStateKey('marketDetailsView', 'user') - setLoaded(true) - } - }, [api, isPageVisible, loanExists, market, setMarketsStateKey]) - - useEffect(() => { - // delay fetch rest after form details are fetched first - const timer = setTimeout(async () => { - if (!api || !market || !isPageVisible || !isLoaded) return - void fetchAllMarketDetails(api, market, true) - if (api.signerAddress && loanExists) { - void fetchAllUserMarketDetails(api, market, true) - } - }, REFRESH_INTERVAL['3s']) - return () => clearTimeout(timer) - }, [api, fetchAllMarketDetails, fetchAllUserMarketDetails, isLoaded, isPageVisible, loanExists, market]) - - useLendPageTitle(market?.collateral_token?.symbol, 'Manage') - - const pageProps = { - params, - rChainId, - rOwmId, - isLoaded, - api, - market, - userActiveKey, - titleMapper, - } - - const positionDetailsHrefs = { - borrow: '', - supply: getVaultPathname(params, rOwmId), - } - - return isSuccess && !market ? ( - - ) : provider ? ( - <> - - - {rChainId && rOwmId && } - - - - - {loanExists ? ( - - ) : ( - t.design.Layer[1].Fill }}> - - - )} - {userCollateralEvents?.events && userCollateralEvents.events.length > 0 && ( - t.design.Layer[1].Fill }} - > - - - )} - - - - - - - - - ) : ( - - connect()} - isLoading={isLoading(connectState)} - /> - - ) -} diff --git a/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx b/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx index 7317e941ae..a12f99f975 100644 --- a/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx +++ b/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx @@ -12,6 +12,7 @@ import { useClosePositionTab } from '@/llamalend/features/manage-soft-liquidatio import { useImproveHealthTab } from '@/llamalend/features/manage-soft-liquidation/hooks/useImproveHealthTab' import { ClosePosition } from '@/llamalend/features/manage-soft-liquidation/ui/tabs/ClosePosition' import { ImproveHealth } from '@/llamalend/features/manage-soft-liquidation/ui/tabs/ImproveHealth' +import type { BorrowPositionDetailsProps } from '@/llamalend/features/market-position-details' import { useManageLoanMuiForm, useManageSoftLiquidation } from '@ui-kit/hooks/useFeatureFlags' import { t } from '@ui-kit/lib/i18n' import { type FormTab, FormTabs } from '@ui-kit/shared/ui/FormTabs/FormTabs' @@ -88,10 +89,12 @@ export const LendManageSoftLiquidationMenu = [ ] satisfies FormTab[] export const ManageLoanTabs = ({ - isInSoftLiquidation, + position: { + liquidationAlert: { softLiquidation, hardLiquidation }, + }, ...pageProps -}: ManageLoanProps & { isInSoftLiquidation: boolean | undefined }) => { - const shouldUseSoftLiquidation = useManageSoftLiquidation() && isInSoftLiquidation +}: ManageLoanProps & { position: BorrowPositionDetailsProps }) => { + const shouldUseSoftLiquidation = useManageSoftLiquidation() && (softLiquidation || hardLiquidation) const shouldUseManageLoanMuiForm = useManageLoanMuiForm() const menu = shouldUseSoftLiquidation ? LendManageSoftLiquidationMenu diff --git a/apps/main/src/lend/components/PageLendMarket/utils.ts b/apps/main/src/lend/components/PageLendMarket/utils.ts index 61e93d569d..361b4bc504 100644 --- a/apps/main/src/lend/components/PageLendMarket/utils.ts +++ b/apps/main/src/lend/components/PageLendMarket/utils.ts @@ -1,8 +1,8 @@ -import type { FormEstGas, FormStatus, FormValues } from '@/lend/components/PageLendMarket/types' -import { type FormStatus, type OneWayMarketTemplate } from '@/lend/types/lend.types' +import type { FormEstGas, FormStatus as LendFormStatus, FormValues } from '@/lend/components/PageLendMarket/types' +import { type FormStatus as DefaultFormStatus, type OneWayMarketTemplate } from '@/lend/types/lend.types' import { _parseStepTokensList } from '@/lend/utils/helpers' -export const DEFAULT_FORM_STATUS: FormStatus = { +export const DEFAULT_FORM_STATUS: DefaultFormStatus = { isApproved: false, isApprovedCompleted: false, isComplete: false, @@ -11,7 +11,7 @@ export const DEFAULT_FORM_STATUS: FormStatus = { stepError: '', } -export const DEFAULT_CREATE_FORM_STATUS: FormStatus = { +export const DEFAULT_CREATE_FORM_STATUS: LendFormStatus = { ...DEFAULT_FORM_STATUS, warning: '', step: '', diff --git a/apps/main/src/lend/components/PageVault/Page.tsx b/apps/main/src/lend/components/PageVault/Page.tsx index 8aa4162fa3..4639300e45 100644 --- a/apps/main/src/lend/components/PageVault/Page.tsx +++ b/apps/main/src/lend/components/PageVault/Page.tsx @@ -11,12 +11,7 @@ import useTitleMapper from '@/lend/hooks/useTitleMapper' import { helpers } from '@/lend/lib/apiLending' import useStore from '@/lend/store/useStore' import { type MarketUrlParams, PageContentProps } from '@/lend/types/lend.types' -import { - getCollateralListPathname, - getLoanCreatePathname, - getLoanManagePathname, - parseMarketParams, -} from '@/lend/utils/utilsRouter' +import { getCollateralListPathname, getLoanPathname, parseMarketParams } from '@/lend/utils/utilsRouter' import { MarketDetails } from '@/llamalend/features/market-details' import { NoPosition, SupplyPositionDetails } from '@/llamalend/features/market-position-details' import { useLoanExists } from '@/llamalend/queries/loan-exists' @@ -65,8 +60,8 @@ const Page = () => { }) const marketDetails = useMarketDetails({ chainId: rChainId, - llamma: market, - llammaId: rOwmId, + market: market, + marketId: rOwmId, }) useEffect(() => { @@ -106,8 +101,7 @@ const Page = () => { titleMapper, } - const borrowPathnameFn = loanExists ? getLoanManagePathname : getLoanCreatePathname - const positionDetailsHrefs = { borrow: borrowPathnameFn(params, rOwmId), supply: '' } + const positionDetailsHrefs = { borrow: getLoanPathname(params, rOwmId), supply: '' } const hasSupplyPosition = (supplyPositionDetails.shares.value ?? 0) > 0 return isSuccess && !market ? ( @@ -133,7 +127,7 @@ const Page = () => { - + diff --git a/apps/main/src/lend/constants.ts b/apps/main/src/lend/constants.ts index 06c99b8b98..71068b19ba 100644 --- a/apps/main/src/lend/constants.ts +++ b/apps/main/src/lend/constants.ts @@ -1,8 +1,7 @@ import { LEND_ROUTES } from '@ui-kit/shared/routes' export const MARKET_ROUTES = { - PAGE_CREATE: '/create', - PAGE_MANAGE: '/manage', + PAGE_LOAN: '', PAGE_VAULT: '/vault', } as const diff --git a/apps/main/src/lend/hooks/useBorrowPositionDetails.ts b/apps/main/src/lend/hooks/useBorrowPositionDetails.ts index b465193a93..653c9dff10 100644 --- a/apps/main/src/lend/hooks/useBorrowPositionDetails.ts +++ b/apps/main/src/lend/hooks/useBorrowPositionDetails.ts @@ -34,11 +34,19 @@ export const useBorrowPositionDetails = ({ }: UseBorrowPositionDetailsProps): BorrowPositionDetailsProps => { const { controller } = market?.addresses ?? {} const { address: userAddress } = useAccount() - const { data: userLoanDetails, isLoading: isUserLoanDetailsLoading } = useUserLoanDetails({ + const { data: loanExists } = useLoanExists({ chainId, marketId, userAddress, }) + const { data: userLoanDetails, isLoading: isUserLoanDetailsLoading } = useUserLoanDetails( + { + chainId, + marketId, + userAddress, + }, + !!loanExists, + ) const { bands, health, @@ -49,11 +57,6 @@ export const useBorrowPositionDetails = ({ state: { collateral, borrowed, debt } = {}, } = userLoanDetails ?? {} const prices = useStore((state) => state.markets.pricesMapper[chainId]?.[marketId]) - const { data: loanExists } = useLoanExists({ - chainId, - marketId, - userAddress, - }) const { data: userPnl, isLoading: isUserPnlLoading } = useUserPnl({ chainId, marketId, diff --git a/apps/main/src/lend/hooks/useLendPageTitle.ts b/apps/main/src/lend/hooks/useLendPageTitle.ts index a4d43e60a3..da1212c247 100644 --- a/apps/main/src/lend/hooks/useLendPageTitle.ts +++ b/apps/main/src/lend/hooks/useLendPageTitle.ts @@ -1,14 +1,13 @@ import { useEffect } from 'react' +import { notFalsy } from '@curvefi/prices-api/objects.util' /** * Custom hook to set the document title for markets pages * @param collateralSymbol - The symbol of the collateral token * @param prefix - The prefix part of the title (e.g., "Create - ...") */ -export function useLendPageTitle(collateralSymbol: string | undefined, prefix: string) { +export function useLendPageTitle(collateralSymbol: string | undefined, prefix?: string) { useEffect(() => { - if (collateralSymbol) { - document.title = `${prefix} - ${collateralSymbol} - Curve Llamalend` - } + document.title = notFalsy(prefix, collateralSymbol, `Curve Llamalend`).join(' - ') }, [collateralSymbol, prefix]) } diff --git a/apps/main/src/lend/hooks/useMarketDetails.tsx b/apps/main/src/lend/hooks/useMarketDetails.tsx index fe2cc1ddc4..876906055b 100644 --- a/apps/main/src/lend/hooks/useMarketDetails.tsx +++ b/apps/main/src/lend/hooks/useMarketDetails.tsx @@ -16,8 +16,8 @@ const { sum } = lodash type UseMarketDetailsProps = { chainId: ChainId - llamma: OneWayMarketTemplate | null | undefined - llammaId: string + market: OneWayMarketTemplate | null | undefined + marketId: string } const averageMultiplier = 30 @@ -25,18 +25,18 @@ const averageMultiplierString = `${averageMultiplier}D` export const useMarketDetails = ({ chainId, - llamma, - llammaId, + market, + marketId, }: UseMarketDetailsProps): Omit => { const blockchainId = networks[chainId]?.id as Chain - const { collateral_token, borrowed_token } = llamma ?? {} - const { controller, vault } = llamma?.addresses ?? {} - const marketRate = useStore((state) => state.markets.ratesMapper[chainId]?.[llammaId]) + const { collateral_token, borrowed_token } = market ?? {} + const { controller, vault } = market?.addresses ?? {} + const marketRate = useStore((state) => state.markets.ratesMapper[chainId]?.[marketId]) const { data: { rates, collateralAmount, borrowedAmount, cap, available, maxLeverage, crvRates, rewardsApr }, isLoading: isMarketDetailsLoading, - } = useLendMarketDetails({ chainId, marketId: llammaId }) + } = useLendMarketDetails({ chainId, marketId }) const { data: lendingSnapshots, isLoading: isSnapshotsLoading } = useLendingSnapshots({ blockchainId, contractAddress: controller as Address, @@ -126,7 +126,7 @@ export const useMarketDetails = ({ total: collateralAmount ?? null, totalUsdValue: collateralAmount && collateralUsdRate ? collateralAmount * collateralUsdRate : null, usdRate: collateralUsdRate ?? null, - loading: !llamma || isMarketDetailsLoading.marketCollateralAmounts || collateralUsdRateLoading, + loading: !market || isMarketDetailsLoading.marketCollateralAmounts || collateralUsdRateLoading, }, borrowToken: { symbol: borrowed_token?.symbol ?? null, @@ -134,7 +134,7 @@ export const useMarketDetails = ({ total: borrowedAmount ?? null, totalUsdValue: borrowedAmount && borrowedUsdRate ? borrowedAmount * borrowedUsdRate : null, usdRate: borrowedUsdRate ?? null, - loading: !llamma || isMarketDetailsLoading.marketCollateralAmounts || borrowedUsdRateLoading, + loading: !market || isMarketDetailsLoading.marketCollateralAmounts || borrowedUsdRateLoading, }, borrowAPY: { rate: borrowApy != null ? Number(borrowApy) : null, @@ -145,7 +145,7 @@ export const useMarketDetails = ({ totalBorrowRate: borrowApy == null ? null : Number(borrowApy) - (collateralRebasingYield ?? 0), totalAverageBorrowRate, extraRewards: campaigns, - loading: !llamma || isSnapshotsLoading || isMarketDetailsLoading.marketOnChainRates, + loading: !market || isSnapshotsLoading || isMarketDetailsLoading.marketOnChainRates, }, supplyAPY: { rate: supplyApy != null ? Number(supplyApy) : null, @@ -171,17 +171,17 @@ export const useMarketDetails = ({ })) : [], extraRewards: campaigns, - loading: !llamma || isSnapshotsLoading || isMarketDetailsLoading.marketOnChainRates, + loading: !market || isSnapshotsLoading || isMarketDetailsLoading.marketOnChainRates, }, availableLiquidity: { value: available ?? null, max: cap ?? null, - loading: !llamma || isMarketDetailsLoading.marketCapAndAvailable, + loading: !market || isMarketDetailsLoading.marketCapAndAvailable, }, maxLeverage: maxLeverage ? { value: Number(maxLeverage), - loading: !llamma || isMarketDetailsLoading.marketMaxLeverage, + loading: !market || isMarketDetailsLoading.marketMaxLeverage, } : undefined, } diff --git a/apps/main/src/lend/types/lend.types.ts b/apps/main/src/lend/types/lend.types.ts index 6482d9c180..30350ce79f 100644 --- a/apps/main/src/lend/types/lend.types.ts +++ b/apps/main/src/lend/types/lend.types.ts @@ -80,12 +80,6 @@ export type ExpectedBorrowed = { avgPrice: string } -export type VaultCreateFormType = 'create' | 'leverage' -export type VaultDepositFormType = 'deposit' | 'stake' -export type VaultWithdrawFormType = 'withdraw' | 'unstake' | 'claim' -export type VaultManageFormType = 'loan' | 'collateral' -export type RFormType = VaultCreateFormType | VaultDepositFormType | VaultWithdrawFormType | VaultManageFormType | '' - export type PageContentProps = { params: T rChainId: ChainId diff --git a/apps/main/src/lend/utils/helpers.ts b/apps/main/src/lend/utils/helpers.ts index 72f14081fe..48440d8d4e 100644 --- a/apps/main/src/lend/utils/helpers.ts +++ b/apps/main/src/lend/utils/helpers.ts @@ -61,7 +61,3 @@ export function _parseActiveKey(api: Api | null, market: OneWayMarketTemplate | const parsedSignerAddress = signerAddress.slice(0, 10) return `${chainId}-${parsedSignerAddress}${market?.id}` } - -export function _showNoLoanFound(signerAddress: string | undefined, isComplete: boolean, loanExists?: boolean) { - if (!!signerAddress && !isComplete && typeof loanExists !== 'undefined' && !loanExists) return true -} diff --git a/apps/main/src/lend/utils/utilsRouter.ts b/apps/main/src/lend/utils/utilsRouter.ts index e755a12fa4..dbdc3143f8 100644 --- a/apps/main/src/lend/utils/utilsRouter.ts +++ b/apps/main/src/lend/utils/utilsRouter.ts @@ -9,14 +9,11 @@ export const getPath = ({ network }: UrlParams, route: string) => getInternalUrl export const getCollateralListPathname = ({ network }: NetworkUrlParams) => getInternalUrl('llamalend', network, LLAMALEND_ROUTES.PAGE_MARKETS) -const getMarketPathname = (params: UrlParams, marketId: string, page: LendMarketRoute) => - `${getCollateralListPathname(params)}/${marketId}${page}` +const getMarketPathname = ({ network }: UrlParams, marketId: string, page: LendMarketRoute) => + `${getInternalUrl('lend', network, ROUTE.PAGE_MARKETS)}/${marketId}${page}` -export const getLoanCreatePathname = (params: UrlParams, marketId: string) => - getMarketPathname(params, marketId, ROUTE.PAGE_CREATE) - -export const getLoanManagePathname = (params: UrlParams, marketId: string) => - getMarketPathname(params, marketId, ROUTE.PAGE_MANAGE) +export const getLoanPathname = (params: UrlParams, marketId: string) => + getMarketPathname(params, marketId, ROUTE.PAGE_LOAN) export const getVaultPathname = (params: UrlParams, marketId: string) => getMarketPathname(params, marketId, ROUTE.PAGE_VAULT) diff --git a/apps/main/src/routes/lend.routes.tsx b/apps/main/src/routes/lend.routes.tsx index 74888adf00..99d1faad16 100644 --- a/apps/main/src/routes/lend.routes.tsx +++ b/apps/main/src/routes/lend.routes.tsx @@ -21,9 +21,6 @@ const lendLayoutRoute = createRoute({ const layoutProps = { getParentRoute: () => lendLayoutRoute } -const RedirectToMarketPage = ({ params: { network, market } }: { params: MarketUrlParams }) => - redirectTo(`/lend/${network}/markets/${market}/manage`) - export const lendRoutes = lendLayoutRoute.addChildren([ createRoute({ path: '/', @@ -72,8 +69,18 @@ export const lendRoutes = lendLayoutRoute.addChildren([ }), ...layoutProps, }), - createRoute({ path: '$network/markets/$market/create/{$-formType}', loader: RedirectToMarketPage, ...layoutProps }), - createRoute({ path: '$network/markets/$market/manage/{$-formType}', loader: RedirectToMarketPage, ...layoutProps }), + createRoute({ + path: '$network/markets/$market/create/{-$formType}', + loader: ({ params: { network, market } }: { params: MarketUrlParams }) => + redirectTo(`/lend/${network}/markets/${market}`), + ...layoutProps, + }), + createRoute({ + path: '$network/markets/$market/manage/{-$formType}', + loader: ({ params: { network, market } }: { params: MarketUrlParams }) => + redirectTo(`/lend/${network}/markets/${market}`), + ...layoutProps, + }), createRoute({ path: '$network/markets/$market/vault/$formType', loader: ({ params: { network, market } }) => redirectTo(`/lend/${network}/markets/${market}/vault`), From e2e841e3dc2d1842227838ab0d1007bcf439b3dd Mon Sep 17 00:00:00 2001 From: Daniel Schiavini Date: Wed, 3 Dec 2025 12:04:56 +0100 Subject: [PATCH 3/8] e2e: update regex --- tests/cypress/e2e/llamalend/llamalend-markets.cy.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/cypress/e2e/llamalend/llamalend-markets.cy.ts b/tests/cypress/e2e/llamalend/llamalend-markets.cy.ts index 6cfa99fe58..fa96d6a20c 100644 --- a/tests/cypress/e2e/llamalend/llamalend-markets.cy.ts +++ b/tests/cypress/e2e/llamalend/llamalend-markets.cy.ts @@ -271,10 +271,7 @@ describe(`LlamaLend Markets`, () => { }) it(`should navigate to market details`, () => { - const [type, urlRegex] = oneOf( - ['mint', /\/crvusd\/\w+\/markets\/.+\/create/], - ['lend', /\/lend\/\w+\/markets\/.+\/create/], - ) + const [type, urlRegex] = oneOf(['mint', /\/crvusd\/\w+\/markets\/.+\/?$/], ['lend', /\/lend\/\w+\/markets\/.+\/?$/]) withFilterChips(() => { cy.get(`[data-testid="chip-${type}"]`).click() firstRow().contains(lodash.capitalize(type)) From 8dbeeae1710480f2738f35f1189dfa71c6dd9a58 Mon Sep 17 00:00:00 2001 From: Daniel Schiavini Date: Wed, 3 Dec 2025 15:21:10 +0100 Subject: [PATCH 4/8] fix: market id is not the address in the URL --- .../lend/components/PageLendMarket/LendMarketPage.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx b/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx index a56664fcfb..b71f0402cd 100644 --- a/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx @@ -38,9 +38,9 @@ const { Spacing } = SizesAndSpaces export const LendMarketPage = () => { const params = useParams() - const { rMarket: marketId, rChainId: chainId } = parseMarketParams(params) + const { rMarket, rChainId: chainId } = parseMarketParams(params) - const { data: market, isSuccess } = useOneWayMarket(chainId, marketId) + const { data: market, isSuccess } = useOneWayMarket(chainId, rMarket) const { llamaApi: api = null, connectState } = useConnection() const titleMapper = useTitleMapper() const { provider, connect } = useWallet() @@ -51,9 +51,10 @@ export const LendMarketPage = () => { const fetchAllUserMarketDetails = useStore((state) => state.user.fetchAll) const setMarketsStateKey = useStore((state) => state.markets.setStateByKey) + const marketId = market?.id ?? '' // todo: use market?.id directly everywhere since we pass the market too! const userActiveKey = helpers.getUserActiveKey(api, market!) const { signerAddress } = api ?? {} - useLendPageTitle(market?.collateral_token?.symbol ?? marketId) + useLendPageTitle(market?.collateral_token?.symbol ?? rMarket) const marketDetails = useMarketDetails({ chainId, market, marketId }) const network = networks[chainId] @@ -78,7 +79,7 @@ export const LendMarketPage = () => { const [isLoaded, setLoaded] = useState(false) - const borrowPositionDetails = useBorrowPositionDetails({ chainId, market: market, marketId: marketId }) + const borrowPositionDetails = useBorrowPositionDetails({ chainId, market: market, marketId }) useEffect(() => { // delay fetch rest after form details are fetched first From 2cf3f4cadfaf0160362c235e6685e6613e224a0e Mon Sep 17 00:00:00 2001 From: Daniel Schiavini Date: Fri, 5 Dec 2025 15:31:20 +0100 Subject: [PATCH 5/8] fix: typo --- apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx b/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx index 51869d5baf..26c7d22884 100644 --- a/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx +++ b/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx @@ -39,7 +39,7 @@ const LendManageLegacyMenu = [ }, { value: 'collateral', - label: t`Borrow`, + label: t`Collateral`, subTabs: [ { value: 'collateral-increase', label: t`Add collateral`, component: LoanCollateralAdd }, { value: 'collateral-decrease', label: t`Remove collateral`, component: LoanCollateralRemove }, From fa00d4fe54b132eee2f32fe0c6fb405e334ed8d1 Mon Sep 17 00:00:00 2001 From: Daniel Schiavini Date: Wed, 10 Dec 2025 15:45:57 +0100 Subject: [PATCH 6/8] fix: loan tab names --- apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx | 2 +- apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx | 2 +- apps/main/src/lend/components/PageVault/Page.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx b/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx index 1c234f77c0..78e9336899 100644 --- a/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx @@ -54,7 +54,7 @@ export const LendMarketPage = () => { const marketId = market?.id ?? '' // todo: use market?.id directly everywhere since we pass the market too! const userActiveKey = helpers.getUserActiveKey(api, market!) const { signerAddress } = api ?? {} - useLendPageTitle(market?.collateral_token?.symbol ?? rMarket) + useLendPageTitle(market?.collateral_token?.symbol ?? rMarket, t`Lend`) const marketDetails = useMarketDetails({ chainId, market, marketId }) const network = networks[chainId] diff --git a/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx b/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx index ba508c88c8..f0ffe8b69f 100644 --- a/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx +++ b/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx @@ -30,7 +30,7 @@ const ClosePositionTab = ({ rChainId, rOwmId }: ManageLoanProps) => ( const LendManageLegacyMenu = [ { value: 'loan', - label: t`Borrow`, + label: t`Loan`, subTabs: [ { value: 'loan-increase', label: t`Borrow more`, component: LoanBorrowMore }, { value: 'loan-decrease', label: t`Repay`, component: LoanRepay }, diff --git a/apps/main/src/lend/components/PageVault/Page.tsx b/apps/main/src/lend/components/PageVault/Page.tsx index 503f01db37..7b22c3a60b 100644 --- a/apps/main/src/lend/components/PageVault/Page.tsx +++ b/apps/main/src/lend/components/PageVault/Page.tsx @@ -88,7 +88,7 @@ const Page = () => { market, ]) - useLendPageTitle(market?.collateral_token?.symbol, 'Supply') + useLendPageTitle(market?.collateral_token?.symbol, t`Supply`) const pageProps: PageContentProps = { params, From f468e478631cab5437b1bccde26c5391559c96dc Mon Sep 17 00:00:00 2001 From: Daniel Schiavini Date: Wed, 10 Dec 2025 16:58:03 +0100 Subject: [PATCH 7/8] fix: soft liquidation tab wrapper --- apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx b/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx index f0ffe8b69f..ded57dcd9a 100644 --- a/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx +++ b/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx @@ -103,6 +103,6 @@ export const ManageLoanTabs = ({ : shouldUseManageLoanMuiForm ? LendManageNewMenu : LendManageLegacyMenu - const shouldWrap = menu === LendManageLegacyMenu + const shouldWrap = menu === LendManageLegacyMenu || menu === LendManageSoftLiquidationMenu // todo: LoanFormWrapper in soft liquidation return } From a2eaf28fdc5db1b1890737762082872591be2811 Mon Sep 17 00:00:00 2001 From: Daniel Schiavini Date: Mon, 15 Dec 2025 21:00:06 +0100 Subject: [PATCH 8/8] fix: review comments --- apps/main/src/lend/components/MarketInformationComp.tsx | 2 +- .../src/lend/components/PageLendMarket/LendMarketPage.tsx | 7 ------- apps/main/src/lend/hooks/useLendPageTitle.ts | 2 +- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/apps/main/src/lend/components/MarketInformationComp.tsx b/apps/main/src/lend/components/MarketInformationComp.tsx index b40310e278..b7fa1b60c8 100644 --- a/apps/main/src/lend/components/MarketInformationComp.tsx +++ b/apps/main/src/lend/components/MarketInformationComp.tsx @@ -26,7 +26,7 @@ type MarketInformationCompProps = { const EMPTY_ARRAY: never[] = [] /** - * Reusable component for OHLC charts, Bands (if applicable), and market parameters. For /create, /manage, /vault pages. + * Reusable component for OHLC charts, Bands (if applicable), and market parameters, used in market and vault pages. */ export const MarketInformationComp = ({ pageProps, loanExists, userActiveKey, type }: MarketInformationCompProps) => { const { rChainId, rOwmId, market } = pageProps diff --git a/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx b/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx index 78e9336899..d72184acfa 100644 --- a/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx @@ -143,13 +143,6 @@ export const LendMarketPage = () => { ) : ( t.design.Layer[1].Fill }}> - {userCollateralEvents?.events && userCollateralEvents.events.length > 0 && ( - - )} )} {userCollateralEvents?.events && userCollateralEvents.events.length > 0 && ( diff --git a/apps/main/src/lend/hooks/useLendPageTitle.ts b/apps/main/src/lend/hooks/useLendPageTitle.ts index da1212c247..c6de390c27 100644 --- a/apps/main/src/lend/hooks/useLendPageTitle.ts +++ b/apps/main/src/lend/hooks/useLendPageTitle.ts @@ -4,7 +4,7 @@ import { notFalsy } from '@curvefi/prices-api/objects.util' /** * Custom hook to set the document title for markets pages * @param collateralSymbol - The symbol of the collateral token - * @param prefix - The prefix part of the title (e.g., "Create - ...") + * @param prefix - The prefix part of the title (e.g., "Supply - ...") */ export function useLendPageTitle(collateralSymbol: string | undefined, prefix?: string) { useEffect(() => {