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/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/MarketInformationComp.tsx b/apps/main/src/lend/components/MarketInformationComp.tsx index aadaca4c5d..b7fa1b60c8 100644 --- a/apps/main/src/lend/components/MarketInformationComp.tsx +++ b/apps/main/src/lend/components/MarketInformationComp.tsx @@ -18,24 +18,17 @@ const { Spacing } = SizesAndSpaces type MarketInformationCompProps = { pageProps: PageContentProps - loanExists?: boolean + loanExists: boolean | undefined userActiveKey: string type: 'borrow' | 'supply' - page?: 'create' | 'manage' } 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 = 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/PageLoanManage/Page.tsx b/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx similarity index 73% rename from apps/main/src/lend/components/PageLoanManage/Page.tsx rename to apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx index 57b9f5eb9f..d72184acfa 100644 --- a/apps/main/src/lend/components/PageLoanManage/Page.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LendMarketPage.tsx @@ -3,7 +3,8 @@ 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 { 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' @@ -13,8 +14,8 @@ 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 { 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' @@ -35,41 +36,28 @@ import { SizesAndSpaces } from '@ui-kit/themes/design/1_sizes_spaces' const { Spacing } = SizesAndSpaces -const Page = () => { +export const LendMarketPage = () => { const params = useParams() - const { rMarket, rChainId } = parseMarketParams(params) + const { rMarket, rChainId: chainId } = parseMarketParams(params) + + const { data: market, isSuccess } = useOneWayMarket(chainId, rMarket) const { llamaApi: api = null, connectState } = useCurve() const titleMapper = useTitleMapper() - const { data: market, isSuccess } = useOneWayMarket(rChainId, rMarket) - const rOwmId = market?.id ?? '' - const userActiveKey = helpers.getUserActiveKey(api, market!) + 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 { provider, connect } = useWallet() + 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, t`Lend`) - 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 marketDetails = useMarketDetails({ chainId, market, marketId }) + const network = networks[chainId] const { data: userCollateralEvents, isLoading: collateralEventsIsLoading, @@ -83,46 +71,47 @@ const Page = () => { borrowToken: market?.borrowed_token, network, }) + const { data: loanExists, isLoading: isLoanExistsLoading } = useLoanExists({ + chainId, + marketId: marketId, + userAddress: signerAddress, + }) - const isInSoftLiquidation = - borrowPositionDetails.liquidationAlert.softLiquidation || borrowPositionDetails.liquidationAlert.hardLiquidation + const [isLoaded, setLoaded] = useState(false) - useEffect(() => { - if (api && market && isPageVisible) { - if (loanExists) setMarketsStateKey('marketDetailsView', 'user') - setLoaded(true) - } - }, [api, isPageVisible, loanExists, market, setMarketsStateKey]) + const borrowPositionDetails = useBorrowPositionDetails({ chainId, market: market, marketId }) 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) + 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, fetchAllUserMarketDetails, isLoaded, isPageVisible, loanExists, market]) - - useLendPageTitle(market?.collateral_token?.symbol, 'Manage') - - const pageProps = { - params, - rChainId, - rOwmId, - isLoaded, + }, [ api, + fetchAllMarketDetails, + fetchUserMarketBalances, + fetchAllUserMarketDetails, + isPageVisible, market, - userActiveKey, - titleMapper, - } + loanExists, + ]) + + useEffect(() => { + if (api && market && isPageVisible) { + if (loanExists) setMarketsStateKey('marketDetailsView', 'user') + setLoaded(true) + } + }, [api, isPageVisible, loanExists, market, setMarketsStateKey]) - const positionDetailsHrefs = { - borrow: '', - supply: getVaultPathname(params, rOwmId), - } + const pageProps = { params, rChainId: chainId, rOwmId: marketId, isLoaded, api, market, userActiveKey, titleMapper } return isSuccess && !market ? ( @@ -130,15 +119,25 @@ const Page = () => { <> - {rChainId && rOwmId && } + {chainId && + marketId && + !isLoanExistsLoading && + (loanExists ? ( + + ) : ( + + ))} - + {loanExists ? ( ) : ( @@ -185,5 +184,3 @@ const Page = () => { ) } - -export default Page 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 91% rename from apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/index.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/index.tsx index 65a9ad2b8f..7025e79cb2 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanBorrowMore/index.tsx @@ -1,28 +1,25 @@ 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' 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' 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' @@ -78,12 +75,6 @@ const LoanBorrowMore = ({ const { signerAddress } = api ?? {} const { expectedCollateral } = detailInfoLeverage ?? {} - const { data: loanExists } = useLoanExists({ - chainId: rChainId, - marketId: market?.id, - userAddress: signerAddress, - }) - const updateFormValues = useCallback( ( updatedFormValues: Partial, @@ -417,22 +408,18 @@ const LoanBorrowMore = ({ {/* 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/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 89% rename from apps/main/src/lend/components/PageLoanManage/LoanCollateralAdd/index.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanCollateralAdd/index.tsx index eea70678a7..a9ee8ee001 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanCollateralAdd/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanCollateralAdd/index.tsx @@ -1,15 +1,14 @@ 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' 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' @@ -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/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 89% rename from apps/main/src/lend/components/PageLoanManage/LoanCollateralRemove/index.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanCollateralRemove/index.tsx index 0a2e54f410..88249492fa 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanCollateralRemove/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanCollateralRemove/index.tsx @@ -1,17 +1,16 @@ 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' 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' @@ -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/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/LoanCreateTabs.tsx b/apps/main/src/lend/components/PageLendMarket/LoanCreateTabs.tsx similarity index 88% rename from apps/main/src/lend/components/PageLoanCreate/LoanCreateTabs.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanCreateTabs.tsx index de431d4a23..d2f5444c72 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 { 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' import useStore from '@/lend/store/useStore' import { type MarketUrlParams, type PageContentProps } from '@/lend/types/lend.types' @@ -60,11 +60,11 @@ const LendCreateTabsNewMenu = [ ] satisfies FormTab[] 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/PageLoanCreate/LoanFormCreate/index.tsx b/apps/main/src/lend/components/PageLendMarket/LoanFormCreate/LoanCreateForm.tsx similarity index 87% rename from apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/index.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanFormCreate/LoanCreateForm.tsx index f9f4426a09..18394c5895 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' @@ -17,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' @@ -34,18 +29,16 @@ 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' -const LoanCreate = ({ +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) @@ -61,7 +54,6 @@ const LoanCreate = ({ 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) @@ -77,12 +69,6 @@ const LoanCreate = ({ 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) @@ -404,39 +390,18 @@ const LoanCreate = ({ {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`}}> @@ -446,5 +411,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 91% rename from apps/main/src/lend/components/PageLoanManage/LoanRepay/index.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanRepay/index.tsx index 8c4c51015e..4f4a68d688 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanRepay/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanRepay/index.tsx @@ -1,28 +1,25 @@ 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' -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' 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/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 88% rename from apps/main/src/lend/components/PageLoanManage/LoanSelfLiquidation/index.tsx rename to apps/main/src/lend/components/PageLendMarket/LoanSelfLiquidation/index.tsx index 15efbecd39..c76feb7caf 100644 --- a/apps/main/src/lend/components/PageLoanManage/LoanSelfLiquidation/index.tsx +++ b/apps/main/src/lend/components/PageLendMarket/LoanSelfLiquidation/index.tsx @@ -3,13 +3,12 @@ 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' 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' @@ -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/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/ManageLoanTabs.tsx b/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx similarity index 84% rename from apps/main/src/lend/components/PageLoanManage/ManageLoanTabs.tsx rename to apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx index 51aee3eb16..ded57dcd9a 100644 --- a/apps/main/src/lend/components/PageLoanManage/ManageLoanTabs.tsx +++ b/apps/main/src/lend/components/PageLendMarket/ManageLoanTabs.tsx @@ -1,17 +1,18 @@ -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' 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' @@ -29,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 }, @@ -90,16 +91,18 @@ 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 : shouldUseManageLoanMuiForm ? LendManageNewMenu : LendManageLegacyMenu - const shouldWrap = menu === LendManageLegacyMenu + const shouldWrap = menu === LendManageLegacyMenu || menu === LendManageSoftLiquidationMenu // todo: LoanFormWrapper in soft liquidation return } 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 65% rename from apps/main/src/lend/components/PageLoanCreate/utils.ts rename to apps/main/src/lend/components/PageLendMarket/utils.ts index 8f212ae0dc..361b4bc504 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 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 = { - ...FORM_STATUS, +export const DEFAULT_FORM_STATUS: DefaultFormStatus = { + isApproved: false, + isApprovedCompleted: false, + isComplete: false, + isInProgress: false, + error: '', + stepError: '', +} + +export const DEFAULT_CREATE_FORM_STATUS: LendFormStatus = { + ...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/PageLoanCreate/Page.tsx b/apps/main/src/lend/components/PageLoanCreate/Page.tsx deleted file mode 100644 index f8d8c8e775..0000000000 --- a/apps/main/src/lend/components/PageLoanCreate/Page.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/PageLoanCreate/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, useCurve, 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 } = useCurve() - 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/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/Page.tsx b/apps/main/src/lend/components/PageVault/Page.tsx index af524ec02c..7b22c3a60b 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(() => { @@ -93,7 +88,7 @@ const Page = () => { market, ]) - useLendPageTitle(market?.collateral_token?.symbol, 'Supply') + useLendPageTitle(market?.collateral_token?.symbol, t`Supply`) const pageProps: PageContentProps = { params, @@ -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/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/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/useLendPageTitle.ts b/apps/main/src/lend/hooks/useLendPageTitle.ts index a4d43e60a3..c6de390c27 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 - ...") + * @param prefix - The prefix part of the title (e.g., "Supply - ...") */ -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/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 9f3639f2af..30350ce79f 100644 --- a/apps/main/src/lend/types/lend.types.ts +++ b/apps/main/src/lend/types/lend.types.ts @@ -240,3 +240,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/lend/utils/helpers.ts b/apps/main/src/lend/utils/helpers.ts index 141a72dd62..49c210636d 100644 --- a/apps/main/src/lend/utils/helpers.ts +++ b/apps/main/src/lend/utils/helpers.ts @@ -53,7 +53,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 ac2bbde7c8..dbdc3143f8 100644 --- a/apps/main/src/lend/utils/utilsRouter.ts +++ b/apps/main/src/lend/utils/utilsRouter.ts @@ -12,11 +12,8 @@ export const getCollateralListPathname = ({ network }: NetworkUrlParams) => 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 6b0a942f70..99d1faad16 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' @@ -63,33 +63,22 @@ 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, + component: LendMarketPage, head: ({ params }) => ({ - meta: [{ title: `Create - ${params.market} - Curve Llamalend` }], + meta: [{ title: `${params.market} - Curve Llamalend` }], }), ...layoutProps, }), createRoute({ - path: '$network/markets/$market/manage/$formType', - loader: ({ params: { network, market } }) => redirectTo(`/lend/${network}/markets/${market}/manage`), + path: '$network/markets/$market/create/{-$formType}', + loader: ({ params: { network, market } }: { params: MarketUrlParams }) => + redirectTo(`/lend/${network}/markets/${market}`), ...layoutProps, }), createRoute({ - path: '$network/markets/$market/manage', - component: PageLoanManage, - head: ({ params }) => ({ - meta: [{ title: `Manage - ${params.market} - Curve Llamalend` }], - }), + path: '$network/markets/$market/manage/{-$formType}', + loader: ({ params: { network, market } }: { params: MarketUrlParams }) => + redirectTo(`/lend/${network}/markets/${market}`), ...layoutProps, }), createRoute({ diff --git a/tests/cypress/e2e/llamalend/llamalend-markets.cy.ts b/tests/cypress/e2e/llamalend/llamalend-markets.cy.ts index c6c30936c2..8d0014c691 100644 --- a/tests/cypress/e2e/llamalend/llamalend-markets.cy.ts +++ b/tests/cypress/e2e/llamalend/llamalend-markets.cy.ts @@ -273,7 +273,7 @@ describe(`LlamaLend Markets`, () => { it(`should navigate to market details`, () => { const [type, urlRegex] = oneOf( ['mint', /\/crvusd\/\w+\/markets\/[\w-]+\/?$/], - ['lend', /\/lend\/\w+\/markets\/.+\/create/], + ['lend', /\/lend\/\w+\/markets\/.+\/?$/], ) withFilterChips(() => { cy.get(`[data-testid="chip-${type}"]`).click() diff --git a/tests/cypress/support/routes.ts b/tests/cypress/support/routes.ts index 79d8167c02..878e95812c 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: () =>