Skip to content

Commit

Permalink
Rename query
Browse files Browse the repository at this point in the history
  • Loading branch information
agualis committed Dec 15, 2023
1 parent ec4866a commit 4feba5e
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,12 @@ export class UnbalancedAddLiquidityHandler implements AddLiquidityHandler {
const { account, slippagePercent } = buildInputs.inputs
const sdkQueryOutput = buildInputs.sdkQueryOutput
if (!account || !slippagePercent) throw new Error('Missing account or slippage')
if (!sdkQueryOutput) throw new Error('Missing sdkQueryOutput')
if (!sdkQueryOutput) {
throw new Error(
`Missing sdkQueryOutput.
It looks that you did not setLastSdkQueryOutput (check out if you are calling useAddLiquidityBtpOutQuery)`
)
}

const addLiquidity = new AddLiquidity()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ export function useBuildAddLiquidityQuery(

const { buildAddLiquidityTx } = useAddLiquidity()
const { slippage } = useUserSettings()

//TODO: fix this
const allowances = {}

function queryKey(): string {
Expand All @@ -37,6 +39,7 @@ export function useBuildAddLiquidityQuery(
account: userAddress,
slippagePercent: slippage,
}
// This method is implemented by an specific handler (instance of AddLiquidityHandler)
return await buildAddLiquidityTx(inputs)
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,12 @@ export class UnbalancedRemoveLiquidityHandler implements RemoveLiquidityHandler
const { account, slippagePercent } = buildInputs.inputs
const sdkQueryOutput = buildInputs.sdkQueryOutput
if (!account || !slippagePercent) throw new Error('Missing account or slippage')
if (!sdkQueryOutput) throw new Error('Missing sdkQueryOutput')
if (!sdkQueryOutput) {
throw new Error(
`Missing sdkQueryOutput.
It looks that you did not setLastSdkQueryOutput (check out if you are calling useRemoveLiquidityBtpOutQuery)`
)
}

const removeLiquidity = new RemoveLiquidity()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,21 @@
import { useUserSettings } from '@/lib/modules/user/settings/useUserSettings'
import { emptyAddress } from '@/lib/modules/web3/contracts/wagmi-helpers'
import { useUserAccount } from '@/lib/modules/web3/useUserAccount'
import { Dictionary } from 'lodash'
import { useQuery } from 'wagmi'
import { HumanAmountIn } from '../../liquidity-types'
import { useRemoveLiquidity } from '../useRemoveLiquidity'
import { generateRemoveLiquidityQueryKey } from './generateRemoveLiquidityQueryKey'
import { HumanAmountIn } from '../../liquidity-types'

// Queries the SDK to create a transaction config to be used by wagmi's useManagedSendTransaction
export function useBuildRemoveLiquidityQuery(
humanAmountsIn: HumanAmountIn[],
enabled: boolean,
poolId: string
) {
const { userAddress } = useUserAccount()
const { userAddress, isConnected } = useUserAccount()

const { buildRemoveLiquidityTx } = useRemoveLiquidity()
const { slippage } = useUserSettings()
const allowances = {}

function queryKey(): string {
return generateRemoveLiquidityQueryKey({
Expand All @@ -30,26 +28,29 @@ export function useBuildRemoveLiquidityQuery(
})
}

const addLiquidityQuery = useQuery(
const removeLiquidityQuery = useQuery(
[queryKey()],
async () => {
const inputs = {
humanAmountsIn,
account: userAddress || emptyAddress,
slippagePercent: slippage,
}
console.log('Voy a construir la TX config')
// This method is implemented by an specific handler (instance of RemoveLiquidityHandler)
return await buildRemoveLiquidityTx(inputs)
},
{
enabled: enabled && !!userAddress && allowances && hasTokenAllowance(allowances),
enabled: enabled && isConnected && hasApproval(),
}
)

return addLiquidityQuery
// console.log({ removeLiquidityQuery: removeLiquidityQuery.data?.data })

return removeLiquidityQuery
}

function hasTokenAllowance(tokenAllowances: Dictionary<bigint>) {
// TODO: depending on the user humanAmountsIn this rule will be different
// Here we will check that the user has enough allowance for the current remove liquidity operation
return Object.values(tokenAllowances).every(a => a > 0n)
function hasApproval() {
// TODO: Do we need approvals in any scenario
return true
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,24 @@
'use client'

import { useUserSettings } from '@/lib/modules/user/settings/useUserSettings'
import { emptyAddress } from '@/lib/modules/web3/contracts/wagmi-helpers'
import { useUserAccount } from '@/lib/modules/web3/useUserAccount'
import { RemoveLiquidityQueryOutput, TokenAmount } from '@balancer/sdk'
import { useState } from 'react'
import { useDebounce } from 'use-debounce'
import { formatUnits } from 'viem'
import { useQuery } from 'wagmi'
import { generateRemoveLiquidityQueryKey } from './generateRemoveLiquidityQueryKey'
import { RemoveLiquidityHandler } from '../handlers/RemoveLiquidity.handler'
import { HumanAmountIn } from '../../liquidity-types'
import { areEmptyAmounts } from '../../LiquidityActionHelpers'
import { fNum } from '@/lib/shared/utils/numbers'
import { HumanAmountIn } from '../../liquidity-types'
import { RemoveLiquidityHandler } from '../handlers/RemoveLiquidity.handler'
import { generateRemoveLiquidityQueryKey } from './generateRemoveLiquidityQueryKey'

const debounceMillis = 300

export function useRemoveLiquidityBtpOutQuery(
export function useRemoveLiquidityBtpInQuery(
handler: RemoveLiquidityHandler,
humanAmountsIn: HumanAmountIn[],
poolId: string
) {
const { userAddress } = useUserAccount()
const { userAddress, isConnected } = useUserAccount()
const { slippage } = useUserSettings()
const [bptIn, setBptIn] = useState<TokenAmount | null>(null)
const [lastSdkQueryOutput, setLastSdkQueryOutput] = useState<
Expand All @@ -31,14 +28,14 @@ export function useRemoveLiquidityBtpOutQuery(

function queryKey(): string {
return generateRemoveLiquidityQueryKey({
userAddress: userAddress || emptyAddress,
userAddress,
poolId,
slippage,
humanAmountsIn: debouncedHumanAmountsIn as unknown as HumanAmountIn[],
})
}

async function queryBptOut() {
async function queryBptIn() {
const queryResult = await handler.queryRemoveLiquidity({ humanAmountsIn })

const { bptIn } = queryResult
Expand All @@ -55,14 +52,14 @@ export function useRemoveLiquidityBtpOutQuery(
const query = useQuery(
[queryKey()],
async () => {
return await queryBptOut()
return await queryBptIn()
},
{
enabled: !!userAddress && !areEmptyAmounts(humanAmountsIn),
enabled: isConnected && !areEmptyAmounts(humanAmountsIn),
}
)

const bptOutUnits = bptIn ? fNum('integer', formatUnits(bptIn.amount, 18)) : '-'

return { bptIn: bptIn, bptOutUnits, isBptInQueryLoading: query.isLoading, lastSdkQueryOutput }
// TODO: move to component
// const bptOutUnits = bptIn ? fNum('integer', formatUnits(bptIn.amount, 18)) : '-'
return { bptIn: bptIn, isBptInQueryLoading: query.isLoading, lastSdkQueryOutput }
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
import { wETHAddress, wjAuraAddress } from '@/lib/debug-helpers'
import { poolId, wETHAddress, wjAuraAddress } from '@/lib/debug-helpers'
import { testHook } from '@/test/utils/custom-renderers'
import { waitFor } from '@testing-library/react'

import { aWjAuraWethPoolElementMock } from '@/test/msw/builders/gqlPoolElement.builders'
import { defaultTestUserAccount } from '@/test/utils/wagmi'
import { selectRemoveLiquidityHandler } from '../handlers/selectRemoveLiquidityHandler'
import { useRemoveLiquidityBtpOutQuery } from './useRemoveLiquidityBtInQuery'
import { HumanAmountIn } from '../../liquidity-types'
import { selectRemoveLiquidityHandler } from '../handlers/selectRemoveLiquidityHandler'
import { useRemoveLiquidityBtpInQuery } from './useRemoveLiquidityBptInQuery'

async function testQuery(humanAmountsIn: HumanAmountIn[]) {
const handler = selectRemoveLiquidityHandler(aWjAuraWethPoolElementMock())
const { result } = testHook(() =>
useRemoveLiquidityBtpOutQuery(handler, humanAmountsIn, defaultTestUserAccount)
)
const { result } = testHook(() => useRemoveLiquidityBtpInQuery(handler, humanAmountsIn, poolId))
return result
}

Expand Down
13 changes: 13 additions & 0 deletions test/utils/custom-renderers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import { aGqlPoolElementMock } from '../msw/builders/gqlPoolElement.builders'
import { apolloTestClient } from './apollo-test-client'
import { AppRouterContextProviderMock } from './app-router-context-provider-mock'
import { createWagmiTestConfig, defaultTestUserAccount, mainnetMockConnector } from './wagmi'
import { RemoveLiquidityProvider } from '@/lib/modules/pool/actions/remove-liquidity/useRemoveLiquidity'

export type WrapperProps = { children: ReactNode }
export type Wrapper = ({ children }: WrapperProps) => ReactNode
Expand Down Expand Up @@ -170,6 +171,18 @@ export const DefaultAddLiquidityTestProvider = ({ children }: PropsWithChildren)
</AddLiquidityProvider>
)

export const DefaultRemoveLiquidityTestProvider = ({ children }: PropsWithChildren) => (
<RemoveLiquidityProvider>
<TokenAllowancesProvider
spenderAddress={vaultV2Address}
tokenAddresses={[wETHAddress, wjAuraAddress]}
userAddress={defaultTestUserAccount}
>
{children}
</TokenAllowancesProvider>
</RemoveLiquidityProvider>
)

/* Builds a PoolProvider that injects the provided pool data*/
export const buildDefaultPoolTestProvider =
(pool: GqlPoolElement = aGqlPoolElementMock()) =>
Expand Down

0 comments on commit 4feba5e

Please sign in to comment.