@mysten/dapp-kit 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +4 -4
- package/dist/cjs/components/AccountDropdownMenu.js +34 -6
- package/dist/cjs/components/AccountDropdownMenu.js.map +2 -2
- package/dist/cjs/components/ConnectButton.js +49 -14
- package/dist/cjs/components/ConnectButton.js.map +3 -3
- package/dist/cjs/components/WalletProvider.js +91 -28
- package/dist/cjs/components/WalletProvider.js.map +3 -3
- package/dist/cjs/components/connect-modal/ConnectModal.js +15 -8
- package/dist/cjs/components/connect-modal/ConnectModal.js.map +2 -2
- package/dist/cjs/hooks/useResolveSuiNSNames.d.ts +1 -105
- package/dist/cjs/hooks/useResolveSuiNSNames.js +3 -3
- package/dist/cjs/hooks/useResolveSuiNSNames.js.map +2 -2
- package/dist/cjs/hooks/useSuiClientInfiniteQuery.d.ts +7 -8
- package/dist/cjs/hooks/useSuiClientInfiniteQuery.js +11 -7
- package/dist/cjs/hooks/useSuiClientInfiniteQuery.js.map +2 -2
- package/dist/cjs/hooks/useSuiClientMutation.d.ts +1 -1
- package/dist/cjs/hooks/useSuiClientQuery.d.ts +3 -2
- package/dist/cjs/hooks/useSuiClientQuery.js.map +2 -2
- package/dist/cjs/hooks/wallet/useAutoConnectWallet.js +65 -15
- package/dist/cjs/hooks/wallet/useAutoConnectWallet.js.map +3 -3
- package/dist/cjs/hooks/wallet/useAutoConnectionStatus.d.ts +4 -0
- package/dist/cjs/hooks/wallet/useAutoConnectionStatus.js +50 -0
- package/dist/cjs/hooks/wallet/useAutoConnectionStatus.js.map +7 -0
- package/dist/cjs/hooks/wallet/useConnectWallet.d.ts +1 -1
- package/dist/cjs/hooks/wallet/useConnectWallet.js +15 -8
- package/dist/cjs/hooks/wallet/useConnectWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useCurrentWallet.d.ts +19 -1
- package/dist/cjs/hooks/wallet/useCurrentWallet.js +29 -1
- package/dist/cjs/hooks/wallet/useCurrentWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useDisconnectWallet.d.ts +1 -1
- package/dist/cjs/hooks/wallet/useDisconnectWallet.js +30 -2
- package/dist/cjs/hooks/wallet/useDisconnectWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.d.ts +1 -1
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.js +30 -2
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.js.map +2 -2
- package/dist/cjs/hooks/wallet/useSignPersonalMessage.d.ts +1 -1
- package/dist/cjs/hooks/wallet/useSignPersonalMessage.js +30 -2
- package/dist/cjs/hooks/wallet/useSignPersonalMessage.js.map +2 -2
- package/dist/cjs/hooks/wallet/useSignTransactionBlock.d.ts +1 -1
- package/dist/cjs/hooks/wallet/useSignTransactionBlock.js +30 -2
- package/dist/cjs/hooks/wallet/useSignTransactionBlock.js.map +2 -2
- package/dist/cjs/hooks/wallet/useSwitchAccount.d.ts +1 -1
- package/dist/cjs/hooks/wallet/useSwitchAccount.js +30 -2
- package/dist/cjs/hooks/wallet/useSwitchAccount.js.map +2 -2
- package/dist/cjs/hooks/wallet/useWalletPropertiesChanged.js +30 -2
- package/dist/cjs/hooks/wallet/useWalletPropertiesChanged.js.map +2 -2
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +112 -37
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/walletStore.d.ts +10 -2
- package/dist/cjs/walletStore.js +23 -4
- package/dist/cjs/walletStore.js.map +2 -2
- package/dist/esm/components/AccountDropdownMenu.js +34 -6
- package/dist/esm/components/AccountDropdownMenu.js.map +2 -2
- package/dist/esm/components/ConnectButton.js +49 -14
- package/dist/esm/components/ConnectButton.js.map +3 -3
- package/dist/esm/components/WalletProvider.js +91 -28
- package/dist/esm/components/WalletProvider.js.map +3 -3
- package/dist/esm/components/connect-modal/ConnectModal.js +15 -8
- package/dist/esm/components/connect-modal/ConnectModal.js.map +2 -2
- package/dist/esm/hooks/useResolveSuiNSNames.d.ts +1 -105
- package/dist/esm/hooks/useResolveSuiNSNames.js +3 -3
- package/dist/esm/hooks/useResolveSuiNSNames.js.map +2 -2
- package/dist/esm/hooks/useSuiClientInfiniteQuery.d.ts +7 -8
- package/dist/esm/hooks/useSuiClientInfiniteQuery.js +11 -7
- package/dist/esm/hooks/useSuiClientInfiniteQuery.js.map +2 -2
- package/dist/esm/hooks/useSuiClientMutation.d.ts +1 -1
- package/dist/esm/hooks/useSuiClientQuery.d.ts +3 -2
- package/dist/esm/hooks/useSuiClientQuery.js.map +2 -2
- package/dist/esm/hooks/wallet/useAutoConnectWallet.js +65 -15
- package/dist/esm/hooks/wallet/useAutoConnectWallet.js.map +3 -3
- package/dist/esm/hooks/wallet/useAutoConnectionStatus.d.ts +4 -0
- package/dist/esm/hooks/wallet/useAutoConnectionStatus.js +27 -0
- package/dist/esm/hooks/wallet/useAutoConnectionStatus.js.map +7 -0
- package/dist/esm/hooks/wallet/useConnectWallet.d.ts +1 -1
- package/dist/esm/hooks/wallet/useConnectWallet.js +15 -8
- package/dist/esm/hooks/wallet/useConnectWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useCurrentWallet.d.ts +19 -1
- package/dist/esm/hooks/wallet/useCurrentWallet.js +29 -1
- package/dist/esm/hooks/wallet/useCurrentWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useDisconnectWallet.d.ts +1 -1
- package/dist/esm/hooks/wallet/useDisconnectWallet.js +30 -2
- package/dist/esm/hooks/wallet/useDisconnectWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.d.ts +1 -1
- package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.js +30 -2
- package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.js.map +2 -2
- package/dist/esm/hooks/wallet/useSignPersonalMessage.d.ts +1 -1
- package/dist/esm/hooks/wallet/useSignPersonalMessage.js +30 -2
- package/dist/esm/hooks/wallet/useSignPersonalMessage.js.map +2 -2
- package/dist/esm/hooks/wallet/useSignTransactionBlock.d.ts +1 -1
- package/dist/esm/hooks/wallet/useSignTransactionBlock.js +30 -2
- package/dist/esm/hooks/wallet/useSignTransactionBlock.js.map +2 -2
- package/dist/esm/hooks/wallet/useSwitchAccount.d.ts +1 -1
- package/dist/esm/hooks/wallet/useSwitchAccount.js +30 -2
- package/dist/esm/hooks/wallet/useSwitchAccount.js.map +2 -2
- package/dist/esm/hooks/wallet/useWalletPropertiesChanged.js +30 -2
- package/dist/esm/hooks/wallet/useWalletPropertiesChanged.js.map +2 -2
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +112 -37
- package/dist/esm/index.js.map +4 -4
- package/dist/esm/walletStore.d.ts +10 -2
- package/dist/esm/walletStore.js +23 -4
- package/dist/esm/walletStore.js.map +2 -2
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/src/components/WalletProvider.tsx +1 -0
- package/src/hooks/useResolveSuiNSNames.ts +5 -6
- package/src/hooks/useSuiClientInfiniteQuery.ts +38 -24
- package/src/hooks/useSuiClientQuery.ts +11 -7
- package/src/hooks/wallet/useAutoConnectWallet.ts +24 -7
- package/src/hooks/wallet/useAutoConnectionStatus.ts +12 -0
- package/src/hooks/wallet/useConnectWallet.ts +17 -8
- package/src/hooks/wallet/useCurrentWallet.ts +30 -1
- package/src/hooks/wallet/useDisconnectWallet.ts +1 -1
- package/src/hooks/wallet/useSignAndExecuteTransactionBlock.ts +1 -1
- package/src/hooks/wallet/useSignPersonalMessage.ts +1 -1
- package/src/hooks/wallet/useSignTransactionBlock.ts +1 -1
- package/src/hooks/wallet/useSwitchAccount.ts +1 -1
- package/src/hooks/wallet/useWalletPropertiesChanged.ts +1 -1
- package/src/index.ts +1 -0
- package/src/walletStore.ts +30 -2
|
@@ -5,6 +5,7 @@ import type { SuiClient } from '@mysten/sui.js/client';
|
|
|
5
5
|
import type { UseQueryOptions } from '@tanstack/react-query';
|
|
6
6
|
import { useQuery } from '@tanstack/react-query';
|
|
7
7
|
|
|
8
|
+
import type { PartialBy } from '../types/utilityTypes.js';
|
|
8
9
|
import { useSuiClientContext } from './useSuiClient.js';
|
|
9
10
|
|
|
10
11
|
export type SuiRpcMethodName = {
|
|
@@ -29,20 +30,23 @@ export type SuiRpcMethods = {
|
|
|
29
30
|
: never;
|
|
30
31
|
};
|
|
31
32
|
|
|
32
|
-
export type UseSuiClientQueryOptions<T extends keyof SuiRpcMethods> =
|
|
33
|
-
UseQueryOptions<SuiRpcMethods[T]['result'], Error,
|
|
34
|
-
'
|
|
33
|
+
export type UseSuiClientQueryOptions<T extends keyof SuiRpcMethods, TData> = PartialBy<
|
|
34
|
+
Omit<UseQueryOptions<SuiRpcMethods[T]['result'], Error, TData, unknown[]>, 'queryFn'>,
|
|
35
|
+
'queryKey'
|
|
35
36
|
>;
|
|
36
37
|
|
|
37
|
-
export function useSuiClientQuery<
|
|
38
|
+
export function useSuiClientQuery<
|
|
39
|
+
T extends keyof SuiRpcMethods,
|
|
40
|
+
TData = SuiRpcMethods[T]['result'],
|
|
41
|
+
>(
|
|
38
42
|
...args: undefined extends SuiRpcMethods[T]['params']
|
|
39
|
-
? [method: T, params?: SuiRpcMethods[T]['params'], options?: UseSuiClientQueryOptions<T>]
|
|
40
|
-
: [method: T, params: SuiRpcMethods[T]['params'], options?: UseSuiClientQueryOptions<T>]
|
|
43
|
+
? [method: T, params?: SuiRpcMethods[T]['params'], options?: UseSuiClientQueryOptions<T, TData>]
|
|
44
|
+
: [method: T, params: SuiRpcMethods[T]['params'], options?: UseSuiClientQueryOptions<T, TData>]
|
|
41
45
|
) {
|
|
42
46
|
const [method, params, { queryKey = [], ...options } = {}] = args as [
|
|
43
47
|
method: T,
|
|
44
48
|
params?: SuiRpcMethods[T]['params'],
|
|
45
|
-
options?: UseSuiClientQueryOptions<T>,
|
|
49
|
+
options?: UseSuiClientQueryOptions<T, TData>,
|
|
46
50
|
];
|
|
47
51
|
|
|
48
52
|
const suiContext = useSuiClientContext();
|
|
@@ -4,31 +4,48 @@
|
|
|
4
4
|
import { useEffect } from 'react';
|
|
5
5
|
|
|
6
6
|
import { useConnectWallet } from './useConnectWallet.js';
|
|
7
|
+
import { useCurrentWallet } from './useCurrentWallet.js';
|
|
7
8
|
import { useWallets } from './useWallets.js';
|
|
8
9
|
import { useWalletStore } from './useWalletStore.js';
|
|
9
10
|
|
|
10
11
|
export function useAutoConnectWallet(autoConnectEnabled: boolean) {
|
|
11
12
|
const { mutate: connectWallet } = useConnectWallet();
|
|
12
|
-
const
|
|
13
|
+
const setAutoConnectionStatus = useWalletStore((state) => state.setAutoConnectionStatus);
|
|
13
14
|
const lastConnectedWalletName = useWalletStore((state) => state.lastConnectedWalletName);
|
|
14
15
|
const lastConnectedAccountAddress = useWalletStore((state) => state.lastConnectedAccountAddress);
|
|
16
|
+
const wallets = useWallets();
|
|
17
|
+
const { isDisconnected } = useCurrentWallet();
|
|
15
18
|
|
|
16
19
|
useEffect(() => {
|
|
17
|
-
if (
|
|
20
|
+
if (
|
|
21
|
+
!autoConnectEnabled ||
|
|
22
|
+
!lastConnectedWalletName ||
|
|
23
|
+
!lastConnectedAccountAddress ||
|
|
24
|
+
!isDisconnected
|
|
25
|
+
) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
18
28
|
|
|
19
29
|
const wallet = wallets.find((wallet) => wallet.name === lastConnectedWalletName);
|
|
20
30
|
if (wallet) {
|
|
21
|
-
connectWallet(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
31
|
+
connectWallet(
|
|
32
|
+
{
|
|
33
|
+
wallet,
|
|
34
|
+
accountAddress: lastConnectedAccountAddress,
|
|
35
|
+
silent: true,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
onSettled: () => setAutoConnectionStatus('settled'),
|
|
39
|
+
},
|
|
40
|
+
);
|
|
26
41
|
}
|
|
27
42
|
}, [
|
|
28
43
|
autoConnectEnabled,
|
|
29
44
|
connectWallet,
|
|
45
|
+
isDisconnected,
|
|
30
46
|
lastConnectedAccountAddress,
|
|
31
47
|
lastConnectedWalletName,
|
|
48
|
+
setAutoConnectionStatus,
|
|
32
49
|
wallets,
|
|
33
50
|
]);
|
|
34
51
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Copyright (c) Mysten Labs, Inc.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { useWalletStore } from './useWalletStore.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Retrieves the status for the initial wallet auto-connection process.
|
|
8
|
+
*/
|
|
9
|
+
export function useAutoConnectionStatus() {
|
|
10
|
+
// TODO: Replace this with shareable mutation state once we require react-query v5
|
|
11
|
+
return useWalletStore((state) => state.autoConnectionStatus);
|
|
12
|
+
}
|
|
@@ -36,18 +36,27 @@ export function useConnectWallet({
|
|
|
36
36
|
...mutationOptions
|
|
37
37
|
}: UseConnectWalletMutationOptions = {}) {
|
|
38
38
|
const setWalletConnected = useWalletStore((state) => state.setWalletConnected);
|
|
39
|
+
const setConnectionStatus = useWalletStore((state) => state.setConnectionStatus);
|
|
39
40
|
|
|
40
41
|
return useMutation({
|
|
41
42
|
mutationKey: walletMutationKeys.connectWallet(mutationKey),
|
|
42
|
-
mutationFn: async ({ wallet, accountAddress, ...
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
account.chains.some((chain) => chain.split(':')[0] === 'sui'),
|
|
46
|
-
);
|
|
47
|
-
const selectedAccount = getSelectedAccount(connectedSuiAccounts, accountAddress);
|
|
43
|
+
mutationFn: async ({ wallet, accountAddress, ...connectArgs }) => {
|
|
44
|
+
try {
|
|
45
|
+
setConnectionStatus('connecting');
|
|
48
46
|
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
const connectResult = await wallet.features['standard:connect'].connect(connectArgs);
|
|
48
|
+
const connectedSuiAccounts = connectResult.accounts.filter((account) =>
|
|
49
|
+
account.chains.some((chain) => chain.split(':')[0] === 'sui'),
|
|
50
|
+
);
|
|
51
|
+
const selectedAccount = getSelectedAccount(connectedSuiAccounts, accountAddress);
|
|
52
|
+
|
|
53
|
+
setWalletConnected(wallet, connectedSuiAccounts, selectedAccount);
|
|
54
|
+
|
|
55
|
+
return { accounts: connectedSuiAccounts };
|
|
56
|
+
} catch (error) {
|
|
57
|
+
setConnectionStatus('disconnected');
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
51
60
|
},
|
|
52
61
|
...mutationOptions,
|
|
53
62
|
});
|
|
@@ -7,5 +7,34 @@ import { useWalletStore } from './useWalletStore.js';
|
|
|
7
7
|
* Retrieves the wallet that is currently connected to the dApp, if one exists.
|
|
8
8
|
*/
|
|
9
9
|
export function useCurrentWallet() {
|
|
10
|
-
|
|
10
|
+
const currentWallet = useWalletStore((state) => state.currentWallet);
|
|
11
|
+
const connectionStatus = useWalletStore((state) => state.connectionStatus);
|
|
12
|
+
|
|
13
|
+
switch (connectionStatus) {
|
|
14
|
+
case 'connecting':
|
|
15
|
+
return {
|
|
16
|
+
connectionStatus,
|
|
17
|
+
currentWallet: null,
|
|
18
|
+
isDisconnected: false,
|
|
19
|
+
isConnecting: true,
|
|
20
|
+
isConnected: false,
|
|
21
|
+
} as const;
|
|
22
|
+
case 'disconnected':
|
|
23
|
+
return {
|
|
24
|
+
connectionStatus,
|
|
25
|
+
currentWallet: null,
|
|
26
|
+
isDisconnected: true,
|
|
27
|
+
isConnecting: false,
|
|
28
|
+
isConnected: false,
|
|
29
|
+
} as const;
|
|
30
|
+
case 'connected': {
|
|
31
|
+
return {
|
|
32
|
+
connectionStatus,
|
|
33
|
+
currentWallet: currentWallet!,
|
|
34
|
+
isDisconnected: false,
|
|
35
|
+
isConnecting: false,
|
|
36
|
+
isConnected: true,
|
|
37
|
+
} as const;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
11
40
|
}
|
|
@@ -23,7 +23,7 @@ export function useDisconnectWallet({
|
|
|
23
23
|
mutationKey,
|
|
24
24
|
...mutationOptions
|
|
25
25
|
}: UseDisconnectWalletMutationOptions = {}) {
|
|
26
|
-
const currentWallet = useCurrentWallet();
|
|
26
|
+
const { currentWallet } = useCurrentWallet();
|
|
27
27
|
const setWalletDisconnected = useWalletStore((state) => state.setWalletDisconnected);
|
|
28
28
|
|
|
29
29
|
return useMutation({
|
|
@@ -52,7 +52,7 @@ export function useSignAndExecuteTransactionBlock({
|
|
|
52
52
|
executeFromWallet,
|
|
53
53
|
...mutationOptions
|
|
54
54
|
}: UseSignAndExecuteTransactionBlockMutationOptions = {}) {
|
|
55
|
-
const currentWallet = useCurrentWallet();
|
|
55
|
+
const { currentWallet } = useCurrentWallet();
|
|
56
56
|
const currentAccount = useCurrentAccount();
|
|
57
57
|
const client = useSuiClient();
|
|
58
58
|
|
|
@@ -45,7 +45,7 @@ export function useSignPersonalMessage({
|
|
|
45
45
|
mutationKey,
|
|
46
46
|
...mutationOptions
|
|
47
47
|
}: UseSignPersonalMessageMutationOptions = {}) {
|
|
48
|
-
const currentWallet = useCurrentWallet();
|
|
48
|
+
const { currentWallet } = useCurrentWallet();
|
|
49
49
|
const currentAccount = useCurrentAccount();
|
|
50
50
|
|
|
51
51
|
return useMutation({
|
|
@@ -45,7 +45,7 @@ export function useSignTransactionBlock({
|
|
|
45
45
|
mutationKey,
|
|
46
46
|
...mutationOptions
|
|
47
47
|
}: UseSignTransactionBlockMutationOptions = {}) {
|
|
48
|
-
const currentWallet = useCurrentWallet();
|
|
48
|
+
const { currentWallet } = useCurrentWallet();
|
|
49
49
|
const currentAccount = useCurrentAccount();
|
|
50
50
|
|
|
51
51
|
return useMutation({
|
|
@@ -30,7 +30,7 @@ export function useSwitchAccount({
|
|
|
30
30
|
mutationKey,
|
|
31
31
|
...mutationOptions
|
|
32
32
|
}: UseSwitchAccountMutationOptions = {}) {
|
|
33
|
-
const currentWallet = useCurrentWallet();
|
|
33
|
+
const { currentWallet } = useCurrentWallet();
|
|
34
34
|
const setAccountSwitched = useWalletStore((state) => state.setAccountSwitched);
|
|
35
35
|
|
|
36
36
|
return useMutation({
|
|
@@ -10,7 +10,7 @@ import { useWalletStore } from './useWalletStore.js';
|
|
|
10
10
|
* Internal hook for easily handling various changes in properties for a wallet.
|
|
11
11
|
*/
|
|
12
12
|
export function useWalletPropertiesChanged() {
|
|
13
|
-
const currentWallet = useCurrentWallet();
|
|
13
|
+
const { currentWallet } = useCurrentWallet();
|
|
14
14
|
const updateWalletAccounts = useWalletStore((state) => state.updateWalletAccounts);
|
|
15
15
|
|
|
16
16
|
useEffect(() => {
|
package/src/index.ts
CHANGED
|
@@ -13,6 +13,7 @@ export * from './hooks/useSuiClientInfiniteQuery.js';
|
|
|
13
13
|
export * from './hooks/useSuiClientMutation.js';
|
|
14
14
|
export * from './hooks/useSuiClientQuery.js';
|
|
15
15
|
export * from './hooks/wallet/useAccounts.js';
|
|
16
|
+
export * from './hooks/wallet/useAutoConnectionStatus.js';
|
|
16
17
|
export * from './hooks/wallet/useConnectWallet.js';
|
|
17
18
|
export * from './hooks/wallet/useCurrentAccount.js';
|
|
18
19
|
export * from './hooks/wallet/useCurrentWallet.js';
|
package/src/walletStore.ts
CHANGED
|
@@ -6,8 +6,14 @@ import { createStore } from 'zustand';
|
|
|
6
6
|
import type { StateStorage } from 'zustand/middleware';
|
|
7
7
|
import { createJSONStorage, persist } from 'zustand/middleware';
|
|
8
8
|
|
|
9
|
+
type WalletConnectionStatus = 'disconnected' | 'connecting' | 'connected';
|
|
10
|
+
|
|
11
|
+
type WalletAutoConnectionStatus = 'disabled' | 'idle' | 'settled';
|
|
12
|
+
|
|
9
13
|
export type WalletActions = {
|
|
10
14
|
setAccountSwitched: (selectedAccount: WalletAccount) => void;
|
|
15
|
+
setConnectionStatus: (connectionStatus: WalletConnectionStatus) => void;
|
|
16
|
+
setAutoConnectionStatus: (autoConnectionStatus: WalletAutoConnectionStatus) => void;
|
|
11
17
|
setWalletConnected: (
|
|
12
18
|
wallet: WalletWithRequiredFeatures,
|
|
13
19
|
connectedAccounts: readonly WalletAccount[],
|
|
@@ -31,15 +37,23 @@ export type StoreState = {
|
|
|
31
37
|
currentAccount: WalletAccount | null;
|
|
32
38
|
lastConnectedAccountAddress: string | null;
|
|
33
39
|
lastConnectedWalletName: string | null;
|
|
40
|
+
connectionStatus: WalletConnectionStatus;
|
|
41
|
+
autoConnectionStatus: WalletAutoConnectionStatus;
|
|
34
42
|
} & WalletActions;
|
|
35
43
|
|
|
36
|
-
|
|
44
|
+
type WalletConfiguration = {
|
|
37
45
|
wallets: WalletWithRequiredFeatures[];
|
|
46
|
+
autoConnect: boolean;
|
|
38
47
|
storage: StateStorage;
|
|
39
48
|
storageKey: string;
|
|
40
49
|
};
|
|
41
50
|
|
|
42
|
-
export function createWalletStore({
|
|
51
|
+
export function createWalletStore({
|
|
52
|
+
wallets,
|
|
53
|
+
storage,
|
|
54
|
+
storageKey,
|
|
55
|
+
autoConnect,
|
|
56
|
+
}: WalletConfiguration) {
|
|
43
57
|
return createStore<StoreState>()(
|
|
44
58
|
persist(
|
|
45
59
|
(set, get) => ({
|
|
@@ -50,6 +64,17 @@ export function createWalletStore({ wallets, storage, storageKey }: WalletConfig
|
|
|
50
64
|
lastConnectedAccountAddress: null,
|
|
51
65
|
lastConnectedWalletName: null,
|
|
52
66
|
connectionStatus: 'disconnected',
|
|
67
|
+
autoConnectionStatus: autoConnect ? 'idle' : 'disabled',
|
|
68
|
+
setConnectionStatus(connectionStatus) {
|
|
69
|
+
set(() => ({
|
|
70
|
+
connectionStatus,
|
|
71
|
+
}));
|
|
72
|
+
},
|
|
73
|
+
setAutoConnectionStatus(autoConnectionStatus) {
|
|
74
|
+
set(() => ({
|
|
75
|
+
autoConnectionStatus,
|
|
76
|
+
}));
|
|
77
|
+
},
|
|
53
78
|
setWalletConnected(wallet, connectedAccounts, selectedAccount) {
|
|
54
79
|
set(() => ({
|
|
55
80
|
accounts: connectedAccounts,
|
|
@@ -57,6 +82,7 @@ export function createWalletStore({ wallets, storage, storageKey }: WalletConfig
|
|
|
57
82
|
currentAccount: selectedAccount,
|
|
58
83
|
lastConnectedWalletName: wallet.name,
|
|
59
84
|
lastConnectedAccountAddress: selectedAccount?.address,
|
|
85
|
+
connectionStatus: 'connected',
|
|
60
86
|
}));
|
|
61
87
|
},
|
|
62
88
|
setWalletDisconnected() {
|
|
@@ -66,6 +92,7 @@ export function createWalletStore({ wallets, storage, storageKey }: WalletConfig
|
|
|
66
92
|
currentAccount: null,
|
|
67
93
|
lastConnectedWalletName: null,
|
|
68
94
|
lastConnectedAccountAddress: null,
|
|
95
|
+
connectionStatus: 'disconnected',
|
|
69
96
|
}));
|
|
70
97
|
},
|
|
71
98
|
setAccountSwitched(selectedAccount) {
|
|
@@ -86,6 +113,7 @@ export function createWalletStore({ wallets, storage, storageKey }: WalletConfig
|
|
|
86
113
|
currentAccount: null,
|
|
87
114
|
lastConnectedWalletName: null,
|
|
88
115
|
lastConnectedAccountAddress: null,
|
|
116
|
+
connectionStatus: 'disconnected',
|
|
89
117
|
}));
|
|
90
118
|
} else {
|
|
91
119
|
set(() => ({ wallets: updatedWallets }));
|