@tronweb3/tronwallet-adapter-react-hooks 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.
package/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+ Copyright (c) 2022-Present, tronprotocol
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,236 @@
1
+ # @tronweb3/tronwallet-adapter-react-hooks
2
+
3
+ `@tronweb3/tronwallet-adapter-react-hooks` provides a `useWallet()` hook which will make it easy to "Connect Wallet" and listen to the state change for developers.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @tronweb3/tronwallet-adapter-react-hooks @tronweb3/tronwallet-abstract-adapter @tronweb3/tronwallet-adapters
9
+ # or pnpm install @tronweb3/tronwallet-adapter-react-hooks @tronweb3/tronwallet-abstract-adapter @tronweb3/tronwallet-adapters
10
+ # or yarn install @tronweb3/tronwallet-adapter-react-hooks @tronweb3/tronwallet-abstract-adapter @tronweb3/tronwallet-adapters
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ `@tronweb3/tronwallet-adapter-react-hooks` uses [`Context` of React](https://reactjs.org/docs/context.html) to maintain a shared data. So developers need to wrap `App` content within the `WalletProvider`.
16
+
17
+ You can provide a `onError` callback to handle various errors such as `WalletConnectionError`, `WalletNotFoundError`.
18
+
19
+ ```jsx
20
+ import { useWallet, WalletProvider } from '@tronweb3/tronwallet-adapter-react-hooks';
21
+ import { WalletDisconnectedError, WalletError, WalletNotFoundError } from '@tronweb3/tronwallet-abstract-adapter';
22
+ import toast, { Toaster } from 'react-hot-toast';
23
+
24
+ function App() {
25
+ // use `react-hot-toast` npm package to notify user what happened here
26
+ function onError(e: WalletError) {
27
+ if (e instanceof WalletNotFoundError) {
28
+ toast.error(e.message);
29
+ } else if (e instanceof WalletDisconnectedError) {
30
+ toast.error(e.message);
31
+ } else toast.error(e.message);
32
+ }
33
+ return (
34
+ <WalletProvider onError={onError}>
35
+ <ConnectComponent></ConnectComponent>
36
+ <Profile></Profile>
37
+ </WalletProvider>
38
+ );
39
+ }
40
+ function ConnectComponent() {
41
+ const { connect, disconnect, select, connected } = useWallet();
42
+ return (<div>
43
+ <button type="button" onClick={() => select('TronLink Adapter' as any)}> Select TronLink</button>
44
+ <button type="button" disabled={connected} onClick={connect}>Connect</button><br>
45
+ <button type="button" disabled={!connected} onClick={disconnect}>Disconnect</button>
46
+ </div>);
47
+ }
48
+ function Profile() {
49
+ const { address, connected, wallet } = useWallet();
50
+ return (<div>
51
+ <p> <span>Connection Status:</span> {connected ? 'Connected' : 'Disconnected'}</p>
52
+ <p> <span>Your selected Wallet:</span> {wallet?.adapter.name} </p>
53
+ <p> <span>Your Address:</span> {address} </p>
54
+ </div>);
55
+ }
56
+ ```
57
+
58
+ ## `WalletProvider`
59
+
60
+ `WalletProvider` and `useWallet` work together like `Context.Provider` and `useContext()`. There is a `WalletProviderContext` underlying which maintains some state and can be obtained with `useWallet`. So developers need to wrap application components with `WalletProvider`.
61
+
62
+ ```jsx
63
+ function App() {
64
+ return (
65
+ <div>
66
+ <WalletProvider>/* here is application components */</WalletProvider>
67
+ </div>
68
+ );
69
+ }
70
+ ```
71
+
72
+ ### Props
73
+
74
+ #### adapters:
75
+
76
+ - Required: `false`
77
+ - Type: `Adapter[]`
78
+ - Default: `[ new TronLinkAdapter() ]`
79
+
80
+ Used to specify what wallet adapters are supported. All wallet adapters can be imported from `@tronweb3/tronwallet-adapters` package or their standalone package.
81
+
82
+ - Example
83
+ ```jsx
84
+ import { TronLinkAdapter } from '@tronweb3/tronwallet-adapters';
85
+ function App() {
86
+ const adapters = useMemo(() => [new TronLinkAdapter()]);
87
+ return (
88
+ <div>
89
+ <WalletProvider adapters={adapters}>/* here is application components */</WalletProvider>
90
+ </div>
91
+ );
92
+ }
93
+ ```
94
+
95
+ #### onError
96
+
97
+ - Required: `false`
98
+ - Type: `(error: WalletError): void`
99
+ - Default: `function(error) { console.error(error); }`
100
+
101
+ Used to handle errors occured when use wallet. Developers can use the callback to tell users what happened according to the `error` type. All error types can be found [here](https://github.com/tronprotocol/tronwallet-adapter/blob/main/packages/adapters/abstract-adapter/src/errors.ts).
102
+
103
+ - Example
104
+ ```jsx
105
+ functon onError(e) {
106
+ if (e instanceof WalletNotFoundError) {
107
+ console.error(e.message);
108
+ } else if (e instanceof WalletDisconnectedError) {
109
+ console.error(e.message);
110
+ } else console.error(e.message);
111
+ }
112
+ ```
113
+
114
+ #### autoConnect
115
+
116
+ - Required: `false`
117
+ - Type: `boolean`
118
+ - Default: `true`
119
+
120
+ Whether connect to the specified wallet automatically when loading the page and selecting a wallet.
121
+
122
+ #### localStorageKey
123
+
124
+ - Required: `false`
125
+ - Type: `string`
126
+ - Default: `tronAdapterName`
127
+
128
+ Specified the key used to cache wallet name in `localStorage`. When user select a wallet, applications will cache the wallet name to localStorage.
129
+
130
+ ## `useWallet()`
131
+
132
+ `useWallet` is a react hook providing a set of properties and methods which can be used to select and connect wallet, get wallet state and so on.
133
+
134
+ > `useWallet()` must be used in the descendant components of `WalletProvider`!
135
+
136
+ ### Properties
137
+
138
+ #### `autoConnect`
139
+
140
+ - Type: `boolean`
141
+ Synchronous with `autoConnect` property passed to `WalletProvider`.
142
+
143
+ #### `wallet`
144
+
145
+ - Type: `Wallet | null`
146
+ The wallet current selected. If no wallet is selected, the value is `null`.
147
+
148
+ `Wallet` is defined as follow:
149
+
150
+ ```typescript
151
+ interface Wallet {
152
+ adapter: Adapter; // wallet adapter
153
+ state: AdapterState;
154
+ }
155
+ enum AdapterState {
156
+ NotFound = 'NotFound',
157
+ Disconnect = 'Disconnected',
158
+ Connected = 'Connected',
159
+ }
160
+ ```
161
+
162
+ #### `address`
163
+
164
+ - Type: `string | null`
165
+ Address of current selected wallet. If no wallet is selected, the value is `null`.
166
+
167
+ #### `wallets`
168
+
169
+ - Type: `Wallet[]`
170
+ Wallet list based on current used adapters when initial `WalletProvider`.
171
+
172
+ #### `connecting`
173
+
174
+ - Type: `boolean`
175
+ Indicate if is connecting to the wallet.
176
+
177
+ #### `connected`
178
+
179
+ - Type: `boolean`
180
+ Indicate if is connected with the wallet.
181
+
182
+ #### `disconnecting`
183
+
184
+ - Type: `boolean`
185
+ Indicate if is connecting to the wallet.
186
+
187
+ ### Methods
188
+
189
+ #### select
190
+
191
+ - Type: `(walletAdapterName: AdapterName) => void`
192
+ Select a wallet by walletAdapterName. Valid adapters can be found [here](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/adapters)
193
+
194
+ #### connect
195
+
196
+ - Type: `() => Promise<void>`
197
+ Connect to current selected wallet.
198
+
199
+ #### disconnect
200
+
201
+ - Type: `() => Promise<void>`
202
+ Disconnect from current selected wallet.
203
+
204
+ ### signTransaction
205
+
206
+ - Type: `(transaction: Transaction) => Promise<SignedTransaction>`
207
+ Sign a unsigned transaction. This method is the same as TronWeb API.
208
+
209
+ ### signMessage
210
+
211
+ - Type: `(message: string) => Promise<string>`
212
+ Sign a message.
213
+
214
+ ### Example
215
+
216
+ ```js
217
+ import { useWallet } from '@tronweb3/tronwallet-adapter-react-hooks';
218
+ import { AdapterName } from '@tronweb3/tronwallet-abstract-adapter';
219
+
220
+ function Content() {
221
+ const { connect, disconnect, select, connected } = useWallet();
222
+ return (
223
+ <div>
224
+ <button type="button" onClick={() => select('TronLink Adapter')}>
225
+ Select TronLink
226
+ </button>
227
+ <button type="button" disabled={connected} onClick={connect}>
228
+ Connect
229
+ </button>
230
+ <button type="button" disabled={!connected} onClick={disconnect}>
231
+ Disconnect
232
+ </button>
233
+ </div>
234
+ );
235
+ }
236
+ ```
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.WalletProvider = void 0;
36
+ const tronwallet_abstract_adapter_1 = require("@tronweb3/tronwallet-abstract-adapter");
37
+ const tronwallet_adapter_tronlink_1 = require("@tronweb3/tronwallet-adapter-tronlink");
38
+ const react_1 = __importStar(require("react"));
39
+ const useWallet_js_1 = require("./useWallet.js");
40
+ const useLocalStorage_js_1 = require("./useLocalStorage.js");
41
+ const initialState = {
42
+ wallet: null,
43
+ address: null,
44
+ connected: false,
45
+ adapter: null,
46
+ };
47
+ const WalletProvider = function ({ children, adapters: adaptersPro = null, onError = (error) => console.error(error), localStorageKey = 'tronAdapterName', autoConnect = true, }) {
48
+ const [name, setName] = (0, useLocalStorage_js_1.useLocalStorage)(localStorageKey, null);
49
+ const [{ wallet, connected, address, adapter }, setState] = (0, react_1.useState)(initialState);
50
+ const [connecting, setConnecting] = (0, react_1.useState)(false);
51
+ const [disconnecting, setDisconnecting] = (0, react_1.useState)(false);
52
+ const isConnecting = (0, react_1.useRef)(false);
53
+ const isDisconnecting = (0, react_1.useRef)(false);
54
+ // set default supported adapters
55
+ const adapters = (0, react_1.useMemo)(() => {
56
+ if (adaptersPro === null) {
57
+ return [new tronwallet_adapter_tronlink_1.TronLinkAdapter()];
58
+ }
59
+ return adaptersPro;
60
+ }, [adaptersPro]);
61
+ const [wallets, setWallets] = (0, react_1.useState)(() => adapters.map((adapter) => ({
62
+ adapter,
63
+ state: adapter.state,
64
+ })));
65
+ (0, react_1.useEffect)(function () {
66
+ setWallets((prevWallets) => adapters.map((adapter, index) => {
67
+ const wallet = prevWallets[index];
68
+ if (wallet && wallet.adapter === adapter && wallet.state === adapter.state) {
69
+ return wallet;
70
+ }
71
+ return {
72
+ adapter,
73
+ state: adapter.state,
74
+ };
75
+ }));
76
+ function handleStateChange() {
77
+ setWallets((prevWallets) => {
78
+ const index = prevWallets.findIndex((wallet) => wallet.adapter === this);
79
+ if (index === -1) {
80
+ return prevWallets;
81
+ }
82
+ return prevWallets.map((wallet, idx) => {
83
+ if (idx === index) {
84
+ return Object.assign(Object.assign({}, wallet), { state: wallet.adapter.state });
85
+ }
86
+ return wallet;
87
+ });
88
+ });
89
+ }
90
+ adapters.forEach((adapter) => adapter.on('stateChanged', handleStateChange, adapter));
91
+ return () => adapters.forEach((adapter) => adapter.off('stateChanged', handleStateChange, adapter));
92
+ }, [adapters]);
93
+ // Set state when choosen wallet changes
94
+ (0, react_1.useEffect)(function () {
95
+ const wallet = name && wallets.find((item) => item.adapter.name === name);
96
+ if (wallet) {
97
+ setState({
98
+ wallet,
99
+ adapter: wallet.adapter,
100
+ connected: wallet.adapter.connected,
101
+ address: wallet.adapter.address,
102
+ });
103
+ }
104
+ else {
105
+ setState(initialState);
106
+ }
107
+ }, [name, wallets]);
108
+ const handleConnect = (0, react_1.useCallback)(function () {
109
+ if (!adapter) {
110
+ return setName(null);
111
+ }
112
+ setState((state) => (Object.assign(Object.assign({}, state), { connected: adapter.connected, address: adapter.address })));
113
+ }, [adapter, setName]);
114
+ const handleDisconnect = (0, react_1.useCallback)(function () {
115
+ setName(null);
116
+ }, [setName]);
117
+ const handleError = (0, react_1.useCallback)(function (error) {
118
+ onError(error);
119
+ return error;
120
+ }, [onError]);
121
+ const handleAccountChange = (0, react_1.useCallback)(function (address) {
122
+ setState((state) => (Object.assign(Object.assign({}, state), { address })));
123
+ }, []);
124
+ (0, react_1.useEffect)(function () {
125
+ if (adapter) {
126
+ adapter.on('connect', handleConnect);
127
+ adapter.on('disconnect', handleDisconnect);
128
+ adapter.on('error', handleError);
129
+ adapter.on('accountsChanged', handleAccountChange);
130
+ return () => {
131
+ adapter.off('connect', handleConnect);
132
+ adapter.off('disconnect', handleDisconnect);
133
+ adapter.off('error', handleError);
134
+ adapter.off('accountsChanged', handleAccountChange);
135
+ };
136
+ }
137
+ }, [adapter, handleConnect, handleDisconnect, handleError, handleAccountChange]);
138
+ // disconnect the previous when wallet changes
139
+ (0, react_1.useEffect)(() => {
140
+ return () => {
141
+ adapter === null || adapter === void 0 ? void 0 : adapter.disconnect();
142
+ };
143
+ }, [adapter]);
144
+ // auto connect
145
+ (0, react_1.useEffect)(function () {
146
+ if (isConnecting.current ||
147
+ connected ||
148
+ !autoConnect ||
149
+ !adapter ||
150
+ adapter.state !== tronwallet_abstract_adapter_1.AdapterState.Disconnect) {
151
+ return;
152
+ }
153
+ (function connect() {
154
+ return __awaiter(this, void 0, void 0, function* () {
155
+ isConnecting.current = true;
156
+ setConnecting(true);
157
+ try {
158
+ yield adapter.connect();
159
+ }
160
+ catch (error) {
161
+ setName(null);
162
+ }
163
+ finally {
164
+ setConnecting(false);
165
+ isConnecting.current = false;
166
+ }
167
+ });
168
+ })();
169
+ }, [isConnecting, autoConnect, adapter, connected, setName]);
170
+ const connect = (0, react_1.useCallback)(function () {
171
+ return __awaiter(this, void 0, void 0, function* () {
172
+ if (isConnecting.current || isDisconnecting.current || connected) {
173
+ return;
174
+ }
175
+ if (!adapter)
176
+ throw handleError(new tronwallet_abstract_adapter_1.WalletNotSelectedError());
177
+ isConnecting.current = true;
178
+ setConnecting(true);
179
+ try {
180
+ yield adapter.connect();
181
+ }
182
+ catch (error) {
183
+ setName(null);
184
+ throw error;
185
+ }
186
+ finally {
187
+ setConnecting(false);
188
+ isConnecting.current = false;
189
+ }
190
+ });
191
+ }, [isConnecting, isDisconnecting, adapter, connected, handleError, setName]);
192
+ const disconnect = (0, react_1.useCallback)(function () {
193
+ return __awaiter(this, void 0, void 0, function* () {
194
+ if (isDisconnecting.current)
195
+ return;
196
+ if (!adapter)
197
+ return setName(null);
198
+ isDisconnecting.current = true;
199
+ setDisconnecting(true);
200
+ try {
201
+ yield adapter.disconnect();
202
+ }
203
+ catch (error) {
204
+ setName(null);
205
+ throw error;
206
+ }
207
+ finally {
208
+ setDisconnecting(false);
209
+ isDisconnecting.current = false;
210
+ }
211
+ });
212
+ }, [adapter, isDisconnecting, setName]);
213
+ const signTransaction = (0, react_1.useCallback)(function (transaction, privateKey) {
214
+ return __awaiter(this, void 0, void 0, function* () {
215
+ if (!adapter)
216
+ throw handleError(new tronwallet_abstract_adapter_1.WalletNotSelectedError());
217
+ return yield adapter.signTransaction(transaction, privateKey);
218
+ });
219
+ }, [adapter, handleError]);
220
+ const signMessage = (0, react_1.useCallback)(function (message, privateKey) {
221
+ return __awaiter(this, void 0, void 0, function* () {
222
+ if (!adapter)
223
+ throw handleError(new tronwallet_abstract_adapter_1.WalletNotSelectedError());
224
+ return yield adapter.signMessage(message, privateKey);
225
+ });
226
+ }, [adapter, handleError]);
227
+ return (react_1.default.createElement(useWallet_js_1.WalletContext.Provider, { value: {
228
+ autoConnect,
229
+ wallets,
230
+ wallet,
231
+ address,
232
+ connecting,
233
+ connected,
234
+ disconnecting,
235
+ select: setName,
236
+ connect,
237
+ disconnect,
238
+ signTransaction,
239
+ signMessage,
240
+ } }, children));
241
+ };
242
+ exports.WalletProvider = WalletProvider;
243
+ //# sourceMappingURL=WalletProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletProvider.js","sourceRoot":"","sources":["../../src/WalletProvider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./useLocalStorage.js"), exports);
18
+ __exportStar(require("./useWallet.js"), exports);
19
+ __exportStar(require("./WalletProvider.js"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,iDAA+B;AAC/B,sDAAoC"}
@@ -0,0 +1 @@
1
+ { "type": "commonjs" }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useLocalStorage = void 0;
4
+ const react_1 = require("react");
5
+ const tronwallet_abstract_adapter_1 = require("@tronweb3/tronwallet-abstract-adapter");
6
+ function useLocalStorage(key, defaultState) {
7
+ const [state, setState] = (0, react_1.useState)(() => {
8
+ try {
9
+ const value = localStorage.getItem(key);
10
+ if (value)
11
+ return JSON.parse(value);
12
+ }
13
+ catch (error) {
14
+ if ((0, tronwallet_abstract_adapter_1.isInBrowser)()) {
15
+ console.error(error);
16
+ }
17
+ }
18
+ return defaultState;
19
+ });
20
+ const isFirstRender = (0, react_1.useRef)(true);
21
+ (0, react_1.useEffect)(() => {
22
+ if (isFirstRender.current) {
23
+ isFirstRender.current = false;
24
+ return;
25
+ }
26
+ try {
27
+ if (state === null) {
28
+ localStorage.removeItem(key);
29
+ }
30
+ else {
31
+ localStorage.setItem(key, JSON.stringify(state));
32
+ }
33
+ }
34
+ catch (error) {
35
+ if ((0, tronwallet_abstract_adapter_1.isInBrowser)()) {
36
+ console.error(error);
37
+ }
38
+ }
39
+ }, [state, key]);
40
+ return [state, setState];
41
+ }
42
+ exports.useLocalStorage = useLocalStorage;
43
+ //# sourceMappingURL=useLocalStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLocalStorage.js","sourceRoot":"","sources":["../../src/useLocalStorage.ts"],"names":[],"mappings":";;;AACA,iCAAoD;AACpD,uFAAoE;AAEpE,SAAgB,eAAe,CAAI,GAAW,EAAE,YAAe;IAC3D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAI,GAAG,EAAE;QACvC,IAAI;YACA,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC;SAC5C;QAAC,OAAO,KAAc,EAAE;YACrB,IAAI,IAAA,yCAAW,GAAE,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACxB;SACJ;QAED,OAAO,YAAY,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IACnC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,aAAa,CAAC,OAAO,EAAE;YACvB,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;YAC9B,OAAO;SACV;QACD,IAAI;YACA,IAAI,KAAK,KAAK,IAAI,EAAE;gBAChB,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aAChC;iBAAM;gBACH,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;aACpD;SACJ;QAAC,OAAO,KAAU,EAAE;YACjB,IAAI,IAAA,yCAAW,GAAE,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACxB;SACJ;IACL,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAEjB,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAlCD,0CAkCC"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useWallet = exports.WalletContext = void 0;
4
+ const react_1 = require("react");
5
+ function printError() {
6
+ console.error(`
7
+ You are using WalletContext without provide the WalletContext.Provider.
8
+ Please wrap your sub-components with a WalletProvider and provide required values.
9
+ `);
10
+ }
11
+ const DEFAULT_CONTEXT = {
12
+ autoConnect: false,
13
+ connecting: false,
14
+ connected: false,
15
+ disconnecting: false,
16
+ /* eslint-disable */
17
+ select(_name) {
18
+ printError();
19
+ },
20
+ connect() {
21
+ printError();
22
+ return Promise.reject();
23
+ },
24
+ disconnect() {
25
+ printError();
26
+ return Promise.reject();
27
+ },
28
+ signTransaction(_transaction) {
29
+ printError();
30
+ return Promise.reject();
31
+ },
32
+ signMessage(_message) {
33
+ printError();
34
+ return Promise.reject();
35
+ },
36
+ /* eslint-enable */
37
+ };
38
+ Object.defineProperty(DEFAULT_CONTEXT, 'wallets', {
39
+ get() {
40
+ printError();
41
+ return [];
42
+ },
43
+ });
44
+ Object.defineProperty(DEFAULT_CONTEXT, 'wallet', {
45
+ get() {
46
+ printError();
47
+ return null;
48
+ },
49
+ });
50
+ Object.defineProperty(DEFAULT_CONTEXT, 'address', {
51
+ get() {
52
+ printError();
53
+ return null;
54
+ },
55
+ });
56
+ exports.WalletContext = (0, react_1.createContext)(DEFAULT_CONTEXT);
57
+ function useWallet() {
58
+ return (0, react_1.useContext)(exports.WalletContext);
59
+ }
60
+ exports.useWallet = useWallet;
61
+ //# sourceMappingURL=useWallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWallet.js","sourceRoot":"","sources":["../../src/useWallet.ts"],"names":[],"mappings":";;;AACA,iCAAkD;AAsBlD,SAAS,UAAU;IACf,OAAO,CAAC,KAAK,CAAC;;;CAGjB,CAAC,CAAC;AACH,CAAC;AACD,MAAM,eAAe,GAAG;IACpB,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,KAAK;IACpB,oBAAoB;IACpB,MAAM,CAAC,KAAkB;QACrB,UAAU,EAAE,CAAC;IACjB,CAAC;IACD,OAAO;QACH,UAAU,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IACD,UAAU;QACN,UAAU,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IACD,eAAe,CAAC,YAAyB;QACrC,UAAU,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IACD,WAAW,CAAC,QAAgB;QACxB,UAAU,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IACD,mBAAmB;CACA,CAAC;AAExB,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,SAAS,EAAE;IAC9C,GAAG;QACC,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACd,CAAC;CACJ,CAAC,CAAC;AACH,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,QAAQ,EAAE;IAC7C,GAAG;QACC,UAAU,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ,CAAC,CAAC;AACH,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,SAAS,EAAE;IAC9C,GAAG;QACC,UAAU,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ,CAAC,CAAC;AAEU,QAAA,aAAa,GAAG,IAAA,qBAAa,EAAqB,eAAqC,CAAC,CAAC;AACtG,SAAgB,SAAS;IACrB,OAAO,IAAA,kBAAU,EAAC,qBAAa,CAAC,CAAC;AACrC,CAAC;AAFD,8BAEC"}