2024-04-01 15:23:01 +02:00
|
|
|
'use client'
|
|
|
|
|
2024-04-01 14:42:08 +02:00
|
|
|
import { TokenSymbol } from '@/types'
|
2024-04-16 12:20:29 +02:00
|
|
|
import { getTokenAddressBySymbol, fetcher } from '@/lib'
|
2024-04-01 14:42:08 +02:00
|
|
|
import useSWR from 'swr'
|
|
|
|
|
|
|
|
const options = {
|
|
|
|
keepPreviousData: true // so loading UI can kick in properly
|
|
|
|
}
|
|
|
|
|
|
|
|
export function useQuote(
|
|
|
|
tokenSymbol: TokenSymbol,
|
|
|
|
amount: number,
|
|
|
|
shouldFetch: boolean
|
|
|
|
) {
|
|
|
|
// -> AGIX
|
|
|
|
const {
|
|
|
|
data: dataSwapToAgix,
|
|
|
|
isValidating: isValidatingToAgix,
|
|
|
|
isLoading: isLoadingToAgix
|
|
|
|
} = useSWR(
|
|
|
|
shouldFetch
|
|
|
|
? `/api/quote/?tokenIn=${getTokenAddressBySymbol(
|
|
|
|
tokenSymbol
|
|
|
|
)}&tokenOut=${getTokenAddressBySymbol('AGIX')}&amountIn=${amount}`
|
|
|
|
: null,
|
|
|
|
fetcher,
|
|
|
|
options
|
|
|
|
)
|
|
|
|
|
|
|
|
// -> FET
|
|
|
|
const {
|
|
|
|
data: dataSwapToFet,
|
|
|
|
isValidating: isValidatingToFet,
|
|
|
|
isLoading: isLoadingToFet
|
|
|
|
} = useSWR(
|
|
|
|
shouldFetch
|
|
|
|
? `/api/quote/?tokenIn=${getTokenAddressBySymbol(
|
|
|
|
tokenSymbol
|
|
|
|
)}&tokenOut=${getTokenAddressBySymbol('FET')}&amountIn=${amount}`
|
|
|
|
: null,
|
|
|
|
fetcher,
|
|
|
|
options
|
|
|
|
)
|
|
|
|
|
|
|
|
// -> OCEAN
|
|
|
|
const {
|
|
|
|
data: dataSwapToOcean,
|
|
|
|
isValidating: isValidatingToOcean,
|
|
|
|
isLoading: isLoadingToOcean
|
|
|
|
} = useSWR(
|
|
|
|
shouldFetch
|
|
|
|
? `/api/quote/?tokenIn=${getTokenAddressBySymbol(
|
|
|
|
tokenSymbol
|
|
|
|
)}&tokenOut=${getTokenAddressBySymbol('OCEAN')}&amountIn=${amount}`
|
|
|
|
: null,
|
|
|
|
fetcher,
|
|
|
|
options
|
|
|
|
)
|
|
|
|
|
|
|
|
const amountToOcean =
|
|
|
|
dataSwapToOcean?.amountOut / Number(`1e${dataSwapToOcean?.decimals}`)
|
|
|
|
const amountToAgix =
|
|
|
|
dataSwapToAgix?.amountOut / Number(`1e${dataSwapToAgix?.decimals}`)
|
|
|
|
const amountToFet =
|
|
|
|
dataSwapToFet?.amountOut / Number(`1e${dataSwapToFet?.decimals}`)
|
|
|
|
|
|
|
|
return shouldFetch
|
|
|
|
? {
|
|
|
|
amountToOcean,
|
|
|
|
amountToAgix,
|
|
|
|
amountToFet,
|
|
|
|
isValidatingToAgix,
|
|
|
|
isLoadingToAgix,
|
|
|
|
isValidatingToFet,
|
|
|
|
isLoadingToFet,
|
|
|
|
isValidatingToOcean,
|
|
|
|
isLoadingToOcean
|
|
|
|
}
|
|
|
|
: {
|
|
|
|
amountToOcean: undefined,
|
|
|
|
amountToAgix: undefined,
|
|
|
|
amountToFet: undefined,
|
|
|
|
isValidatingToAgix: false,
|
|
|
|
isLoadingToAgix: false,
|
|
|
|
isValidatingToFet: false,
|
|
|
|
isLoadingToFet: false,
|
|
|
|
isValidatingToOcean: false,
|
|
|
|
isLoadingToOcean: false
|
|
|
|
}
|
|
|
|
}
|