asi-calculator/features/strategies/hooks/use-quote.ts

115 lines
2.8 KiB
TypeScript
Raw Normal View History

2024-04-01 15:23:01 +02:00
'use client'
import { fetcher, getTokenAddressBySymbol } from '@/lib'
import type { TokenSymbol } from '@/types'
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
)
// -> CUDOS
const {
data: dataSwapToCudos,
isValidating: isValidatingToCudos,
isLoading: isLoadingToCudos
} = useSWR(
shouldFetch
? `/api/quote/?tokenIn=${getTokenAddressBySymbol(
tokenSymbol
)}&tokenOut=${getTokenAddressBySymbol('CUDOS')}&amountIn=${amount}`
: null,
fetcher,
options
)
2024-04-01 14:42:08 +02:00
const amountToOcean =
dataSwapToOcean?.amountOut / Number(`1e${dataSwapToOcean?.decimals}`)
const amountToAgix =
dataSwapToAgix?.amountOut / Number(`1e${dataSwapToAgix?.decimals}`)
const amountToCudos =
dataSwapToCudos?.amountOut / Number(`1e${dataSwapToCudos?.decimals}`)
2024-04-01 14:42:08 +02:00
const amountToFet =
dataSwapToFet?.amountOut / Number(`1e${dataSwapToFet?.decimals}`)
return shouldFetch
? {
amountToOcean,
amountToAgix,
amountToFet,
amountToCudos,
2024-04-01 14:42:08 +02:00
isValidatingToAgix,
isLoadingToAgix,
isValidatingToFet,
isLoadingToFet,
isValidatingToOcean,
isLoadingToOcean,
isValidatingToCudos,
isLoadingToCudos
2024-04-01 14:42:08 +02:00
}
: {
amountToOcean: undefined,
amountToAgix: undefined,
amountToCudos: undefined,
2024-04-01 14:42:08 +02:00
amountToFet: undefined,
isValidatingToAgix: false,
isLoadingToAgix: false,
isValidatingToFet: false,
isLoadingToFet: false,
isValidatingToOcean: false,
isLoadingToOcean: false,
isValidatingToCudos: false,
isLoadingToCudos: false
2024-04-01 14:42:08 +02:00
}
}