@@ -72,6 +72,7 @@ export const walletInterface: WalletInterfaceStore = createWalletInterfaceStore(
72
72
walletInterface . subscribe ( ( walletInterface : WalletInterface | null ) => {
73
73
if ( walletInterface ) {
74
74
// reset state
75
+ balance . reset ( )
75
76
address . reset ( )
76
77
network . reset ( )
77
78
@@ -159,13 +160,14 @@ function createBalanceStore(initialState: string | null): BalanceStore {
159
160
let stateSyncer : StateSyncer
160
161
let emitter : any
161
162
let emitterAddress : String
163
+ let cancel : ( ) => void = ( ) => { }
162
164
163
165
const { subscribe } = derived (
164
166
[ address , network ] ,
165
- ( [ $address ] : string [ ] , set : any ) => {
167
+ ( [ $address , $network ] : string [ ] , set : any ) => {
166
168
if ( stateSyncer && ! stateSyncer . onChange ) {
167
- if ( $address && stateSyncer . get && set ) {
168
- syncStateWithTimeout ( {
169
+ if ( $address && $network && stateSyncer . get && set ) {
170
+ cancel = syncStateWithTimeout ( {
169
171
getState : stateSyncer . get ,
170
172
setState : set ,
171
173
timeout : 4000 ,
@@ -177,13 +179,14 @@ function createBalanceStore(initialState: string | null): BalanceStore {
177
179
emitter = blocknative . account ( blocknative . clientIndex , $address )
178
180
. emitter
179
181
emitter . on ( 'txConfirmed' , ( ) => {
180
- stateSyncer . get &&
181
- syncStateWithTimeout ( {
182
+ if ( stateSyncer . get ) {
183
+ cancel = syncStateWithTimeout ( {
182
184
getState : stateSyncer . get ,
183
185
setState : set ,
184
- timeout : 4000 ,
186
+ timeout : 1500 ,
185
187
currentBalance : get ( balance )
186
188
} )
189
+ }
187
190
188
191
return false
189
192
} )
@@ -224,51 +227,64 @@ function createBalanceStore(initialState: string | null): BalanceStore {
224
227
stateSyncer = syncer
225
228
226
229
return undefined
227
- }
230
+ } ,
231
+ reset : cancel
228
232
}
229
233
}
230
234
235
+ let timesTried : number = 0
236
+
231
237
function syncStateWithTimeout ( options : {
232
238
getState : ( ) => Promise < string | number | null >
233
239
setState : ( newState : string ) => void
234
240
timeout : number
235
241
currentBalance : string
236
242
} ) {
237
- const { getState, setState, timeout, currentBalance } = options
238
- const prom = makeQuerablePromise (
239
- new Cancelable (
240
- (
241
- resolve : ( val : string | number | null ) => void ,
242
- reject : ( err : any ) => void ,
243
- onCancel : ( callback : ( ) => void ) => void
244
- ) => {
245
- getState ( ) . then ( resolve )
246
-
247
- onCancel ( ( ) => {
248
- balanceSyncStatus . error =
249
- 'There was a problem getting the balance of this wallet'
250
- } )
251
- }
252
- ) . catch ( ( ) => { } )
253
- )
243
+ if ( timesTried < 4 ) {
244
+ timesTried ++
245
+
246
+ const { getState, setState, timeout, currentBalance } = options
247
+ const prom = makeQuerablePromise (
248
+ new Cancelable (
249
+ (
250
+ resolve : ( val : string | number | null ) => void ,
251
+ reject : ( err : any ) => void ,
252
+ onCancel : ( callback : ( ) => void ) => void
253
+ ) => {
254
+ getState ( ) . then ( resolve )
255
+
256
+ onCancel ( ( ) => {
257
+ balanceSyncStatus . error =
258
+ 'There was a problem getting the balance of this wallet'
259
+ } )
260
+ }
261
+ ) . catch ( ( ) => { } )
262
+ )
254
263
255
- balanceSyncStatus . syncing = prom
264
+ balanceSyncStatus . syncing = prom
256
265
257
- prom
258
- . then ( ( result : string ) => {
259
- if ( result === currentBalance ) {
260
- syncStateWithTimeout ( options )
261
- } else {
262
- setState ( result )
266
+ prom
267
+ . then ( async ( result : string ) => {
268
+ if ( result === currentBalance ) {
269
+ await wait ( 150 )
270
+ syncStateWithTimeout ( options )
271
+ } else {
272
+ setState ( result )
273
+ }
274
+ } )
275
+ . catch ( ( ) => { } )
276
+
277
+ const timedOut = wait ( timeout )
278
+
279
+ timedOut . then ( ( ) => {
280
+ if ( ! prom . isFulfilled ( ) ) {
281
+ prom . cancel ( ( ) => { } )
263
282
}
264
283
} )
265
- . catch ( ( ) => { } )
266
284
267
- const timedOut = wait ( timeout )
268
-
269
- timedOut . then ( ( ) => {
270
- if ( ! prom . isFulfilled ( ) ) {
271
- prom . cancel ( ( ) => { } )
272
- }
273
- } )
285
+ return ( ) => prom . cancel ( ( ) => { } )
286
+ } else {
287
+ timesTried = 0
288
+ return ( ) => { }
289
+ }
274
290
}
0 commit comments