Skip to content

Commit ec3059f

Browse files
authored
Merge pull request #193 from blocknative/fix/refine-wallet-reset
Refine the wallet reset functionality
2 parents 355efbd + cf50126 commit ec3059f

File tree

4 files changed

+62
-314
lines changed

4 files changed

+62
-314
lines changed

src/interfaces.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,9 @@ export interface Helpers {
9494
getAddress: (provider: any) => Promise<string | any>
9595
getNetwork: (provider: any) => Promise<number | any>
9696
getBalance: (provider: any) => Promise<string | any>
97-
resetWalletState: (options: {
98-
disconnected?: boolean
99-
walletName?: string
97+
resetWalletState: (options?: {
98+
disconnected: boolean
99+
walletName: string
100100
}) => void
101101
}
102102

src/stores.ts

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -94,31 +94,52 @@ walletInterface.subscribe((walletInterface: WalletInterface | null) => {
9494
network.setStateSyncer(walletInterface.network),
9595
balance.setStateSyncer(walletInterface.balance)
9696
]
97-
} else {
98-
wallet.update(() => ({
99-
name: undefined,
100-
provider: undefined,
101-
connect: undefined,
102-
instance: undefined,
103-
url: undefined,
104-
loading: undefined
105-
}))
10697
}
10798
})
10899

109-
export function resetWalletState(
110-
options: { disconnected?: boolean; walletName?: string } = {}
111-
) {
100+
export function resetWalletState(options?: {
101+
disconnected: boolean
102+
walletName: string
103+
}) {
112104
walletInterface.update((currentInterface: WalletInterface | null) => {
113-
if (
114-
!options.walletName ||
115-
(currentInterface && currentInterface.name === options.walletName)
116-
) {
117-
const { disconnected } = options
118-
!disconnected &&
119-
currentInterface &&
105+
// no interface then don't do anything
106+
if (!currentInterface) {
107+
return currentInterface
108+
}
109+
110+
// no options object, so do a full reset by disconnecting and setting interface to null
111+
if (!options) {
112+
wallet.update(() => ({
113+
name: undefined,
114+
provider: undefined,
115+
connect: undefined,
116+
instance: undefined,
117+
url: undefined,
118+
loading: undefined
119+
}))
120+
121+
currentInterface.disconnect && currentInterface.disconnect()
122+
123+
return null
124+
}
125+
126+
const { walletName, disconnected } = options
127+
128+
// if walletName is the same as the current interface name then do a full reset (checking if to do a disconnect)
129+
if (currentInterface.name === walletName) {
130+
wallet.update(() => ({
131+
name: undefined,
132+
provider: undefined,
133+
connect: undefined,
134+
instance: undefined,
135+
url: undefined,
136+
loading: undefined
137+
}))
138+
139+
disconnected &&
120140
currentInterface.disconnect &&
121141
currentInterface.disconnect()
142+
122143
return null
123144
}
124145

src/utilities.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ export function getNetwork(provider: any): Promise<number | any> {
1313
},
1414
(e: any, res: any) => {
1515
e && reject(e)
16-
resolve(Number(res && res.result))
16+
const result = res && res.result
17+
resolve(result && Number(result))
1718
}
1819
)
1920
})
@@ -29,7 +30,8 @@ export function getAddress(provider: any): Promise<string | any> {
2930
},
3031
(e: any, res: any) => {
3132
e && reject(e)
32-
resolve(res && res.result && res.result[0])
33+
const result = res && res.result && res.result[0]
34+
resolve(result)
3335
}
3436
)
3537
})
@@ -52,7 +54,8 @@ export function getBalance(provider: any): Promise<string | any> {
5254
},
5355
(e: any, res: any) => {
5456
e && reject(e)
55-
resolve(res && res.result && new BigNumber(res.result).toString(10))
57+
const result = res && res.result
58+
resolve(result && new BigNumber(result).toString(10))
5659
}
5760
)
5861
})
@@ -70,7 +73,7 @@ export function createModernProviderInterface(provider: any): WalletInterface {
7073
// get the initial value
7174
getAddress(provider).then(func)
7275
provider.on('accountsChanged', (accounts: string[]) =>
73-
func(accounts[0])
76+
func(accounts && accounts[0])
7477
)
7578
}
7679
}
@@ -82,7 +85,9 @@ export function createModernProviderInterface(provider: any): WalletInterface {
8285
onChange: (func: (val: string | number) => void) => {
8386
// get initial value
8487
getNetwork(provider).then(func)
85-
provider.on('networkChanged', func)
88+
provider.on('networkChanged', (netId: string | number) =>
89+
func(netId && Number(netId))
90+
)
8691
}
8792
}
8893
: { get: () => getNetwork(provider) },

0 commit comments

Comments
 (0)