@@ -2,9 +2,12 @@ import { useCallback, useMemo } from 'react';
22import { useQueries , useQueryClient } from '@tanstack/react-query' ;
33import type { Account } from '@lifi/widget-provider' ;
44import { useAccount } from '@lifi/wallet-management' ;
5- import type { ChainType } from '@lifi/sdk' ;
6- import { compact , max } from 'lodash' ;
7- import { fetchBalancesForAddress } from '../lib/fetchBalancesForAddresses' ;
5+ import type { ChainType , Token as LifiToken } from '@lifi/sdk' ;
6+ import { compact , differenceWith , max } from 'lodash' ;
7+ import {
8+ fetchBalancesForAddress ,
9+ fetchTokenBalancesForAddress ,
10+ } from '../lib/fetchBalancesForAddresses' ;
811import { usePortfolioCacheStore } from '@/stores/portfolio/PortfolioCacheStore' ;
912import type { TokenBalance } from '@/types/tokens' ;
1013
@@ -26,6 +29,7 @@ export interface UseTokensDataResult extends ResultState {
2629 refetch : ( ) => void ;
2730 cancel : ( ) => void ;
2831 refetchForAddress : ( address : string ) => void ;
32+ refetchForTokens : ( address : string , tokens : LifiToken [ ] ) => Promise < void > ;
2933 stateByAddress : Record < string , ResultState > ;
3034}
3135
@@ -141,6 +145,35 @@ export const useBalancesData = (): UseTokensDataResult => {
141145 [ queries , addresses , queryClient ] ,
142146 ) ;
143147
148+ const refetchForTokens = useCallback (
149+ async ( address : string , tokens : LifiToken [ ] ) => {
150+ const freshBalances = await fetchTokenBalancesForAddress ( address , tokens ) ;
151+
152+ queryClient . setQueryData < TokenQueryData > (
153+ [ 'portfolio-tokens' , address ] ,
154+ ( prev ) => {
155+ if ( ! prev ) {
156+ return prev ;
157+ }
158+
159+ const kept = differenceWith (
160+ prev . balances ,
161+ tokens ,
162+ ( b , t ) =>
163+ b . token . chainId === t . chainId &&
164+ b . token . address . toLowerCase ( ) === t . address . toLowerCase ( ) ,
165+ ) ;
166+
167+ return {
168+ ...prev ,
169+ balances : [ ...kept , ...freshBalances ] ,
170+ } ;
171+ } ,
172+ ) ;
173+ } ,
174+ [ queryClient ] ,
175+ ) ;
176+
144177 const balancesByAddress = useMemo ( ( ) => {
145178 return queries . reduce (
146179 ( acc , query , index ) => {
@@ -213,5 +246,6 @@ export const useBalancesData = (): UseTokensDataResult => {
213246 refetch,
214247 cancel,
215248 refetchForAddress,
249+ refetchForTokens,
216250 } ;
217251} ;
0 commit comments