Skip to content

Commit 1c49873

Browse files
authored
Merge branch 'main' into feat/analytics-app
2 parents d0cb2c5 + 004ffff commit 1c49873

File tree

44 files changed

+664
-503
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+664
-503
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Banner } from '@ui-kit/shared/ui/Banner'
2+
import { Stack } from '@mui/material'
3+
import { t } from '@ui-kit/lib/i18n'
4+
import { PoolUrlParams } from '../types/main.types'
5+
6+
const MonadBannerAlert = ({ params }: { params: PoolUrlParams }) => {
7+
const showFactoryStableNg11Banner = params.pool === 'factory-stable-ng-11' && params.network === 'monad'
8+
9+
if (showFactoryStableNg11Banner)
10+
return (
11+
<Stack>
12+
<Banner severity="alert">
13+
{t`This pool has been misconfigured. It has been set to withdraw only. To minimize impact withdraw in balanced proportion instead of single sided.`}
14+
</Banner>
15+
</Stack>
16+
)
17+
}
18+
19+
export default MonadBannerAlert

apps/main/src/dex/components/PagePool/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import useStore from '@/dex/store/useStore'
2020
import { getChainPoolIdActiveKey } from '@/dex/utils'
2121
import { getPath } from '@/dex/utils/utilsRouter'
2222
import { ManageGauge } from '@/dex/widgets/manage-gauge'
23+
import type { PoolUrlParams } from '@/dex/types/main.types'
2324
import Stack from '@mui/material/Stack'
2425
import AlertBox from '@ui/AlertBox'
2526
import { AppFormContentWrapper } from '@ui/AppForm'
@@ -44,6 +45,7 @@ import { t } from '@ui-kit/lib/i18n'
4445
import { REFRESH_INTERVAL } from '@ui-kit/lib/model'
4546
import { type TabOption, TabsSwitcher } from '@ui-kit/shared/ui/TabsSwitcher'
4647
import { SizesAndSpaces } from '@ui-kit/themes/design/1_sizes_spaces'
48+
import MonadBannerAlert from '../MonadBannerAlert'
4749

4850
const DEFAULT_SEED: Seed = { isSeed: null, loaded: false }
4951
const { MaxWidth } = SizesAndSpaces
@@ -54,7 +56,6 @@ const Transfer = (pageTransferProps: PageTransferProps) => {
5456
const { signerAddress } = curve ?? {}
5557
const push = useNavigate()
5658
const poolAlert = usePoolAlert(poolData)
57-
5859
const { tokensMapper } = useTokensMapper(rChainId)
5960
const userPoolActiveKey = curve && rPoolId ? getUserPoolActiveKey(curve, rPoolId) : ''
6061
const chainIdPoolId = getChainPoolIdActiveKey(rChainId, rPoolId)
@@ -206,6 +207,7 @@ const Transfer = (pageTransferProps: PageTransferProps) => {
206207

207208
return (
208209
<>
210+
<MonadBannerAlert params={params as PoolUrlParams} />
209211
<AppPageFormContainer isAdvanceMode={true}>
210212
<AppPageFormsWrapper className="grid-transfer">
211213
<Stack

apps/main/src/dex/lib/networks.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ export const defaultNetworks = Object.entries({
144144
twocryptoFactoryOld: true,
145145
twocryptoFactory: true,
146146
tricryptoFactory: true,
147+
fxswapFactory: true,
147148
hasFactory: true,
148149
pricesApi: true,
149150
},

apps/main/src/lend/components/AlertNoLoanFound.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const AlertNoLoanFound = ({ alertType, owmId }: { alertType?: AlertType; owmId:
2525
size="large"
2626
onClick={() => {
2727
setStateByKeyMarkets('marketDetailsView', 'market')
28-
push(getLoanCreatePathname(params, owmId, 'create'))
28+
push(getLoanCreatePathname(params, owmId))
2929
}}
3030
>
3131
Create loan
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { useCallback } from 'react'
2+
import LoanFormCreate from '@/lend/components/PageLoanCreate/LoanFormCreate'
3+
import type { FormValues } from '@/lend/components/PageLoanCreate/types'
4+
import { DEFAULT_FORM_VALUES } from '@/lend/components/PageLoanCreate/utils'
5+
import networks from '@/lend/networks'
6+
import useStore from '@/lend/store/useStore'
7+
import { type MarketUrlParams, type PageContentProps } from '@/lend/types/lend.types'
8+
import { CreateLoanForm } from '@/llamalend/features/borrow/components/CreateLoanForm'
9+
import type { OnBorrowFormUpdate } from '@/llamalend/features/borrow/types'
10+
import { hasLeverage } from '@/llamalend/llama.utils'
11+
import { useCreateLoanMuiForm } from '@ui-kit/hooks/useFeatureFlags'
12+
import { t } from '@ui-kit/lib/i18n'
13+
import { type FormTab, FormTabs } from '@ui-kit/shared/ui/FormTabs/FormTabs'
14+
15+
type CreateLoanProps = PageContentProps<MarketUrlParams>
16+
17+
/**
18+
* Callback that synchronizes the `ChartOhlc` component with the `RangeSlider` component in the new `BorrowTabContents`.
19+
*/
20+
const useOnFormUpdate = ({ api, market }: Pick<CreateLoanProps, 'api' | 'market'>): OnBorrowFormUpdate =>
21+
useCallback(
22+
async ({ debt, userCollateral, range, slippage, leverageEnabled }) => {
23+
const { setFormValues, setStateByKeys } = useStore.getState().loanCreate
24+
const formValues: FormValues = {
25+
...DEFAULT_FORM_VALUES,
26+
n: range,
27+
debt: `${debt ?? ''}`,
28+
userCollateral: `${userCollateral ?? ''}`,
29+
}
30+
await setFormValues(api, market, formValues, `${slippage}`, leverageEnabled)
31+
setStateByKeys({ isEditLiqRange: true })
32+
},
33+
[api, market],
34+
)
35+
36+
function CreateLoanTab({ market, api, rChainId }: CreateLoanProps) {
37+
const onLoanCreated = useStore((state) => state.loanCreate.onLoanCreated)
38+
const onCreated = useCallback(
39+
async () => api && market && (await onLoanCreated(api, market)),
40+
[api, market, onLoanCreated],
41+
)
42+
const onUpdate = useOnFormUpdate({ market, api })
43+
return (
44+
<CreateLoanForm networks={networks} chainId={rChainId} market={market} onUpdate={onUpdate} onCreated={onCreated} />
45+
)
46+
}
47+
48+
const LendCreateTabsNewMenu = [
49+
{ value: 'create', label: t`Borrow`, component: CreateLoanTab },
50+
] satisfies FormTab<CreateLoanProps>[]
51+
52+
const LendCreateTabsOldMenu = [
53+
{ value: 'create', label: t`Create Loan`, component: LoanFormCreate },
54+
{
55+
value: 'leverage',
56+
label: t`Leverage`,
57+
component: (p) => <LoanFormCreate {...p} isLeverage />,
58+
visible: ({ market }) => market && hasLeverage(market),
59+
},
60+
] satisfies FormTab<CreateLoanProps>[]
61+
62+
export const LoanCreateTabs = (pageProps: CreateLoanProps) => {
63+
const menu = useCreateLoanMuiForm() ? LendCreateTabsNewMenu : LendCreateTabsOldMenu
64+
const shouldWrap = menu === LendCreateTabsOldMenu
65+
return <FormTabs params={pageProps} menu={menu} shouldWrap={shouldWrap} />
66+
}

apps/main/src/lend/components/PageLoanCreate/LoanFormCreate/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ const LoanCreate = ({
412412
size="large"
413413
onClick={() => {
414414
setStateByKeyMarkets('marketDetailsView', 'user')
415-
push(getLoanManagePathname(params, rOwmId, 'loan'))
415+
push(getLoanManagePathname(params, rOwmId))
416416
}}
417417
>
418418
Manage loan
@@ -431,7 +431,7 @@ const LoanCreate = ({
431431
)}
432432
{steps && <Stepper steps={steps} />}
433433
{formStatus.isComplete && market && (
434-
<LinkButton variant="filled" size="large" href={getLoanManagePathname(params, market.id, 'loan')}>
434+
<LinkButton variant="filled" size="large" href={getLoanManagePathname(params, market.id)}>
435435
Manage loan
436436
</LinkButton>
437437
)}

apps/main/src/lend/components/PageLoanCreate/Page.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { Address } from 'viem'
33
import CampaignRewardsBanner from '@/lend/components/CampaignRewardsBanner'
44
import { MarketInformationComp } from '@/lend/components/MarketInformationComp'
55
import { MarketInformationTabs } from '@/lend/components/MarketInformationTabs'
6-
import LoanCreate from '@/lend/components/PageLoanCreate/index'
6+
import { LoanCreateTabs } from '@/lend/components/PageLoanCreate/LoanCreateTabs'
77
import { useOneWayMarket } from '@/lend/entities/chain'
88
import { useLendPageTitle } from '@/lend/hooks/useLendPageTitle'
99
import { useMarketDetails } from '@/lend/hooks/useMarketDetails'
@@ -35,7 +35,7 @@ const { Spacing } = SizesAndSpaces
3535

3636
const Page = () => {
3737
const params = useParams<MarketUrlParams>()
38-
const { rMarket, rChainId, rFormType } = parseMarketParams(params)
38+
const { rMarket, rChainId } = parseMarketParams(params)
3939

4040
const { data: market, isSuccess } = useOneWayMarket(rChainId, rMarket)
4141
const { llamaApi: api = null, connectState } = useConnection()
@@ -88,7 +88,6 @@ const Page = () => {
8888
params,
8989
rChainId,
9090
rOwmId,
91-
rFormType,
9291
api,
9392
market,
9493
titleMapper,
@@ -97,7 +96,7 @@ const Page = () => {
9796
}
9897
const positionDetailsHrefs = {
9998
borrow: '',
100-
supply: getVaultPathname(params, rOwmId, 'deposit'),
99+
supply: getVaultPathname(params, rOwmId),
101100
}
102101

103102
return isSuccess && !market ? (
@@ -106,7 +105,7 @@ const Page = () => {
106105
<>
107106
<DetailPageStack>
108107
<AppPageFormsWrapper data-testid="form-wrapper">
109-
{rChainId && rOwmId && <LoanCreate {...pageProps} params={params} />}
108+
{rChainId && rOwmId && <LoanCreateTabs {...pageProps} params={params} />}
110109
</AppPageFormsWrapper>
111110
<Stack flexDirection="column" flexGrow={1} sx={{ gap: Spacing.md }}>
112111
<CampaignRewardsBanner

apps/main/src/lend/components/PageLoanCreate/index.tsx

Lines changed: 0 additions & 103 deletions
This file was deleted.

apps/main/src/lend/components/PageLoanCreate/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {
1010
import type { HealthMode } from '@/llamalend/llamalend.types'
1111
import type { Step } from '@ui/Stepper/types'
1212

13-
export type FormType = 'create' | 'vault' | 'leverage'
1413
export type StepKey = 'APPROVAL' | 'CREATE' | ''
1514
export type InpError = 'too-much' | 'too-much-max' | ''
1615

apps/main/src/lend/components/PageLoanManage/LoanBorrowMore/index.tsx

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ import useStore from '@/lend/store/useStore'
2121
import { Api, OneWayMarketTemplate, PageContentProps } from '@/lend/types/lend.types'
2222
import { _showNoLoanFound } from '@/lend/utils/helpers'
2323
import { DEFAULT_HEALTH_MODE } from '@/llamalend/constants'
24+
import { hasLeverage } from '@/llamalend/llama.utils'
2425
import type { HealthMode } from '@/llamalend/llamalend.types'
2526
import { useLoanExists } from '@/llamalend/queries/loan-exists'
2627
import Stack from '@mui/material/Stack'
2728
import Typography from '@mui/material/Typography'
2829
import AlertBox from '@ui/AlertBox'
30+
import { AppFormContentWrapper } from '@ui/AppForm'
2931
import { getActiveStep } from '@ui/Stepper/helpers'
3032
import Stepper from '@ui/Stepper/Stepper'
3133
import type { Step } from '@ui/Stepper/types'
@@ -40,17 +42,9 @@ import { SizesAndSpaces } from '@ui-kit/themes/design/1_sizes_spaces'
4042

4143
const { Spacing } = SizesAndSpaces
4244

43-
const LoanBorrowMore = ({
44-
rChainId,
45-
rOwmId,
46-
isLeverage = false,
47-
isLoaded,
48-
api,
49-
market,
50-
userActiveKey,
51-
}: PageContentProps & { isLeverage?: boolean }) => {
45+
const LoanBorrowMore = ({ rChainId, rOwmId, isLoaded, api, market, userActiveKey }: PageContentProps) => {
5246
const isSubscribed = useRef(false)
53-
47+
const isLeverage = !!market && hasLeverage(market)
5448
const activeKey = useStore((state) => state.loanBorrowMore.activeKey)
5549
const activeKeyMax = useStore((state) => state.loanBorrowMore.activeKeyMax)
5650
const detailInfoLeverage = useStore((state) => state.loanBorrowMore.detailInfoLeverage[activeKey])
@@ -436,3 +430,14 @@ const LoanBorrowMore = ({
436430
}
437431

438432
export default LoanBorrowMore
433+
434+
/**
435+
* The new implementation of LoanBorrowMore with mui isn't ready yet. For now, we wrap the old one for styling.
436+
*/
437+
export const LoanBorrowMoreWrapped = (props: PageContentProps) => (
438+
<Stack sx={{ backgroundColor: (t) => t.design.Layer[1].Fill }}>
439+
<AppFormContentWrapper>
440+
<LoanBorrowMore {...props} />
441+
</AppFormContentWrapper>
442+
</Stack>
443+
)

0 commit comments

Comments
 (0)