@shogun-sdk/one-shot
Version:
Shogun SDK - One Shot: React Components and hooks for cross-chain swaps
39 lines (32 loc) • 1.15 kB
text/typescript
import { Balance, getEVMWalletBalance } from '@shogun-sdk/money-legos';
import { useQuery } from '@tanstack/react-query';
import { useCallback, useMemo } from 'react';
import { useShogunBalances } from './../contexts/ShogunBalancesContext.js';
import { useDerivedState } from './useDerivedState.js';
export const useEVMBalance = (userEVMAddress: string) => {
const { client } = useShogunBalances();
const fetcher = useCallback(async () => {
const balance = await getEVMWalletBalance(client.sdk, userEVMAddress);
return balance;
}, [client, userEVMAddress]);
const { data, isLoading } = useQuery({
queryKey: ['evmBalance', userEVMAddress],
queryFn: fetcher,
enabled: Boolean(userEVMAddress),
refetchInterval: 5000,
});
const flattened = useMemo(() => {
if (!data) return [];
return Object.values(data).flatMap((chain) =>
chain.items.map((item) => ({
...item,
chainId: item.tokenId?.split(':')[1], // Extract chainId from tokenId
})),
);
}, [data]);
const [state] = useDerivedState<Balance[]>(flattened);
return {
data: state,
pending: isLoading,
};
};