UNPKG

@lifi/widget

Version:

LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.

53 lines 2.44 kB
import { getToken, } from '@lifi/sdk'; import { useQuery, useQueryClient } from '@tanstack/react-query'; import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'; import { getConfigItemSets, isFormItemAllowed } from '../utils/item.js'; import { getQueryKey } from '../utils/queries.js'; export const useTokenSearch = (chainId, tokenQuery, enabled, formType) => { const queryClient = useQueryClient(); const { tokens: configTokens, keyPrefix } = useWidgetConfig(); const { data, isLoading } = useQuery({ queryKey: [getQueryKey('token-search', keyPrefix), chainId, tokenQuery], queryFn: async ({ queryKey: [, chainId, tokenQuery], signal }) => { const token = await getToken(chainId, tokenQuery, { signal, }); if (token) { // Filter config tokens by chain before checking if token is allowed const filteredConfigTokens = getConfigItemSets(configTokens, (tokens) => new Set(tokens .filter((t) => t.chainId === token.chainId) .map((t) => t.address.toLowerCase())), formType); // Return undefined if the token is denied if (!isFormItemAllowed(token, filteredConfigTokens, formType, (t) => t.address.toLowerCase())) { return null; } // Add token to main tokens cache queryClient.setQueriesData({ queryKey: [getQueryKey('tokens', keyPrefix)] }, (data) => { if (!data) { return data; } const chainTokens = data[chainId]; if (chainTokens?.some((t) => t.address.toLowerCase() === token.address.toLowerCase())) { return data; } // Mark token from search as unverified return { ...data, [chainId]: [ ...(chainTokens ?? []), { ...token, verified: false }, ], }; }); } return token; }, enabled: Boolean(chainId && tokenQuery && enabled), retry: false, }); return { token: data || undefined, isLoading, }; }; //# sourceMappingURL=useTokenSearch.js.map