@interchain-kit/react 0.2.208 → 0.2.212

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.
Files changed (42) hide show
  1. package/README.md +2 -2
  2. package/esm/hooks/useChainWallet.js +2 -2
  3. package/esm/modal/modal.js +43 -91
  4. package/esm/modal/provider.js +30 -2
  5. package/esm/modal/views/Connected.js +3 -15
  6. package/esm/modal/views/Connecting.js +1 -3
  7. package/esm/modal/views/NotExist.js +4 -8
  8. package/esm/modal/views/QRCode.js +4 -15
  9. package/esm/modal/views/Reject.js +1 -3
  10. package/esm/modal/views/WalletList.js +3 -35
  11. package/esm/store/chain-wallet.js +7 -31
  12. package/esm/store/index.js +0 -219
  13. package/esm/store/store.js +73 -25
  14. package/esm/utils/wallet.js +24 -0
  15. package/hooks/useChainWallet.js +2 -2
  16. package/modal/modal.d.ts +30 -1
  17. package/modal/modal.js +41 -89
  18. package/modal/provider.js +29 -1
  19. package/modal/views/Connected.d.ts +7 -3
  20. package/modal/views/Connected.js +3 -15
  21. package/modal/views/Connecting.d.ts +2 -1
  22. package/modal/views/Connecting.js +1 -3
  23. package/modal/views/NotExist.d.ts +10 -3
  24. package/modal/views/NotExist.js +4 -8
  25. package/modal/views/QRCode.d.ts +9 -2
  26. package/modal/views/QRCode.js +4 -15
  27. package/modal/views/Reject.d.ts +2 -1
  28. package/modal/views/Reject.js +1 -3
  29. package/modal/views/WalletList.d.ts +7 -4
  30. package/modal/views/WalletList.js +3 -35
  31. package/package.json +19 -10
  32. package/store/chain-wallet.d.ts +8 -17
  33. package/store/chain-wallet.js +7 -31
  34. package/store/index.d.ts +0 -43
  35. package/store/index.js +0 -221
  36. package/store/store.d.ts +2 -4
  37. package/store/store.js +72 -24
  38. package/utils/wallet.d.ts +26 -0
  39. package/utils/wallet.js +26 -1
  40. package/esm/hooks/useAccount.js +0 -39
  41. package/hooks/useAccount.d.ts +0 -2
  42. package/hooks/useAccount.js +0 -43
@@ -1,221 +1,2 @@
1
- import { clientNotExistError, WalletState } from "@interchain-kit/core";
2
- import { createStore } from "zustand";
3
- import { immer } from "zustand/middleware/immer";
4
- import { persist, createJSONStorage } from 'zustand/middleware';
5
- const immerSyncUp = (newWalletManager) => {
6
- return (draft) => {
7
- draft.chains = newWalletManager.chains;
8
- draft.assetLists = newWalletManager.assetLists;
9
- draft.wallets = newWalletManager.wallets;
10
- draft.signerOptions = newWalletManager.signerOptions;
11
- draft.endpointOptions = newWalletManager.endpointOptions;
12
- draft.signerOptionMap = newWalletManager.signerOptionMap;
13
- draft.endpointOptionsMap = newWalletManager.endpointOptionsMap;
14
- draft.preferredSignTypeMap = newWalletManager.preferredSignTypeMap;
15
- };
16
- };
17
- export const createInterchainStore = (walletManager) => {
18
- const { chains, assetLists, wallets, signerOptions, endpointOptions } = walletManager;
19
- // const walletManager = new WalletManager(chains, assetLists, wallets, signerOptions, endpointOptions)
20
- return createStore(persist(immer((set, get) => ({
21
- chainWalletState: [],
22
- currentWalletName: '',
23
- currentChainName: '',
24
- chains: [...walletManager.chains],
25
- assetLists: [...walletManager.assetLists],
26
- wallets: walletManager.wallets,
27
- signerOptions: walletManager.signerOptions,
28
- endpointOptions: walletManager.endpointOptions,
29
- preferredSignTypeMap: { ...walletManager.preferredSignTypeMap },
30
- signerOptionMap: { ...walletManager.signerOptionMap },
31
- endpointOptionsMap: { ...walletManager.endpointOptionsMap },
32
- walletConnectQRCodeUri: '',
33
- updateChainWalletState: (walletName, chainName, data) => {
34
- set(draft => {
35
- let targetIndex = draft.chainWalletState.findIndex(cws => cws.walletName === walletName && cws.chainName === chainName);
36
- draft.chainWalletState[targetIndex] = { ...draft.chainWalletState[targetIndex], ...data };
37
- });
38
- },
39
- init: async () => {
40
- const existedChainWalletStatesMap = new Map(get().chainWalletState.map(cws => [cws.walletName + cws.chainName, cws]));
41
- wallets.forEach(wallet => {
42
- chains.forEach(chain => {
43
- if (!existedChainWalletStatesMap.has(wallet.info.name + chain.chainName)) {
44
- set(draft => {
45
- draft.chainWalletState.push({
46
- chainName: chain.chainName,
47
- walletName: wallet.info.name,
48
- walletState: WalletState.Disconnected,
49
- rpcEndpoint: "",
50
- errorMessage: "",
51
- account: undefined
52
- });
53
- });
54
- }
55
- });
56
- });
57
- const NotExistWallets = [];
58
- await Promise.all(get().wallets.map(async (wallet) => {
59
- try {
60
- await wallet.init();
61
- }
62
- catch (error) {
63
- if (error === clientNotExistError.message) {
64
- NotExistWallets.push(wallet.info.name);
65
- }
66
- }
67
- }));
68
- set(draft => {
69
- draft.chainWalletState = draft.chainWalletState.map(cws => {
70
- if (NotExistWallets.includes(cws.walletName)) {
71
- return { ...cws, walletState: WalletState.NotExist };
72
- }
73
- return cws;
74
- });
75
- });
76
- // return walletManager.init()
77
- },
78
- setCurrentChainName: (chainName) => {
79
- set(draft => { draft.currentChainName = chainName; });
80
- },
81
- setCurrentWalletName: (walletName) => {
82
- set(draft => { draft.currentWalletName = walletName; });
83
- },
84
- getDraftChainWalletState: (state, walletName, chainName) => {
85
- const targetIndex = state.chainWalletState.findIndex(cws => cws.walletName === walletName && cws.chainName === chainName);
86
- return state.chainWalletState[targetIndex];
87
- },
88
- getChainWalletState: (walletName, chainName) => {
89
- return get().chainWalletState.find(cws => cws.walletName === walletName && cws.chainName === chainName);
90
- },
91
- addChains: (chains, assetLists, signerOptions, endpointOptions) => {
92
- walletManager.addChains(chains, assetLists, signerOptions, endpointOptions);
93
- // console.log(walletManager.chains, walletManager.assetLists)
94
- // set(immerSyncUp(walletManager))
95
- // set(draft => {
96
- // draft.chains = walletManager.chains
97
- // })
98
- set(draft => {
99
- chains.forEach(newChain => {
100
- const existChain = draft.chains.find(c => c.chainId === newChain.chainId);
101
- if (!existChain) {
102
- draft.chains.push(newChain);
103
- const assetList = assetLists.find(a => a.chainName === newChain.chainName);
104
- draft.assetLists.push(assetList);
105
- draft.wallets.forEach(w => {
106
- draft.chainWalletState.push({
107
- chainName: newChain.chainName,
108
- walletName: w.info.name,
109
- walletState: WalletState.Disconnected,
110
- rpcEndpoint: "",
111
- errorMessage: "",
112
- account: undefined
113
- });
114
- });
115
- }
116
- draft.signerOptionMap[newChain.chainName] = signerOptions?.signing?.(newChain.chainName);
117
- draft.endpointOptionsMap[newChain.chainName] = endpointOptions?.endpoints?.[newChain.chainName];
118
- });
119
- });
120
- },
121
- connect: async (walletName, chainName) => {
122
- get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Connecting });
123
- try {
124
- await walletManager.connect(walletName, chainName, (uri) => {
125
- set(draft => {
126
- draft.walletConnectQRCodeUri = uri;
127
- });
128
- });
129
- set(draft => {
130
- draft.currentChainName = chainName;
131
- draft.currentWalletName = walletName;
132
- });
133
- get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Connected });
134
- }
135
- catch (error) {
136
- if (error.message === 'Request rejected') {
137
- get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Rejected, errorMessage: error.message });
138
- return;
139
- }
140
- get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Disconnected, errorMessage: error.message });
141
- }
142
- },
143
- disconnect: async (walletName, chainName) => {
144
- try {
145
- await walletManager.disconnect(walletName, chainName);
146
- get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Disconnected, account: null });
147
- }
148
- catch (error) {
149
- }
150
- },
151
- getAccount: async (walletName, chainName) => {
152
- const account = await walletManager.getAccount(walletName, chainName);
153
- get().updateChainWalletState(walletName, chainName, { account });
154
- return account;
155
- },
156
- getRpcEndpoint: async (walletName, chainName) => {
157
- const exist = get().getChainWalletState(walletName, chainName).rpcEndpoint;
158
- if (exist)
159
- return exist;
160
- const rpcEndpoint = await walletManager.getRpcEndpoint(walletName, chainName);
161
- get().updateChainWalletState(walletName, chainName, { rpcEndpoint });
162
- return rpcEndpoint;
163
- },
164
- getChainLogoUrl(chainName) {
165
- return walletManager.getChainLogoUrl(chainName);
166
- },
167
- getChainByName(chainName) {
168
- return walletManager.getChainByName(chainName);
169
- },
170
- getAssetListByName(chainName) {
171
- return walletManager.getAssetListByName(chainName);
172
- },
173
- getDownloadLink(walletName) {
174
- return walletManager.getDownloadLink(walletName);
175
- },
176
- getOfflineSigner(walletName, chainName) {
177
- return walletManager.getOfflineSigner(walletName, chainName);
178
- },
179
- getPreferSignType(chainName) {
180
- const result = walletManager.getPreferSignType(chainName);
181
- set(immerSyncUp(walletManager));
182
- return result;
183
- },
184
- getSignerOptions(chainName) {
185
- const result = walletManager.getSignerOptions(chainName);
186
- set(immerSyncUp(walletManager));
187
- return result;
188
- },
189
- getWalletByName(walletName) {
190
- return walletManager.getWalletByName(walletName);
191
- },
192
- getSigningClient(walletName, chainName) {
193
- return walletManager.getSigningClient(walletName, chainName);
194
- },
195
- getEnv() {
196
- return walletManager.getEnv();
197
- },
198
- })), {
199
- name: 'interchain-kit-store',
200
- storage: createJSONStorage(() => localStorage),
201
- partialize: state => ({
202
- chainWalletState: state.chainWalletState,
203
- currentWalletName: state.currentWalletName,
204
- currentChainName: state.currentChainName
205
- }),
206
- onRehydrateStorage: (state) => {
207
- // console.log('interchain-kit store hydration starts')
208
- // optional
209
- return (state, error) => {
210
- if (error) {
211
- console.log('an error happened during hydration', error);
212
- }
213
- else {
214
- // console.log('interchain-kit store hydration finished')
215
- }
216
- };
217
- },
218
- }));
219
- };
220
1
  export * from './chain-wallet';
221
2
  export * from './store';
@@ -1,4 +1,4 @@
1
- import { WalletState } from "@interchain-kit/core";
1
+ import { clientNotExistError, WalletState } from "@interchain-kit/core";
2
2
  import { createStore } from "zustand";
3
3
  import { immer } from "zustand/middleware/immer";
4
4
  import { persist, createJSONStorage } from 'zustand/middleware';
@@ -17,22 +17,8 @@ const immerSyncUp = (newWalletManager) => {
17
17
  export const createInterchainStore = (walletManager) => {
18
18
  const { chains, assetLists, wallets, signerOptions, endpointOptions } = walletManager;
19
19
  // const walletManager = new WalletManager(chains, assetLists, wallets, signerOptions, endpointOptions)
20
- const chainWalletState = [];
21
- wallets.forEach(wallet => {
22
- chains.forEach(chain => {
23
- chainWalletState.push({
24
- chainName: chain.chainName,
25
- walletName: wallet.info.name,
26
- walletState: WalletState.Disconnected,
27
- rpcEndpoint: "",
28
- errorMessage: "",
29
- signerOption: undefined,
30
- account: undefined
31
- });
32
- });
33
- });
34
20
  return createStore(persist(immer((set, get) => ({
35
- chainWalletState,
21
+ chainWalletState: [],
36
22
  currentWalletName: '',
37
23
  currentChainName: '',
38
24
  chains: [...walletManager.chains],
@@ -43,13 +29,59 @@ export const createInterchainStore = (walletManager) => {
43
29
  preferredSignTypeMap: { ...walletManager.preferredSignTypeMap },
44
30
  signerOptionMap: { ...walletManager.signerOptionMap },
45
31
  endpointOptionsMap: { ...walletManager.endpointOptionsMap },
32
+ walletConnectQRCodeUri: '',
46
33
  updateChainWalletState: (walletName, chainName, data) => {
47
34
  set(draft => {
48
35
  let targetIndex = draft.chainWalletState.findIndex(cws => cws.walletName === walletName && cws.chainName === chainName);
49
36
  draft.chainWalletState[targetIndex] = { ...draft.chainWalletState[targetIndex], ...data };
50
37
  });
51
38
  },
52
- init: () => walletManager.init(),
39
+ init: async () => {
40
+ const existedChainWalletStatesMap = new Map(get().chainWalletState.map(cws => [cws.walletName + cws.chainName, cws]));
41
+ wallets.forEach(wallet => {
42
+ chains.forEach(chain => {
43
+ if (!existedChainWalletStatesMap.has(wallet.info.name + chain.chainName)) {
44
+ set(draft => {
45
+ draft.chainWalletState.push({
46
+ chainName: chain.chainName,
47
+ walletName: wallet.info.name,
48
+ walletState: WalletState.Disconnected,
49
+ rpcEndpoint: "",
50
+ errorMessage: "",
51
+ account: undefined
52
+ });
53
+ });
54
+ }
55
+ });
56
+ });
57
+ const NotExistWallets = [];
58
+ const ExistWallets = [];
59
+ await Promise.all(get().wallets.map(async (wallet) => {
60
+ try {
61
+ await wallet.init();
62
+ ExistWallets.push(wallet.info.name);
63
+ }
64
+ catch (error) {
65
+ if (error === clientNotExistError) {
66
+ NotExistWallets.push(wallet.info.name);
67
+ }
68
+ }
69
+ }));
70
+ set(draft => {
71
+ draft.chainWalletState = draft.chainWalletState.map(cws => {
72
+ if (NotExistWallets.includes(cws.walletName)) {
73
+ return { ...cws, walletState: WalletState.NotExist };
74
+ }
75
+ return cws;
76
+ });
77
+ draft.chainWalletState = draft.chainWalletState.map(cws => {
78
+ if (ExistWallets.includes(cws.walletName)) {
79
+ return { ...cws, walletState: cws.walletState === WalletState.NotExist ? WalletState.Disconnected : cws.walletState };
80
+ }
81
+ return cws;
82
+ });
83
+ });
84
+ },
53
85
  setCurrentChainName: (chainName) => {
54
86
  set(draft => { draft.currentChainName = chainName; });
55
87
  },
@@ -82,25 +114,41 @@ export const createInterchainStore = (walletManager) => {
82
114
  chainName: newChain.chainName,
83
115
  walletName: w.info.name,
84
116
  walletState: WalletState.Disconnected,
85
- rpcEndpoint: endpointOptions?.endpoints?.[newChain.chainName]?.rpc?.[0],
117
+ rpcEndpoint: endpointOptions?.endpoints[newChain.chainName]?.rpc?.[0] || '',
86
118
  errorMessage: "",
87
- signerOption: signerOptions?.signing?.(newChain.chainName),
88
119
  account: undefined
89
120
  });
90
121
  });
91
122
  }
123
+ else {
124
+ draft.updateChainWalletState(newChain.chainName, newChain.chainName, {
125
+ rpcEndpoint: endpointOptions?.endpoints[newChain.chainName]?.rpc?.[0] || '',
126
+ });
127
+ }
92
128
  draft.signerOptionMap[newChain.chainName] = signerOptions?.signing?.(newChain.chainName);
93
129
  draft.endpointOptionsMap[newChain.chainName] = endpointOptions?.endpoints?.[newChain.chainName];
94
130
  });
95
131
  });
96
132
  },
97
133
  connect: async (walletName, chainName) => {
98
- get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Connecting });
134
+ const state = get().getChainWalletState(walletName, chainName)?.walletState;
135
+ if (state === WalletState.NotExist) {
136
+ return;
137
+ }
138
+ if (walletName === 'WalletConnect' && state === WalletState.Connected) {
139
+ return;
140
+ }
141
+ set(draft => {
142
+ draft.currentChainName = chainName;
143
+ draft.currentWalletName = walletName;
144
+ draft.walletConnectQRCodeUri = '';
145
+ });
146
+ get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Connecting, errorMessage: '' });
99
147
  try {
100
- await walletManager.connect(walletName, chainName);
101
- set(draft => {
102
- draft.currentChainName = chainName;
103
- draft.currentWalletName = walletName;
148
+ await walletManager.connect(walletName, chainName, (uri) => {
149
+ set(draft => {
150
+ draft.walletConnectQRCodeUri = uri;
151
+ });
104
152
  });
105
153
  get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Connected });
106
154
  }
@@ -183,7 +231,7 @@ export const createInterchainStore = (walletManager) => {
183
231
  console.log('an error happened during hydration', error);
184
232
  }
185
233
  else {
186
- console.log('interchain-kit store hydration finished');
234
+ // console.log('interchain-kit store hydration finished')
187
235
  }
188
236
  };
189
237
  },
@@ -6,3 +6,27 @@ export const getWalletInfo = (wallet) => {
6
6
  mobileDisabled: true,
7
7
  };
8
8
  };
9
+ export const transferToWalletUISchema = (w) => {
10
+ if (w.info.mode === "wallet-connect") {
11
+ const wc = w;
12
+ if (wc.session) {
13
+ return {
14
+ name: wc.session?.peer.metadata?.name,
15
+ prettyName: `${wc.session?.peer.metadata?.name} - Mobile`,
16
+ logo: wc.session?.peer.metadata?.icons?.[0],
17
+ mobileDisabled: true,
18
+ shape: "list",
19
+ originalWallet: { ...w, session: wc.session },
20
+ subLogo: w.info.logo,
21
+ };
22
+ }
23
+ }
24
+ return {
25
+ name: w.info.name,
26
+ prettyName: w.info.prettyName,
27
+ logo: w.info.logo,
28
+ mobileDisabled: true,
29
+ shape: "list",
30
+ originalWallet: w,
31
+ };
32
+ };
@@ -12,9 +12,9 @@ const useChainWallet = (chainName, walletName) => {
12
12
  return {
13
13
  //for migration cosmos kit
14
14
  connect: async () => {
15
- await connect(walletName, chainName);
16
15
  setCurrentWalletName(walletName);
17
16
  setCurrentChainName(chainName);
17
+ await connect(walletName, chainName);
18
18
  await getAccount(walletName, chainName);
19
19
  },
20
20
  disconnect: () => disconnect(walletName, chainName),
@@ -27,7 +27,7 @@ const useChainWallet = (chainName, walletName) => {
27
27
  chain,
28
28
  assetList,
29
29
  address: chainWalletStateToShow?.account?.address,
30
- wallet: new chain_wallet_1.ChainWallet(wallet, () => connect(walletName, chainName), () => disconnect(walletName, chainName), () => getAccount(walletName, chainName)),
30
+ wallet: wallet ? new chain_wallet_1.ChainWallet(wallet, () => connect(walletName, chainName), () => disconnect(walletName, chainName), () => getAccount(walletName, chainName)) : null,
31
31
  rpcEndpoint: chainWalletStateToShow?.rpcEndpoint,
32
32
  getSigningClient: () => getSigningClient(walletName, chainName),
33
33
  };
package/modal/modal.d.ts CHANGED
@@ -1 +1,30 @@
1
- export declare const WalletModal: () => import("react/jsx-runtime").JSX.Element;
1
+ import { BaseWallet, DownloadInfo } from "@interchain-kit/core";
2
+ import { Wallet as InterchainUIWalletType } from "@interchain-ui/react";
3
+ export type WalletModalProps = {
4
+ shouldShowList: boolean;
5
+ isOpen: boolean;
6
+ walletConnectQRCodeUri: string | null;
7
+ wallets: InterchainUIWalletType[];
8
+ username: string;
9
+ address: string;
10
+ currentWallet?: BaseWallet;
11
+ isConnecting: boolean;
12
+ isConnected: boolean;
13
+ isRejected: boolean;
14
+ isDisconnected: boolean;
15
+ isNotExist: boolean;
16
+ errorMessage: string;
17
+ open: () => void;
18
+ close: () => void;
19
+ disconnect: () => void;
20
+ onSelectWallet: (wallet: BaseWallet) => void;
21
+ onBack: () => void;
22
+ onReconnect: () => void;
23
+ getDownloadLink: (walletName: string) => DownloadInfo;
24
+ getEnv: () => {
25
+ browser?: string;
26
+ device?: string;
27
+ os?: string;
28
+ };
29
+ };
30
+ export declare const WalletModal: ({ shouldShowList, isOpen, walletConnectQRCodeUri, wallets, username, address, currentWallet, isConnecting, isConnected, isRejected, isDisconnected, isNotExist, errorMessage, open, close, disconnect, onSelectWallet, onBack, onReconnect, getDownloadLink, getEnv, }: WalletModalProps) => import("react/jsx-runtime").JSX.Element;
package/modal/modal.js CHANGED
@@ -3,104 +3,56 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WalletModal = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const views_1 = require("./views");
6
- const provider_1 = require("./provider");
7
- const hooks_1 = require("../hooks");
8
6
  const react_1 = require("react");
9
- const core_1 = require("@interchain-kit/core");
10
7
  const react_2 = require("@interchain-ui/react");
11
- const WalletModal = () => {
12
- const { currentWalletName, currentChainName, wallets, connect, getAccount, setCurrentWalletName, walletConnectQRCodeUri, } = (0, hooks_1.useWalletManager)();
13
- const { modalIsOpen, open, close } = (0, provider_1.useWalletModal)();
14
- const [modalType, setModalType] = (0, react_1.useState)("wallet-list");
15
- const [selectedWallet, setSelectedWallet] = (0, react_1.useState)(null);
16
- const { chain, status, wallet } = (0, hooks_1.useChainWallet)(currentChainName, currentWalletName);
17
- const handleConnect = async () => {
18
- try {
19
- await connect(selectedWallet?.info?.name, chain.chainName);
20
- await getAccount(selectedWallet?.info?.name, chain.chainName);
21
- setSelectedWallet(null);
8
+ const WalletModal = ({ shouldShowList, isOpen, walletConnectQRCodeUri, wallets, username, address, currentWallet, isConnecting, isConnected, isRejected, isDisconnected, isNotExist, errorMessage, open, close, disconnect, onSelectWallet, onBack, onReconnect, getDownloadLink, getEnv, }) => {
9
+ const { header, content } = (0, react_1.useMemo)(() => {
10
+ if (shouldShowList || isDisconnected) {
11
+ return {
12
+ header: (0, jsx_runtime_1.jsx)(views_1.WalletListHeader, { close: close }),
13
+ content: ((0, jsx_runtime_1.jsx)(views_1.WalletListContent, { onSelectWallet: onSelectWallet, wallets: wallets })),
14
+ };
15
+ }
16
+ if (currentWallet &&
17
+ walletConnectQRCodeUri &&
18
+ currentWallet.info.name === "WalletConnect") {
19
+ return {
20
+ header: ((0, jsx_runtime_1.jsx)(views_1.QRCodeHeader, { wallet: currentWallet, close: close, onBack: onBack })),
21
+ content: ((0, jsx_runtime_1.jsx)(views_1.QRCodeContent, { walletConnectQRCodeUri: walletConnectQRCodeUri, errorMessage: errorMessage, onReconnect: onReconnect })),
22
+ };
22
23
  }
23
- catch (error) {
24
- console.error("Failed to connect wallet:", error);
24
+ if (currentWallet && isNotExist) {
25
+ return {
26
+ header: ((0, jsx_runtime_1.jsx)(views_1.NotExistHeader, { wallet: currentWallet, close: close, onBack: onBack })),
27
+ content: ((0, jsx_runtime_1.jsx)(views_1.NotExistContent, { wallet: currentWallet, getDownloadLink: getDownloadLink, getEnv: getEnv })),
28
+ };
25
29
  }
26
- };
27
- (0, react_1.useEffect)(() => {
28
- if (selectedWallet && currentWalletName && currentChainName) {
29
- handleConnect();
30
+ if (currentWallet && isRejected) {
31
+ return {
32
+ header: ((0, jsx_runtime_1.jsx)(views_1.RejectHeader, { wallet: currentWallet, close: close, onBack: onBack })),
33
+ content: ((0, jsx_runtime_1.jsx)(views_1.RejectContent, { wallet: currentWallet, onReconnect: onReconnect })),
34
+ };
30
35
  }
31
- }, [selectedWallet]);
32
- const handleSelectWallet = async (selectedWallet) => {
33
- setSelectedWallet(selectedWallet);
34
- setCurrentWalletName(selectedWallet?.info?.name);
35
- };
36
- (0, react_1.useEffect)(() => {
37
- if (!selectedWallet) {
38
- setModalType("wallet-list");
36
+ if (currentWallet && isConnected) {
37
+ return {
38
+ header: ((0, jsx_runtime_1.jsx)(views_1.ConnectedHeader, { wallet: currentWallet, onBack: onBack, close: close })),
39
+ content: ((0, jsx_runtime_1.jsx)(views_1.ConnectedContent, { wallet: currentWallet, username: username, address: address, disconnect: disconnect })),
40
+ };
39
41
  }
40
- if (currentWalletName && currentChainName) {
41
- if (status === core_1.WalletState.Connecting) {
42
- setModalType("connecting");
43
- }
44
- if (status === core_1.WalletState.Connected) {
45
- setModalType("connected");
46
- }
47
- if (status === core_1.WalletState.Rejected) {
48
- setModalType("reject");
49
- }
50
- if (status === core_1.WalletState.Disconnected) {
51
- setModalType("wallet-list");
52
- }
53
- if (walletConnectQRCodeUri) {
54
- setModalType("qr-code");
55
- }
42
+ if (currentWallet && isConnecting) {
43
+ return {
44
+ header: ((0, jsx_runtime_1.jsx)(views_1.ConnectingHeader, { wallet: currentWallet, close: close, onBack: onBack })),
45
+ content: (0, jsx_runtime_1.jsx)(views_1.ConnectingContent, { wallet: currentWallet }),
46
+ };
56
47
  }
57
48
  }, [
58
- currentWalletName,
59
- currentChainName,
60
- status,
61
- modalIsOpen,
62
- selectedWallet,
49
+ currentWallet,
50
+ isConnected,
51
+ isConnecting,
52
+ address,
53
+ shouldShowList,
63
54
  walletConnectQRCodeUri,
64
55
  ]);
65
- const goBackList = () => setModalType("wallet-list");
66
- const { header, content } = (0, react_1.useMemo)(() => {
67
- switch (modalType) {
68
- case "wallet-list":
69
- return {
70
- header: (0, jsx_runtime_1.jsx)(views_1.WalletListHeader, {}),
71
- content: (0, jsx_runtime_1.jsx)(views_1.WalletListContent, { onSelectWallet: handleSelectWallet }),
72
- };
73
- case "connecting":
74
- return {
75
- header: (0, jsx_runtime_1.jsx)(views_1.ConnectingHeader, { wallet: wallet, onBack: goBackList }),
76
- content: (0, jsx_runtime_1.jsx)(views_1.ConnectingContent, { wallet: wallet }),
77
- };
78
- case "connected":
79
- return {
80
- header: (0, jsx_runtime_1.jsx)(views_1.ConnectedHeader, { wallet: wallet, onBack: goBackList }),
81
- content: (0, jsx_runtime_1.jsx)(views_1.ConnectedContent, { afterDisconnect: goBackList }),
82
- };
83
- case "reject":
84
- return {
85
- header: (0, jsx_runtime_1.jsx)(views_1.RejectHeader, { wallet: wallet, onBack: goBackList }),
86
- content: ((0, jsx_runtime_1.jsx)(views_1.RejectContent, { wallet: wallet, onReconnect: () => {
87
- setModalType("connecting");
88
- wallet.connect(chain.chainId);
89
- wallet.getAccount(chain.chainId);
90
- } })),
91
- };
92
- case "not-exist":
93
- return {
94
- header: (0, jsx_runtime_1.jsx)(views_1.NotExistHeader, { wallet: wallet, onBack: goBackList }),
95
- content: (0, jsx_runtime_1.jsx)(views_1.NotExistContent, { wallet: wallet }),
96
- };
97
- case "qr-code":
98
- return {
99
- header: (0, jsx_runtime_1.jsx)(views_1.QRCodeHeader, { onBack: goBackList }),
100
- content: (0, jsx_runtime_1.jsx)(views_1.QRCodeContent, {}),
101
- };
102
- }
103
- }, [modalType]);
104
- return ((0, jsx_runtime_1.jsx)(react_2.ConnectModal, { isOpen: modalIsOpen, header: header, onOpen: open, onClose: close, children: content }));
56
+ return ((0, jsx_runtime_1.jsx)(react_2.ConnectModal, { isOpen: isOpen, header: header, onOpen: open, onClose: close, children: content }));
105
57
  };
106
58
  exports.WalletModal = WalletModal;
package/modal/provider.js CHANGED
@@ -4,12 +4,40 @@ exports.useWalletModal = exports.WalletModalProvider = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const modal_1 = require("./modal");
7
+ const core_1 = require("@interchain-kit/core");
8
+ const hooks_1 = require("../hooks");
9
+ const utils_1 = require("../utils");
7
10
  const WalletModalContext = (0, react_1.createContext)(null);
8
11
  const WalletModalProvider = ({ children, }) => {
9
12
  const [modalIsOpen, setModalIsOpen] = (0, react_1.useState)(false);
10
13
  const open = () => setModalIsOpen(true);
11
14
  const close = () => setModalIsOpen(false);
12
- return ((0, jsx_runtime_1.jsxs)(WalletModalContext.Provider, { value: { modalIsOpen, open, close }, children: [children, (0, jsx_runtime_1.jsx)(modal_1.WalletModal, {})] }));
15
+ const [walletNameToConnect, setWalletNameToConnect] = (0, react_1.useState)(null);
16
+ const { chains, wallets, setCurrentWalletName, currentChainName, currentWalletName, walletConnectQRCodeUri, getDownloadLink, getEnv, } = (0, hooks_1.useWalletManager)();
17
+ const { wallet, status, connect, disconnect, username, address, message } = (0, hooks_1.useChainWallet)(currentChainName || chains[0].chainName, currentWalletName);
18
+ const [shouldShowList, setShouldShowList] = (0, react_1.useState)(!(currentChainName && currentWalletName));
19
+ const walletsForUI = wallets.map(utils_1.transferToWalletUISchema);
20
+ (0, react_1.useEffect)(() => {
21
+ if (walletNameToConnect) {
22
+ try {
23
+ connect();
24
+ setWalletNameToConnect(null);
25
+ setShouldShowList(false);
26
+ }
27
+ catch (error) {
28
+ console.error("Error connecting to wallet:", error);
29
+ throw error;
30
+ }
31
+ }
32
+ }, [walletNameToConnect]);
33
+ const handleCloseModal = () => {
34
+ close();
35
+ setShouldShowList(false);
36
+ };
37
+ return ((0, jsx_runtime_1.jsxs)(WalletModalContext.Provider, { value: { modalIsOpen, open, close }, children: [children, (0, jsx_runtime_1.jsx)(modal_1.WalletModal, { shouldShowList: shouldShowList, username: username, address: address, disconnect: disconnect, isOpen: modalIsOpen, open: open, close: handleCloseModal, wallets: walletsForUI, walletConnectQRCodeUri: walletConnectQRCodeUri, currentWallet: wallet?.originalWallet, isConnecting: status === core_1.WalletState.Connecting, isConnected: status === core_1.WalletState.Connected, isRejected: status === core_1.WalletState.Rejected, isDisconnected: status === core_1.WalletState.Disconnected, isNotExist: status === core_1.WalletState.NotExist, errorMessage: message, onSelectWallet: (w) => {
38
+ setWalletNameToConnect(w.info.name);
39
+ setCurrentWalletName(w.info.name);
40
+ }, onBack: () => setShouldShowList(true), onReconnect: connect, getDownloadLink: () => getDownloadLink(wallet?.info.name), getEnv: getEnv })] }));
13
41
  };
14
42
  exports.WalletModalProvider = WalletModalProvider;
15
43
  const useWalletModal = () => {
@@ -1,8 +1,12 @@
1
1
  import { BaseWallet } from "@interchain-kit/core";
2
- export declare const ConnectedHeader: ({ wallet, onBack, }: {
2
+ export declare const ConnectedHeader: ({ wallet, close, onBack, }: {
3
3
  wallet: BaseWallet;
4
+ close: () => void;
4
5
  onBack: () => void;
5
6
  }) => import("react/jsx-runtime").JSX.Element;
6
- export declare const ConnectedContent: ({ afterDisconnect, }: {
7
- afterDisconnect: () => void;
7
+ export declare const ConnectedContent: ({ address, username, wallet, disconnect, }: {
8
+ address: string;
9
+ username: string | null;
10
+ wallet: BaseWallet;
11
+ disconnect: () => void;
8
12
  }) => import("react/jsx-runtime").JSX.Element;