@dynamic-labs/sdk-react-core 0.17.0-RC.10 → 0.17.0-RC.12

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 (26) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/package.cjs +2 -2
  3. package/package.js +2 -2
  4. package/package.json +8 -8
  5. package/src/index.cjs +5 -1
  6. package/src/index.d.ts +1 -0
  7. package/src/index.js +1 -1
  8. package/src/lib/components/NetworkPicker/NetworkPicker.cjs +4 -1
  9. package/src/lib/components/NetworkPicker/NetworkPicker.js +4 -1
  10. package/src/lib/components/NetworkPicker/components/EvmNetworkControl/EvmNetworkControl.cjs +5 -5
  11. package/src/lib/components/NetworkPicker/components/EvmNetworkControl/EvmNetworkControl.js +5 -5
  12. package/src/lib/context/DynamicContext/DynamicContext.cjs +2 -1
  13. package/src/lib/context/DynamicContext/DynamicContext.d.ts +3 -2
  14. package/src/lib/context/DynamicContext/DynamicContext.js +2 -1
  15. package/src/lib/utils/functions/index.d.ts +1 -0
  16. package/src/lib/utils/functions/isNetworkUnsupported/index.d.ts +1 -0
  17. package/src/lib/utils/functions/isNetworkUnsupported/isNetworkUnsupported.cjs +12 -0
  18. package/src/lib/utils/functions/isNetworkUnsupported/isNetworkUnsupported.d.ts +2 -0
  19. package/src/lib/utils/functions/isNetworkUnsupported/isNetworkUnsupported.js +8 -0
  20. package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.cjs +25 -2
  21. package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.js +25 -2
  22. package/src/lib/utils/hooks/useWallets/useWallets.cjs +16 -3
  23. package/src/lib/utils/hooks/useWallets/useWallets.d.ts +3 -1
  24. package/src/lib/utils/hooks/useWallets/useWallets.js +16 -3
  25. package/src/lib/views/WalletList/WalletList.cjs +1 -1
  26. package/src/lib/views/WalletList/WalletList.js +1 -1
package/CHANGELOG.md CHANGED
@@ -1,4 +1,19 @@
1
1
 
2
+ ## [0.17.0-RC.12](https://github.com/dynamic-labs/DynamicAuth/compare/v0.17.0-RC.11...v0.17.0-RC.12) (2023-05-09)
3
+
4
+
5
+ ### Bug Fixes
6
+
7
+ * allow opening network picker when unsupported network and only one network enabled ([#2061](https://github.com/dynamic-labs/DynamicAuth/issues/2061)) ([486607f](https://github.com/dynamic-labs/DynamicAuth/commit/486607f8bb2666749ce39f18cf2368c86a78f74f))
8
+ * **DynamicWagmiConnector:** prevent disconnect when WC is not present ([#2063](https://github.com/dynamic-labs/DynamicAuth/issues/2063)) ([ef93623](https://github.com/dynamic-labs/DynamicAuth/commit/ef93623fb68b63a9e89a5958eb87bbddedd15fb6))
9
+
10
+ ## [0.17.0-RC.11](https://github.com/dynamic-labs/DynamicAuth/compare/v0.17.0-RC.10...v0.17.0-RC.11) (2023-05-08)
11
+
12
+
13
+ ### Features
14
+
15
+ * add walletConnectors setting for supplying array of wallet connectors ([#2059](https://github.com/dynamic-labs/DynamicAuth/issues/2059)) ([ae65218](https://github.com/dynamic-labs/DynamicAuth/commit/ae652180b17a870f7bbf5f99c876f386e0de1af5))
16
+
2
17
  ## [0.17.0-RC.10](https://github.com/dynamic-labs/DynamicAuth/compare/v0.17.0-RC.9...v0.17.0-RC.10) (2023-05-05)
3
18
 
4
19
  ## [0.17.0-RC.9](https://github.com/dynamic-labs/DynamicAuth/compare/v0.17.0-RC.8...v0.17.0-RC.9) (2023-05-05)
package/package.cjs CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var version = "0.17.0-RC.10";
5
+ var version = "0.17.0-RC.12";
6
6
  var dependencies = {
7
7
  "react-focus-lock": "^2.9.2",
8
8
  "@dynamic-labs/iconic": "^0.1.19",
9
- "@dynamic-labs/sdk-api": "0.0.183",
9
+ "@dynamic-labs/sdk-api": "0.0.189",
10
10
  "@dynamic-labs/wallet-book": "^0.0.14",
11
11
  "@hcaptcha/react-hcaptcha": "~1.4.4",
12
12
  "country-list": "^2.3.0",
package/package.js CHANGED
@@ -1,8 +1,8 @@
1
- var version = "0.17.0-RC.10";
1
+ var version = "0.17.0-RC.12";
2
2
  var dependencies = {
3
3
  "react-focus-lock": "^2.9.2",
4
4
  "@dynamic-labs/iconic": "^0.1.19",
5
- "@dynamic-labs/sdk-api": "0.0.183",
5
+ "@dynamic-labs/sdk-api": "0.0.189",
6
6
  "@dynamic-labs/wallet-book": "^0.0.14",
7
7
  "@hcaptcha/react-hcaptcha": "~1.4.4",
8
8
  "country-list": "^2.3.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/sdk-react-core",
3
- "version": "0.17.0-RC.10",
3
+ "version": "0.17.0-RC.12",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/dynamic-labs/DynamicAuth.git",
@@ -9,7 +9,7 @@
9
9
  "dependencies": {
10
10
  "react-focus-lock": "^2.9.2",
11
11
  "@dynamic-labs/iconic": "^0.1.19",
12
- "@dynamic-labs/sdk-api": "0.0.183",
12
+ "@dynamic-labs/sdk-api": "0.0.189",
13
13
  "@dynamic-labs/wallet-book": "^0.0.14",
14
14
  "@hcaptcha/react-hcaptcha": "~1.4.4",
15
15
  "country-list": "^2.3.0",
@@ -17,12 +17,12 @@
17
17
  "formik": "^2.2.9",
18
18
  "qrcode": "1.5.1",
19
19
  "ethers": "^5.7.2",
20
- "@dynamic-labs/logger": "0.17.0-RC.10",
21
- "@dynamic-labs/multi-wallet": "0.17.0-RC.10",
22
- "@dynamic-labs/rpc-providers": "0.17.0-RC.10",
23
- "@dynamic-labs/types": "0.17.0-RC.10",
24
- "@dynamic-labs/utils": "0.17.0-RC.10",
25
- "@dynamic-labs/wallet-connector-core": "0.17.0-RC.10"
20
+ "@dynamic-labs/logger": "0.17.0-RC.12",
21
+ "@dynamic-labs/multi-wallet": "0.17.0-RC.12",
22
+ "@dynamic-labs/rpc-providers": "0.17.0-RC.12",
23
+ "@dynamic-labs/types": "0.17.0-RC.12",
24
+ "@dynamic-labs/utils": "0.17.0-RC.12",
25
+ "@dynamic-labs/wallet-connector-core": "0.17.0-RC.12"
26
26
  },
27
27
  "devDependencies": {
28
28
  "semver": "^7.3.8"
package/src/index.cjs CHANGED
@@ -72,7 +72,7 @@ require('./lib/utils/constants/colors.cjs');
72
72
  require('@dynamic-labs/multi-wallet');
73
73
  require('@dynamic-labs/utils');
74
74
  var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
75
- require('@dynamic-labs/sdk-api');
75
+ var sdkApi = require('@dynamic-labs/sdk-api');
76
76
  var ShadowDOM = require('./lib/components/ShadowDOM/ShadowDOM.cjs');
77
77
  require('./lib/context/ThemeContext/ThemeContext.cjs');
78
78
  require('react-dom');
@@ -187,6 +187,10 @@ Object.defineProperty(exports, 'normalizeWalletName', {
187
187
  enumerable: true,
188
188
  get: function () { return walletConnectorCore.normalizeWalletName; }
189
189
  });
190
+ Object.defineProperty(exports, 'DynamicJwtFromJSON', {
191
+ enumerable: true,
192
+ get: function () { return sdkApi.DynamicJwtFromJSON; }
193
+ });
190
194
  exports.ShadowDOM = ShadowDOM.ShadowDOM;
191
195
  exports.isSameWalletName = isSameWalletName.isSameWalletName;
192
196
  exports.useWalletItemActions = useWalletItemActions.useWalletItemActions;
package/src/index.d.ts CHANGED
@@ -27,3 +27,4 @@ export { useUserUpdateRequest } from './lib/utils/hooks/useUserUpdateRequest/use
27
27
  export type { UpdateUserFieldsArg } from './lib/utils/hooks/useUserUpdateRequest/useUserUpdateRequest';
28
28
  export type { VerifyEmailCallback } from './lib/utils/hooks/authenticationHooks/useEmailVerificationRequest';
29
29
  export { useEmailVerificationRequest } from './lib/utils/hooks/authenticationHooks/useEmailVerificationRequest';
30
+ export { type DynamicJwt, DynamicJwtFromJSON } from '@dynamic-labs/sdk-api';
package/src/index.js CHANGED
@@ -68,7 +68,7 @@ import './lib/utils/constants/colors.js';
68
68
  import '@dynamic-labs/multi-wallet';
69
69
  import '@dynamic-labs/utils';
70
70
  export { normalizeWalletName } from '@dynamic-labs/wallet-connector-core';
71
- import '@dynamic-labs/sdk-api';
71
+ export { DynamicJwtFromJSON } from '@dynamic-labs/sdk-api';
72
72
  export { ShadowDOM } from './lib/components/ShadowDOM/ShadowDOM.js';
73
73
  import './lib/context/ThemeContext/ThemeContext.js';
74
74
  import 'react-dom';
@@ -17,6 +17,8 @@ var index = require('../../shared/utils/hooks/useOnClickOutside/index.cjs');
17
17
  require('../../shared/consts/index.cjs');
18
18
  var useInternalDynamicContext = require('../../context/DynamicContext/useInternalDynamicContext.cjs');
19
19
  var classNames = require('../../utils/functions/classNames/classNames.cjs');
20
+ require('@dynamic-labs/multi-wallet');
21
+ var isNetworkUnsupported = require('../../utils/functions/isNetworkUnsupported/isNetworkUnsupported.cjs');
20
22
  var NetworkControl = require('./components/NetworkControl/NetworkControl.cjs');
21
23
  var ActionList = require('./components/ActionList/ActionList.cjs');
22
24
  var NetworkAction = require('./components/NetworkAction/NetworkAction.cjs');
@@ -25,6 +27,7 @@ const NetworkPicker = ({ activeClassName = '', buttonClassName = '', checkboxCla
25
27
  const pickerRef = React.useRef(null);
26
28
  const [newNetworkId, setNewNetworkId] = React.useState(undefined);
27
29
  const { loadingNetwork, network, setNetwork } = useInternalDynamicContext.useInternalDynamicContext();
30
+ const shouldAllowOpenDropdown = isNetworkUnsupported.isNetworkUnsupported(network, evmNetworks) || (evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.length) > 1;
28
31
  index.useOnClickOutside(pickerRef, () => {
29
32
  if (isNetworkPickerOpen) {
30
33
  setIsNetworkPickerOpen(false);
@@ -49,7 +52,7 @@ const NetworkPicker = ({ activeClassName = '', buttonClassName = '', checkboxCla
49
52
  setIsNetworkPickerOpen(false);
50
53
  }
51
54
  });
52
- return (jsxRuntime.jsxs("div", Object.assign({ className: classNames.classNames('non-widget-network-picker', mainClassName), ref: pickerRef }, { children: [jsxRuntime.jsx(NetworkControl.NetworkControl, { evmNetworks: evmNetworks, activeClassName: activeClassName, network: network, loading: loadingNetwork, isOpen: isNetworkPickerOpen, setIsOpen: setIsNetworkPickerOpen, walletConnector: connector, showNetworkName: showNetworkName, buttonClassName: buttonClassName }), (evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.length) > 1 && (jsxRuntime.jsx(ActionList.ActionList, Object.assign({ className: listClassName, title: 'Select network', isOpen: isNetworkPickerOpen, setIsOpen: setIsNetworkPickerOpen }, { children: jsxRuntime.jsx("div", Object.assign({ className: 'network-picker__dropdown' }, { children: evmNetworks.map(({ name, networkId, vanityName, iconUrls }) => (jsxRuntime.jsx(NetworkAction.NetworkAction, { iconUrl: iconUrls === null || iconUrls === void 0 ? void 0 : iconUrls[0], networkId: networkId, networkName: vanityName || name, network: network, onClick: handleNetworkChange, checkboxClassName: checkboxClassName, newNetworkId: newNetworkId }, networkId))) })) })))] })));
55
+ return (jsxRuntime.jsxs("div", Object.assign({ className: classNames.classNames('non-widget-network-picker', mainClassName), ref: pickerRef }, { children: [jsxRuntime.jsx(NetworkControl.NetworkControl, { evmNetworks: evmNetworks, activeClassName: activeClassName, network: network, loading: loadingNetwork, isOpen: isNetworkPickerOpen, setIsOpen: setIsNetworkPickerOpen, walletConnector: connector, showNetworkName: showNetworkName, buttonClassName: buttonClassName }), shouldAllowOpenDropdown && (jsxRuntime.jsx(ActionList.ActionList, Object.assign({ className: listClassName, title: 'Select network', isOpen: isNetworkPickerOpen, setIsOpen: setIsNetworkPickerOpen }, { children: jsxRuntime.jsx("div", Object.assign({ className: 'network-picker__dropdown' }, { children: evmNetworks.map(({ name, networkId, vanityName, iconUrls }) => (jsxRuntime.jsx(NetworkAction.NetworkAction, { iconUrl: iconUrls === null || iconUrls === void 0 ? void 0 : iconUrls[0], networkId: networkId, networkName: vanityName || name, network: network, onClick: handleNetworkChange, checkboxClassName: checkboxClassName, newNetworkId: newNetworkId }, networkId))) })) })))] })));
53
56
  };
54
57
 
55
58
  exports.NetworkPicker = NetworkPicker;
@@ -13,6 +13,8 @@ import { useOnClickOutside } from '../../shared/utils/hooks/useOnClickOutside/in
13
13
  import '../../shared/consts/index.js';
14
14
  import { useInternalDynamicContext } from '../../context/DynamicContext/useInternalDynamicContext.js';
15
15
  import { classNames } from '../../utils/functions/classNames/classNames.js';
16
+ import '@dynamic-labs/multi-wallet';
17
+ import { isNetworkUnsupported } from '../../utils/functions/isNetworkUnsupported/isNetworkUnsupported.js';
16
18
  import { NetworkControl } from './components/NetworkControl/NetworkControl.js';
17
19
  import { ActionList } from './components/ActionList/ActionList.js';
18
20
  import { NetworkAction } from './components/NetworkAction/NetworkAction.js';
@@ -21,6 +23,7 @@ const NetworkPicker = ({ activeClassName = '', buttonClassName = '', checkboxCla
21
23
  const pickerRef = useRef(null);
22
24
  const [newNetworkId, setNewNetworkId] = useState(undefined);
23
25
  const { loadingNetwork, network, setNetwork } = useInternalDynamicContext();
26
+ const shouldAllowOpenDropdown = isNetworkUnsupported(network, evmNetworks) || (evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.length) > 1;
24
27
  useOnClickOutside(pickerRef, () => {
25
28
  if (isNetworkPickerOpen) {
26
29
  setIsNetworkPickerOpen(false);
@@ -45,7 +48,7 @@ const NetworkPicker = ({ activeClassName = '', buttonClassName = '', checkboxCla
45
48
  setIsNetworkPickerOpen(false);
46
49
  }
47
50
  });
48
- return (jsxs("div", Object.assign({ className: classNames('non-widget-network-picker', mainClassName), ref: pickerRef }, { children: [jsx(NetworkControl, { evmNetworks: evmNetworks, activeClassName: activeClassName, network: network, loading: loadingNetwork, isOpen: isNetworkPickerOpen, setIsOpen: setIsNetworkPickerOpen, walletConnector: connector, showNetworkName: showNetworkName, buttonClassName: buttonClassName }), (evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.length) > 1 && (jsx(ActionList, Object.assign({ className: listClassName, title: 'Select network', isOpen: isNetworkPickerOpen, setIsOpen: setIsNetworkPickerOpen }, { children: jsx("div", Object.assign({ className: 'network-picker__dropdown' }, { children: evmNetworks.map(({ name, networkId, vanityName, iconUrls }) => (jsx(NetworkAction, { iconUrl: iconUrls === null || iconUrls === void 0 ? void 0 : iconUrls[0], networkId: networkId, networkName: vanityName || name, network: network, onClick: handleNetworkChange, checkboxClassName: checkboxClassName, newNetworkId: newNetworkId }, networkId))) })) })))] })));
51
+ return (jsxs("div", Object.assign({ className: classNames('non-widget-network-picker', mainClassName), ref: pickerRef }, { children: [jsx(NetworkControl, { evmNetworks: evmNetworks, activeClassName: activeClassName, network: network, loading: loadingNetwork, isOpen: isNetworkPickerOpen, setIsOpen: setIsNetworkPickerOpen, walletConnector: connector, showNetworkName: showNetworkName, buttonClassName: buttonClassName }), shouldAllowOpenDropdown && (jsx(ActionList, Object.assign({ className: listClassName, title: 'Select network', isOpen: isNetworkPickerOpen, setIsOpen: setIsNetworkPickerOpen }, { children: jsx("div", Object.assign({ className: 'network-picker__dropdown' }, { children: evmNetworks.map(({ name, networkId, vanityName, iconUrls }) => (jsx(NetworkAction, { iconUrl: iconUrls === null || iconUrls === void 0 ? void 0 : iconUrls[0], networkId: networkId, networkName: vanityName || name, network: network, onClick: handleNetworkChange, checkboxClassName: checkboxClassName, newNetworkId: newNetworkId }, networkId))) })) })))] })));
49
52
  };
50
53
 
51
54
  export { NetworkPicker };
@@ -39,7 +39,7 @@ var UnsupportedNetwork = require('../UnsupportedNetwork/UnsupportedNetwork.cjs')
39
39
 
40
40
  const EvmNetworkControl = ({ evmNetworks, className = '', activeClassName = '', network, walletConnector, isOpen, setIsOpen, showNetworkName = false, }) => {
41
41
  var _a, _b;
42
- const evmNetwork = evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.find((element) => network && element.chainId === utils.parseChainId(network));
42
+ const currentEvmNetwork = evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.find((element) => network && element.chainId === utils.parseChainId(network));
43
43
  if (evmNetworks && !evmNetworks.length) {
44
44
  return (jsxRuntime.jsx("div", Object.assign({ "data-testid": 'EvmNetworkControl', className: classNames.classNames('evm-network-control__container evm-network-control__container--error', className) }, { children: jsxRuntime.jsx(UnsupportedNetwork.UnsupportedNetwork, { showMsg: showNetworkName }) })));
45
45
  }
@@ -51,20 +51,20 @@ const EvmNetworkControl = ({ evmNetworks, className = '', activeClassName = '',
51
51
  [activeClassName]: isOpen,
52
52
  'evm-network-control__container': Boolean(walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.supportsNetworkSwitching()),
53
53
  });
54
- if (!evmNetwork) {
54
+ if (!currentEvmNetwork) {
55
55
  return (jsxRuntime.jsxs("button", Object.assign({ "data-testid": 'EvmNetworkControl', type: 'button', onClick: () => setIsOpen(!isOpen), className: unsupportedNetworkClassName }, { children: [jsxRuntime.jsx(UnsupportedNetwork.UnsupportedNetwork, { showMsg: showNetworkName }), jsxRuntime.jsx(Icon.Icon, Object.assign({ color: 'text-primary', size: 'small', className: classNames.classNames('evm-network-control__arrow-icon', {
56
56
  'evm-network-control__arrow-icon--active': isOpen,
57
57
  }) }, { children: jsxRuntime.jsx(stroke.ReactComponent, {}) }))] })));
58
58
  }
59
59
  return (jsxRuntime.jsx("div", Object.assign({ "data-testid": 'EvmNetworkControl', onClick: () => network && setIsOpen(!isOpen), className: classNames.classNames('evm-network-control__container', {
60
60
  [activeClassName]: isOpen,
61
- }, className) }, { children: evmNetwork.name && ((_a = evmNetwork.iconUrls) === null || _a === void 0 ? void 0 : _a[0]) ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Icon.Icon, Object.assign({ size: 'small' }, { children: jsxRuntime.jsx("img", { src: evmNetwork.iconUrls[0], alt: `${evmNetwork.name} icon` }) })), showNetworkName && (jsxRuntime.jsx(Typography.Typography, Object.assign({ className: 'evm-network-control__network-name', as: 'span', variant: 'body_small' }, { children: evmNetwork.vanityName || evmNetwork.name })))] })) : (jsxRuntime.jsx(UnsupportedNetwork.UnsupportedNetwork, { showMsg: showNetworkName })) })));
61
+ }, className) }, { children: currentEvmNetwork.name && ((_a = currentEvmNetwork.iconUrls) === null || _a === void 0 ? void 0 : _a[0]) ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Icon.Icon, Object.assign({ size: 'small' }, { children: jsxRuntime.jsx("img", { src: currentEvmNetwork.iconUrls[0], alt: `${currentEvmNetwork.name} icon` }) })), showNetworkName && (jsxRuntime.jsx(Typography.Typography, Object.assign({ className: 'evm-network-control__network-name', as: 'span', variant: 'body_small' }, { children: currentEvmNetwork.vanityName || currentEvmNetwork.name })))] })) : (jsxRuntime.jsx(UnsupportedNetwork.UnsupportedNetwork, { showMsg: showNetworkName })) })));
62
62
  }
63
63
  return (jsxRuntime.jsxs("button", Object.assign({ "data-testid": 'EvmNetworkControl', type: 'button', onClick: () => network && setIsOpen(!isOpen), className: classNames.classNames(className, {
64
64
  [activeClassName]: isOpen,
65
65
  'evm-network-control__container': Boolean(walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.supportsNetworkSwitching()),
66
- 'evm-network-control__container--error': !(evmNetwork === null || evmNetwork === void 0 ? void 0 : evmNetwork.name),
67
- }) }, { children: [(evmNetwork === null || evmNetwork === void 0 ? void 0 : evmNetwork.name) && ((_b = evmNetwork === null || evmNetwork === void 0 ? void 0 : evmNetwork.iconUrls) === null || _b === void 0 ? void 0 : _b[0]) ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Icon.Icon, Object.assign({ size: 'small' }, { children: jsxRuntime.jsx("img", { src: evmNetwork.iconUrls[0], alt: `${evmNetwork.name} icon` }) })), showNetworkName && (jsxRuntime.jsx(Typography.Typography, Object.assign({ className: 'evm-network-control__network-name', as: 'span', variant: 'body_small' }, { children: evmNetwork.vanityName || evmNetwork.name })))] })) : (jsxRuntime.jsx(UnsupportedNetwork.UnsupportedNetwork, { showMsg: showNetworkName })), evmNetworks && evmNetworks.length > 1 && (jsxRuntime.jsx(Icon.Icon, Object.assign({ color: 'text-primary', size: 'small', className: classNames.classNames('evm-network-control__arrow-icon', {
66
+ 'evm-network-control__container--error': !(currentEvmNetwork === null || currentEvmNetwork === void 0 ? void 0 : currentEvmNetwork.name),
67
+ }) }, { children: [(currentEvmNetwork === null || currentEvmNetwork === void 0 ? void 0 : currentEvmNetwork.name) && ((_b = currentEvmNetwork === null || currentEvmNetwork === void 0 ? void 0 : currentEvmNetwork.iconUrls) === null || _b === void 0 ? void 0 : _b[0]) ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Icon.Icon, Object.assign({ size: 'small' }, { children: jsxRuntime.jsx("img", { src: currentEvmNetwork.iconUrls[0], alt: `${currentEvmNetwork.name} icon` }) })), showNetworkName && (jsxRuntime.jsx(Typography.Typography, Object.assign({ className: 'evm-network-control__network-name', as: 'span', variant: 'body_small' }, { children: currentEvmNetwork.vanityName || currentEvmNetwork.name })))] })) : (jsxRuntime.jsx(UnsupportedNetwork.UnsupportedNetwork, { showMsg: showNetworkName })), evmNetworks && evmNetworks.length > 1 && (jsxRuntime.jsx(Icon.Icon, Object.assign({ color: 'text-primary', size: 'small', className: classNames.classNames('evm-network-control__arrow-icon', {
68
68
  'evm-network-control__arrow-icon--active': isOpen,
69
69
  }) }, { children: jsxRuntime.jsx(stroke.ReactComponent, {}) })))] })));
70
70
  };
@@ -35,7 +35,7 @@ import { UnsupportedNetwork } from '../UnsupportedNetwork/UnsupportedNetwork.js'
35
35
 
36
36
  const EvmNetworkControl = ({ evmNetworks, className = '', activeClassName = '', network, walletConnector, isOpen, setIsOpen, showNetworkName = false, }) => {
37
37
  var _a, _b;
38
- const evmNetwork = evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.find((element) => network && element.chainId === parseChainId(network));
38
+ const currentEvmNetwork = evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.find((element) => network && element.chainId === parseChainId(network));
39
39
  if (evmNetworks && !evmNetworks.length) {
40
40
  return (jsx("div", Object.assign({ "data-testid": 'EvmNetworkControl', className: classNames('evm-network-control__container evm-network-control__container--error', className) }, { children: jsx(UnsupportedNetwork, { showMsg: showNetworkName }) })));
41
41
  }
@@ -47,20 +47,20 @@ const EvmNetworkControl = ({ evmNetworks, className = '', activeClassName = '',
47
47
  [activeClassName]: isOpen,
48
48
  'evm-network-control__container': Boolean(walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.supportsNetworkSwitching()),
49
49
  });
50
- if (!evmNetwork) {
50
+ if (!currentEvmNetwork) {
51
51
  return (jsxs("button", Object.assign({ "data-testid": 'EvmNetworkControl', type: 'button', onClick: () => setIsOpen(!isOpen), className: unsupportedNetworkClassName }, { children: [jsx(UnsupportedNetwork, { showMsg: showNetworkName }), jsx(Icon, Object.assign({ color: 'text-primary', size: 'small', className: classNames('evm-network-control__arrow-icon', {
52
52
  'evm-network-control__arrow-icon--active': isOpen,
53
53
  }) }, { children: jsx(SvgStroke, {}) }))] })));
54
54
  }
55
55
  return (jsx("div", Object.assign({ "data-testid": 'EvmNetworkControl', onClick: () => network && setIsOpen(!isOpen), className: classNames('evm-network-control__container', {
56
56
  [activeClassName]: isOpen,
57
- }, className) }, { children: evmNetwork.name && ((_a = evmNetwork.iconUrls) === null || _a === void 0 ? void 0 : _a[0]) ? (jsxs(Fragment, { children: [jsx(Icon, Object.assign({ size: 'small' }, { children: jsx("img", { src: evmNetwork.iconUrls[0], alt: `${evmNetwork.name} icon` }) })), showNetworkName && (jsx(Typography, Object.assign({ className: 'evm-network-control__network-name', as: 'span', variant: 'body_small' }, { children: evmNetwork.vanityName || evmNetwork.name })))] })) : (jsx(UnsupportedNetwork, { showMsg: showNetworkName })) })));
57
+ }, className) }, { children: currentEvmNetwork.name && ((_a = currentEvmNetwork.iconUrls) === null || _a === void 0 ? void 0 : _a[0]) ? (jsxs(Fragment, { children: [jsx(Icon, Object.assign({ size: 'small' }, { children: jsx("img", { src: currentEvmNetwork.iconUrls[0], alt: `${currentEvmNetwork.name} icon` }) })), showNetworkName && (jsx(Typography, Object.assign({ className: 'evm-network-control__network-name', as: 'span', variant: 'body_small' }, { children: currentEvmNetwork.vanityName || currentEvmNetwork.name })))] })) : (jsx(UnsupportedNetwork, { showMsg: showNetworkName })) })));
58
58
  }
59
59
  return (jsxs("button", Object.assign({ "data-testid": 'EvmNetworkControl', type: 'button', onClick: () => network && setIsOpen(!isOpen), className: classNames(className, {
60
60
  [activeClassName]: isOpen,
61
61
  'evm-network-control__container': Boolean(walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.supportsNetworkSwitching()),
62
- 'evm-network-control__container--error': !(evmNetwork === null || evmNetwork === void 0 ? void 0 : evmNetwork.name),
63
- }) }, { children: [(evmNetwork === null || evmNetwork === void 0 ? void 0 : evmNetwork.name) && ((_b = evmNetwork === null || evmNetwork === void 0 ? void 0 : evmNetwork.iconUrls) === null || _b === void 0 ? void 0 : _b[0]) ? (jsxs(Fragment, { children: [jsx(Icon, Object.assign({ size: 'small' }, { children: jsx("img", { src: evmNetwork.iconUrls[0], alt: `${evmNetwork.name} icon` }) })), showNetworkName && (jsx(Typography, Object.assign({ className: 'evm-network-control__network-name', as: 'span', variant: 'body_small' }, { children: evmNetwork.vanityName || evmNetwork.name })))] })) : (jsx(UnsupportedNetwork, { showMsg: showNetworkName })), evmNetworks && evmNetworks.length > 1 && (jsx(Icon, Object.assign({ color: 'text-primary', size: 'small', className: classNames('evm-network-control__arrow-icon', {
62
+ 'evm-network-control__container--error': !(currentEvmNetwork === null || currentEvmNetwork === void 0 ? void 0 : currentEvmNetwork.name),
63
+ }) }, { children: [(currentEvmNetwork === null || currentEvmNetwork === void 0 ? void 0 : currentEvmNetwork.name) && ((_b = currentEvmNetwork === null || currentEvmNetwork === void 0 ? void 0 : currentEvmNetwork.iconUrls) === null || _b === void 0 ? void 0 : _b[0]) ? (jsxs(Fragment, { children: [jsx(Icon, Object.assign({ size: 'small' }, { children: jsx("img", { src: currentEvmNetwork.iconUrls[0], alt: `${currentEvmNetwork.name} icon` }) })), showNetworkName && (jsx(Typography, Object.assign({ className: 'evm-network-control__network-name', as: 'span', variant: 'body_small' }, { children: currentEvmNetwork.vanityName || currentEvmNetwork.name })))] })) : (jsx(UnsupportedNetwork, { showMsg: showNetworkName })), evmNetworks && evmNetworks.length > 1 && (jsx(Icon, Object.assign({ color: 'text-primary', size: 'small', className: classNames('evm-network-control__arrow-icon', {
64
64
  'evm-network-control__arrow-icon--active': isOpen,
65
65
  }) }, { children: jsx(SvgStroke, {}) })))] })));
66
66
  };
@@ -77,7 +77,7 @@ var useNameService = require('./hooks/useNameService/useNameService.cjs');
77
77
 
78
78
  const EMPTY_INITIAL_USER = undefined;
79
79
  const DynamicContext = React.createContext(undefined);
80
- const DynamicContextProvider = ({ settings: { accessDeniedMessagePrimary, accessDeniedMessageSecondary, apiBaseUrl, appLogoUrl = 'https://demo.dynamic.xyz/assets/dynamic-logo.svg', appName = 'Dynamic Example', cssOverrides, defaultNumberOfWalletsToShow = values.DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, initialAuthenticationMode = 'connect-and-sign', debugError = false, displayTermsOfService = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, eventsCallbacks, evmNetworks, walletsFilter, logLevel = 'WARN', multiWallet = false, notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled = true, }, children, theme, }) => {
80
+ const DynamicContextProvider = ({ settings: { accessDeniedMessagePrimary, accessDeniedMessageSecondary, apiBaseUrl, appLogoUrl = 'https://demo.dynamic.xyz/assets/dynamic-logo.svg', appName = 'Dynamic Example', cssOverrides, defaultNumberOfWalletsToShow = values.DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, initialAuthenticationMode = 'connect-and-sign', debugError = false, displayTermsOfService = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, eventsCallbacks, evmNetworks, walletsFilter, logLevel = 'WARN', multiWallet = false, notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled = true, walletConnectors: walletConnectorsProp, }, children, theme, }) => {
81
81
  var _a, _b, _c;
82
82
  logger.logger.setLogLevel(logLevel);
83
83
  walletConnectorCore.logger.setLogLevel(logLevel);
@@ -115,6 +115,7 @@ const DynamicContextProvider = ({ settings: { accessDeniedMessagePrimary, access
115
115
  appName,
116
116
  networkConfigurations: serverNetworkConfigurations,
117
117
  projectSettings,
118
+ walletConnectorsProp,
118
119
  walletUiUtils,
119
120
  });
120
121
  const [authMode, setAuthMode] = useLocalStorage.useLocalStorage(localStorage$1.AUTH_MODE, initialAuthenticationMode);
@@ -1,5 +1,5 @@
1
1
  import { Dispatch, SetStateAction, ReactNode } from 'react';
2
- import { WalletConnector, FetchPublicAddressOpts } from '@dynamic-labs/wallet-connector-core';
2
+ import { WalletConnector, FetchPublicAddressOpts, WalletConnectorsMethod } from '@dynamic-labs/wallet-connector-core';
3
3
  import { DynamicJwt, NameServiceData, ProjectSettings } from '@dynamic-labs/sdk-api';
4
4
  import { LogLevel } from '@dynamic-labs/logger';
5
5
  import { EvmNetwork, NetworkConfigurationMap, WalletUiUtils } from '@dynamic-labs/types';
@@ -132,9 +132,10 @@ export interface DynamicContextProps {
132
132
  socialMediaUrl?: string;
133
133
  termsOfServiceUrl?: string;
134
134
  toolkitEnabled?: boolean;
135
+ walletConnectors?: WalletConnectorsMethod[];
135
136
  walletsFilter?: (options: WalletOption[]) => WalletOption[];
136
137
  };
137
138
  theme?: ThemeData | ThemeSetting;
138
139
  }
139
140
  export declare const DynamicContext: import("react").Context<IDynamicContext | undefined>;
140
- export declare const DynamicContextProvider: ({ settings: { accessDeniedMessagePrimary, accessDeniedMessageSecondary, apiBaseUrl, appLogoUrl, appName, cssOverrides, defaultNumberOfWalletsToShow, initialAuthenticationMode, debugError, displayTermsOfService, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly, environmentId, eventsCallbacks, evmNetworks, walletsFilter, logLevel, multiWallet, notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled, }, children, theme, }: DynamicContextProps) => JSX.Element;
141
+ export declare const DynamicContextProvider: ({ settings: { accessDeniedMessagePrimary, accessDeniedMessageSecondary, apiBaseUrl, appLogoUrl, appName, cssOverrides, defaultNumberOfWalletsToShow, initialAuthenticationMode, debugError, displayTermsOfService, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly, environmentId, eventsCallbacks, evmNetworks, walletsFilter, logLevel, multiWallet, notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled, walletConnectors: walletConnectorsProp, }, children, theme, }: DynamicContextProps) => JSX.Element;
@@ -73,7 +73,7 @@ import { useNameService } from './hooks/useNameService/useNameService.js';
73
73
 
74
74
  const EMPTY_INITIAL_USER = undefined;
75
75
  const DynamicContext = createContext(undefined);
76
- const DynamicContextProvider = ({ settings: { accessDeniedMessagePrimary, accessDeniedMessageSecondary, apiBaseUrl, appLogoUrl = 'https://demo.dynamic.xyz/assets/dynamic-logo.svg', appName = 'Dynamic Example', cssOverrides, defaultNumberOfWalletsToShow = DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, initialAuthenticationMode = 'connect-and-sign', debugError = false, displayTermsOfService = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, eventsCallbacks, evmNetworks, walletsFilter, logLevel = 'WARN', multiWallet = false, notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled = true, }, children, theme, }) => {
76
+ const DynamicContextProvider = ({ settings: { accessDeniedMessagePrimary, accessDeniedMessageSecondary, apiBaseUrl, appLogoUrl = 'https://demo.dynamic.xyz/assets/dynamic-logo.svg', appName = 'Dynamic Example', cssOverrides, defaultNumberOfWalletsToShow = DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, initialAuthenticationMode = 'connect-and-sign', debugError = false, displayTermsOfService = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, eventsCallbacks, evmNetworks, walletsFilter, logLevel = 'WARN', multiWallet = false, notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled = true, walletConnectors: walletConnectorsProp, }, children, theme, }) => {
77
77
  var _a, _b, _c;
78
78
  logger.setLogLevel(logLevel);
79
79
  logger$1.setLogLevel(logLevel);
@@ -111,6 +111,7 @@ const DynamicContextProvider = ({ settings: { accessDeniedMessagePrimary, access
111
111
  appName,
112
112
  networkConfigurations: serverNetworkConfigurations,
113
113
  projectSettings,
114
+ walletConnectorsProp,
114
115
  walletUiUtils,
115
116
  });
116
117
  const [authMode, setAuthMode] = useLocalStorage(AUTH_MODE, initialAuthenticationMode);
@@ -13,3 +13,4 @@ export * from './pixelToRem';
13
13
  export * from './isProgrammableNetworkSwitchSupported';
14
14
  export * from './getEnabledOAuthProviders';
15
15
  export * from './shouldManuallyReconnectOnRefresh';
16
+ export * from './isNetworkUnsupported';
@@ -0,0 +1 @@
1
+ export { isNetworkUnsupported } from './isNetworkUnsupported';
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var utils = require('@dynamic-labs/utils');
6
+
7
+ // Network is not supported if:
8
+ // - its undefined
9
+ // - its not in evmNetworks
10
+ const isNetworkUnsupported = (network, evmNetworks) => !(evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.find((element) => network && element.chainId === utils.parseChainId(network)));
11
+
12
+ exports.isNetworkUnsupported = isNetworkUnsupported;
@@ -0,0 +1,2 @@
1
+ import { EvmNetwork } from '@dynamic-labs/types';
2
+ export declare const isNetworkUnsupported: (network: string | number | undefined, evmNetworks: EvmNetwork[]) => boolean;
@@ -0,0 +1,8 @@
1
+ import { parseChainId } from '@dynamic-labs/utils';
2
+
3
+ // Network is not supported if:
4
+ // - its undefined
5
+ // - its not in evmNetworks
6
+ const isNetworkUnsupported = (network, evmNetworks) => !(evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.find((element) => network && element.chainId === parseChainId(network)));
7
+
8
+ export { isNetworkUnsupported };
@@ -4,16 +4,39 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _tslib = require('../../../../../_virtual/_tslib.cjs');
6
6
  var React = require('react');
7
+ require('@dynamic-labs/sdk-api');
8
+ require('../../../shared/logger.cjs');
9
+ var getFromLS = require('../../../shared/utils/functions/storage/getFromLS.cjs');
10
+ require('@dynamic-labs/iconic');
11
+ require('@dynamic-labs/wallet-connector-core');
12
+ require('react/jsx-runtime');
13
+ require('../../../context/ViewContext/ViewContext.cjs');
14
+ require('@dynamic-labs/utils');
15
+ var localStorage = require('../../constants/localStorage.cjs');
16
+ require('../../constants/colors.cjs');
17
+ require('ethers');
18
+ require('../../../shared/consts/index.cjs');
7
19
  var handleUnlinkHelper = require('../../functions/handleUnlinkHelper/handleUnlinkHelper.cjs');
8
20
  var isSameWalletName = require('../../functions/isSameWalletName/isSameWalletName.cjs');
9
21
 
10
22
  const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWalletId, secondaryWallets, setUser, }) => {
11
23
  const callback = React.useCallback((walletId) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
12
- if (walletId === primaryWalletId)
24
+ var _a;
25
+ // when we call handleUnlinkWallet on the same execution stack as setPrimaryWallet, the value of
26
+ // primaryWalletId coming from the DynamicContext will be the old one in this callback function
27
+ // so we need to get the latest value from LS
28
+ // e.g. primary wallet id is 1234, and we have a function like this:
29
+ // async function setPrimaryWalletAndUnlink() {
30
+ // await setPrimaryWallet('5678');
31
+ // handleUnlinkWallet('1234');
32
+ // }
33
+ // without fetching from LS, primaryWalletId would still be 1234 when handleUnlinkWallet runs in the example above
34
+ const currentPrimaryWalletId = (_a = getFromLS.getFromLS(localStorage.PRIMARY_WALLET_ID)) !== null && _a !== void 0 ? _a : primaryWalletId;
35
+ if (walletId === currentPrimaryWalletId)
13
36
  return;
14
37
  const newUser = yield handleUnlinkHelper.handleUnlinkHelper({
15
38
  environmentId,
16
- primaryWalletId,
39
+ primaryWalletId: currentPrimaryWalletId,
17
40
  walletId,
18
41
  });
19
42
  if (newUser) {
@@ -1,15 +1,38 @@
1
1
  import { __awaiter } from '../../../../../_virtual/_tslib.js';
2
2
  import { useCallback } from 'react';
3
+ import '@dynamic-labs/sdk-api';
4
+ import '../../../shared/logger.js';
5
+ import { getFromLS } from '../../../shared/utils/functions/storage/getFromLS.js';
6
+ import '@dynamic-labs/iconic';
7
+ import '@dynamic-labs/wallet-connector-core';
8
+ import 'react/jsx-runtime';
9
+ import '../../../context/ViewContext/ViewContext.js';
10
+ import '@dynamic-labs/utils';
11
+ import { PRIMARY_WALLET_ID } from '../../constants/localStorage.js';
12
+ import '../../constants/colors.js';
13
+ import 'ethers';
14
+ import '../../../shared/consts/index.js';
3
15
  import { handleUnlinkHelper } from '../../functions/handleUnlinkHelper/handleUnlinkHelper.js';
4
16
  import { isSameWalletName } from '../../functions/isSameWalletName/isSameWalletName.js';
5
17
 
6
18
  const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWalletId, secondaryWallets, setUser, }) => {
7
19
  const callback = useCallback((walletId) => __awaiter(void 0, void 0, void 0, function* () {
8
- if (walletId === primaryWalletId)
20
+ var _a;
21
+ // when we call handleUnlinkWallet on the same execution stack as setPrimaryWallet, the value of
22
+ // primaryWalletId coming from the DynamicContext will be the old one in this callback function
23
+ // so we need to get the latest value from LS
24
+ // e.g. primary wallet id is 1234, and we have a function like this:
25
+ // async function setPrimaryWalletAndUnlink() {
26
+ // await setPrimaryWallet('5678');
27
+ // handleUnlinkWallet('1234');
28
+ // }
29
+ // without fetching from LS, primaryWalletId would still be 1234 when handleUnlinkWallet runs in the example above
30
+ const currentPrimaryWalletId = (_a = getFromLS(PRIMARY_WALLET_ID)) !== null && _a !== void 0 ? _a : primaryWalletId;
31
+ if (walletId === currentPrimaryWalletId)
9
32
  return;
10
33
  const newUser = yield handleUnlinkHelper({
11
34
  environmentId,
12
- primaryWalletId,
35
+ primaryWalletId: currentPrimaryWalletId,
13
36
  walletId,
14
37
  });
15
38
  if (newUser) {
@@ -6,7 +6,7 @@ var _tslib = require('../../../../../_virtual/_tslib.cjs');
6
6
  var React = require('react');
7
7
  var data = require('../../../views/WalletList/data.cjs');
8
8
 
9
- const useWallets = ({ projectSettings, appLogoUrl, appName, networkConfigurations, walletUiUtils, }) => {
9
+ const useWallets = ({ projectSettings, appLogoUrl, appName, networkConfigurations, walletUiUtils, walletConnectorsProp, }) => {
10
10
  const [wallets, setWallets] = React.useState([]);
11
11
  React.useEffect(() => {
12
12
  const getWalletList = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
@@ -17,6 +17,7 @@ const useWallets = ({ projectSettings, appLogoUrl, appName, networkConfiguration
17
17
  customerApiProviders: projectSettings.providers || [],
18
18
  networkConfigurations,
19
19
  skipMemo: true,
20
+ walletConnectorsProp: walletConnectorsProp !== null && walletConnectorsProp !== void 0 ? walletConnectorsProp : [],
20
21
  walletUiUtils,
21
22
  });
22
23
  const notInstalledWallets = yield data.getNotInstalledWallets(projectSettings, {
@@ -25,14 +26,26 @@ const useWallets = ({ projectSettings, appLogoUrl, appName, networkConfiguration
25
26
  customerApiProviders: projectSettings.providers || [],
26
27
  networkConfigurations,
27
28
  skipMemo: true,
29
+ walletConnectorsProp: walletConnectorsProp !== null && walletConnectorsProp !== void 0 ? walletConnectorsProp : [],
28
30
  walletUiUtils,
29
31
  });
30
- const unfilteredWallets = [...installedWallets, ...notInstalledWallets];
32
+ const unfilteredWallets = [
33
+ ...installedWallets,
34
+ ...notInstalledWallets,
35
+ ];
31
36
  setWallets(unfilteredWallets);
32
37
  }
33
38
  });
34
39
  getWalletList();
35
- }, [projectSettings, appLogoUrl, appName, networkConfigurations]);
40
+ },
41
+ // Cannot include walletUiUtils in the dependency array because it will cause an infinite loop
42
+ [
43
+ projectSettings,
44
+ appLogoUrl,
45
+ appName,
46
+ networkConfigurations,
47
+ walletConnectorsProp,
48
+ ]);
36
49
  return { wallets };
37
50
  };
38
51
 
@@ -1,14 +1,16 @@
1
1
  import { ProjectSettings } from '@dynamic-labs/sdk-api';
2
2
  import { NetworkConfigurationMap, WalletUiUtils } from '@dynamic-labs/types';
3
+ import { WalletConnectorsMethod } from '@dynamic-labs/wallet-connector-core';
3
4
  import { WalletOption } from '../../../shared';
4
5
  type Props = {
5
6
  appLogoUrl?: string;
6
7
  appName?: string;
7
8
  networkConfigurations: NetworkConfigurationMap | undefined;
8
9
  projectSettings: ProjectSettings | undefined;
10
+ walletConnectorsProp?: WalletConnectorsMethod[];
9
11
  walletUiUtils: WalletUiUtils;
10
12
  };
11
- export declare const useWallets: ({ projectSettings, appLogoUrl, appName, networkConfigurations, walletUiUtils, }: Props) => {
13
+ export declare const useWallets: ({ projectSettings, appLogoUrl, appName, networkConfigurations, walletUiUtils, walletConnectorsProp, }: Props) => {
12
14
  wallets: WalletOption[];
13
15
  };
14
16
  export {};
@@ -2,7 +2,7 @@ import { __awaiter } from '../../../../../_virtual/_tslib.js';
2
2
  import { useState, useEffect } from 'react';
3
3
  import { getInstalledWallets, getNotInstalledWallets } from '../../../views/WalletList/data.js';
4
4
 
5
- const useWallets = ({ projectSettings, appLogoUrl, appName, networkConfigurations, walletUiUtils, }) => {
5
+ const useWallets = ({ projectSettings, appLogoUrl, appName, networkConfigurations, walletUiUtils, walletConnectorsProp, }) => {
6
6
  const [wallets, setWallets] = useState([]);
7
7
  useEffect(() => {
8
8
  const getWalletList = () => __awaiter(void 0, void 0, void 0, function* () {
@@ -13,6 +13,7 @@ const useWallets = ({ projectSettings, appLogoUrl, appName, networkConfiguration
13
13
  customerApiProviders: projectSettings.providers || [],
14
14
  networkConfigurations,
15
15
  skipMemo: true,
16
+ walletConnectorsProp: walletConnectorsProp !== null && walletConnectorsProp !== void 0 ? walletConnectorsProp : [],
16
17
  walletUiUtils,
17
18
  });
18
19
  const notInstalledWallets = yield getNotInstalledWallets(projectSettings, {
@@ -21,14 +22,26 @@ const useWallets = ({ projectSettings, appLogoUrl, appName, networkConfiguration
21
22
  customerApiProviders: projectSettings.providers || [],
22
23
  networkConfigurations,
23
24
  skipMemo: true,
25
+ walletConnectorsProp: walletConnectorsProp !== null && walletConnectorsProp !== void 0 ? walletConnectorsProp : [],
24
26
  walletUiUtils,
25
27
  });
26
- const unfilteredWallets = [...installedWallets, ...notInstalledWallets];
28
+ const unfilteredWallets = [
29
+ ...installedWallets,
30
+ ...notInstalledWallets,
31
+ ];
27
32
  setWallets(unfilteredWallets);
28
33
  }
29
34
  });
30
35
  getWalletList();
31
- }, [projectSettings, appLogoUrl, appName, networkConfigurations]);
36
+ },
37
+ // Cannot include walletUiUtils in the dependency array because it will cause an infinite loop
38
+ [
39
+ projectSettings,
40
+ appLogoUrl,
41
+ appName,
42
+ networkConfigurations,
43
+ walletConnectorsProp,
44
+ ]);
32
45
  return { wallets };
33
46
  };
34
47
 
@@ -68,7 +68,7 @@ const WalletList = ({ isWalletConnectList = false, }) => {
68
68
  };
69
69
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", Object.assign({ className: 'wallet-list__container' }, { children: [error && jsxRuntime.jsx(ErrorContainer.ErrorContainer, { children: error }), !projectSettings ? (jsxRuntime.jsx(Skeleton.Skeleton, { className: 'wallet-list__search-skeleton' })) : (isSearchEnabled && (jsxRuntime.jsx(Search.Search, { label: `Search through ${numberOfWallets} wallets...`, value: filterValue, onChange: ({ target: { value } }) => setFilterValue(value), onClickClear: () => setFilterValue('') }))), jsxRuntime.jsxs("div", Object.assign({ className: classNames.classNames('wallet-list__scroll-container', {
70
70
  'wallet-list__scroll-container--full-height': isSearchEnabled,
71
- }), "data-testid": 'wallet-list-scroll-container', ref: walletListScrollRef, onScroll: handleScroll }, { children: [!projectSettings ? (jsxRuntime.jsx(Skeleton.Skeleton, { count: 10, className: 'wallet-list__tile-skeleton' })) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: walletsList.map((wallet) => (jsxRuntime.jsx(WalletListItem.WalletListItem, { wallet: wallet, connectedWallets: connectedWallets, usingMultiWallet: isUsingMultiWallet, onResetSearchValue: setFilterValue }, wallet.key))) })), isSearchEnabled && !filterValue && projectSettings && (jsxRuntime.jsx(SearchInstead.SearchInstead, {}))] }))] })), noDefaultFooter && (jsxRuntime.jsx("div", { className: classNames.classNames('wallet-list__tiny-footer', {
71
+ }), "data-testid": 'wallet-list-scroll-container', ref: walletListScrollRef, onScroll: handleScroll }, { children: [!projectSettings ? (jsxRuntime.jsx(Skeleton.Skeleton, { count: 10, className: 'wallet-list__tile-skeleton' })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [walletsList.length === 0 && (jsxRuntime.jsx(ErrorContainer.ErrorContainer, { children: "Oops, no login methods have been configured." })), walletsList.map((wallet) => (jsxRuntime.jsx(WalletListItem.WalletListItem, { wallet: wallet, connectedWallets: connectedWallets, usingMultiWallet: isUsingMultiWallet, onResetSearchValue: setFilterValue }, wallet.key)))] })), isSearchEnabled && !filterValue && projectSettings && (jsxRuntime.jsx(SearchInstead.SearchInstead, {}))] }))] })), noDefaultFooter && (jsxRuntime.jsx("div", { className: classNames.classNames('wallet-list__tiny-footer', {
72
72
  'wallet-list__tiny-footer--hidden': footerIsVisible,
73
73
  }), "data-testid": 'wallet-list-tiny-footer' }))] }));
74
74
  };
@@ -64,7 +64,7 @@ const WalletList = ({ isWalletConnectList = false, }) => {
64
64
  };
65
65
  return (jsxs(Fragment, { children: [jsxs("div", Object.assign({ className: 'wallet-list__container' }, { children: [error && jsx(ErrorContainer, { children: error }), !projectSettings ? (jsx(Skeleton, { className: 'wallet-list__search-skeleton' })) : (isSearchEnabled && (jsx(Search, { label: `Search through ${numberOfWallets} wallets...`, value: filterValue, onChange: ({ target: { value } }) => setFilterValue(value), onClickClear: () => setFilterValue('') }))), jsxs("div", Object.assign({ className: classNames('wallet-list__scroll-container', {
66
66
  'wallet-list__scroll-container--full-height': isSearchEnabled,
67
- }), "data-testid": 'wallet-list-scroll-container', ref: walletListScrollRef, onScroll: handleScroll }, { children: [!projectSettings ? (jsx(Skeleton, { count: 10, className: 'wallet-list__tile-skeleton' })) : (jsx(Fragment, { children: walletsList.map((wallet) => (jsx(WalletListItem, { wallet: wallet, connectedWallets: connectedWallets, usingMultiWallet: isUsingMultiWallet, onResetSearchValue: setFilterValue }, wallet.key))) })), isSearchEnabled && !filterValue && projectSettings && (jsx(SearchInstead, {}))] }))] })), noDefaultFooter && (jsx("div", { className: classNames('wallet-list__tiny-footer', {
67
+ }), "data-testid": 'wallet-list-scroll-container', ref: walletListScrollRef, onScroll: handleScroll }, { children: [!projectSettings ? (jsx(Skeleton, { count: 10, className: 'wallet-list__tile-skeleton' })) : (jsxs(Fragment, { children: [walletsList.length === 0 && (jsx(ErrorContainer, { children: "Oops, no login methods have been configured." })), walletsList.map((wallet) => (jsx(WalletListItem, { wallet: wallet, connectedWallets: connectedWallets, usingMultiWallet: isUsingMultiWallet, onResetSearchValue: setFilterValue }, wallet.key)))] })), isSearchEnabled && !filterValue && projectSettings && (jsx(SearchInstead, {}))] }))] })), noDefaultFooter && (jsx("div", { className: classNames('wallet-list__tiny-footer', {
68
68
  'wallet-list__tiny-footer--hidden': footerIsVisible,
69
69
  }), "data-testid": 'wallet-list-tiny-footer' }))] }));
70
70
  };