Skip to content

Commit fdad216

Browse files
authored
Merge pull request #73 from Cardinal-Cryptography/sd-78-fix-modal-displayed-on-disconnect-click
SD-78: Fix modal displayed on disconnect click
2 parents b744bbf + 4ca2c8b commit fdad216

File tree

2 files changed

+86
-33
lines changed

2 files changed

+86
-33
lines changed

src/domains/chains/components/WalletProvider.tsx

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@ import { useQueryClient } from '@tanstack/react-query';
33
import {
44
createContext,
55
useContext,
6-
ReactNode,
6+
ReactNode, useEffect,
77
} from 'react';
88
import { Address } from 'viem';
99
import { useAccount } from 'wagmi';
1010

11-
import useConnectedChainNetworkEnvironment from 'src/domains/chains/utils/useConnectedChainNetworkEnvironment';
12-
import getQueryKey from 'src/domains/misc/utils/getQueryKey';
11+
import { QUERY_KEYS } from 'src/domains/misc/utils/getQueryKey';
1312
import { clearShielderIndexedDB } from 'src/domains/shielder/stores/getShielderIndexedDB';
1413
import useShielderStore from 'src/domains/shielder/stores/shielder';
1514
import useShielderPrivateKey from 'src/domains/shielder/utils/useShielderPrivateKey';
@@ -27,37 +26,36 @@ const WalletContext = createContext<WalletContextType | undefined>(undefined);
2726

2827
const WalletProvider = ({ children }: { children: ReactNode }) => {
2928
const { open: openModal } = useAppKit();
30-
const { address, isConnected, status } = useAccount();
29+
const { address, isReconnecting, isConnecting, isConnected, isDisconnected } = useAccount();
3130
const { disconnect } = useDisconnect();
3231
const { shielderPrivateKey } = useShielderPrivateKey(address);
3332
const clearShielderPrivateKeys = useShielderStore(store => store.clearShielderPrivateKeys);
3433

3534
const queryClient = useQueryClient();
3635

37-
const networkEnvironment = useConnectedChainNetworkEnvironment();
36+
useEffect(() => {
37+
if (!isDisconnected) return;
38+
39+
queryClient.removeQueries({
40+
predicate: query =>
41+
query.queryKey[0] === QUERY_KEYS.shielderPrivateKey,
42+
});
3843

39-
const handleDisconnect = async () => {
40-
if(address && networkEnvironment) {
41-
queryClient.removeQueries({
42-
queryKey: getQueryKey.shielderPrivateKey(address, networkEnvironment),
43-
});
44-
}
4544
void queryClient.removeQueries({
4645
predicate: query =>
47-
query.queryKey[0] === 'shielder-client',
46+
query.queryKey[0] === QUERY_KEYS.shielderClient,
4847
});
4948

5049
clearShielderPrivateKeys();
51-
await clearShielderIndexedDB();
52-
await disconnect();
53-
};
50+
void clearShielderIndexedDB();
51+
}, [address, queryClient, clearShielderPrivateKeys, isDisconnected]);
5452

5553
const value = {
56-
disconnect: handleDisconnect,
54+
disconnect,
5755
openModal,
5856
address,
5957
isConnected,
60-
isLoading: status !== 'connected' && status !== 'disconnected',
58+
isLoading: isReconnecting || isConnecting,
6159
privateKey: shielderPrivateKey,
6260
};
6361

Lines changed: 71 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,91 @@
1+
export const QUERY_KEYS = {
2+
shielderFees: 'shielderFees',
3+
shielderClient: 'shielder-client',
4+
shielderTransactions: 'shielder-transactions',
5+
tokenDecimals: 'token-decimals',
6+
tokenName: 'token-name',
7+
tokenSymbol: 'token-symbol',
8+
tokenPublicBalance: 'token-public-balance',
9+
tokenShieldedBalance: 'token-shielded-balance',
10+
shielderPrivateKey: 'shielderPrivateKey',
11+
wasmCryptoClient: 'wasm-crypto-client',
12+
} as const;
13+
114
import type { Address } from 'viem';
215

316
import { NetworkEnvironment } from 'src/domains/chains/types/misc';
417

518
const getQueryKey = {
6-
shielderFees: (walletAddress: Address, chainId: string) => ['shielderFees', walletAddress, chainId] ,
19+
shielderFees: (walletAddress: Address, chainId: string) => [
20+
QUERY_KEYS.shielderFees,
21+
walletAddress,
22+
chainId,
23+
],
724
shielderClient: (chainId: number, shielderPrivateKey: Address) => [
8-
'shielder-client',
25+
QUERY_KEYS.shielderClient,
926
chainId,
1027
shielderPrivateKey,
11-
] ,
28+
],
1229
shielderTransactions: (accountAddress: Address, chainId: number) => [
13-
'shielder-transactions',
30+
QUERY_KEYS.shielderTransactions,
1431
accountAddress,
1532
chainId,
16-
] ,
17-
tokenDecimals: (tokenAddress: Address | 'native', chainId: string) => ['token-decimals', chainId, tokenAddress],
18-
tokenName: (tokenAddress: Address | 'native', chainId: string) => ['token-name', chainId, tokenAddress] ,
19-
tokenSymbol: (tokenAddress: Address | 'native', chainId: string) => ['token-symbol', chainId, tokenAddress] ,
20-
tokenPublicBalance: (tokenAddress: Address | 'native', chainId: string, walletAddress: Address) => [
21-
'token-public-balance',
33+
],
34+
tokenDecimals: (
35+
tokenAddress: Address | 'native',
36+
chainId: string
37+
) => [
38+
QUERY_KEYS.tokenDecimals,
39+
chainId,
40+
tokenAddress,
41+
],
42+
tokenName: (
43+
tokenAddress: Address | 'native',
44+
chainId: string
45+
) => [
46+
QUERY_KEYS.tokenName,
47+
chainId,
48+
tokenAddress,
49+
],
50+
tokenSymbol: (
51+
tokenAddress: Address | 'native',
52+
chainId: string
53+
) => [
54+
QUERY_KEYS.tokenSymbol,
55+
chainId,
56+
tokenAddress,
57+
],
58+
tokenPublicBalance: (
59+
tokenAddress: Address | 'native',
60+
chainId: string,
61+
walletAddress: Address
62+
) => [
63+
QUERY_KEYS.tokenPublicBalance,
2264
tokenAddress,
2365
chainId,
2466
walletAddress,
25-
] ,
26-
tokenShieldedBalance: (tokenAddress: Address | 'native', chainId: string, walletAddress: Address) => [
27-
'token-shielded-balance',
67+
],
68+
tokenShieldedBalance: (
69+
tokenAddress: Address | 'native',
70+
chainId: string,
71+
walletAddress: Address
72+
) => [
73+
QUERY_KEYS.tokenShieldedBalance,
2874
tokenAddress,
2975
chainId,
3076
walletAddress,
31-
] ,
32-
shielderPrivateKey: (walletAddress: Address, networkEnvironment: NetworkEnvironment) => ['shielderPrivateKey', networkEnvironment, walletAddress] ,
33-
wasmCryptoClient: () => ['wasm-crypto-client'] ,
77+
],
78+
shielderPrivateKey: (
79+
walletAddress: Address,
80+
networkEnvironment: NetworkEnvironment
81+
) => [
82+
QUERY_KEYS.shielderPrivateKey,
83+
networkEnvironment,
84+
walletAddress,
85+
],
86+
wasmCryptoClient: () => [
87+
QUERY_KEYS.wasmCryptoClient,
88+
],
3489
};
3590

3691
export default getQueryKey;

0 commit comments

Comments
 (0)