@openocean.finance/widget
Version:
Openocean Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.
47 lines (44 loc) • 1.36 kB
text/typescript
import type { TokensResponse } from '@openocean.finance/widget-sdk'
import { useQuery, useQueryClient } from '@tanstack/react-query'
import { OpenOceanService } from '../services/OpenOceanService.js'
import type { TokenAmount } from '../types/token.js'
export const useTokenSearch = (
chainId?: number,
tokenQuery?: string,
enabled?: boolean
) => {
const queryClient = useQueryClient()
const { data, isLoading } = useQuery({
queryKey: ['token-search', chainId, tokenQuery],
queryFn: async ({ queryKey: [, chainId, tokenQuery], signal }) => {
const token = await OpenOceanService.getTokenInfo(
chainId?.toString() || '',
tokenQuery as string
)
if (token) {
queryClient.setQueriesData<TokensResponse>(
{ queryKey: ['tokens'] },
(data) => {
if (
data &&
!data.tokens[chainId as number]?.some(
(t) => t.address === token.address
)
) {
const clonedData = { ...data }
clonedData.tokens[chainId as number]?.push(token as TokenAmount)
return clonedData
}
}
)
}
return token as TokenAmount
},
enabled: Boolean(chainId && tokenQuery && enabled),
retry: false,
})
return {
token: data,
isLoading,
}
}