@dynamic-labs/sdk-react-core 0.18.0-beta.28 → 0.18.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +9 -8
- package/src/lib/context/DynamicContext/DynamicContext.cjs +8 -8
- package/src/lib/context/DynamicContext/DynamicContext.d.ts +0 -2
- package/src/lib/context/DynamicContext/DynamicContext.js +8 -8
- package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.cjs +6 -4
- package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.d.ts +3 -1
- package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.js +6 -4
- package/src/lib/utils/hooks/index.d.ts +1 -0
- package/src/lib/utils/hooks/multiWallet/useMultiWallet/useMultiWallet.cjs +2 -3
- package/src/lib/utils/hooks/multiWallet/useMultiWallet/useMultiWallet.d.ts +1 -4
- package/src/lib/utils/hooks/multiWallet/useMultiWallet/useMultiWallet.js +2 -3
- package/src/lib/utils/hooks/useWalletConnectorEvent/index.d.ts +1 -0
- package/src/lib/utils/hooks/useWalletConnectorEvent/useWalletConnectorEvent.cjs +42 -0
- package/src/lib/utils/hooks/useWalletConnectorEvent/useWalletConnectorEvent.d.ts +12 -0
- package/src/lib/utils/hooks/useWalletConnectorEvent/useWalletConnectorEvent.js +38 -0
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +12 -0
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +12 -0
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +91 -136
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +92 -137
- package/src/lib/views/NetworkNotSupported/NetworkNotSupported.cjs +13 -3
- package/src/lib/views/NetworkNotSupported/NetworkNotSupported.js +13 -3
- package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.cjs +13 -3
- package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.js +13 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,28 @@
|
|
|
1
1
|
|
|
2
|
+
## [0.18.0-beta.30](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.0-beta.29...v0.18.0-beta.30) (2023-08-04)
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* add improves to wallet events handling
|
|
7
|
+
|
|
8
|
+
## [0.18.0-beta.29](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.0-beta.28...v0.18.0-beta.29) (2023-08-03)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### ⚠ BREAKING CHANGES
|
|
12
|
+
|
|
13
|
+
* remove deprecated multiwallet prop (#2821)
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* array of dynamicWagmiSettings not being sent, must be turned into object ([#2837](https://github.com/dynamic-labs/DynamicAuth/issues/2837)) ([fc5051d](https://github.com/dynamic-labs/DynamicAuth/commit/fc5051d3ce4c5e28d54a74cc9d74424748b52df9)), closes [#2835](https://github.com/dynamic-labs/DynamicAuth/issues/2835)
|
|
18
|
+
* change network modal doesn't pop on secondary wallet, when primaryWallet was disconnected ([#2831](https://github.com/dynamic-labs/DynamicAuth/issues/2831)) ([4a78cc8](https://github.com/dynamic-labs/DynamicAuth/commit/4a78cc8c9004e6716fa9e35d8572c57bfd8bdc22))
|
|
19
|
+
* connectSuccess callback is not being called when connecting new wallet after unlink ([#2829](https://github.com/dynamic-labs/DynamicAuth/issues/2829)) ([37795e5](https://github.com/dynamic-labs/DynamicAuth/commit/37795e5304d65766968ae6168d329b899c0afdfa))
|
|
20
|
+
* **wcv2:** simulate chain change event in switchNetwork ([#2827](https://github.com/dynamic-labs/DynamicAuth/issues/2827)) ([98cff76](https://github.com/dynamic-labs/DynamicAuth/commit/98cff7687112ddbf2971fa4e42cc959f5be62014)), closes [#2809](https://github.com/dynamic-labs/DynamicAuth/issues/2809)
|
|
21
|
+
* wrong wallet list is showing after disconnecting and network change ([#2832](https://github.com/dynamic-labs/DynamicAuth/issues/2832)) ([b7af548](https://github.com/dynamic-labs/DynamicAuth/commit/b7af5480a0f05b851cf9accb3ab0870fd2836a92))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
* remove deprecated multiwallet prop ([#2821](https://github.com/dynamic-labs/DynamicAuth/issues/2821)) ([d95173d](https://github.com/dynamic-labs/DynamicAuth/commit/d95173de890104b1b94b612976682c9d86ec4b17))
|
|
25
|
+
|
|
2
26
|
## [0.18.0-beta.28](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.0-RC.27...v0.18.0-beta.28) (2023-08-03)
|
|
3
27
|
|
|
4
28
|
|
package/package.cjs
CHANGED
package/package.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/sdk-react-core",
|
|
3
|
-
"version": "0.18.0-beta.
|
|
3
|
+
"version": "0.18.0-beta.30",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/dynamic-labs/DynamicAuth.git",
|
|
@@ -16,13 +16,14 @@
|
|
|
16
16
|
"formik": "2.2.9",
|
|
17
17
|
"qrcode": "1.5.1",
|
|
18
18
|
"ethers": "5.7.2",
|
|
19
|
-
"@dynamic-labs/logger": "0.18.0-beta.
|
|
20
|
-
"@dynamic-labs/multi-wallet": "0.18.0-beta.
|
|
21
|
-
"@dynamic-labs/rpc-providers": "0.18.0-beta.
|
|
22
|
-
"@dynamic-labs/types": "0.18.0-beta.
|
|
23
|
-
"@dynamic-labs/utils": "0.18.0-beta.
|
|
24
|
-
"@dynamic-labs/wallet-book": "0.18.0-beta.
|
|
25
|
-
"@dynamic-labs/wallet-connector-core": "0.18.0-beta.
|
|
19
|
+
"@dynamic-labs/logger": "0.18.0-beta.30",
|
|
20
|
+
"@dynamic-labs/multi-wallet": "0.18.0-beta.30",
|
|
21
|
+
"@dynamic-labs/rpc-providers": "0.18.0-beta.30",
|
|
22
|
+
"@dynamic-labs/types": "0.18.0-beta.30",
|
|
23
|
+
"@dynamic-labs/utils": "0.18.0-beta.30",
|
|
24
|
+
"@dynamic-labs/wallet-book": "0.18.0-beta.30",
|
|
25
|
+
"@dynamic-labs/wallet-connector-core": "0.18.0-beta.30",
|
|
26
|
+
"eventemitter3": "5.0.1"
|
|
26
27
|
},
|
|
27
28
|
"devDependencies": {
|
|
28
29
|
"semver": "7.3.8"
|
|
@@ -99,7 +99,7 @@ const EMPTY_INITIAL_USER = undefined;
|
|
|
99
99
|
const DynamicContext = React.createContext(undefined);
|
|
100
100
|
const DynamicContextProvider = ({ children, theme, settings, }) => {
|
|
101
101
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
102
|
-
const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, apiBaseUrl, walletsByChain, cssOverrides, defaultNumberOfWalletsToShow = values.DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = 'connect-and-sign', debugError = false, displaySiweStatement = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, localStorageSuffix, eventsCallbacks, evmNetworks, walletsFilter, logLevel = 'WARN',
|
|
102
|
+
const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, apiBaseUrl, walletsByChain, cssOverrides, defaultNumberOfWalletsToShow = values.DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = 'connect-and-sign', debugError = false, displaySiweStatement = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, localStorageSuffix, eventsCallbacks, evmNetworks, walletsFilter, logLevel = 'WARN', notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled = true, walletConnectors: walletConnectorsProp, socialProvidersFilter, } = settings;
|
|
103
103
|
let { walletConnectV1Bridge, appLogoUrl = 'https://demo.dynamic.xyz/assets/dynamic-logo.svg', appName = 'Dynamic Example', } = settings;
|
|
104
104
|
if (!environmentId) {
|
|
105
105
|
throw new utils.MissingEnvironmentIdError();
|
|
@@ -135,10 +135,7 @@ const DynamicContextProvider = ({ children, theme, settings, }) => {
|
|
|
135
135
|
dynamicContextProps: { settings },
|
|
136
136
|
environmentId,
|
|
137
137
|
});
|
|
138
|
-
const { multiWallet, setMultiWallet } = useMultiWallet.useMultiWallet(
|
|
139
|
-
deprecatedMultiWallet,
|
|
140
|
-
multiWalletSettings: (_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _b === void 0 ? void 0 : _b.multiWallet,
|
|
141
|
-
});
|
|
138
|
+
const { multiWallet, setMultiWallet } = useMultiWallet.useMultiWallet((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _b === void 0 ? void 0 : _b.multiWallet);
|
|
142
139
|
// for demo proposes when running single wallet
|
|
143
140
|
// it should not use bridge even having walletConnectV1Bridge set on settings
|
|
144
141
|
// but v2 if enabled
|
|
@@ -360,9 +357,12 @@ const DynamicContextProvider = ({ children, theme, settings, }) => {
|
|
|
360
357
|
user,
|
|
361
358
|
});
|
|
362
359
|
const sendWagmiSettings = (settings) => {
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
360
|
+
const { dynamicWagmiSettings } = settings;
|
|
361
|
+
if (dynamicWagmiSettings) {
|
|
362
|
+
api.sendDynamicProps(environmentId, {
|
|
363
|
+
dynamicWagmiSettings: { dynamicWagmiSettings },
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
366
|
};
|
|
367
367
|
const clearStatesOnBackClick = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
368
368
|
setDesktopUri('');
|
|
@@ -36,8 +36,6 @@ export interface DynamicContextProps {
|
|
|
36
36
|
* @default WARN
|
|
37
37
|
*/
|
|
38
38
|
logLevel?: keyof typeof LogLevel;
|
|
39
|
-
/** @deprecated enable multi wallet in the dashboard settings instead */
|
|
40
|
-
multiWallet?: boolean;
|
|
41
39
|
newToWeb3WalletChainMap?: ChainToWalletMap;
|
|
42
40
|
notInTheListImageUrl?: string;
|
|
43
41
|
onboardingImageUrl?: string;
|
|
@@ -95,7 +95,7 @@ const EMPTY_INITIAL_USER = undefined;
|
|
|
95
95
|
const DynamicContext = createContext(undefined);
|
|
96
96
|
const DynamicContextProvider = ({ children, theme, settings, }) => {
|
|
97
97
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
98
|
-
const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, apiBaseUrl, walletsByChain, cssOverrides, defaultNumberOfWalletsToShow = DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = 'connect-and-sign', debugError = false, displaySiweStatement = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, localStorageSuffix, eventsCallbacks, evmNetworks, walletsFilter, logLevel = 'WARN',
|
|
98
|
+
const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, apiBaseUrl, walletsByChain, cssOverrides, defaultNumberOfWalletsToShow = DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = 'connect-and-sign', debugError = false, displaySiweStatement = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, localStorageSuffix, eventsCallbacks, evmNetworks, walletsFilter, logLevel = 'WARN', notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled = true, walletConnectors: walletConnectorsProp, socialProvidersFilter, } = settings;
|
|
99
99
|
let { walletConnectV1Bridge, appLogoUrl = 'https://demo.dynamic.xyz/assets/dynamic-logo.svg', appName = 'Dynamic Example', } = settings;
|
|
100
100
|
if (!environmentId) {
|
|
101
101
|
throw new MissingEnvironmentIdError();
|
|
@@ -131,10 +131,7 @@ const DynamicContextProvider = ({ children, theme, settings, }) => {
|
|
|
131
131
|
dynamicContextProps: { settings },
|
|
132
132
|
environmentId,
|
|
133
133
|
});
|
|
134
|
-
const { multiWallet, setMultiWallet } = useMultiWallet(
|
|
135
|
-
deprecatedMultiWallet,
|
|
136
|
-
multiWalletSettings: (_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _b === void 0 ? void 0 : _b.multiWallet,
|
|
137
|
-
});
|
|
134
|
+
const { multiWallet, setMultiWallet } = useMultiWallet((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _b === void 0 ? void 0 : _b.multiWallet);
|
|
138
135
|
// for demo proposes when running single wallet
|
|
139
136
|
// it should not use bridge even having walletConnectV1Bridge set on settings
|
|
140
137
|
// but v2 if enabled
|
|
@@ -356,9 +353,12 @@ const DynamicContextProvider = ({ children, theme, settings, }) => {
|
|
|
356
353
|
user,
|
|
357
354
|
});
|
|
358
355
|
const sendWagmiSettings = (settings) => {
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
356
|
+
const { dynamicWagmiSettings } = settings;
|
|
357
|
+
if (dynamicWagmiSettings) {
|
|
358
|
+
sendDynamicProps(environmentId, {
|
|
359
|
+
dynamicWagmiSettings: { dynamicWagmiSettings },
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
362
|
};
|
|
363
363
|
const clearStatesOnBackClick = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
364
364
|
setDesktopUri('');
|
|
@@ -28,11 +28,11 @@ require('@dynamic-labs/multi-wallet');
|
|
|
28
28
|
var isSupportedNetwork = require('../../../functions/isSupportedNetwork/isSupportedNetwork.cjs');
|
|
29
29
|
var isProgrammableNetworkSwitchSupported = require('../../../functions/isProgrammableNetworkSwitchSupported/isProgrammableNetworkSwitchSupported.cjs');
|
|
30
30
|
|
|
31
|
-
const useConnectAndSign = () => {
|
|
31
|
+
const useConnectAndSign = ({ shouldUpdateWallets = true } = {}) => {
|
|
32
32
|
const { setView, goToInitialView } = ViewContext.useViewContext();
|
|
33
33
|
const { setErrorMessage } = ErrorContext.useErrorContext();
|
|
34
34
|
const { captchaToken } = CaptchaContext.useCaptchaContext();
|
|
35
|
-
const { authMode, connectWallet, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, user, walletUiUtils, setCallback, setIsVerificationInProgress, isFullyConnected, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
35
|
+
const { authMode, connectWallet, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, user, walletUiUtils, setCallback, setIsVerificationInProgress, isFullyConnected, walletsToConnectByChain, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
36
36
|
const { handleWalletsToConnect } = useHandleWalletsToConnect.useHandleWalletsToConnect();
|
|
37
37
|
const verifyWallet = useVerifyWallet.useVerifyWallet({
|
|
38
38
|
consumeNonce,
|
|
@@ -72,8 +72,10 @@ const useConnectAndSign = () => {
|
|
|
72
72
|
}
|
|
73
73
|
if (isConnectOnly.isConnectOnly(user, authMode)) {
|
|
74
74
|
localStorage.LocalStorage.setToLS(localStorage$1.LAST_USED_WALLET, walletConnector.name);
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
if (shouldUpdateWallets) {
|
|
76
|
+
handleWalletsToConnect();
|
|
77
|
+
}
|
|
78
|
+
if (!isFullyConnected || (walletsToConnectByChain === null || walletsToConnectByChain === void 0 ? void 0 : walletsToConnectByChain.length)) {
|
|
77
79
|
setCallback('connectSuccess');
|
|
78
80
|
}
|
|
79
81
|
return;
|
|
@@ -3,5 +3,7 @@ type Props = {
|
|
|
3
3
|
fetchPublicAddressOpts?: FetchPublicAddressOpts;
|
|
4
4
|
walletConnector: WalletConnector;
|
|
5
5
|
};
|
|
6
|
-
export declare const useConnectAndSign: (
|
|
6
|
+
export declare const useConnectAndSign: ({ shouldUpdateWallets }?: {
|
|
7
|
+
shouldUpdateWallets?: boolean | undefined;
|
|
8
|
+
}) => ({ walletConnector, fetchPublicAddressOpts, }: Props) => Promise<void>;
|
|
7
9
|
export {};
|
|
@@ -24,11 +24,11 @@ import '@dynamic-labs/multi-wallet';
|
|
|
24
24
|
import { isSupportedNetwork } from '../../../functions/isSupportedNetwork/isSupportedNetwork.js';
|
|
25
25
|
import { isProgrammableNetworkSwitchSupported } from '../../../functions/isProgrammableNetworkSwitchSupported/isProgrammableNetworkSwitchSupported.js';
|
|
26
26
|
|
|
27
|
-
const useConnectAndSign = () => {
|
|
27
|
+
const useConnectAndSign = ({ shouldUpdateWallets = true } = {}) => {
|
|
28
28
|
const { setView, goToInitialView } = useViewContext();
|
|
29
29
|
const { setErrorMessage } = useErrorContext();
|
|
30
30
|
const { captchaToken } = useCaptchaContext();
|
|
31
|
-
const { authMode, connectWallet, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, user, walletUiUtils, setCallback, setIsVerificationInProgress, isFullyConnected, } = useInternalDynamicContext();
|
|
31
|
+
const { authMode, connectWallet, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, user, walletUiUtils, setCallback, setIsVerificationInProgress, isFullyConnected, walletsToConnectByChain, } = useInternalDynamicContext();
|
|
32
32
|
const { handleWalletsToConnect } = useHandleWalletsToConnect();
|
|
33
33
|
const verifyWallet = useVerifyWallet({
|
|
34
34
|
consumeNonce,
|
|
@@ -68,8 +68,10 @@ const useConnectAndSign = () => {
|
|
|
68
68
|
}
|
|
69
69
|
if (isConnectOnly(user, authMode)) {
|
|
70
70
|
LocalStorage.setToLS(LAST_USED_WALLET, walletConnector.name);
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
if (shouldUpdateWallets) {
|
|
72
|
+
handleWalletsToConnect();
|
|
73
|
+
}
|
|
74
|
+
if (!isFullyConnected || (walletsToConnectByChain === null || walletsToConnectByChain === void 0 ? void 0 : walletsToConnectByChain.length)) {
|
|
73
75
|
setCallback('connectSuccess');
|
|
74
76
|
}
|
|
75
77
|
return;
|
|
@@ -30,3 +30,4 @@ export { useInterval } from './useInterval/useInterval';
|
|
|
30
30
|
export { useCountdown } from './useCountdown/useCountdown';
|
|
31
31
|
export { useValidateSession } from './useValidateSession';
|
|
32
32
|
export { useEventListener } from './useEventListener';
|
|
33
|
+
export { useWalletConnectorEvent } from './useWalletConnectorEvent';
|
|
@@ -4,9 +4,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var React = require('react');
|
|
6
6
|
|
|
7
|
-
const useMultiWallet = (
|
|
8
|
-
|
|
9
|
-
const isMultiWalletEnabled = (_a = deprecatedMultiWallet !== null && deprecatedMultiWallet !== void 0 ? deprecatedMultiWallet : multiWalletSettings) !== null && _a !== void 0 ? _a : false;
|
|
7
|
+
const useMultiWallet = (multiWalletSettings) => {
|
|
8
|
+
const isMultiWalletEnabled = multiWalletSettings !== null && multiWalletSettings !== void 0 ? multiWalletSettings : false;
|
|
10
9
|
const [multiWallet, setMultiWallet] = React.useState(isMultiWalletEnabled);
|
|
11
10
|
React.useEffect(() => {
|
|
12
11
|
setMultiWallet(isMultiWalletEnabled);
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
export declare const useMultiWallet: (
|
|
3
|
-
deprecatedMultiWallet?: boolean | undefined;
|
|
4
|
-
multiWalletSettings?: boolean | undefined;
|
|
5
|
-
}) => {
|
|
2
|
+
export declare const useMultiWallet: (multiWalletSettings?: boolean) => {
|
|
6
3
|
multiWallet: boolean;
|
|
7
4
|
setMultiWallet: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
8
5
|
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { useState, useEffect } from 'react';
|
|
2
2
|
|
|
3
|
-
const useMultiWallet = (
|
|
4
|
-
|
|
5
|
-
const isMultiWalletEnabled = (_a = deprecatedMultiWallet !== null && deprecatedMultiWallet !== void 0 ? deprecatedMultiWallet : multiWalletSettings) !== null && _a !== void 0 ? _a : false;
|
|
3
|
+
const useMultiWallet = (multiWalletSettings) => {
|
|
4
|
+
const isMultiWalletEnabled = multiWalletSettings !== null && multiWalletSettings !== void 0 ? multiWalletSettings : false;
|
|
6
5
|
const [multiWallet, setMultiWallet] = useState(isMultiWalletEnabled);
|
|
7
6
|
useEffect(() => {
|
|
8
7
|
setMultiWallet(isMultiWalletEnabled);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useWalletConnectorEvent } from './useWalletConnectorEvent';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var useIsomorphicLayoutEffect = require('../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs');
|
|
7
|
+
|
|
8
|
+
const useWalletConnectorEvent = (eventEmitters, eventName, handler) => {
|
|
9
|
+
const callbackRef = React.useRef(handler);
|
|
10
|
+
useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
|
|
11
|
+
callbackRef.current = handler;
|
|
12
|
+
}, [handler]);
|
|
13
|
+
React.useEffect(() => {
|
|
14
|
+
if (!eventEmitters)
|
|
15
|
+
return;
|
|
16
|
+
const eventEmittersArray = Array.isArray(eventEmitters)
|
|
17
|
+
? eventEmitters
|
|
18
|
+
: [eventEmitters];
|
|
19
|
+
/**
|
|
20
|
+
* Initialize the event listeners for the wallet connectors
|
|
21
|
+
* to ensure they were initialized before listening to events
|
|
22
|
+
*
|
|
23
|
+
* This will be removed when all wallets are migrated to
|
|
24
|
+
* use the event emitter "emit" method
|
|
25
|
+
*
|
|
26
|
+
* Ticket todo - QNTM-88
|
|
27
|
+
*/
|
|
28
|
+
eventEmittersArray.forEach((connector) => connector.initEventListener());
|
|
29
|
+
const uniqueEventEmitters = Array.from(new Set(eventEmittersArray));
|
|
30
|
+
const unsubscribeCallbacks = uniqueEventEmitters.map((emitter) => {
|
|
31
|
+
const callback = (...args) => {
|
|
32
|
+
callbackRef.current(emitter, ...args);
|
|
33
|
+
};
|
|
34
|
+
emitter.on(eventName, callback);
|
|
35
|
+
return () => emitter.off(eventName, callback);
|
|
36
|
+
});
|
|
37
|
+
return () => unsubscribeCallbacks.forEach((unsubscribe) => unsubscribe());
|
|
38
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
39
|
+
}, [eventEmitters, eventName]);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
exports.useWalletConnectorEvent = useWalletConnectorEvent;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { WalletConnector, WalletConnectorEventTypes } from '@dynamic-labs/wallet-connector-core';
|
|
2
|
+
/**
|
|
3
|
+
* This type is a copy of the ArgumentMap type from eventemitter3 package.
|
|
4
|
+
* Is used extract the arguments from a event type.
|
|
5
|
+
* Then we can use the arguments to reconstruct the callback we want
|
|
6
|
+
*/
|
|
7
|
+
type ArgumentMap<T extends object> = {
|
|
8
|
+
[K in keyof T]: T[K] extends (...args: any[]) => void ? Parameters<T[K]> : T[K] extends any[] ? T[K] : any[];
|
|
9
|
+
};
|
|
10
|
+
type EventArg<Event extends keyof WalletConnectorEventTypes> = ArgumentMap<WalletConnectorEventTypes>[Extract<Event, keyof WalletConnectorEventTypes>];
|
|
11
|
+
export declare const useWalletConnectorEvent: <Event_1 extends keyof WalletConnectorEventTypes = keyof WalletConnectorEventTypes>(eventEmitters: WalletConnector | WalletConnector[] | undefined, eventName: Event_1, handler: (connector: WalletConnector, ...args: EventArg<Event_1>) => void) => void;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { useRef, useEffect } from 'react';
|
|
2
|
+
import { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.js';
|
|
3
|
+
|
|
4
|
+
const useWalletConnectorEvent = (eventEmitters, eventName, handler) => {
|
|
5
|
+
const callbackRef = useRef(handler);
|
|
6
|
+
useIsomorphicLayoutEffect(() => {
|
|
7
|
+
callbackRef.current = handler;
|
|
8
|
+
}, [handler]);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
if (!eventEmitters)
|
|
11
|
+
return;
|
|
12
|
+
const eventEmittersArray = Array.isArray(eventEmitters)
|
|
13
|
+
? eventEmitters
|
|
14
|
+
: [eventEmitters];
|
|
15
|
+
/**
|
|
16
|
+
* Initialize the event listeners for the wallet connectors
|
|
17
|
+
* to ensure they were initialized before listening to events
|
|
18
|
+
*
|
|
19
|
+
* This will be removed when all wallets are migrated to
|
|
20
|
+
* use the event emitter "emit" method
|
|
21
|
+
*
|
|
22
|
+
* Ticket todo - QNTM-88
|
|
23
|
+
*/
|
|
24
|
+
eventEmittersArray.forEach((connector) => connector.initEventListener());
|
|
25
|
+
const uniqueEventEmitters = Array.from(new Set(eventEmittersArray));
|
|
26
|
+
const unsubscribeCallbacks = uniqueEventEmitters.map((emitter) => {
|
|
27
|
+
const callback = (...args) => {
|
|
28
|
+
callbackRef.current(emitter, ...args);
|
|
29
|
+
};
|
|
30
|
+
emitter.on(eventName, callback);
|
|
31
|
+
return () => emitter.off(eventName, callback);
|
|
32
|
+
});
|
|
33
|
+
return () => unsubscribeCallbacks.forEach((unsubscribe) => unsubscribe());
|
|
34
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35
|
+
}, [eventEmitters, eventName]);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export { useWalletConnectorEvent };
|
|
@@ -44,6 +44,18 @@ const useWalletConnectors = ({ authMode, authToken, connectedWallets, wallets: a
|
|
|
44
44
|
}
|
|
45
45
|
return connectedWallets;
|
|
46
46
|
}, [authMode, connectedWallets, linkedWallets, user, onboardingOnlyJwt]);
|
|
47
|
+
/**
|
|
48
|
+
* This useEffect is temporary.
|
|
49
|
+
* While the wallet connectors don't use the event emitter, we need to manually
|
|
50
|
+
* initialize the bridge between the old event listeners and the new event emitter.
|
|
51
|
+
* When the wallet connectors are migrated to the new event emitter, there will be no
|
|
52
|
+
* need to initialize or teardown event listeners, then we can remove this useEffect.
|
|
53
|
+
* @todo remove this useEffect
|
|
54
|
+
* Ticket todo - QNTM-88
|
|
55
|
+
*/
|
|
56
|
+
React.useEffect(() => walletsBasedOnAuthMode.forEach((wallet) => {
|
|
57
|
+
wallet.connector.initEventListener();
|
|
58
|
+
}), [walletsBasedOnAuthMode]);
|
|
47
59
|
const { connectedWalletMap, computeConnectedStateForWallets, didConnectedStateLoad, } = useWalletsConnectionState.useWalletsConnectionState(walletsBasedOnAuthMode);
|
|
48
60
|
const wallets = React.useMemo(() => walletsBasedOnAuthMode.map((wallet) => (Object.assign(Object.assign({}, wallet), { connected: Boolean(connectedWalletMap[wallet.id]) }))), [connectedWalletMap, walletsBasedOnAuthMode]);
|
|
49
61
|
React.useEffect(() => {
|
|
@@ -40,6 +40,18 @@ const useWalletConnectors = ({ authMode, authToken, connectedWallets, wallets: a
|
|
|
40
40
|
}
|
|
41
41
|
return connectedWallets;
|
|
42
42
|
}, [authMode, connectedWallets, linkedWallets, user, onboardingOnlyJwt]);
|
|
43
|
+
/**
|
|
44
|
+
* This useEffect is temporary.
|
|
45
|
+
* While the wallet connectors don't use the event emitter, we need to manually
|
|
46
|
+
* initialize the bridge between the old event listeners and the new event emitter.
|
|
47
|
+
* When the wallet connectors are migrated to the new event emitter, there will be no
|
|
48
|
+
* need to initialize or teardown event listeners, then we can remove this useEffect.
|
|
49
|
+
* @todo remove this useEffect
|
|
50
|
+
* Ticket todo - QNTM-88
|
|
51
|
+
*/
|
|
52
|
+
useEffect(() => walletsBasedOnAuthMode.forEach((wallet) => {
|
|
53
|
+
wallet.connector.initEventListener();
|
|
54
|
+
}), [walletsBasedOnAuthMode]);
|
|
43
55
|
const { connectedWalletMap, computeConnectedStateForWallets, didConnectedStateLoad, } = useWalletsConnectionState(walletsBasedOnAuthMode);
|
|
44
56
|
const wallets = useMemo(() => walletsBasedOnAuthMode.map((wallet) => (Object.assign(Object.assign({}, wallet), { connected: Boolean(connectedWalletMap[wallet.id]) }))), [connectedWalletMap, walletsBasedOnAuthMode]);
|
|
45
57
|
useEffect(() => {
|
|
@@ -16,8 +16,8 @@ require('../../constants/colors.cjs');
|
|
|
16
16
|
require('../../../shared/utils/classes/storage/localStorage.cjs');
|
|
17
17
|
require('ethers');
|
|
18
18
|
require('../../../shared/consts/index.cjs');
|
|
19
|
+
var useWalletConnectorEvent = require('../useWalletConnectorEvent/useWalletConnectorEvent.cjs');
|
|
19
20
|
|
|
20
|
-
const orderedSecondaryWalletAddresses = (wallets) => wallets.map((wallet) => wallet.address).sort();
|
|
21
21
|
const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnector, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
|
|
22
22
|
const [loadingNetwork, setLoadingNetwork] = React.useState(true);
|
|
23
23
|
const [network, setNetwork] = React.useState(undefined);
|
|
@@ -39,31 +39,100 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
|
|
|
39
39
|
});
|
|
40
40
|
fetchNetwork();
|
|
41
41
|
}, [primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.id]);
|
|
42
|
-
|
|
42
|
+
useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'disconnect', () => {
|
|
43
|
+
logger.logger.debug('primary wallet disconnect');
|
|
44
|
+
handleLogOut();
|
|
45
|
+
});
|
|
46
|
+
useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'chainChange', (_, { chain }) => {
|
|
47
|
+
logger.logger.debug('primary wallet chain change', { chain });
|
|
43
48
|
if (!primaryWallet) {
|
|
44
49
|
return;
|
|
45
50
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
52
|
+
// https://linear.app/dynamic-labs/issue/QNTM-84/breaking-change-rename-network-to-primarywalletnetwork
|
|
53
|
+
if (primaryWallet.chain === 'starknet') {
|
|
54
|
+
setNetwork(chain);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
setNetwork(parseInt(chain));
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', (_, { accounts }) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
61
|
+
logger.logger.debug('primary wallet account change', {
|
|
62
|
+
accounts,
|
|
63
|
+
});
|
|
64
|
+
// change the api here
|
|
65
|
+
if (!primaryWallet)
|
|
66
|
+
return;
|
|
67
|
+
const [newAddress] = accounts;
|
|
68
|
+
const newWallet = secondaryWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
69
|
+
if (authMode === 'connect-only') {
|
|
70
|
+
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (walletConnectorCore.isSameAddress(newAddress, primaryWallet.address, primaryWallet.chain)) {
|
|
74
|
+
setMultiWalletWidgetState('idle');
|
|
75
|
+
}
|
|
76
|
+
else if (!multiWallet) {
|
|
77
|
+
yield handleLogOut();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
else if (multiWalletWidgetState === 'awaiting_account_switch') {
|
|
81
|
+
handleAccountChangeWhenAwaitingAccountSwitch(true, newAddress);
|
|
82
|
+
}
|
|
83
|
+
else if (multiWalletWidgetState === 'idle' && newWallet) {
|
|
84
|
+
setPrimaryWalletId(newWallet.id);
|
|
85
|
+
}
|
|
86
|
+
else if (multiWalletWidgetState === 'idle' && !newWallet) {
|
|
87
|
+
if (user) {
|
|
88
|
+
setMultiWalletWidgetState('detected_new_wallet');
|
|
89
|
+
setSelectedWalletConnector(primaryWallet.connector);
|
|
90
|
+
yield computeConnectedStateForWallets();
|
|
91
|
+
return;
|
|
53
92
|
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
logger.logger.error(`Unexpected multiWalletWidgetState (${multiWalletWidgetState}) and onAccountChange combination. Resetting state to idle.`);
|
|
96
|
+
setMultiWalletWidgetState('idle');
|
|
97
|
+
}
|
|
98
|
+
yield computeConnectedStateForWallets();
|
|
99
|
+
}));
|
|
100
|
+
const uniqueNonPrimaryWallets = React.useMemo(() => {
|
|
101
|
+
const primaryConnector = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector;
|
|
102
|
+
const secondaryConnectors = secondaryWallets.map(({ connector }) => connector);
|
|
103
|
+
const allWalletConnectors = new Set([
|
|
104
|
+
...secondaryConnectors,
|
|
105
|
+
primaryConnector,
|
|
106
|
+
selectedWalletConnector,
|
|
107
|
+
].filter((connector) => Boolean(connector)));
|
|
108
|
+
if (primaryConnector) {
|
|
109
|
+
allWalletConnectors.delete(primaryConnector);
|
|
110
|
+
}
|
|
111
|
+
return Array.from(allWalletConnectors);
|
|
112
|
+
}, [secondaryWallets, selectedWalletConnector, primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector]);
|
|
113
|
+
useWalletConnectorEvent.useWalletConnectorEvent(uniqueNonPrimaryWallets, 'accountChange', () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
114
|
+
logger.logger.debug('secondary wallet account change');
|
|
115
|
+
if (authMode === 'connect-only' && secondaryWallets.length) {
|
|
116
|
+
refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (multiWalletWidgetState === 'awaiting_account_switch') {
|
|
120
|
+
handleAccountChangeWhenAwaitingAccountSwitch(false, (selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet.address) || '');
|
|
121
|
+
}
|
|
122
|
+
yield computeConnectedStateForWallets();
|
|
123
|
+
}));
|
|
124
|
+
useWalletConnectorEvent.useWalletConnectorEvent(uniqueNonPrimaryWallets, 'chainChange', () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
125
|
+
logger.logger.debug('secondary wallet chain change');
|
|
126
|
+
// We should pass the proper walletId here
|
|
127
|
+
if (!secondaryWallets.length) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
|
|
131
|
+
}));
|
|
132
|
+
useWalletConnectorEvent.useWalletConnectorEvent(uniqueNonPrimaryWallets, 'disconnect', () => {
|
|
133
|
+
logger.logger.debug('secondary wallet disconnect');
|
|
134
|
+
computeConnectedStateForWallets();
|
|
135
|
+
});
|
|
67
136
|
const handleAccountChangeWhenAwaitingAccountSwitch = React.useCallback((isPrimaryWallet, newAddress) => {
|
|
68
137
|
const linkedSecondaryWallet = secondaryWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
69
138
|
// this means the user is linking a new account, so we need proof of ownership...
|
|
@@ -86,120 +155,6 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
|
|
|
86
155
|
setSelectedWalletWithAction,
|
|
87
156
|
setPrimaryWalletId,
|
|
88
157
|
]);
|
|
89
|
-
const addPrimaryWalletEventListeners = React.useCallback((seen) => {
|
|
90
|
-
if (!primaryWallet) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
seen.add(primaryWallet.connector.name);
|
|
94
|
-
primaryWallet.connector.setupEventListeners({
|
|
95
|
-
onAccountChange: (accounts) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
96
|
-
const [newAddress] = accounts;
|
|
97
|
-
const newWallet = secondaryWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
98
|
-
if (authMode === 'connect-only') {
|
|
99
|
-
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
if (walletConnectorCore.isSameAddress(newAddress, primaryWallet.address, primaryWallet.chain)) {
|
|
103
|
-
setMultiWalletWidgetState('idle');
|
|
104
|
-
}
|
|
105
|
-
else if (!multiWallet) {
|
|
106
|
-
yield handleLogOut();
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
else if (multiWalletWidgetState === 'awaiting_account_switch') {
|
|
110
|
-
handleAccountChangeWhenAwaitingAccountSwitch(true, newAddress);
|
|
111
|
-
}
|
|
112
|
-
else if (multiWalletWidgetState === 'idle' && newWallet) {
|
|
113
|
-
setPrimaryWalletId(newWallet.id);
|
|
114
|
-
}
|
|
115
|
-
else if (multiWalletWidgetState === 'idle' && !newWallet) {
|
|
116
|
-
if (user) {
|
|
117
|
-
setMultiWalletWidgetState('detected_new_wallet');
|
|
118
|
-
setSelectedWalletConnector(primaryWallet.connector);
|
|
119
|
-
yield computeConnectedStateForWallets();
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
logger.logger.error(`Unexpected multiWalletWidgetState (${multiWalletWidgetState}) and onAccountChange combination. Resetting state to idle.`);
|
|
125
|
-
setMultiWalletWidgetState('idle');
|
|
126
|
-
}
|
|
127
|
-
yield computeConnectedStateForWallets();
|
|
128
|
-
}),
|
|
129
|
-
onChainChange: (chain) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
130
|
-
if (!primaryWallet) {
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
134
|
-
// https://linear.app/dynamic-labs/issue/QNTM-84/breaking-change-rename-network-to-primarywalletnetwork
|
|
135
|
-
if (primaryWallet.chain === 'starknet') {
|
|
136
|
-
setNetwork(chain);
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
setNetwork(parseInt(chain));
|
|
140
|
-
}
|
|
141
|
-
}),
|
|
142
|
-
onDisconnect: handleLogOut,
|
|
143
|
-
});
|
|
144
|
-
}, [
|
|
145
|
-
authMode,
|
|
146
|
-
primaryWallet,
|
|
147
|
-
setMultiWalletWidgetState,
|
|
148
|
-
multiWallet,
|
|
149
|
-
user,
|
|
150
|
-
computeConnectedStateForWallets,
|
|
151
|
-
handleLogOut,
|
|
152
|
-
multiWalletWidgetState,
|
|
153
|
-
secondaryWallets,
|
|
154
|
-
setSelectedWalletConnector,
|
|
155
|
-
handleAccountChangeWhenAwaitingAccountSwitch,
|
|
156
|
-
setPrimaryWalletId,
|
|
157
|
-
refreshConnectedWallet,
|
|
158
|
-
]);
|
|
159
|
-
const addSecondaryWalletEventListeners = React.useCallback((seen) => {
|
|
160
|
-
const secondaryListeners = {
|
|
161
|
-
onAccountChange: () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
162
|
-
if (authMode === 'connect-only' && secondaryWallets.length) {
|
|
163
|
-
refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
if (multiWalletWidgetState === 'awaiting_account_switch') {
|
|
167
|
-
handleAccountChangeWhenAwaitingAccountSwitch(false, (selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet.address) || '');
|
|
168
|
-
}
|
|
169
|
-
yield computeConnectedStateForWallets();
|
|
170
|
-
}),
|
|
171
|
-
onChainChange: () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
172
|
-
// We should pass the proper walletId here
|
|
173
|
-
if (!secondaryWallets.length) {
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
|
|
177
|
-
}),
|
|
178
|
-
onDisconnect: () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
179
|
-
yield computeConnectedStateForWallets();
|
|
180
|
-
}),
|
|
181
|
-
};
|
|
182
|
-
if (selectedWalletConnector && !seen.has(selectedWalletConnector.name)) {
|
|
183
|
-
seen.add(selectedWalletConnector.name);
|
|
184
|
-
selectedWalletConnector.setupEventListeners(secondaryListeners);
|
|
185
|
-
}
|
|
186
|
-
for (const wallet of secondaryWallets) {
|
|
187
|
-
if (seen.has(wallet.connector.name)) {
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
seen.add(wallet.connector.name);
|
|
191
|
-
wallet.connector.setupEventListeners(secondaryListeners);
|
|
192
|
-
}
|
|
193
|
-
}, [
|
|
194
|
-
authMode,
|
|
195
|
-
computeConnectedStateForWallets,
|
|
196
|
-
selectedWalletConnector,
|
|
197
|
-
selectedWalletWithAction,
|
|
198
|
-
handleAccountChangeWhenAwaitingAccountSwitch,
|
|
199
|
-
multiWalletWidgetState,
|
|
200
|
-
secondaryWallets,
|
|
201
|
-
refreshConnectedWallet,
|
|
202
|
-
]);
|
|
203
158
|
return {
|
|
204
159
|
loadingNetwork,
|
|
205
160
|
network,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __awaiter } from '../../../../../_virtual/_tslib.js';
|
|
2
|
-
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
import { useState, useEffect, useMemo, useCallback } from 'react';
|
|
3
3
|
import { isSameAddress } from '@dynamic-labs/wallet-connector-core';
|
|
4
4
|
import '@dynamic-labs/sdk-api';
|
|
5
5
|
import { logger } from '../../../shared/logger.js';
|
|
@@ -12,8 +12,8 @@ import '../../constants/colors.js';
|
|
|
12
12
|
import '../../../shared/utils/classes/storage/localStorage.js';
|
|
13
13
|
import 'ethers';
|
|
14
14
|
import '../../../shared/consts/index.js';
|
|
15
|
+
import { useWalletConnectorEvent } from '../useWalletConnectorEvent/useWalletConnectorEvent.js';
|
|
15
16
|
|
|
16
|
-
const orderedSecondaryWalletAddresses = (wallets) => wallets.map((wallet) => wallet.address).sort();
|
|
17
17
|
const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnector, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
|
|
18
18
|
const [loadingNetwork, setLoadingNetwork] = useState(true);
|
|
19
19
|
const [network, setNetwork] = useState(undefined);
|
|
@@ -35,31 +35,100 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
|
|
|
35
35
|
});
|
|
36
36
|
fetchNetwork();
|
|
37
37
|
}, [primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.id]);
|
|
38
|
-
|
|
38
|
+
useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'disconnect', () => {
|
|
39
|
+
logger.debug('primary wallet disconnect');
|
|
40
|
+
handleLogOut();
|
|
41
|
+
});
|
|
42
|
+
useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'chainChange', (_, { chain }) => {
|
|
43
|
+
logger.debug('primary wallet chain change', { chain });
|
|
39
44
|
if (!primaryWallet) {
|
|
40
45
|
return;
|
|
41
46
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
48
|
+
// https://linear.app/dynamic-labs/issue/QNTM-84/breaking-change-rename-network-to-primarywalletnetwork
|
|
49
|
+
if (primaryWallet.chain === 'starknet') {
|
|
50
|
+
setNetwork(chain);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
setNetwork(parseInt(chain));
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', (_, { accounts }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
+
logger.debug('primary wallet account change', {
|
|
58
|
+
accounts,
|
|
59
|
+
});
|
|
60
|
+
// change the api here
|
|
61
|
+
if (!primaryWallet)
|
|
62
|
+
return;
|
|
63
|
+
const [newAddress] = accounts;
|
|
64
|
+
const newWallet = secondaryWallets.find((wallet) => isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
65
|
+
if (authMode === 'connect-only') {
|
|
66
|
+
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (isSameAddress(newAddress, primaryWallet.address, primaryWallet.chain)) {
|
|
70
|
+
setMultiWalletWidgetState('idle');
|
|
71
|
+
}
|
|
72
|
+
else if (!multiWallet) {
|
|
73
|
+
yield handleLogOut();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
else if (multiWalletWidgetState === 'awaiting_account_switch') {
|
|
77
|
+
handleAccountChangeWhenAwaitingAccountSwitch(true, newAddress);
|
|
78
|
+
}
|
|
79
|
+
else if (multiWalletWidgetState === 'idle' && newWallet) {
|
|
80
|
+
setPrimaryWalletId(newWallet.id);
|
|
81
|
+
}
|
|
82
|
+
else if (multiWalletWidgetState === 'idle' && !newWallet) {
|
|
83
|
+
if (user) {
|
|
84
|
+
setMultiWalletWidgetState('detected_new_wallet');
|
|
85
|
+
setSelectedWalletConnector(primaryWallet.connector);
|
|
86
|
+
yield computeConnectedStateForWallets();
|
|
87
|
+
return;
|
|
49
88
|
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
logger.error(`Unexpected multiWalletWidgetState (${multiWalletWidgetState}) and onAccountChange combination. Resetting state to idle.`);
|
|
92
|
+
setMultiWalletWidgetState('idle');
|
|
93
|
+
}
|
|
94
|
+
yield computeConnectedStateForWallets();
|
|
95
|
+
}));
|
|
96
|
+
const uniqueNonPrimaryWallets = useMemo(() => {
|
|
97
|
+
const primaryConnector = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector;
|
|
98
|
+
const secondaryConnectors = secondaryWallets.map(({ connector }) => connector);
|
|
99
|
+
const allWalletConnectors = new Set([
|
|
100
|
+
...secondaryConnectors,
|
|
101
|
+
primaryConnector,
|
|
102
|
+
selectedWalletConnector,
|
|
103
|
+
].filter((connector) => Boolean(connector)));
|
|
104
|
+
if (primaryConnector) {
|
|
105
|
+
allWalletConnectors.delete(primaryConnector);
|
|
106
|
+
}
|
|
107
|
+
return Array.from(allWalletConnectors);
|
|
108
|
+
}, [secondaryWallets, selectedWalletConnector, primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector]);
|
|
109
|
+
useWalletConnectorEvent(uniqueNonPrimaryWallets, 'accountChange', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
110
|
+
logger.debug('secondary wallet account change');
|
|
111
|
+
if (authMode === 'connect-only' && secondaryWallets.length) {
|
|
112
|
+
refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (multiWalletWidgetState === 'awaiting_account_switch') {
|
|
116
|
+
handleAccountChangeWhenAwaitingAccountSwitch(false, (selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet.address) || '');
|
|
117
|
+
}
|
|
118
|
+
yield computeConnectedStateForWallets();
|
|
119
|
+
}));
|
|
120
|
+
useWalletConnectorEvent(uniqueNonPrimaryWallets, 'chainChange', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
121
|
+
logger.debug('secondary wallet chain change');
|
|
122
|
+
// We should pass the proper walletId here
|
|
123
|
+
if (!secondaryWallets.length) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
|
|
127
|
+
}));
|
|
128
|
+
useWalletConnectorEvent(uniqueNonPrimaryWallets, 'disconnect', () => {
|
|
129
|
+
logger.debug('secondary wallet disconnect');
|
|
130
|
+
computeConnectedStateForWallets();
|
|
131
|
+
});
|
|
63
132
|
const handleAccountChangeWhenAwaitingAccountSwitch = useCallback((isPrimaryWallet, newAddress) => {
|
|
64
133
|
const linkedSecondaryWallet = secondaryWallets.find((wallet) => isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
65
134
|
// this means the user is linking a new account, so we need proof of ownership...
|
|
@@ -82,120 +151,6 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
|
|
|
82
151
|
setSelectedWalletWithAction,
|
|
83
152
|
setPrimaryWalletId,
|
|
84
153
|
]);
|
|
85
|
-
const addPrimaryWalletEventListeners = useCallback((seen) => {
|
|
86
|
-
if (!primaryWallet) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
seen.add(primaryWallet.connector.name);
|
|
90
|
-
primaryWallet.connector.setupEventListeners({
|
|
91
|
-
onAccountChange: (accounts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
92
|
-
const [newAddress] = accounts;
|
|
93
|
-
const newWallet = secondaryWallets.find((wallet) => isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
94
|
-
if (authMode === 'connect-only') {
|
|
95
|
-
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
if (isSameAddress(newAddress, primaryWallet.address, primaryWallet.chain)) {
|
|
99
|
-
setMultiWalletWidgetState('idle');
|
|
100
|
-
}
|
|
101
|
-
else if (!multiWallet) {
|
|
102
|
-
yield handleLogOut();
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
else if (multiWalletWidgetState === 'awaiting_account_switch') {
|
|
106
|
-
handleAccountChangeWhenAwaitingAccountSwitch(true, newAddress);
|
|
107
|
-
}
|
|
108
|
-
else if (multiWalletWidgetState === 'idle' && newWallet) {
|
|
109
|
-
setPrimaryWalletId(newWallet.id);
|
|
110
|
-
}
|
|
111
|
-
else if (multiWalletWidgetState === 'idle' && !newWallet) {
|
|
112
|
-
if (user) {
|
|
113
|
-
setMultiWalletWidgetState('detected_new_wallet');
|
|
114
|
-
setSelectedWalletConnector(primaryWallet.connector);
|
|
115
|
-
yield computeConnectedStateForWallets();
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
logger.error(`Unexpected multiWalletWidgetState (${multiWalletWidgetState}) and onAccountChange combination. Resetting state to idle.`);
|
|
121
|
-
setMultiWalletWidgetState('idle');
|
|
122
|
-
}
|
|
123
|
-
yield computeConnectedStateForWallets();
|
|
124
|
-
}),
|
|
125
|
-
onChainChange: (chain) => __awaiter(void 0, void 0, void 0, function* () {
|
|
126
|
-
if (!primaryWallet) {
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
130
|
-
// https://linear.app/dynamic-labs/issue/QNTM-84/breaking-change-rename-network-to-primarywalletnetwork
|
|
131
|
-
if (primaryWallet.chain === 'starknet') {
|
|
132
|
-
setNetwork(chain);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
setNetwork(parseInt(chain));
|
|
136
|
-
}
|
|
137
|
-
}),
|
|
138
|
-
onDisconnect: handleLogOut,
|
|
139
|
-
});
|
|
140
|
-
}, [
|
|
141
|
-
authMode,
|
|
142
|
-
primaryWallet,
|
|
143
|
-
setMultiWalletWidgetState,
|
|
144
|
-
multiWallet,
|
|
145
|
-
user,
|
|
146
|
-
computeConnectedStateForWallets,
|
|
147
|
-
handleLogOut,
|
|
148
|
-
multiWalletWidgetState,
|
|
149
|
-
secondaryWallets,
|
|
150
|
-
setSelectedWalletConnector,
|
|
151
|
-
handleAccountChangeWhenAwaitingAccountSwitch,
|
|
152
|
-
setPrimaryWalletId,
|
|
153
|
-
refreshConnectedWallet,
|
|
154
|
-
]);
|
|
155
|
-
const addSecondaryWalletEventListeners = useCallback((seen) => {
|
|
156
|
-
const secondaryListeners = {
|
|
157
|
-
onAccountChange: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
158
|
-
if (authMode === 'connect-only' && secondaryWallets.length) {
|
|
159
|
-
refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
if (multiWalletWidgetState === 'awaiting_account_switch') {
|
|
163
|
-
handleAccountChangeWhenAwaitingAccountSwitch(false, (selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet.address) || '');
|
|
164
|
-
}
|
|
165
|
-
yield computeConnectedStateForWallets();
|
|
166
|
-
}),
|
|
167
|
-
onChainChange: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
168
|
-
// We should pass the proper walletId here
|
|
169
|
-
if (!secondaryWallets.length) {
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
|
|
173
|
-
}),
|
|
174
|
-
onDisconnect: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
175
|
-
yield computeConnectedStateForWallets();
|
|
176
|
-
}),
|
|
177
|
-
};
|
|
178
|
-
if (selectedWalletConnector && !seen.has(selectedWalletConnector.name)) {
|
|
179
|
-
seen.add(selectedWalletConnector.name);
|
|
180
|
-
selectedWalletConnector.setupEventListeners(secondaryListeners);
|
|
181
|
-
}
|
|
182
|
-
for (const wallet of secondaryWallets) {
|
|
183
|
-
if (seen.has(wallet.connector.name)) {
|
|
184
|
-
continue;
|
|
185
|
-
}
|
|
186
|
-
seen.add(wallet.connector.name);
|
|
187
|
-
wallet.connector.setupEventListeners(secondaryListeners);
|
|
188
|
-
}
|
|
189
|
-
}, [
|
|
190
|
-
authMode,
|
|
191
|
-
computeConnectedStateForWallets,
|
|
192
|
-
selectedWalletConnector,
|
|
193
|
-
selectedWalletWithAction,
|
|
194
|
-
handleAccountChangeWhenAwaitingAccountSwitch,
|
|
195
|
-
multiWalletWidgetState,
|
|
196
|
-
secondaryWallets,
|
|
197
|
-
refreshConnectedWallet,
|
|
198
|
-
]);
|
|
199
154
|
return {
|
|
200
155
|
loadingNetwork,
|
|
201
156
|
network,
|
|
@@ -53,10 +53,12 @@ var SelectNetworkButton = require('../../components/SelectNetworkButton/SelectNe
|
|
|
53
53
|
var useApplyWalletConnectorNetwork = require('../../utils/hooks/useApplyWalletConnectorNetwork/useApplyWalletConnectorNetwork.cjs');
|
|
54
54
|
|
|
55
55
|
const NetworkNotSupported = () => {
|
|
56
|
-
const { network, onboardingImageUrl, selectedWalletConnector: walletConnector, connectedWallets, primaryWallet, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
56
|
+
const { network, onboardingImageUrl, selectedWalletConnector: walletConnector, connectedWallets, primaryWallet, isFullyConnected, setShowAuthFlow, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
57
57
|
// Refresh selectedWalletConnector network when primaryWallet or connectedWallets updates
|
|
58
58
|
const { data: walletConnectorNetwork } = usePromise.usePromise(() => walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.getNetwork(), { deps: [primaryWallet, walletConnector, connectedWallets] });
|
|
59
|
-
const finishConnectAndSign = useConnectAndSign.useConnectAndSign(
|
|
59
|
+
const finishConnectAndSign = useConnectAndSign.useConnectAndSign({
|
|
60
|
+
shouldUpdateWallets: !isFullyConnected,
|
|
61
|
+
});
|
|
60
62
|
const [isNetworkPickerOpen, setIsNetworkPickerOpen] = React.useState(false);
|
|
61
63
|
// Finishes auth flow when wallet switches to proper network
|
|
62
64
|
React.useEffect(() => {
|
|
@@ -64,8 +66,16 @@ const NetworkNotSupported = () => {
|
|
|
64
66
|
finishConnectAndSign({
|
|
65
67
|
walletConnector: walletConnector,
|
|
66
68
|
});
|
|
69
|
+
// there are two scenarios here, one in not connected state and the other one in connected state.
|
|
70
|
+
// previously we were calling setShowAuthFlow(false) in useHandleWalletsToConnect.
|
|
71
|
+
// now, we don't call it in network-not-supported view, so we need to handle that scenario and close modal here
|
|
72
|
+
// this should be gone, once we're done with the useConnectAndSign hook refactor.
|
|
73
|
+
// TODO: https://linear.app/dynamic-labs/issue/QNTM-117/break-useconnectandsign-hook-to-small-parts
|
|
74
|
+
if (isFullyConnected) {
|
|
75
|
+
setShowAuthFlow(false);
|
|
76
|
+
}
|
|
67
77
|
}
|
|
68
|
-
}, [walletConnectorNetwork]);
|
|
78
|
+
}, [walletConnectorNetwork, setShowAuthFlow, isFullyConnected]);
|
|
69
79
|
// Updates the contexts 'network' based on the selected wallet connector.
|
|
70
80
|
// It helps ensure that the 'network' is always in sync with the wallet's actual network,
|
|
71
81
|
// Prevents 'network' from being 'undefined'.
|
|
@@ -49,10 +49,12 @@ import { SelectNetworkButton } from '../../components/SelectNetworkButton/Select
|
|
|
49
49
|
import { useApplyWalletConnectorNetwork } from '../../utils/hooks/useApplyWalletConnectorNetwork/useApplyWalletConnectorNetwork.js';
|
|
50
50
|
|
|
51
51
|
const NetworkNotSupported = () => {
|
|
52
|
-
const { network, onboardingImageUrl, selectedWalletConnector: walletConnector, connectedWallets, primaryWallet, } = useInternalDynamicContext();
|
|
52
|
+
const { network, onboardingImageUrl, selectedWalletConnector: walletConnector, connectedWallets, primaryWallet, isFullyConnected, setShowAuthFlow, } = useInternalDynamicContext();
|
|
53
53
|
// Refresh selectedWalletConnector network when primaryWallet or connectedWallets updates
|
|
54
54
|
const { data: walletConnectorNetwork } = usePromise(() => walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.getNetwork(), { deps: [primaryWallet, walletConnector, connectedWallets] });
|
|
55
|
-
const finishConnectAndSign = useConnectAndSign(
|
|
55
|
+
const finishConnectAndSign = useConnectAndSign({
|
|
56
|
+
shouldUpdateWallets: !isFullyConnected,
|
|
57
|
+
});
|
|
56
58
|
const [isNetworkPickerOpen, setIsNetworkPickerOpen] = useState(false);
|
|
57
59
|
// Finishes auth flow when wallet switches to proper network
|
|
58
60
|
useEffect(() => {
|
|
@@ -60,8 +62,16 @@ const NetworkNotSupported = () => {
|
|
|
60
62
|
finishConnectAndSign({
|
|
61
63
|
walletConnector: walletConnector,
|
|
62
64
|
});
|
|
65
|
+
// there are two scenarios here, one in not connected state and the other one in connected state.
|
|
66
|
+
// previously we were calling setShowAuthFlow(false) in useHandleWalletsToConnect.
|
|
67
|
+
// now, we don't call it in network-not-supported view, so we need to handle that scenario and close modal here
|
|
68
|
+
// this should be gone, once we're done with the useConnectAndSign hook refactor.
|
|
69
|
+
// TODO: https://linear.app/dynamic-labs/issue/QNTM-117/break-useconnectandsign-hook-to-small-parts
|
|
70
|
+
if (isFullyConnected) {
|
|
71
|
+
setShowAuthFlow(false);
|
|
72
|
+
}
|
|
63
73
|
}
|
|
64
|
-
}, [walletConnectorNetwork]);
|
|
74
|
+
}, [walletConnectorNetwork, setShowAuthFlow, isFullyConnected]);
|
|
65
75
|
// Updates the contexts 'network' based on the selected wallet connector.
|
|
66
76
|
// It helps ensure that the 'network' is always in sync with the wallet's actual network,
|
|
67
77
|
// Prevents 'network' from being 'undefined'.
|
|
@@ -54,20 +54,30 @@ var useApplyWalletConnectorNetwork = require('../../utils/hooks/useApplyWalletCo
|
|
|
54
54
|
// as the wallet does not support programmatic network change.
|
|
55
55
|
const NetworkNotSupportedSwitchManual = () => {
|
|
56
56
|
var _a, _b;
|
|
57
|
-
const { user, selectedWalletConnector: walletConnector, connectedWallets, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
57
|
+
const { user, selectedWalletConnector: walletConnector, connectedWallets, isFullyConnected, setShowAuthFlow, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
58
58
|
// Refresh selectedWalletConnector network when primaryWallet or connectedWallets updates
|
|
59
59
|
const { data: walletConnectorNetwork } = usePromise.usePromise(() => walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.getNetwork(), {
|
|
60
60
|
deps: [walletConnector, connectedWallets],
|
|
61
61
|
});
|
|
62
|
-
const finishConnectAndSign = useConnectAndSign.useConnectAndSign(
|
|
62
|
+
const finishConnectAndSign = useConnectAndSign.useConnectAndSign({
|
|
63
|
+
shouldUpdateWallets: !isFullyConnected,
|
|
64
|
+
});
|
|
63
65
|
// Finishes auth flow when wallet switches to proper network
|
|
64
66
|
React.useEffect(() => {
|
|
65
67
|
if (isSupportedNetwork.isSupportedNetwork({ network: walletConnectorNetwork, walletConnector })) {
|
|
66
68
|
finishConnectAndSign({
|
|
67
69
|
walletConnector: walletConnector,
|
|
68
70
|
});
|
|
71
|
+
// there are two scenarios here, one in not connected state and the other one in connected state.
|
|
72
|
+
// previously we were calling setShowAuthFlow(false) in useHandleWalletsToConnect.
|
|
73
|
+
// now, we don't call it in network-not-supported view, so we need to handle that scenario and close modal here
|
|
74
|
+
// this should be gone, once we're done with the useConnectAndSign hook refactor.
|
|
75
|
+
// TODO: https://linear.app/dynamic-labs/issue/QNTM-117/break-useconnectandsign-hook-to-small-parts
|
|
76
|
+
if (isFullyConnected) {
|
|
77
|
+
setShowAuthFlow(false);
|
|
78
|
+
}
|
|
69
79
|
}
|
|
70
|
-
}, [walletConnectorNetwork]);
|
|
80
|
+
}, [walletConnectorNetwork, setShowAuthFlow, isFullyConnected]);
|
|
71
81
|
// Updates the contexts 'network' based on the selected wallet connector.
|
|
72
82
|
// It helps ensure that the 'network' is always in sync with the wallet's actual network,
|
|
73
83
|
// Prevents 'network' from being 'undefined'.
|
|
@@ -50,20 +50,30 @@ import { useApplyWalletConnectorNetwork } from '../../utils/hooks/useApplyWallet
|
|
|
50
50
|
// as the wallet does not support programmatic network change.
|
|
51
51
|
const NetworkNotSupportedSwitchManual = () => {
|
|
52
52
|
var _a, _b;
|
|
53
|
-
const { user, selectedWalletConnector: walletConnector, connectedWallets, } = useInternalDynamicContext();
|
|
53
|
+
const { user, selectedWalletConnector: walletConnector, connectedWallets, isFullyConnected, setShowAuthFlow, } = useInternalDynamicContext();
|
|
54
54
|
// Refresh selectedWalletConnector network when primaryWallet or connectedWallets updates
|
|
55
55
|
const { data: walletConnectorNetwork } = usePromise(() => walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.getNetwork(), {
|
|
56
56
|
deps: [walletConnector, connectedWallets],
|
|
57
57
|
});
|
|
58
|
-
const finishConnectAndSign = useConnectAndSign(
|
|
58
|
+
const finishConnectAndSign = useConnectAndSign({
|
|
59
|
+
shouldUpdateWallets: !isFullyConnected,
|
|
60
|
+
});
|
|
59
61
|
// Finishes auth flow when wallet switches to proper network
|
|
60
62
|
useEffect(() => {
|
|
61
63
|
if (isSupportedNetwork({ network: walletConnectorNetwork, walletConnector })) {
|
|
62
64
|
finishConnectAndSign({
|
|
63
65
|
walletConnector: walletConnector,
|
|
64
66
|
});
|
|
67
|
+
// there are two scenarios here, one in not connected state and the other one in connected state.
|
|
68
|
+
// previously we were calling setShowAuthFlow(false) in useHandleWalletsToConnect.
|
|
69
|
+
// now, we don't call it in network-not-supported view, so we need to handle that scenario and close modal here
|
|
70
|
+
// this should be gone, once we're done with the useConnectAndSign hook refactor.
|
|
71
|
+
// TODO: https://linear.app/dynamic-labs/issue/QNTM-117/break-useconnectandsign-hook-to-small-parts
|
|
72
|
+
if (isFullyConnected) {
|
|
73
|
+
setShowAuthFlow(false);
|
|
74
|
+
}
|
|
65
75
|
}
|
|
66
|
-
}, [walletConnectorNetwork]);
|
|
76
|
+
}, [walletConnectorNetwork, setShowAuthFlow, isFullyConnected]);
|
|
67
77
|
// Updates the contexts 'network' based on the selected wallet connector.
|
|
68
78
|
// It helps ensure that the 'network' is always in sync with the wallet's actual network,
|
|
69
79
|
// Prevents 'network' from being 'undefined'.
|