@nazabalm/widget
Version:
LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.
51 lines • 2.21 kB
JavaScript
import { getToken } from '@lifi/sdk';
import { useQuery, useQueryClient } from '@tanstack/react-query';
import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.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,
...(formType ? [formType] : []),
],
queryFn: async ({ queryKey: [, chainId, tokenQuery, formType], signal, }) => {
const token = await getToken(chainId, tokenQuery, {
signal,
});
if (token) {
// Check if the token is in the denied list for the current form type
const formTypeConfig = formType
? configTokens?.[formType]
: undefined;
const globalConfig = configTokens;
const deniedTokenAddressesSet = new Set([...(formTypeConfig?.deny || []), ...(globalConfig?.deny || [])]
.filter((t) => t.chainId === chainId)
.map((t) => t.address));
// If the token is in the denied list, return null
if (deniedTokenAddressesSet.has(token.address)) {
return undefined;
}
queryClient.setQueriesData({ queryKey: [getQueryKey('tokens', keyPrefix)] }, (data) => {
if (data &&
!data.tokens[chainId]?.some((t) => t.address === token.address)) {
const clonedData = { ...data };
clonedData.tokens[chainId]?.push(token);
return clonedData;
}
});
}
return token;
},
enabled: Boolean(chainId && tokenQuery && enabled),
retry: false,
});
return {
token: data,
isLoading,
};
};
//# sourceMappingURL=useTokenSearch.js.map