Skip to content

Commit f504943

Browse files
committed
make state not updated after interval cancelled
1 parent fb226cc commit f504943

File tree

3 files changed

+29
-11
lines changed

3 files changed

+29
-11
lines changed

src/interfaces.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,18 +243,20 @@ export interface WalletInterfaceStore {
243243
update: (
244244
updater: (walletInterface: WalletInterface | null) => WalletInterface | null
245245
) => void
246-
set: (walletInterface: WalletInterface) => void | never
246+
set: (walletInterface: WalletInterface | null) => void | never
247247
}
248248

249249
export interface WalletStateSliceStore {
250250
subscribe: (subscriber: (store: any) => void) => () => void
251251
reset: () => void
252-
setStateSyncer: (stateSyncer: StateSyncer) => number | undefined
252+
setStateSyncer: (
253+
stateSyncer: StateSyncer
254+
) => { clear: () => void } | undefined
253255
}
254256

255257
export interface BalanceStore {
256258
subscribe: (subscriber: (store: any) => void) => () => void
257-
setStateSyncer: (stateSyncer: StateSyncer) => number | undefined
259+
setStateSyncer: (stateSyncer: StateSyncer) => undefined
258260
reset: () => void
259261
}
260262

src/stores.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getBlocknative } from './services'
22
import { writable, derived, get } from 'svelte/store'
3-
import { wait, makeCancelable } from './utilities'
3+
import { wait, makeCancelable, createInterval } from './utilities'
44
import { validateWalletInterface, validateType } from './validation'
55
import {
66
WritableStore,
@@ -70,7 +70,7 @@ export const state = derived(
7070
)
7171

7272
// keep track of intervals that are syncing state so they can be cleared
73-
let currentSyncerIntervals: (number | undefined)[] = []
73+
let currentSyncerIntervals: ({ clear: () => void } | undefined)[] = []
7474

7575
export const walletInterface: WalletInterfaceStore = createWalletInterfaceStore(
7676
null
@@ -79,7 +79,8 @@ export const walletInterface: WalletInterfaceStore = createWalletInterfaceStore(
7979
walletInterface.subscribe((walletInterface: WalletInterface | null) => {
8080
// clear all current intervals if they exist
8181
currentSyncerIntervals.forEach(
82-
(interval: number | undefined) => interval && clearInterval(interval)
82+
(interval: { clear: () => void } | undefined) =>
83+
interval && interval.clear()
8384
)
8485

8586
const currentState = get(state)
@@ -138,7 +139,7 @@ export function resetWalletState(options?: {
138139
url: undefined
139140
}))
140141

141-
disconnected &&
142+
!disconnected &&
142143
currentInterface.disconnect &&
143144
currentInterface.disconnect()
144145

@@ -175,8 +176,10 @@ function createWalletInterfaceStore(
175176
return {
176177
subscribe,
177178
update,
178-
set: (walletInterface: WalletInterface) => {
179-
validateWalletInterface(walletInterface)
179+
set: (walletInterface: WalletInterface | null) => {
180+
if (walletInterface) {
181+
validateWalletInterface(walletInterface)
182+
}
180183
set(walletInterface)
181184
}
182185
}
@@ -228,11 +231,11 @@ function createWalletStateSliceStore(options: {
228231
}
229232

230233
if (get) {
231-
const interval: any = setInterval(() => {
234+
const interval: any = createInterval(() => {
232235
get()
233236
.then(newVal => {
234237
if (newVal || currentState !== initialState) {
235-
set(newVal)
238+
interval.status.active && set(newVal)
236239
}
237240
})
238241
.catch((err: any) => {

src/utilities.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,3 +270,16 @@ export function isPromise(val: any): val is Promise<any> {
270270
}
271271
return false
272272
}
273+
274+
export function createInterval(func: any, interval: number) {
275+
const id = setInterval(func, interval)
276+
const status = { active: true }
277+
278+
return {
279+
status,
280+
clear: () => {
281+
clearInterval(id)
282+
status.active = false
283+
}
284+
}
285+
}

0 commit comments

Comments
 (0)