@manahippo/aptos-wallet-adapter 0.4.12 → 1.0.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.
@@ -65,22 +65,6 @@ export const WalletProvider: FC<WalletProviderProps> = ({
65
65
 
66
66
  // When the wallets change, start to listen for changes to their `readyState`
67
67
  useEffect(() => {
68
- // When the adapters change, wrap them to conform to the `Wallet` interface
69
- setWallets((currentWallets) =>
70
- adapters.map((wAdapter, index) => {
71
- const currentWallet = currentWallets[index];
72
- // If the wallet hasn't changed, return the same instance
73
- return currentWallet &&
74
- currentWallet.adapter === wAdapter &&
75
- currentWallet.readyState === wAdapter.readyState
76
- ? currentWallet
77
- : {
78
- adapter: wAdapter,
79
- readyState: wAdapter.readyState
80
- };
81
- })
82
- );
83
-
84
68
  function handleReadyStateChange(this: any, wReadyState: WalletReadyState) {
85
69
  setWallets((prevWallets) => {
86
70
  const index = prevWallets.findIndex(({ adapter: wAdapter }) => wAdapter === this);
@@ -106,9 +90,10 @@ export const WalletProvider: FC<WalletProviderProps> = ({
106
90
 
107
91
  // When the selected wallet changes, initialize the state
108
92
  useEffect(() => {
93
+ if (!autoConnect) return;
109
94
  const selectedWallet = wallets.find((wAdapter) => wAdapter.adapter.name === name);
110
95
  if (selectedWallet) {
111
- console.log('selectedWallets', selectedWallet);
96
+ // console.log('selectedWallets in autoConnect', selectedWallet);
112
97
  setState({
113
98
  wallet: selectedWallet,
114
99
  adapter: selectedWallet.adapter,
@@ -119,7 +104,7 @@ export const WalletProvider: FC<WalletProviderProps> = ({
119
104
  } else {
120
105
  setState(initialState);
121
106
  }
122
- }, [name, wallets]);
107
+ }, [name, wallets, autoConnect]);
123
108
 
124
109
  // If the window is closing or reloading, ignore disconnect and error events from the adapter
125
110
  useEffect(() => {
@@ -150,7 +135,7 @@ export const WalletProvider: FC<WalletProviderProps> = ({
150
135
  // Handle the adapter's network event
151
136
  const handleNetworkChange = useCallback(() => {
152
137
  if (!adapter) return;
153
- console.log('adapter: handleNetworkChange', adapter.network);
138
+ // console.log('adapter: handleNetworkChange', adapter.network);
154
139
  setState((state) => {
155
140
  return {
156
141
  ...state,
@@ -162,7 +147,7 @@ export const WalletProvider: FC<WalletProviderProps> = ({
162
147
  // Handle the adapter's account event
163
148
  const handleAccountChange = useCallback(() => {
164
149
  if (!adapter) return;
165
- console.log('adapter: handleAccountChange', adapter.publicAccount);
150
+ // console.log('adapter: handleAccountChange', adapter.publicAccount);
166
151
  setState((state) => {
167
152
  return {
168
153
  ...state,
@@ -174,7 +159,10 @@ export const WalletProvider: FC<WalletProviderProps> = ({
174
159
  // Handle the adapter's disconnect event
175
160
  const handleDisconnect = useCallback(() => {
176
161
  // Clear the selected wallet unless the window is unloading
177
- if (!isUnloading.current) setName(null);
162
+ if (!isUnloading.current) {
163
+ setName(null);
164
+ setState(initialState);
165
+ }
178
166
  }, [isUnloading, setName]);
179
167
 
180
168
  // Handle the adapter's error event, and local errors
@@ -227,63 +215,79 @@ export const WalletProvider: FC<WalletProviderProps> = ({
227
215
  };
228
216
  }, [adapter]);
229
217
 
230
- // If autoConnect is enabled, try to connect when the adapter changes and is ready
231
- useEffect(() => {
232
- if (
233
- isConnecting.current ||
234
- connected ||
235
- !autoConnect ||
236
- !adapter ||
237
- !(readyState === WalletReadyState.Installed || readyState === WalletReadyState.Loadable)
238
- )
239
- return;
218
+ // Connect the adapter to the wallet
219
+ const connect = useCallback(
220
+ async (walletName?) => {
221
+ if (isConnecting.current || isDisconnecting.current || connected || !walletName) return;
222
+ let walletToConnect = initialState;
223
+ if (!adapter || walletName !== adapter?.name) {
224
+ const selectedWallet = wallets.find((wAdapter) => wAdapter.adapter.name === walletName);
225
+ if (selectedWallet) {
226
+ walletToConnect = {
227
+ wallet: selectedWallet,
228
+ adapter: selectedWallet.adapter,
229
+ connected: selectedWallet.adapter.connected,
230
+ account: selectedWallet.adapter.publicAccount,
231
+ network: selectedWallet.adapter.network
232
+ };
233
+ }
234
+ setState(walletToConnect);
235
+ setName(walletName);
236
+ } else {
237
+ walletToConnect = {
238
+ wallet,
239
+ adapter,
240
+ connected,
241
+ account,
242
+ network
243
+ };
244
+ }
245
+ if (!walletToConnect.adapter) throw handleError(new WalletNotSelectedError());
246
+ if (
247
+ !(
248
+ walletToConnect.adapter.readyState === WalletReadyState.Installed ||
249
+ walletToConnect.adapter.readyState === WalletReadyState.Loadable
250
+ )
251
+ ) {
252
+ // Clear the selected wallet
253
+ setName(null);
240
254
 
241
- (async function () {
255
+ if (typeof window !== 'undefined') {
256
+ window.open(walletToConnect.adapter.url, '_blank');
257
+ }
258
+
259
+ throw handleError(new WalletNotReadyError('Wallet Not Ready'));
260
+ }
242
261
  isConnecting.current = true;
243
262
  setConnecting(true);
244
263
  try {
245
- await adapter.connect();
264
+ await walletToConnect.adapter.connect();
246
265
  } catch (error: any) {
247
266
  // Clear the selected wallet
248
267
  setName(null);
249
- // Don't throw error, but handleError will still be called
268
+ // Rethrow the error, and handleError will also be called
269
+ throw error;
250
270
  } finally {
251
271
  setConnecting(false);
252
272
  isConnecting.current = false;
253
273
  }
254
- })();
255
- }, [isConnecting, connected, autoConnect, adapter, readyState, setName]);
256
-
257
- // Connect the adapter to the wallet
258
- const connect = useCallback(async () => {
259
- if (isConnecting.current || isDisconnecting.current || connected) return;
260
-
261
- if (!adapter) throw handleError(new WalletNotSelectedError());
262
-
263
- if (!(readyState === WalletReadyState.Installed || readyState === WalletReadyState.Loadable)) {
264
- // Clear the selected wallet
265
- setName(null);
266
-
267
- if (typeof window !== 'undefined') {
268
- window.open(adapter.url, '_blank');
269
- }
274
+ },
275
+ [connected, adapter, handleError, wallets, setName, wallet, account, network]
276
+ );
270
277
 
271
- throw handleError(new WalletNotReadyError('Wallet Not Ready'));
272
- }
273
- isConnecting.current = true;
274
- setConnecting(true);
275
- try {
276
- await adapter.connect();
277
- } catch (error: any) {
278
- // Clear the selected wallet
279
- setName(null);
280
- // Rethrow the error, and handleError will also be called
281
- throw error;
282
- } finally {
283
- setConnecting(false);
284
- isConnecting.current = false;
285
- }
286
- }, [isConnecting, isDisconnecting, connected, adapter, readyState, handleError, setName]);
278
+ // If autoConnect is enabled, try to connect when the adapter changes and is ready
279
+ useEffect(() => {
280
+ if (
281
+ isConnecting.current ||
282
+ connected ||
283
+ !autoConnect ||
284
+ !name ||
285
+ !adapter ||
286
+ !(readyState === WalletReadyState.Installed || readyState === WalletReadyState.Loadable)
287
+ )
288
+ return;
289
+ connect(name);
290
+ }, [isConnecting, connected, autoConnect, name, connect, adapter, readyState]);
287
291
 
288
292
  // Disconnect the adapter from the wallet
289
293
  const disconnect = useCallback(async () => {
@@ -344,7 +348,7 @@ export const WalletProvider: FC<WalletProviderProps> = ({
344
348
  connecting,
345
349
  disconnecting,
346
350
  autoConnect,
347
- select: setName,
351
+ select: connect,
348
352
  connect,
349
353
  disconnect,
350
354
  signAndSubmitTransaction,
@@ -24,8 +24,8 @@ export interface WalletContextState {
24
24
  connected: boolean;
25
25
  disconnecting: boolean;
26
26
  network: NetworkInfo;
27
- select(walletName: WalletName): void;
28
- connect(): Promise<void>;
27
+ select(walletName?: WalletName): Promise<void>;
28
+ connect(walletName?: WalletName): Promise<void>;
29
29
  disconnect(): Promise<void>;
30
30
  signAndSubmitTransaction(
31
31
  transaction: Types.TransactionPayload,