@mysten/dapp-kit 0.4.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 +28 -0
- package/README.md +6 -6
- package/dist/cjs/components/AccountDropdownMenu.d.ts +4 -0
- package/dist/cjs/components/AccountDropdownMenu.js +61 -18
- package/dist/cjs/components/AccountDropdownMenu.js.map +2 -2
- package/dist/cjs/components/ConnectButton.js +74 -25
- package/dist/cjs/components/ConnectButton.js.map +3 -3
- package/dist/cjs/components/SuiClientProvider.d.ts +4 -4
- package/dist/cjs/components/SuiClientProvider.js +1 -0
- package/dist/cjs/components/SuiClientProvider.js.map +2 -2
- 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/networkConfig.d.ts +10 -0
- package/dist/cjs/hooks/networkConfig.js +74 -0
- package/dist/cjs/hooks/networkConfig.js.map +7 -0
- package/dist/cjs/hooks/useResolveSuiNSNames.d.ts +3 -105
- package/dist/cjs/hooks/useResolveSuiNSNames.js +6 -5
- package/dist/cjs/hooks/useResolveSuiNSNames.js.map +2 -2
- package/dist/cjs/hooks/useSuiClient.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/useSuiClientMutation.js.map +2 -2
- 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/useUnsafeBurnerWallet.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.css +127 -127
- package/dist/cjs/index.css.map +3 -3
- package/dist/cjs/index.d.ts +14 -10
- package/dist/cjs/index.js +698 -577
- 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.d.ts +4 -0
- package/dist/esm/components/AccountDropdownMenu.js +61 -18
- package/dist/esm/components/AccountDropdownMenu.js.map +2 -2
- package/dist/esm/components/ConnectButton.js +74 -25
- package/dist/esm/components/ConnectButton.js.map +3 -3
- package/dist/esm/components/SuiClientProvider.d.ts +4 -4
- package/dist/esm/components/SuiClientProvider.js +1 -0
- package/dist/esm/components/SuiClientProvider.js.map +2 -2
- 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/networkConfig.d.ts +10 -0
- package/dist/esm/hooks/networkConfig.js +51 -0
- package/dist/esm/hooks/networkConfig.js.map +7 -0
- package/dist/esm/hooks/useResolveSuiNSNames.d.ts +3 -105
- package/dist/esm/hooks/useResolveSuiNSNames.js +6 -5
- package/dist/esm/hooks/useResolveSuiNSNames.js.map +2 -2
- package/dist/esm/hooks/useSuiClient.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/useSuiClientMutation.js.map +2 -2
- 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/useUnsafeBurnerWallet.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.css +127 -127
- package/dist/esm/index.css.map +3 -3
- package/dist/esm/index.d.ts +14 -10
- package/dist/esm/index.js +692 -571
- 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/AccountDropdownMenu.tsx +26 -8
- package/src/components/SuiClientProvider.tsx +11 -2
- package/src/components/WalletProvider.tsx +1 -0
- package/src/hooks/networkConfig.ts +45 -0
- package/src/hooks/useResolveSuiNSNames.ts +14 -5
- 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 +14 -10
- package/src/walletStore.ts +30 -2
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
// Copyright (c) Mysten Labs, Inc.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
+
import type { ResolvedNameServiceNames } from '@mysten/sui.js/client';
|
|
5
|
+
import type { UseQueryOptions } from '@tanstack/react-query';
|
|
6
|
+
|
|
4
7
|
import { useSuiClientQuery } from './useSuiClientQuery.js';
|
|
5
8
|
|
|
6
|
-
export function useResolveSuiNSName(
|
|
7
|
-
|
|
9
|
+
export function useResolveSuiNSName(
|
|
10
|
+
address?: string | null,
|
|
11
|
+
options?: Omit<
|
|
12
|
+
UseQueryOptions<ResolvedNameServiceNames, Error, string | null, unknown[]>,
|
|
13
|
+
'queryFn' | 'queryKey'
|
|
14
|
+
>,
|
|
15
|
+
) {
|
|
16
|
+
return useSuiClientQuery(
|
|
8
17
|
'resolveNameServiceNames',
|
|
9
18
|
{
|
|
10
19
|
address: address!,
|
|
11
20
|
limit: 1,
|
|
12
21
|
},
|
|
13
22
|
{
|
|
14
|
-
|
|
23
|
+
...options,
|
|
15
24
|
refetchOnWindowFocus: false,
|
|
16
25
|
retry: false,
|
|
26
|
+
select: (data) => (data.data.length > 0 ? data.data[0] : null),
|
|
27
|
+
enabled: !!address && options?.enabled !== false,
|
|
17
28
|
},
|
|
18
29
|
);
|
|
19
|
-
|
|
20
|
-
return { data: data?.data?.[0] ?? null, ...rest };
|
|
21
30
|
}
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import type { SuiClient } from '@mysten/sui.js/client';
|
|
5
|
-
import type { UseInfiniteQueryOptions } from '@tanstack/react-query';
|
|
5
|
+
import type { InfiniteData, UseInfiniteQueryOptions } from '@tanstack/react-query';
|
|
6
6
|
import { useInfiniteQuery } 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
|
interface PaginatedResult {
|
|
@@ -12,52 +13,65 @@ interface PaginatedResult {
|
|
|
12
13
|
nextCursor?: unknown;
|
|
13
14
|
hasNextPage: boolean;
|
|
14
15
|
}
|
|
16
|
+
|
|
15
17
|
export type SuiRpcPaginatedMethodName = {
|
|
16
18
|
[K in keyof SuiClient]: SuiClient[K] extends (input: any) => Promise<PaginatedResult> ? K : never;
|
|
17
19
|
}[keyof SuiClient];
|
|
18
20
|
|
|
19
21
|
export type SuiRpcPaginatedMethods = {
|
|
20
|
-
[K in SuiRpcPaginatedMethodName]: SuiClient[K] extends (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
hasNextPage: boolean;
|
|
24
|
-
}>
|
|
22
|
+
[K in SuiRpcPaginatedMethodName]: SuiClient[K] extends (
|
|
23
|
+
input: infer Params,
|
|
24
|
+
) => Promise<infer Result extends { nextCursor?: infer Cursor | null }>
|
|
25
25
|
? {
|
|
26
26
|
name: K;
|
|
27
|
-
result:
|
|
28
|
-
params:
|
|
27
|
+
result: Result;
|
|
28
|
+
params: Params;
|
|
29
29
|
cursor: Cursor;
|
|
30
30
|
}
|
|
31
31
|
: never;
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
export type UseSuiClientInfiniteQueryOptions<
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
export type UseSuiClientInfiniteQueryOptions<
|
|
35
|
+
T extends keyof SuiRpcPaginatedMethods,
|
|
36
|
+
TData,
|
|
37
|
+
> = PartialBy<
|
|
38
|
+
Omit<
|
|
39
|
+
UseInfiniteQueryOptions<
|
|
40
|
+
SuiRpcPaginatedMethods[T]['result'],
|
|
41
|
+
Error,
|
|
42
|
+
TData,
|
|
43
|
+
SuiRpcPaginatedMethods[T]['result'],
|
|
44
|
+
unknown[]
|
|
45
|
+
>,
|
|
46
|
+
'queryFn' | 'initialPageParam' | 'getNextPageParam'
|
|
41
47
|
>,
|
|
42
|
-
'
|
|
48
|
+
'queryKey'
|
|
43
49
|
>;
|
|
44
50
|
|
|
45
|
-
export function useSuiClientInfiniteQuery<
|
|
51
|
+
export function useSuiClientInfiniteQuery<
|
|
52
|
+
T extends keyof SuiRpcPaginatedMethods,
|
|
53
|
+
TData = InfiniteData<SuiRpcPaginatedMethods[T]['result']>,
|
|
54
|
+
>(
|
|
46
55
|
method: T,
|
|
47
56
|
params: SuiRpcPaginatedMethods[T]['params'],
|
|
48
|
-
{
|
|
57
|
+
{
|
|
58
|
+
queryKey = [],
|
|
59
|
+
enabled = !!params,
|
|
60
|
+
...options
|
|
61
|
+
}: UseSuiClientInfiniteQueryOptions<T, TData> = {},
|
|
49
62
|
) {
|
|
50
63
|
const suiContext = useSuiClientContext();
|
|
51
64
|
|
|
52
65
|
return useInfiniteQuery({
|
|
53
66
|
...options,
|
|
67
|
+
initialPageParam: null,
|
|
54
68
|
queryKey: [suiContext.network, method, params, ...queryKey],
|
|
55
69
|
enabled,
|
|
56
|
-
queryFn:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
},
|
|
70
|
+
queryFn: ({ pageParam }) =>
|
|
71
|
+
suiContext.client[method]({
|
|
72
|
+
...(params ?? {}),
|
|
73
|
+
cursor: pageParam,
|
|
74
|
+
} as never),
|
|
75
|
+
getNextPageParam: ({ nextCursor }) => nextCursor ?? null,
|
|
62
76
|
});
|
|
63
77
|
}
|
|
@@ -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
|
@@ -1,24 +1,28 @@
|
|
|
1
1
|
// Copyright (c) Mysten Labs, Inc.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
export * from './hooks/useSuiClient.js';
|
|
5
|
-
export * from './components/ConnectButton.js';
|
|
6
4
|
export * from './components/connect-modal/ConnectModal.js';
|
|
5
|
+
export * from './components/ConnectButton.js';
|
|
7
6
|
export * from './components/SuiClientProvider.js';
|
|
8
7
|
export * from './components/WalletProvider.js';
|
|
9
|
-
export * from './hooks/
|
|
10
|
-
export * from './hooks/
|
|
11
|
-
export * from './hooks/
|
|
8
|
+
export * from './hooks/networkConfig.js';
|
|
9
|
+
export * from './hooks/useResolveSuiNSNames.js';
|
|
10
|
+
export * from './hooks/useSuiClient.js';
|
|
11
|
+
export * from './hooks/useSuiClientInfiniteQuery.js';
|
|
12
|
+
export * from './hooks/useSuiClientInfiniteQuery.js';
|
|
13
|
+
export * from './hooks/useSuiClientMutation.js';
|
|
14
|
+
export * from './hooks/useSuiClientQuery.js';
|
|
12
15
|
export * from './hooks/wallet/useAccounts.js';
|
|
13
|
-
export * from './hooks/wallet/
|
|
16
|
+
export * from './hooks/wallet/useAutoConnectionStatus.js';
|
|
14
17
|
export * from './hooks/wallet/useConnectWallet.js';
|
|
18
|
+
export * from './hooks/wallet/useCurrentAccount.js';
|
|
19
|
+
export * from './hooks/wallet/useCurrentWallet.js';
|
|
15
20
|
export * from './hooks/wallet/useDisconnectWallet.js';
|
|
21
|
+
export * from './hooks/wallet/useSignAndExecuteTransactionBlock.js';
|
|
16
22
|
export * from './hooks/wallet/useSignPersonalMessage.js';
|
|
17
23
|
export * from './hooks/wallet/useSignTransactionBlock.js';
|
|
18
|
-
export * from './hooks/wallet/
|
|
19
|
-
export * from './hooks/
|
|
20
|
-
export * from './hooks/useSuiClientQuery.js';
|
|
21
|
-
export * from './hooks/useSuiClientInfiniteQuery.js';
|
|
24
|
+
export * from './hooks/wallet/useSwitchAccount.js';
|
|
25
|
+
export * from './hooks/wallet/useWallets.js';
|
|
22
26
|
export * from './themes/lightTheme.js';
|
|
23
27
|
export * from './types.js';
|
|
24
28
|
|
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 }));
|