@@ -3,10 +3,7 @@ import { Address } from 'viem'
33import useSWRImmutable from 'swr/immutable'
44import useSWR from 'swr'
55import { getProviderForChainId } from '@/token-bridge-sdk/utils'
6- import {
7- useArbitrumIndexer ,
8- type Transfer as IndexerTransfer
9- } from '../../../../indexer-provider'
6+ import { useArbitrumIndexer } from '../../../../indexer-provider'
107import { AssetType } from '../../hooks/arbTokenBridge.types'
118import { DepositStatus , MergedTransaction } from '../../state/app/state'
129import { BigNumber , utils } from 'ethers'
@@ -19,6 +16,30 @@ import { isExperimentalFeatureEnabled } from '../../util'
1916import { useTokensFromLists } from '../TransferPanel/TokenSearchUtils'
2017import { fetchErc20Data } from '../../util/TokenUtils'
2118
19+ type PartialTransfer = {
20+ fromAddress : string
21+ toAddress : string
22+ timestamp : bigint
23+ executionTimestamp : bigint
24+ status : string
25+ amount : bigint
26+ txHash : string
27+ childChainId : number
28+ parentChainId : number
29+ }
30+
31+ type EthIndexerTransfer = PartialTransfer & {
32+ type : 'ETH'
33+ tokenAddress : undefined
34+ }
35+
36+ type Erc20IndexerTransfer = PartialTransfer & {
37+ type : 'ERC20'
38+ tokenAddress : string
39+ }
40+
41+ type IndexerTransfer = EthIndexerTransfer | Erc20IndexerTransfer
42+
2243function getIndexerTransferStatus ( tx : IndexerTransfer ) {
2344 switch ( tx . status ) {
2445 case 'PARENT_CHAIN_CONFIRMED' :
@@ -50,14 +71,24 @@ type TokenDetails = {
5071 decimals : number
5172}
5273
53- function transformIndexerTransfer < T extends IndexerTransfer [ 'type' ] > ( {
54- tx,
55- tokenDetails
56- } : {
74+ function transformIndexerTransfer ( params : {
75+ tx : EthIndexerTransfer
76+ tokenDetails ?: undefined
77+ } ) : MergedTransaction
78+
79+ function transformIndexerTransfer ( params : {
80+ tx : Erc20IndexerTransfer
81+ tokenDetails : TokenDetails
82+ } ) : MergedTransaction
83+
84+ function transformIndexerTransfer ( params : {
5785 tx : IndexerTransfer
58- } & ( T extends 'ERC20'
59- ? { tokenDetails : TokenDetails }
60- : { tokenDetails ?: undefined } ) ) : MergedTransaction {
86+ tokenDetails ?: TokenDetails | undefined
87+ } ) : MergedTransaction {
88+ const { tx } = params
89+ const tokenDetails =
90+ 'tokenDetails' in params ? params . tokenDetails : undefined
91+
6192 return {
6293 sender : tx . fromAddress ,
6394 destination : tx . toAddress ,
@@ -100,7 +131,11 @@ export const useIndexerHistory = (
100131 useArbitrumIndexer ( isIndexerEnabled ? _address : '' )
101132
102133 const indexerTransactions = useMemo ( ( ) => {
103- return [ ...pendingTransfers , ...completedTransfers ]
134+ return [
135+ ...pendingTransfers ,
136+ ...completedTransfers
137+ // move types to indexer
138+ ] as never as IndexerTransfer [ ]
104139 } , [ pendingTransfers , completedTransfers ] )
105140
106141 // todo: cache
@@ -142,8 +177,8 @@ export const useIndexerHistory = (
142177 : null ,
143178 ( [ _indexerTransactions , _tokenDetailsMap ] ) => {
144179 return _indexerTransactions . map ( tx => {
145- if ( ! tx . tokenAddress ) {
146- return transformIndexerTransfer < 'ETH' > ( { tx } )
180+ if ( tx . type === 'ETH' ) {
181+ return transformIndexerTransfer ( { tx } )
147182 }
148183
149184 const tokenDetails = _tokenDetailsMap [ tx . tokenAddress ]
@@ -157,7 +192,9 @@ export const useIndexerHistory = (
157192 return transformIndexerTransfer ( { tx, tokenDetails } )
158193 } )
159194 } ,
160- { onSuccess : data => data . sort ( sortByTimestampDescending ) }
195+ {
196+ onSuccess : data => data . sort ( sortByTimestampDescending )
197+ }
161198 )
162199
163200 return {
0 commit comments