mango-v4-ui/hooks/useJupiterMints.ts

51 lines
1.3 KiB
TypeScript
Raw Normal View History

2022-11-18 11:11:06 -08:00
import { Group } from '@blockworks-foundation/mango-v4'
import { CLUSTER } from '@store/mangoStore'
import { useQuery } from '@tanstack/react-query'
import useMangoGroup from 'hooks/useMangoGroup'
import { Token } from 'types/jupiter'
import { JUPITER_API_DEVNET, JUPITER_API_MAINNET } from 'utils/constants'
2022-11-18 11:11:06 -08:00
const fetchJupiterTokens = async (group: Group) => {
const url = CLUSTER === 'devnet' ? JUPITER_API_DEVNET : JUPITER_API_MAINNET
2022-11-18 11:11:06 -08:00
const response = await fetch(url)
const data: Token[] = await response.json()
2022-11-18 11:11:06 -08:00
const bankMints = Array.from(group.banksMapByName.values()).map((b) =>
2022-11-18 11:11:06 -08:00
b[0].mint.toString()
)
const mangoTokens = data.filter((t) => bankMints.includes(t.address))
2022-11-18 11:11:06 -08:00
return {
mangoTokens,
jupiterTokens: data,
}
}
const useJupiterMints = (): {
mangoTokens: Token[]
jupiterTokens: Token[]
isFetching: boolean
} => {
const { group } = useMangoGroup()
const res = useQuery(
2022-11-18 11:11:06 -08:00
['jupiter-mango-tokens'],
() => fetchJupiterTokens(group!),
{
cacheTime: 1000 * 60 * 10,
staleTime: 1000 * 60 * 10,
2023-01-20 08:13:03 -08:00
retry: 3,
2022-11-18 11:11:06 -08:00
enabled: !!group,
2023-01-20 08:13:03 -08:00
refetchOnWindowFocus: false,
2022-11-18 11:11:06 -08:00
}
)
return {
mangoTokens: res?.data?.mangoTokens || [],
jupiterTokens: res?.data?.jupiterTokens || [],
isFetching: res?.isFetching || false,
}
}
export default useJupiterMints