Skip to content

Commit 19e1a04

Browse files
Merge branch 'feature/wc-detect-disconnect'
# Conflicts: # packages/core/src/wallets/wc-wallet.ts
2 parents de5eea0 + ca4d46f commit 19e1a04

File tree

3 files changed

+27
-12
lines changed

3 files changed

+27
-12
lines changed

packages/core/src/types/wallet.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ export enum WalletState {
165165
export interface WalletEvents {
166166
'accountChanged': [event: any];
167167
'displayWalletConnectQRCodeUri': [chainId: string];
168+
'disconnect': [event: any];
168169
}
169170

170171
export const WcProviderEventType = {

packages/core/src/wallets/wc-wallet.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export class WCWallet extends BaseWallet {
5555
}
5656

5757
async init(): Promise<void> {
58-
this.events.removeAllListeners();
58+
// this.events.removeAllListeners()
5959

6060
const defaultOption: UniversalProviderOpts = {
6161
projectId: '15a12f05b38b78014b2bb06d77eecdc3',
@@ -330,9 +330,12 @@ export class WCWallet extends BaseWallet {
330330
console.error('disconnect:', error);
331331
});
332332

333-
this.provider.on('session_delete', (error: { message: string; code: number }) => {
334-
console.log('session_delete:', event);
335-
localStorage.removeItem('wc-session');
333+
this.provider.on("session_delete", (error: { message: string; code: number }) => {
334+
console.log("session_delete:", error);
335+
localStorage.removeItem('wc-session')
336+
337+
// Emit disconnect event to notify StatefulWallet
338+
this.events.emit('disconnect', '')
336339
});
337340

338341
this.provider.on('session_event', (error: { message: string; code: number }) => {

packages/react/src/store/stateful-wallet.ts

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,27 @@ export class StatefulWallet extends BaseWallet {
6666

6767
async init(): Promise<void> {
6868

69-
this.originalWallet.events.on('accountChanged', async () => {
70-
const chains = Array.from(this.originalWallet.chainMap.values())
71-
for (const chain of chains) {
72-
await this.getAccount(chain.chainId)
73-
}
74-
})
75-
76-
7769
try {
7870
await this.originalWallet.init()
71+
72+
this.originalWallet.events.on('accountChanged', async () => {
73+
const chains = Array.from(this.originalWallet.chainMap.values())
74+
for (const chain of chains) {
75+
await this.getAccount(chain.chainId)
76+
}
77+
})
78+
79+
this.originalWallet.events.on('disconnect', () => {
80+
// Update all chains for this wallet to disconnected state
81+
this.store.chains.forEach(chain => {
82+
this.store.updateChainWalletState(this.walletName, chain.chainName, {
83+
walletState: WalletState.Disconnected,
84+
account: null,
85+
errorMessage: ''
86+
});
87+
});
88+
});
89+
7990
this.store.chains.forEach(chain => {
8091
const lastChainWalletState = this.store.getChainWalletState(this.walletName, chain.chainName)?.walletState
8192
if (lastChainWalletState === WalletState.NotExist) {

0 commit comments

Comments
 (0)