@@ -133,7 +133,7 @@ const FUNCTIONS = ['getAssetOnRelayChain', 'getAssetOnAssetHub', 'getAssetOnMult
133
133
* @param addresses a list of users accounts' addresses
134
134
* @returns a list of assets balances on different selected chains and a fetching timestamp
135
135
*/
136
- export default function useAssetsBalances ( accounts : AccountJson [ ] | null , setAlerts : Dispatch < SetStateAction < AlertType [ ] > > , genesisOptions : DropdownOption [ ] , userAddedEndpoints : UserAddedChains , worker ?: Worker ) : SavedAssets | undefined | null {
136
+ export default function useAssetsBalances ( accounts : AccountJson [ ] | null , setAlerts : Dispatch < SetStateAction < AlertType [ ] > > , genesisOptions : DropdownOption [ ] , userAddedEndpoints : UserAddedChains , worker ?: MessagePort ) : SavedAssets | undefined | null {
137
137
const { t } = useTranslation ( ) ;
138
138
139
139
const isTestnetEnabled = useIsTestnetEnabled ( ) ;
@@ -282,22 +282,33 @@ export default function useAssetsBalances (accounts: AccountJson[] | null, setAl
282
282
}
283
283
284
284
setFetchedAssets ( ( fetchedAssets ) => {
285
- const combinedAsset = fetchedAssets || DEFAULT_SAVED_ASSETS ;
285
+ // Create a new object reference each time
286
+ const combinedAsset = {
287
+ ...( fetchedAssets || DEFAULT_SAVED_ASSETS ) ,
288
+ balances : {
289
+ ...( fetchedAssets ?. balances || DEFAULT_SAVED_ASSETS . balances )
290
+ }
291
+ } ;
286
292
287
293
Object . keys ( assets ) . forEach ( ( address ) => {
288
- if ( combinedAsset . balances [ address ] === undefined ) {
294
+ if ( ! combinedAsset . balances [ address ] ) {
289
295
combinedAsset . balances [ address ] = { } ;
290
296
}
291
297
292
- /** to group assets by their chain's genesisHash */
293
298
const { genesisHash } = assets [ address ] [ 0 ] ;
294
299
295
- combinedAsset . balances [ address ] [ genesisHash ] = assets [ address ] ;
300
+ // Create a new reference for this specific balances entry
301
+ combinedAsset . balances [ address ] = {
302
+ ...( combinedAsset . balances [ address ] || { } ) ,
303
+ [ genesisHash ] : assets [ address ]
304
+ } ;
296
305
} ) ;
297
306
298
- combinedAsset . timeStamp = Date . now ( ) ;
299
-
300
- return combinedAsset ;
307
+ // Ensure a new timestamp and object reference
308
+ return {
309
+ ...combinedAsset ,
310
+ timeStamp : Date . now ( )
311
+ } ;
301
312
} ) ;
302
313
} , [ addresses ] ) ;
303
314
@@ -306,8 +317,8 @@ export default function useAssetsBalances (accounts: AccountJson[] | null, setAl
306
317
return ;
307
318
}
308
319
309
- worker . onmessage = ( e : MessageEvent < string > ) => {
310
- const message = e . data ;
320
+ const handleMessage = ( messageEvent : MessageEvent < string > ) => {
321
+ const message = messageEvent . data ;
311
322
312
323
if ( ! message ) {
313
324
return ; // may receive unknown messages!
@@ -372,6 +383,12 @@ export default function useAssetsBalances (accounts: AccountJson[] | null, setAl
372
383
373
384
combineAndSetAssets ( _assets ) ;
374
385
} ;
386
+
387
+ worker . addEventListener ( 'message' , handleMessage ) ;
388
+
389
+ return ( ) => {
390
+ worker . removeEventListener ( 'message' , handleMessage ) ;
391
+ } ;
375
392
} , [ combineAndSetAssets , handleRequestCount , worker ] ) ;
376
393
377
394
const fetchAssetOnRelayChain = useCallback ( ( _addresses : string [ ] , chainName : string ) => {
@@ -382,13 +399,7 @@ export default function useAssetsBalances (accounts: AccountJson[] | null, setAl
382
399
const functionName = 'getAssetOnRelayChain' ;
383
400
384
401
worker . postMessage ( { functionName, parameters : { address : _addresses , chainName, userAddedEndpoints } } ) ;
385
-
386
- worker . onerror = ( err ) => {
387
- console . log ( err ) ;
388
- } ;
389
-
390
- handleWorkerMessages ( ) ;
391
- } , [ handleWorkerMessages , userAddedEndpoints , worker ] ) ;
402
+ } , [ userAddedEndpoints , worker ] ) ;
392
403
393
404
const fetchAssetOnAssetHubs = useCallback ( ( _addresses : string [ ] , chainName : string , assetsToBeFetched ?: Asset [ ] ) => {
394
405
if ( ! worker ) {
@@ -398,10 +409,6 @@ export default function useAssetsBalances (accounts: AccountJson[] | null, setAl
398
409
const functionName = 'getAssetOnAssetHub' ;
399
410
400
411
worker . postMessage ( { functionName, parameters : { address : _addresses , assetsToBeFetched, chainName, userAddedEndpoints } } ) ;
401
-
402
- worker . onerror = ( err ) => {
403
- console . log ( err ) ;
404
- } ;
405
412
} , [ userAddedEndpoints , worker ] ) ;
406
413
407
414
const fetchAssetOnMultiAssetChain = useCallback ( ( addresses : string [ ] , chainName : string ) => {
@@ -412,13 +419,7 @@ export default function useAssetsBalances (accounts: AccountJson[] | null, setAl
412
419
const functionName = 'getAssetOnMultiAssetChain' ;
413
420
414
421
worker . postMessage ( { functionName, parameters : { addresses, chainName, userAddedEndpoints } } ) ;
415
-
416
- worker . onerror = ( err ) => {
417
- console . log ( err ) ;
418
- } ;
419
-
420
- handleWorkerMessages ( ) ;
421
- } , [ handleWorkerMessages , userAddedEndpoints , worker ] ) ;
422
+ } , [ userAddedEndpoints , worker ] ) ;
422
423
423
424
const fetchMultiAssetChainAssets = useCallback ( ( chainName : string ) => {
424
425
return addresses && fetchAssetOnMultiAssetChain ( addresses , chainName ) ;
@@ -480,14 +481,16 @@ export default function useAssetsBalances (accounts: AccountJson[] | null, setAl
480
481
! multipleAssetsChainsNames . includes ( toCamelCase ( text ) || '' )
481
482
) ;
482
483
484
+ handleWorkerMessages ( ) ;
485
+
483
486
/** Fetch assets for all the selected chains by default */
484
487
_selectedChains ?. forEach ( ( genesisHash ) => {
485
488
const isSingleTokenChain = ! ! singleAssetChains . find ( ( { value } ) => value === genesisHash ) ;
486
489
const maybeMultiAssetChainName = multipleAssetsChainsNames . find ( ( chainName ) => chainName === getChainName ( genesisHash ) ) ;
487
490
488
491
fetchAssets ( genesisHash , isSingleTokenChain , maybeMultiAssetChainName ) ;
489
492
} ) ;
490
- } , [ FETCH_PATHS , addresses , fetchAssets , worker , isTestnetEnabled , isUpdate , selectedChains , genesisOptions ] ) ;
493
+ } , [ FETCH_PATHS , addresses , fetchAssets , worker , isTestnetEnabled , isUpdate , selectedChains , genesisOptions , handleWorkerMessages ] ) ;
491
494
492
495
return fetchedAssets ;
493
496
}
0 commit comments