Skip to content

Commit 73b8f31

Browse files
authored
chore: move Defiedge to history page (#11376)
<!-- Before opening a pull request, please read the [contributing guidelines](https://github.com/pancakeswap/pancake-frontend/blob/develop/CONTRIBUTING.md) first --> <!-- start pr-codex --> --- ## PR-Codex overview This PR focuses on enhancing the liquidity management features in the application by adding conditional checks and new properties to improve user experience, particularly regarding staking and adding liquidity based on the position manager's status. ### Detailed summary - Updated `AddLiquidity` component to make `onStake` optional. - Modified `VaultContent` to filter out DefiEdge pools based on their status. - Added `isDisabled` prop to `StakedAssets` and updated button behaviors accordingly. - Enhanced `useOnStake` hook to accept `isDisabled` parameter. - Integrated `positionManagerStatus` checks in `LiquidityManagement` to disable actions when the status is finished. - Updated button components to reflect the disabled state based on `positionManagerStatus`. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` <!-- end pr-codex -->
1 parent 4f0fa13 commit 73b8f31

File tree

6 files changed

+71
-23
lines changed

6 files changed

+71
-23
lines changed

apps/web/src/views/PositionManagers/components/AddLiquidity.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ interface Props {
7575
minDepositUSD?: number
7676
boosterMultiplier?: number
7777
isBooster?: boolean
78-
onStake: (
78+
onStake?: (
7979
amountA: CurrencyAmount<Currency>,
8080
amountB: CurrencyAmount<Currency>,
8181
allowDepositToken0: boolean,

apps/web/src/views/PositionManagers/components/LiquidityManagement.tsx

+24-5
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,13 @@ import { StatusViewButtons } from 'views/Farms/components/YieldBooster/component
1515
import { useBCakeBoostLimitAndLockInfo } from 'views/Farms/components/YieldBooster/hooks/bCakeV3/useBCakeV3Info'
1616
import { useBoostStatusPM } from 'views/Farms/components/YieldBooster/hooks/bCakeV3/useBoostStatus'
1717
import { useAccount } from 'wagmi'
18-
import { AprDataInfo, usePMV2SSMaxBoostMultiplier, useWrapperBooster } from '../hooks'
18+
import {
19+
AprDataInfo,
20+
PositionManagerStatus,
21+
usePMV2SSMaxBoostMultiplier,
22+
usePositionManagerStatus,
23+
useWrapperBooster,
24+
} from '../hooks'
1925
import { useOnStake } from '../hooks/useOnStake'
2026
import { AddLiquidity } from './AddLiquidity'
2127
import { RemoveLiquidity } from './RemoveLiquidity'
@@ -153,6 +159,7 @@ export const LiquidityManagement = memo(function LiquidityManagement({
153159

154160
const showRemoveLiquidityModal = useCallback(() => setRemoveLiquidityModalOpen(true), [])
155161
const hideRemoveLiquidityModal = useCallback(() => setRemoveLiquidityModalOpen(false), [])
162+
156163
const { maxBoostMultiplier } = usePMV2SSMaxBoostMultiplier()
157164

158165
const relevantTokenBalances = useCurrencyBalances(
@@ -166,14 +173,20 @@ export const LiquidityManagement = memo(function LiquidityManagement({
166173
const dividerBorderStyle = useMemo(() => `1px solid ${colors.input}`, [colors.input])
167174
const isSingleDepositToken0 = isSingleDepositToken && allowDepositToken0
168175

176+
const { status: positionManagerStatus } = usePositionManagerStatus()
169177
const { status } = useBoostStatusPM(Boolean(bCakeWrapper), boosterMultiplier, refetch)
170178
const { shouldUpdate, veCakeUserMultiplierBeforeBoosted } = useWrapperBooster(
171179
boosterContractAddress ?? '0x',
172180
boosterMultiplier ?? 1,
173181
bCakeWrapper,
174182
)
175-
const { isTxLoading, onStake, onUpdate } = useOnStake(manager.id, contractAddress, bCakeWrapper)
176183
const { locked } = useBCakeBoostLimitAndLockInfo()
184+
const { isTxLoading, onStake, onUpdate } = useOnStake(
185+
manager.id,
186+
contractAddress,
187+
bCakeWrapper,
188+
positionManagerStatus === PositionManagerStatus.FINISHED,
189+
)
177190

178191
return (
179192
<>
@@ -185,12 +198,13 @@ export const LiquidityManagement = memo(function LiquidityManagement({
185198
currencyB={currencyB}
186199
staked0Amount={staked0Amount}
187200
staked1Amount={staked1Amount}
188-
onAdd={showAddLiquidityModal}
189-
onRemove={showRemoveLiquidityModal}
190201
token0PriceUSD={token0PriceUSD}
191202
token1PriceUSD={token1PriceUSD}
192203
isSingleDepositToken={isSingleDepositToken}
193204
isSingleDepositToken0={isSingleDepositToken0}
205+
onAdd={showAddLiquidityModal}
206+
onRemove={showRemoveLiquidityModal}
207+
isDisabled={positionManagerStatus === PositionManagerStatus.FINISHED}
194208
/>
195209
<AtomBox
196210
width={{
@@ -248,7 +262,12 @@ export const LiquidityManagement = memo(function LiquidityManagement({
248262
{!account ? (
249263
<ConnectWalletButton mt="4px" width="100%" />
250264
) : (
251-
<Button variant="primary" width="100%" onClick={showAddLiquidityModal}>
265+
<Button
266+
variant="primary"
267+
width="100%"
268+
onClick={showAddLiquidityModal}
269+
disabled={positionManagerStatus === PositionManagerStatus.FINISHED}
270+
>
252271
{t('Add Liquidity')}
253272
</Button>
254273
)}

apps/web/src/views/PositionManagers/components/StakedAssets.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ interface StakedAssetsProps {
2929
isSingleDepositToken0?: boolean
3030
onAdd?: () => void
3131
onRemove?: () => void
32+
isDisabled?: boolean
3233
}
3334

3435
export const StakedAssets = memo(function StakedAssets({
@@ -42,6 +43,7 @@ export const StakedAssets = memo(function StakedAssets({
4243
token1PriceUSD,
4344
isSingleDepositToken0,
4445
isSingleDepositToken,
46+
isDisabled,
4547
}: StakedAssetsProps) {
4648
const { t } = useTranslation()
4749

@@ -83,7 +85,7 @@ export const StakedAssets = memo(function StakedAssets({
8385
<ActionButton scale="md" onClick={onRemove} variant="secondary">
8486
<MinusIcon color="currentColor" width="1.5em" />
8587
</ActionButton>
86-
<ActionButton scale="md" ml="0.5em" onClick={onAdd} variant="secondary">
88+
<ActionButton scale="md" ml="0.5em" onClick={onAdd} variant="secondary" disabled={isDisabled}>
8789
<AddIcon color="currentColor" width="1.5em" />
8890
</ActionButton>
8991
</Flex>

apps/web/src/views/PositionManagers/components/TableView/LiquidityManagement.tsx

+26-10
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
import { useTranslation } from '@pancakeswap/localization'
2-
3-
import { AtomBox, Button, Flex, RowBetween, useMatchBreakpoints } from '@pancakeswap/uikit'
42
import { memo, useCallback, useMemo, useState } from 'react'
5-
import { useCurrencyBalances } from 'state/wallet/hooks'
6-
7-
import ConnectWalletButton from 'components/ConnectWalletButton'
83
import { styled, useTheme } from 'styled-components'
4+
import { AtomBox, Button, Flex, RowBetween, useMatchBreakpoints } from '@pancakeswap/uikit'
5+
import ConnectWalletButton from 'components/ConnectWalletButton'
6+
import { useCurrencyBalances } from 'state/wallet/hooks'
97
import { StatusView } from 'views/Farms/components/YieldBooster/components/bCakeV3/StatusView'
108
import { StatusViewButtons } from 'views/Farms/components/YieldBooster/components/bCakeV3/StatusViewButtons'
119
import { useBCakeBoostLimitAndLockInfo } from 'views/Farms/components/YieldBooster/hooks/bCakeV3/useBCakeV3Info'
1210
import { useBoostStatusPM } from 'views/Farms/components/YieldBooster/hooks/bCakeV3/useBoostStatus'
1311
import { useAccount } from 'wagmi'
14-
import { usePMV2SSMaxBoostMultiplier, useWrapperBooster } from '../../hooks'
12+
import {
13+
PositionManagerStatus,
14+
usePMV2SSMaxBoostMultiplier,
15+
usePositionManagerStatus,
16+
useWrapperBooster,
17+
} from '../../hooks'
1518
import { useOnStake } from '../../hooks/useOnStake'
1619
import { AddLiquidity } from '../AddLiquidity'
1720
import { LiquidityManagementProps } from '../LiquidityManagement'
@@ -108,15 +111,22 @@ export const LiquidityManagement = memo(function LiquidityManagement({
108111
const dividerBorderStyle = useMemo(() => `1px solid ${colors.input}`, [colors.input])
109112
const isSingleDepositToken0 = isSingleDepositToken && allowDepositToken0
110113

114+
const { status: positionManagerStatus } = usePositionManagerStatus()
111115
const { status } = useBoostStatusPM(Boolean(bCakeWrapper), boosterMultiplier, refetch)
112116
const { shouldUpdate, veCakeUserMultiplierBeforeBoosted } = useWrapperBooster(
113117
boosterContractAddress ?? '0x',
114118
boosterMultiplier ?? 1,
115119
bCakeWrapper,
116120
)
117-
const { isTxLoading, onStake, onUpdate } = useOnStake(manager.id, contractAddress, bCakeWrapper)
118121
const { locked } = useBCakeBoostLimitAndLockInfo()
119122
const { isDesktop } = useMatchBreakpoints()
123+
const { isTxLoading, onStake, onUpdate } = useOnStake(
124+
manager.id,
125+
contractAddress,
126+
bCakeWrapper,
127+
positionManagerStatus === PositionManagerStatus.FINISHED,
128+
)
129+
120130
return (
121131
<>
122132
{hasStaked ? (
@@ -131,12 +141,13 @@ export const LiquidityManagement = memo(function LiquidityManagement({
131141
currencyB={currencyB}
132142
staked0Amount={staked0Amount}
133143
staked1Amount={staked1Amount}
134-
onAdd={showAddLiquidityModal}
135-
onRemove={showRemoveLiquidityModal}
136144
token0PriceUSD={token0PriceUSD}
137145
token1PriceUSD={token1PriceUSD}
138146
isSingleDepositToken={isSingleDepositToken}
139147
isSingleDepositToken0={isSingleDepositToken0}
148+
onAdd={showAddLiquidityModal}
149+
onRemove={showRemoveLiquidityModal}
150+
isDisabled={positionManagerStatus === PositionManagerStatus.FINISHED}
140151
/>
141152
{!isDesktop && (
142153
<AtomBox
@@ -219,7 +230,12 @@ export const LiquidityManagement = memo(function LiquidityManagement({
219230
{!account ? (
220231
<ConnectWalletButton mt="4px" width="100%" />
221232
) : (
222-
<Button variant="primary" width="100%" onClick={showAddLiquidityModal}>
233+
<Button
234+
variant="primary"
235+
width="100%"
236+
onClick={showAddLiquidityModal}
237+
disabled={positionManagerStatus === PositionManagerStatus.FINISHED}
238+
>
223239
{t('Add Liquidity')}
224240
</Button>
225241
)}

apps/web/src/views/PositionManagers/containers/VaultContent.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { isThirdPartyVaultConfig } from '@pancakeswap/position-managers'
22
import { ViewMode } from '@pancakeswap/uikit'
33
import { memo, useMemo } from 'react'
44
import { useFarmsV3WithPositionsAndBooster } from 'state/farmsV3/hooks'
5+
import { MANAGER } from '@pancakeswap/position-managers/src/constants/managers'
56

67
import { CardLayout } from '../components'
78
import { TableRow } from '../components/TableView'
@@ -63,7 +64,12 @@ export const VaultContent = memo(function VaultContent() {
6364
}
6465
return true
6566
})
66-
.filter(() => {
67+
.filter((d) => {
68+
// Move all DefiEdge pools to history page
69+
if (d.manager === MANAGER.DEFIEDGE) {
70+
return status === PositionManagerStatus.FINISHED // Only show in history
71+
}
72+
6773
if (status === PositionManagerStatus.FINISHED) {
6874
return false
6975
// return d.endTimestamp <= Date.now() / 1000

apps/web/src/views/PositionManagers/hooks/useOnStake.tsx

+10-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ import { useCallback } from 'react'
1111
import { Address } from 'viem'
1212
import { usePMSlippage } from './usePMSlippage'
1313

14-
export const useOnStake = (managerId: MANAGER, contractAddress: Address, bCakeWrapperAddress?: Address) => {
14+
export const useOnStake = (
15+
managerId: MANAGER,
16+
contractAddress: Address,
17+
bCakeWrapperAddress?: Address,
18+
isDisabled?: boolean,
19+
) => {
1520
const positionManagerBCakeWrapperContract = usePositionManagerBCakeWrapperContract(bCakeWrapperAddress ?? '0x')
1621
const positionManagerWrapperContract = usePositionManagerWrapperContract(contractAddress)
1722
const { fetchWithCatchTxError, loading: pendingTx } = useCatchTxError()
@@ -58,7 +63,7 @@ export const useOnStake = (managerId: MANAGER, contractAddress: Address, bCakeWr
5863
},
5964
)
6065
}
61-
: () =>
66+
: async () =>
6267
positionManagerWrapperContract.write.mintThenDeposit(
6368
[
6469
allowDepositToken0 ? amountA?.numerator ?? 0n : 0n,
@@ -101,12 +106,12 @@ export const useOnStake = (managerId: MANAGER, contractAddress: Address, bCakeWr
101106
async (onDone?: () => void) => {
102107
const receipt = await fetchWithCatchTxError(
103108
bCakeWrapperAddress
104-
? () =>
109+
? async () =>
105110
positionManagerBCakeWrapperContract.write.deposit([0n, true], {
106111
account: account ?? '0x',
107112
chain,
108113
})
109-
: () =>
114+
: async () =>
110115
positionManagerWrapperContract.write.deposit([0n], {
111116
account: account ?? '0x',
112117
chain,
@@ -136,7 +141,7 @@ export const useOnStake = (managerId: MANAGER, contractAddress: Address, bCakeWr
136141
)
137142

138143
return {
139-
onStake: mintThenDeposit,
144+
onStake: isDisabled ? undefined : mintThenDeposit,
140145
onUpdate,
141146
isTxLoading: pendingTx,
142147
}

0 commit comments

Comments
 (0)