@shogun-sdk/one-shot
Version:
Shogun SDK - One Shot: React Components and hooks for cross-chain swaps
45 lines • 2.12 kB
JavaScript
import { getSolanaTokenBalances, getPortfolioTokens } from '@shogun-sdk/money-legos';
import { useQuery } from '@tanstack/react-query';
import { useCallback, useEffect, useMemo } from 'react';
import { useShogunBalances } from '../contexts/ShogunBalancesContext.js';
import { useEVMBalance } from './useEVMBalance.js';
export const useSolanaQueryKey = (userSolanaAddress) => {
return useMemo(() => ['getTokensSolanaFromRPCCodex', userSolanaAddress], [userSolanaAddress]);
};
export const useEVMQueryKey = (userEVMAddress) => {
return useMemo(() => ['getTokensEVMFromCodex', userEVMAddress], [userEVMAddress]);
};
export const useTokenBalances = ({ userEVMAddress, userSolanaAddress, tokenIn, tokenOut, }) => {
const { data } = useEVMBalance(userEVMAddress);
const evmQueryKey = useEVMQueryKey(userEVMAddress);
const { client } = useShogunBalances();
const fetcher = useCallback(async () => {
return getPortfolioTokens(client.sdk, data, userEVMAddress, { tokenIn, tokenOut });
}, [client, data, userEVMAddress, tokenIn, tokenOut]);
const { data: evmBalances, isLoading: isLoadingEVM, refetch: refetchEVM, } = useQuery({
queryKey: evmQueryKey,
queryFn: fetcher,
enabled: !!userEVMAddress,
refetchInterval: 30000,
refetchIntervalInBackground: false,
});
const solanaQueryKey = useSolanaQueryKey(userSolanaAddress);
const { data: solanaBalances, isLoading: isLoadingSolana, refetch: refetchSolana, } = useQuery({
queryKey: solanaQueryKey,
queryFn: () => getSolanaTokenBalances(client.sdk, userSolanaAddress),
enabled: !!userSolanaAddress,
refetchInterval: 30000,
refetchIntervalInBackground: false,
});
useEffect(() => {
refetchEVM();
refetchSolana();
}, [refetchEVM, refetchSolana]);
return useMemo(() => ({
evmBalances: evmBalances || [],
solanaBalances: solanaBalances || [],
isLoadingEVM,
isLoadingSolana,
}), [evmBalances, solanaBalances, isLoadingEVM, isLoadingSolana]);
};
//# sourceMappingURL=useTokenBalances.js.map