@dynamic-labs/sdk-react-core 0.19.0-alpha.25 → 0.19.0-alpha.26

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 (30) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +8 -8
  5. package/src/lib/components/SocialSignIn/SocialSignIn.cjs +8 -3
  6. package/src/lib/components/SocialSignIn/SocialSignIn.js +8 -3
  7. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.cjs +8 -8
  8. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.js +8 -8
  9. package/src/lib/shared/utils/hooks/useOnClickOutside/index.cjs +2 -2
  10. package/src/lib/shared/utils/hooks/useOnClickOutside/index.js +2 -2
  11. package/src/lib/utils/functions/getUserWalletsFromVerifiedCredentials/getUserWalletsFromVerifiedCredentials.cjs +26 -0
  12. package/src/lib/utils/functions/getUserWalletsFromVerifiedCredentials/getUserWalletsFromVerifiedCredentials.d.ts +1 -0
  13. package/src/lib/utils/functions/getUserWalletsFromVerifiedCredentials/getUserWalletsFromVerifiedCredentials.js +22 -0
  14. package/src/lib/utils/functions/getUserWalletsFromVerifiedCredentials/index.d.ts +1 -0
  15. package/src/lib/utils/functions/index.d.ts +1 -0
  16. package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.cjs +2 -5
  17. package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.js +2 -5
  18. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +12 -6
  19. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +12 -6
  20. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +3 -8
  21. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +3 -8
  22. package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.cjs +2 -4
  23. package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.js +2 -4
  24. package/src/lib/views/LoginView/useLoginView.cjs +31 -17
  25. package/src/lib/views/LoginView/useLoginView.js +32 -18
  26. package/src/lib/utils/hooks/useWalletEventListeners/utils/index.d.ts +0 -1
  27. package/src/lib/utils/hooks/useWalletEventListeners/utils/sortAccountsByPrimaryWallet/index.d.ts +0 -1
  28. package/src/lib/utils/hooks/useWalletEventListeners/utils/sortAccountsByPrimaryWallet/sortAccountsByPrimaryWallet.cjs +0 -9
  29. package/src/lib/utils/hooks/useWalletEventListeners/utils/sortAccountsByPrimaryWallet/sortAccountsByPrimaryWallet.d.ts +0 -2
  30. package/src/lib/utils/hooks/useWalletEventListeners/utils/sortAccountsByPrimaryWallet/sortAccountsByPrimaryWallet.js +0 -5
package/CHANGELOG.md CHANGED
@@ -1,4 +1,19 @@
1
1
 
2
+ ## [0.19.0-alpha.26](https://github.com/dynamic-labs/DynamicAuth/compare/v0.19.0-alpha.25...v0.19.0-alpha.26) (2023-10-25)
3
+
4
+
5
+ ### Features
6
+
7
+ * allow filtering social providers for Dynamic Social with socialProvidersFilter ([#3707](https://github.com/dynamic-labs/DynamicAuth/issues/3707)) ([e4c16f3](https://github.com/dynamic-labs/DynamicAuth/commit/e4c16f359946e278a372cb8153242946d4887dcc))
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * only create embedded wallet if user have no wallet ([#3715](https://github.com/dynamic-labs/DynamicAuth/issues/3715)) ([728e01a](https://github.com/dynamic-labs/DynamicAuth/commit/728e01ab8b5931eaa6fb7877c23847ac85947f52))
13
+ * Revert "fix(use-wallet-event-listener): handle switching wallet … ([#3699](https://github.com/dynamic-labs/DynamicAuth/issues/3699)) ([9b94737](https://github.com/dynamic-labs/DynamicAuth/commit/9b94737ecfa72cd047964254d806403b342433a1)), closes [#3626](https://github.com/dynamic-labs/DynamicAuth/issues/3626)
14
+ * undefined network edge case ([#3667](https://github.com/dynamic-labs/DynamicAuth/issues/3667)) ([12d4236](https://github.com/dynamic-labs/DynamicAuth/commit/12d42363f69b1dfd5babe05142bd03c501f62e5f))
15
+ * **useOnClickOutside:** prevent opening element on click while already open ([#3714](https://github.com/dynamic-labs/DynamicAuth/issues/3714)) ([1999dc5](https://github.com/dynamic-labs/DynamicAuth/commit/1999dc50b6e82eb5ee8d0919118e9dfbc39c2b67))
16
+
2
17
  ## [0.19.0-alpha.25](https://github.com/dynamic-labs/DynamicAuth/compare/v0.19.0-alpha.24...v0.19.0-alpha.25) (2023-10-25)
3
18
 
4
19
 
package/package.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var version = "0.19.0-alpha.25";
5
+ var version = "0.19.0-alpha.26";
6
6
  var dependencies = {
7
7
  "@dynamic-labs/iconic": "0.1.34",
8
8
  "@dynamic-labs/sdk-api": "0.0.291",
package/package.js CHANGED
@@ -1,4 +1,4 @@
1
- var version = "0.19.0-alpha.25";
1
+ var version = "0.19.0-alpha.26";
2
2
  var dependencies = {
3
3
  "@dynamic-labs/iconic": "0.1.34",
4
4
  "@dynamic-labs/sdk-api": "0.0.291",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/sdk-react-core",
3
- "version": "0.19.0-alpha.25",
3
+ "version": "0.19.0-alpha.26",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/dynamic-labs/DynamicAuth.git",
@@ -17,13 +17,13 @@
17
17
  "react-focus-lock": "2.9.2",
18
18
  "react-i18next": "^13.2.0",
19
19
  "yup": "0.32.11",
20
- "@dynamic-labs/logger": "0.19.0-alpha.25",
21
- "@dynamic-labs/multi-wallet": "0.19.0-alpha.25",
22
- "@dynamic-labs/rpc-providers": "0.19.0-alpha.25",
23
- "@dynamic-labs/types": "0.19.0-alpha.25",
24
- "@dynamic-labs/utils": "0.19.0-alpha.25",
25
- "@dynamic-labs/wallet-book": "0.19.0-alpha.25",
26
- "@dynamic-labs/wallet-connector-core": "0.19.0-alpha.25",
20
+ "@dynamic-labs/logger": "0.19.0-alpha.26",
21
+ "@dynamic-labs/multi-wallet": "0.19.0-alpha.26",
22
+ "@dynamic-labs/rpc-providers": "0.19.0-alpha.26",
23
+ "@dynamic-labs/types": "0.19.0-alpha.26",
24
+ "@dynamic-labs/utils": "0.19.0-alpha.26",
25
+ "@dynamic-labs/wallet-book": "0.19.0-alpha.26",
26
+ "@dynamic-labs/wallet-connector-core": "0.19.0-alpha.26",
27
27
  "eventemitter3": "5.0.1"
28
28
  },
29
29
  "devDependencies": {
@@ -73,13 +73,18 @@ const SocialSignIn = ({ providers, onSelectProvider, isLoading, selectedProvider
73
73
  const [showCard, setShowCard] = React.useState(false);
74
74
  const closeCard = () => !isLoading && setShowCard(false);
75
75
  const numberOfEnabledSocialProviders = providers.length;
76
- if (numberOfEnabledSocialProviders === 1) {
76
+ // Set default provider as the first available provider if
77
+ if (
78
+ // Default provider isn't within the providers
79
+ (defaultProvider && !providers.includes(defaultProvider)) ||
80
+ // Or there's only one provider
81
+ numberOfEnabledSocialProviders === 1) {
77
82
  // set first and only item in providers list as default provider
78
83
  [defaultProvider] = providers;
79
84
  }
80
85
  else {
81
- // put default provider at the beggini of the list
82
- providers.sort((p1, p2) => (p1 === defaultProvider ? -1 : 0));
86
+ // put default provider at the beginning of the list
87
+ providers.sort((p1) => (p1 === defaultProvider ? -1 : 0));
83
88
  }
84
89
  const defaultProviderOffset = defaultProvider ? 1 : 0;
85
90
  // display number of items set in prop, with a max limit of MAX_INLINE_ITEMS
@@ -69,13 +69,18 @@ const SocialSignIn = ({ providers, onSelectProvider, isLoading, selectedProvider
69
69
  const [showCard, setShowCard] = useState(false);
70
70
  const closeCard = () => !isLoading && setShowCard(false);
71
71
  const numberOfEnabledSocialProviders = providers.length;
72
- if (numberOfEnabledSocialProviders === 1) {
72
+ // Set default provider as the first available provider if
73
+ if (
74
+ // Default provider isn't within the providers
75
+ (defaultProvider && !providers.includes(defaultProvider)) ||
76
+ // Or there's only one provider
77
+ numberOfEnabledSocialProviders === 1) {
73
78
  // set first and only item in providers list as default provider
74
79
  [defaultProvider] = providers;
75
80
  }
76
81
  else {
77
- // put default provider at the beggini of the list
78
- providers.sort((p1, p2) => (p1 === defaultProvider ? -1 : 0));
82
+ // put default provider at the beginning of the list
83
+ providers.sort((p1) => (p1 === defaultProvider ? -1 : 0));
79
84
  }
80
85
  const defaultProviderOffset = defaultProvider ? 1 : 0;
81
86
  // display number of items set in prop, with a max limit of MAX_INLINE_ITEMS
@@ -6,24 +6,24 @@ var _tslib = require('../../../../_virtual/_tslib.cjs');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
  var React = require('react');
8
8
  var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
9
- var useInternalDynamicContext = require('../DynamicContext/useInternalDynamicContext.cjs');
10
- var ViewContext = require('../ViewContext/ViewContext.cjs');
11
- require('@dynamic-labs/utils');
12
9
  require('@dynamic-labs/sdk-api');
13
- require('../../config/ApiEndpoint.cjs');
14
10
  var logger = require('../../shared/logger.cjs');
15
11
  require('@dynamic-labs/iconic');
12
+ var ViewContext = require('../ViewContext/ViewContext.cjs');
16
13
  require('@dynamic-labs/wallet-book');
14
+ require('@dynamic-labs/utils');
17
15
  require('../../utils/constants/colors.cjs');
18
16
  require('../../shared/utils/classes/storage/localStorage.cjs');
19
17
  require('viem');
20
18
  require('../../shared/consts/index.cjs');
21
19
  require('@dynamic-labs/multi-wallet');
20
+ var getReferencedAccount = require('../../utils/functions/getReferencedAccount/getReferencedAccount.cjs');
21
+ require('../../config/ApiEndpoint.cjs');
22
22
  require('@dynamic-labs/rpc-providers');
23
23
  require('../../utils/hooks/useWallets/utils/verifyMagicIsSetup/verifyMagicIsSetup.cjs');
24
- var getReferencedAccount = require('../../utils/functions/getReferencedAccount/getReferencedAccount.cjs');
25
24
  var useVerifyWallet = require('../../utils/hooks/useVerifyWallet/useVerifyWallet.cjs');
26
25
  require('react-dom');
26
+ var useInternalDynamicContext = require('../DynamicContext/useInternalDynamicContext.cjs');
27
27
  require('../../components/ShadowDOM/ShadowDOM.cjs');
28
28
  require('../ThemeContext/ThemeContext.cjs');
29
29
  require('react-focus-lock');
@@ -62,7 +62,7 @@ require('../UserFieldEditorContext/UserFieldEditorContext.cjs');
62
62
  const SocialRedirectContext = React.createContext(undefined);
63
63
  const SocialRedirectContextProvider = ({ children, }) => {
64
64
  var _a, _b, _c, _d;
65
- const { setShowAuthFlow, wallets, setSelectedWalletConnector, walletUiUtils, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, setShowDynamicUserProfile, isAuthenticated, setPrimaryWalletId, secondaryWallets, sdkHasLoaded, authToken, connectWallet, primaryWallet, } = useInternalDynamicContext.useInternalDynamicContext();
65
+ const { setShowAuthFlow, wallets, setSelectedWalletConnector, walletUiUtils, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, setShowDynamicUserProfile, isAuthenticated, setPrimaryWalletId, secondaryWallets, sdkHasLoaded, authToken, connectWallet, primaryWallet, socialProvidersFilter = (providers) => providers, } = useInternalDynamicContext.useInternalDynamicContext();
66
66
  const { setErrorMessage } = ErrorContext.useErrorContext();
67
67
  const { setView } = ViewContext.useViewContext();
68
68
  const verifyWallet = useVerifyWallet.useVerifyWallet({
@@ -74,9 +74,9 @@ const SocialRedirectContextProvider = ({ children, }) => {
74
74
  });
75
75
  const signInProvider = (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.socialSignIn) === null || _a === void 0 ? void 0 : _a.signInProvider;
76
76
  const enabledSocialProvidersInDb = (_c = (_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.socialSignIn) === null || _b === void 0 ? void 0 : _b.providers) !== null && _c !== void 0 ? _c : [];
77
- const enabledSocialProviders = (_d = enabledSocialProvidersInDb
77
+ const enabledSocialProviders = (_d = socialProvidersFilter(enabledSocialProvidersInDb
78
78
  .filter((provider) => provider.enabled)
79
- .map((provider) => provider.provider)) !== null && _d !== void 0 ? _d : [];
79
+ .map((provider) => provider.provider))) !== null && _d !== void 0 ? _d : [];
80
80
  const socialWalletConnector = wallets
81
81
  .map(({ walletConnector }) => walletConnector)
82
82
  .find(walletConnectorCore.isSocialWalletConnector);
@@ -2,24 +2,24 @@ import { __awaiter } from '../../../../_virtual/_tslib.js';
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
  import { createContext, useState, useMemo, useCallback, useEffect, useContext } from 'react';
4
4
  import { isSocialWalletConnector } from '@dynamic-labs/wallet-connector-core';
5
- import { useInternalDynamicContext } from '../DynamicContext/useInternalDynamicContext.js';
6
- import { useViewContext } from '../ViewContext/ViewContext.js';
7
- import '@dynamic-labs/utils';
8
5
  import '@dynamic-labs/sdk-api';
9
- import '../../config/ApiEndpoint.js';
10
6
  import { logger } from '../../shared/logger.js';
11
7
  import '@dynamic-labs/iconic';
8
+ import { useViewContext } from '../ViewContext/ViewContext.js';
12
9
  import '@dynamic-labs/wallet-book';
10
+ import '@dynamic-labs/utils';
13
11
  import '../../utils/constants/colors.js';
14
12
  import '../../shared/utils/classes/storage/localStorage.js';
15
13
  import 'viem';
16
14
  import '../../shared/consts/index.js';
17
15
  import '@dynamic-labs/multi-wallet';
16
+ import { getReferencedAccount } from '../../utils/functions/getReferencedAccount/getReferencedAccount.js';
17
+ import '../../config/ApiEndpoint.js';
18
18
  import '@dynamic-labs/rpc-providers';
19
19
  import '../../utils/hooks/useWallets/utils/verifyMagicIsSetup/verifyMagicIsSetup.js';
20
- import { getReferencedAccount } from '../../utils/functions/getReferencedAccount/getReferencedAccount.js';
21
20
  import { useVerifyWallet } from '../../utils/hooks/useVerifyWallet/useVerifyWallet.js';
22
21
  import 'react-dom';
22
+ import { useInternalDynamicContext } from '../DynamicContext/useInternalDynamicContext.js';
23
23
  import '../../components/ShadowDOM/ShadowDOM.js';
24
24
  import '../ThemeContext/ThemeContext.js';
25
25
  import 'react-focus-lock';
@@ -58,7 +58,7 @@ import '../UserFieldEditorContext/UserFieldEditorContext.js';
58
58
  const SocialRedirectContext = createContext(undefined);
59
59
  const SocialRedirectContextProvider = ({ children, }) => {
60
60
  var _a, _b, _c, _d;
61
- const { setShowAuthFlow, wallets, setSelectedWalletConnector, walletUiUtils, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, setShowDynamicUserProfile, isAuthenticated, setPrimaryWalletId, secondaryWallets, sdkHasLoaded, authToken, connectWallet, primaryWallet, } = useInternalDynamicContext();
61
+ const { setShowAuthFlow, wallets, setSelectedWalletConnector, walletUiUtils, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, setShowDynamicUserProfile, isAuthenticated, setPrimaryWalletId, secondaryWallets, sdkHasLoaded, authToken, connectWallet, primaryWallet, socialProvidersFilter = (providers) => providers, } = useInternalDynamicContext();
62
62
  const { setErrorMessage } = useErrorContext();
63
63
  const { setView } = useViewContext();
64
64
  const verifyWallet = useVerifyWallet({
@@ -70,9 +70,9 @@ const SocialRedirectContextProvider = ({ children, }) => {
70
70
  });
71
71
  const signInProvider = (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.socialSignIn) === null || _a === void 0 ? void 0 : _a.signInProvider;
72
72
  const enabledSocialProvidersInDb = (_c = (_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.socialSignIn) === null || _b === void 0 ? void 0 : _b.providers) !== null && _c !== void 0 ? _c : [];
73
- const enabledSocialProviders = (_d = enabledSocialProvidersInDb
73
+ const enabledSocialProviders = (_d = socialProvidersFilter(enabledSocialProvidersInDb
74
74
  .filter((provider) => provider.enabled)
75
- .map((provider) => provider.provider)) !== null && _d !== void 0 ? _d : [];
75
+ .map((provider) => provider.provider))) !== null && _d !== void 0 ? _d : [];
76
76
  const socialWalletConnector = wallets
77
77
  .map(({ walletConnector }) => walletConnector)
78
78
  .find(isSocialWalletConnector);
@@ -16,11 +16,11 @@ const useOnClickOutside = (ref, handler) => {
16
16
  }
17
17
  handler(event);
18
18
  };
19
- document.addEventListener('mousedown', listener);
20
19
  document.addEventListener('touchstart', listener);
20
+ document.addEventListener('click', listener);
21
21
  return () => {
22
- document.removeEventListener('mousedown', listener);
23
22
  document.removeEventListener('touchstart', listener);
23
+ document.removeEventListener('click', listener);
24
24
  };
25
25
  }, [ref, handler]);
26
26
  };
@@ -12,11 +12,11 @@ const useOnClickOutside = (ref, handler) => {
12
12
  }
13
13
  handler(event);
14
14
  };
15
- document.addEventListener('mousedown', listener);
16
15
  document.addEventListener('touchstart', listener);
16
+ document.addEventListener('click', listener);
17
17
  return () => {
18
- document.removeEventListener('mousedown', listener);
19
18
  document.removeEventListener('touchstart', listener);
19
+ document.removeEventListener('click', listener);
20
20
  };
21
21
  }, [ref, handler]);
22
22
  };
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var decodeJwt = require('../../../shared/utils/functions/decodeJwt/decodeJwt.cjs');
6
+ require('@dynamic-labs/iconic');
7
+ require('@dynamic-labs/wallet-connector-core');
8
+ require('react/jsx-runtime');
9
+ require('../../../context/ViewContext/ViewContext.cjs');
10
+ require('react');
11
+ require('../../../shared/logger.cjs');
12
+ require('@dynamic-labs/wallet-book');
13
+ require('@dynamic-labs/utils');
14
+ require('../../constants/colors.cjs');
15
+ require('../../../shared/utils/classes/storage/localStorage.cjs');
16
+ require('viem');
17
+ require('../../../shared/consts/index.cjs');
18
+
19
+ // verifies if user has any type of wallet
20
+ const getUserWalletsFromVerifiedCredentials = (jwt) => {
21
+ var _a;
22
+ const decodedJwt = decodeJwt.decodeJwt(jwt);
23
+ return (_a = decodedJwt === null || decodedJwt === void 0 ? void 0 : decodedJwt.verifiedCredentials) === null || _a === void 0 ? void 0 : _a.filter(({ walletProvider }) => walletProvider);
24
+ };
25
+
26
+ exports.getUserWalletsFromVerifiedCredentials = getUserWalletsFromVerifiedCredentials;
@@ -0,0 +1 @@
1
+ export declare const getUserWalletsFromVerifiedCredentials: (jwt: string) => import("@dynamic-labs/sdk-api").JwtVerifiedCredential[] | undefined;
@@ -0,0 +1,22 @@
1
+ import { decodeJwt } from '../../../shared/utils/functions/decodeJwt/decodeJwt.js';
2
+ import '@dynamic-labs/iconic';
3
+ import '@dynamic-labs/wallet-connector-core';
4
+ import 'react/jsx-runtime';
5
+ import '../../../context/ViewContext/ViewContext.js';
6
+ import 'react';
7
+ import '../../../shared/logger.js';
8
+ import '@dynamic-labs/wallet-book';
9
+ import '@dynamic-labs/utils';
10
+ import '../../constants/colors.js';
11
+ import '../../../shared/utils/classes/storage/localStorage.js';
12
+ import 'viem';
13
+ import '../../../shared/consts/index.js';
14
+
15
+ // verifies if user has any type of wallet
16
+ const getUserWalletsFromVerifiedCredentials = (jwt) => {
17
+ var _a;
18
+ const decodedJwt = decodeJwt(jwt);
19
+ return (_a = decodedJwt === null || decodedJwt === void 0 ? void 0 : decodedJwt.verifiedCredentials) === null || _a === void 0 ? void 0 : _a.filter(({ walletProvider }) => walletProvider);
20
+ };
21
+
22
+ export { getUserWalletsFromVerifiedCredentials };
@@ -0,0 +1 @@
1
+ export { getUserWalletsFromVerifiedCredentials } from './getUserWalletsFromVerifiedCredentials';
@@ -42,3 +42,4 @@ export * from './findTurnkeyWallet';
42
42
  export * from './isTestnet';
43
43
  export * from './getOrdinalNumber';
44
44
  export * from './getProviderByType';
45
+ export * from './getUserWalletsFromVerifiedCredentials';
@@ -9,10 +9,9 @@ var isWalletLinked = require('../../../functions/isWalletLinked/isWalletLinked.c
9
9
  var ViewContext = require('../../../../context/ViewContext/ViewContext.cjs');
10
10
  var useInternalDynamicContext = require('../../../../context/DynamicContext/useInternalDynamicContext.cjs');
11
11
  var errors = require('../../../constants/errors.cjs');
12
- var sortAccountsByPrimaryWallet = require('../../useWalletEventListeners/utils/sortAccountsByPrimaryWallet/sortAccountsByPrimaryWallet.cjs');
13
12
 
14
13
  const useSyncPrimaryWallet = (canSync = true) => {
15
- const { setShowAuthFlow, isAuthenticated, authMode, computeConnectedStateForWallets, connectWallet, handleLogOut, multiWalletWidgetState, primaryWallet, secondaryWallets, setMultiWalletWidgetState, setPrimaryWallet, setShowWidgetStatePopup, showLockedWalletView, showWidgetStatePopup, multiWallet, } = useInternalDynamicContext.useInternalDynamicContext();
14
+ const { setShowAuthFlow, isAuthenticated, authMode, computeConnectedStateForWallets, connectWallet, handleLogOut, multiWalletWidgetState, primaryWallet, secondaryWallets, setMultiWalletWidgetState, setPrimaryWallet, setShowWidgetStatePopup, showLockedWalletView, showWidgetStatePopup, } = useInternalDynamicContext.useInternalDynamicContext();
16
15
  const { setView } = ViewContext.useViewContext();
17
16
  const handlePrimaryWalletNotActive = React.useCallback((connectedAddress) => {
18
17
  if (!primaryWallet)
@@ -76,9 +75,7 @@ const useSyncPrimaryWallet = (canSync = true) => {
76
75
  primaryWallet.connector
77
76
  .getConnectedAccounts()
78
77
  .then((accounts) => {
79
- const [connectedAddress] = multiWallet
80
- ? accounts
81
- : sortAccountsByPrimaryWallet.sortAccountsByPrimaryWallet(accounts, primaryWallet);
78
+ const [connectedAddress] = accounts;
82
79
  if (!connectedAddress) {
83
80
  throw new utils.DynamicError('Missing wallet address', errors.MISSING_ADDRESS_ERROR);
84
81
  }
@@ -5,10 +5,9 @@ import { isWalletLinked } from '../../../functions/isWalletLinked/isWalletLinked
5
5
  import { useViewContext } from '../../../../context/ViewContext/ViewContext.js';
6
6
  import { useInternalDynamicContext } from '../../../../context/DynamicContext/useInternalDynamicContext.js';
7
7
  import { MISSING_ADDRESS_ERROR } from '../../../constants/errors.js';
8
- import { sortAccountsByPrimaryWallet } from '../../useWalletEventListeners/utils/sortAccountsByPrimaryWallet/sortAccountsByPrimaryWallet.js';
9
8
 
10
9
  const useSyncPrimaryWallet = (canSync = true) => {
11
- const { setShowAuthFlow, isAuthenticated, authMode, computeConnectedStateForWallets, connectWallet, handleLogOut, multiWalletWidgetState, primaryWallet, secondaryWallets, setMultiWalletWidgetState, setPrimaryWallet, setShowWidgetStatePopup, showLockedWalletView, showWidgetStatePopup, multiWallet, } = useInternalDynamicContext();
10
+ const { setShowAuthFlow, isAuthenticated, authMode, computeConnectedStateForWallets, connectWallet, handleLogOut, multiWalletWidgetState, primaryWallet, secondaryWallets, setMultiWalletWidgetState, setPrimaryWallet, setShowWidgetStatePopup, showLockedWalletView, showWidgetStatePopup, } = useInternalDynamicContext();
12
11
  const { setView } = useViewContext();
13
12
  const handlePrimaryWalletNotActive = useCallback((connectedAddress) => {
14
13
  if (!primaryWallet)
@@ -72,9 +71,7 @@ const useSyncPrimaryWallet = (canSync = true) => {
72
71
  primaryWallet.connector
73
72
  .getConnectedAccounts()
74
73
  .then((accounts) => {
75
- const [connectedAddress] = multiWallet
76
- ? accounts
77
- : sortAccountsByPrimaryWallet(accounts, primaryWallet);
74
+ const [connectedAddress] = accounts;
78
75
  if (!connectedAddress) {
79
76
  throw new DynamicError('Missing wallet address', MISSING_ADDRESS_ERROR);
80
77
  }
@@ -24,10 +24,11 @@ var isTurnkeyEnabled = require('../../functions/isTurnkeyEnabled/isTurnkeyEnable
24
24
  var isEmbeddedWalletPresent = require('../../functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.cjs');
25
25
  var findEmbeddedWalletFromVerifiedCredentials = require('../../functions/findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.cjs');
26
26
  var findTurnkeyWallet = require('../../functions/findTurnkeyWallet/findTurnkeyWallet.cjs');
27
+ var getUserWalletsFromVerifiedCredentials = require('../../functions/getUserWalletsFromVerifiedCredentials/getUserWalletsFromVerifiedCredentials.cjs');
27
28
 
28
29
  // Hook exposed to customers and used internally to trigger embedded wallet creation
29
30
  const useEmbeddedWallet = () => {
30
- const { projectSettings, onboardingOnlyJwt, setPrimaryWalletId, wallets, internalSetShowAuthFlow, internalEvents, } = useInternalDynamicContext.useInternalDynamicContext();
31
+ const { projectSettings, onboardingOnlyJwt, setPrimaryWalletId, wallets, internalSetShowAuthFlow, internalEvents, primaryWallet, } = useInternalDynamicContext.useInternalDynamicContext();
31
32
  const { setView } = ViewContext.useViewContext();
32
33
  const userHasEmbeddedWallet = () => {
33
34
  var _a;
@@ -46,9 +47,9 @@ const useEmbeddedWallet = () => {
46
47
  if (!isTurnkeyEnabled.isTurnkeyEnabled(projectSettings)) {
47
48
  throw new Error('Passkey embedded wallet is not enabled');
48
49
  }
49
- const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt);
50
- // if user doesn't have an embedded wallet, show the passkey view to create wallet
51
- if (!embeddedWalletVerifiedCredential) {
50
+ const userWaletsCredentials = getUserWalletsFromVerifiedCredentials.getUserWalletsFromVerifiedCredentials(jwt);
51
+ // if user doesn't have a wallet yet, show the passkey view to create an embedded wallet
52
+ if (!(userWaletsCredentials === null || userWaletsCredentials === void 0 ? void 0 : userWaletsCredentials.length)) {
52
53
  internalSetShowAuthFlow(true);
53
54
  setView('passkey-intro');
54
55
  return new Promise((resolve, reject) => {
@@ -56,14 +57,19 @@ const useEmbeddedWallet = () => {
56
57
  internalEvents.current.once('embeddedWalletFailed', (error) => reject(error));
57
58
  });
58
59
  }
59
- const decodedJwt = decodeJwt.decodeJwt(jwt);
60
+ internalSetShowAuthFlow(false);
61
+ const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt);
60
62
  const turnkeyWallet = findTurnkeyWallet.findTurnkeyWallet(wallets);
63
+ // if user logged in with MM for example, just continue the flow
64
+ if (!embeddedWalletVerifiedCredential) {
65
+ return Promise.resolve(primaryWallet);
66
+ }
67
+ const decodedJwt = decodeJwt.decodeJwt(jwt);
61
68
  // if user already has embedded wallet, set it as primary wallet
62
69
  if (decodedJwt) {
63
70
  (_b = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _b === void 0 ? void 0 : _b.setVerifiedCredentials(decodedJwt.verifiedCredentials);
64
71
  setPrimaryWalletId(embeddedWalletVerifiedCredential.id);
65
72
  }
66
- internalSetShowAuthFlow(false);
67
73
  const passkeyWallet = {
68
74
  address: (yield ((_c = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _c === void 0 ? void 0 : _c.fetchPublicAddress())) || '',
69
75
  chain: ((_d = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _d === void 0 ? void 0 : _d.connectedChain) || '',
@@ -20,10 +20,11 @@ import { isTurnkeyEnabled } from '../../functions/isTurnkeyEnabled/isTurnkeyEnab
20
20
  import { isEmbeddedWalletPresent } from '../../functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.js';
21
21
  import { findEmbeddedWalletFromVerifiedCredentials } from '../../functions/findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.js';
22
22
  import { findTurnkeyWallet } from '../../functions/findTurnkeyWallet/findTurnkeyWallet.js';
23
+ import { getUserWalletsFromVerifiedCredentials } from '../../functions/getUserWalletsFromVerifiedCredentials/getUserWalletsFromVerifiedCredentials.js';
23
24
 
24
25
  // Hook exposed to customers and used internally to trigger embedded wallet creation
25
26
  const useEmbeddedWallet = () => {
26
- const { projectSettings, onboardingOnlyJwt, setPrimaryWalletId, wallets, internalSetShowAuthFlow, internalEvents, } = useInternalDynamicContext();
27
+ const { projectSettings, onboardingOnlyJwt, setPrimaryWalletId, wallets, internalSetShowAuthFlow, internalEvents, primaryWallet, } = useInternalDynamicContext();
27
28
  const { setView } = useViewContext();
28
29
  const userHasEmbeddedWallet = () => {
29
30
  var _a;
@@ -42,9 +43,9 @@ const useEmbeddedWallet = () => {
42
43
  if (!isTurnkeyEnabled(projectSettings)) {
43
44
  throw new Error('Passkey embedded wallet is not enabled');
44
45
  }
45
- const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt);
46
- // if user doesn't have an embedded wallet, show the passkey view to create wallet
47
- if (!embeddedWalletVerifiedCredential) {
46
+ const userWaletsCredentials = getUserWalletsFromVerifiedCredentials(jwt);
47
+ // if user doesn't have a wallet yet, show the passkey view to create an embedded wallet
48
+ if (!(userWaletsCredentials === null || userWaletsCredentials === void 0 ? void 0 : userWaletsCredentials.length)) {
48
49
  internalSetShowAuthFlow(true);
49
50
  setView('passkey-intro');
50
51
  return new Promise((resolve, reject) => {
@@ -52,14 +53,19 @@ const useEmbeddedWallet = () => {
52
53
  internalEvents.current.once('embeddedWalletFailed', (error) => reject(error));
53
54
  });
54
55
  }
55
- const decodedJwt = decodeJwt(jwt);
56
+ internalSetShowAuthFlow(false);
57
+ const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt);
56
58
  const turnkeyWallet = findTurnkeyWallet(wallets);
59
+ // if user logged in with MM for example, just continue the flow
60
+ if (!embeddedWalletVerifiedCredential) {
61
+ return Promise.resolve(primaryWallet);
62
+ }
63
+ const decodedJwt = decodeJwt(jwt);
57
64
  // if user already has embedded wallet, set it as primary wallet
58
65
  if (decodedJwt) {
59
66
  (_b = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _b === void 0 ? void 0 : _b.setVerifiedCredentials(decodedJwt.verifiedCredentials);
60
67
  setPrimaryWalletId(embeddedWalletVerifiedCredential.id);
61
68
  }
62
- internalSetShowAuthFlow(false);
63
69
  const passkeyWallet = {
64
70
  address: (yield ((_c = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _c === void 0 ? void 0 : _c.fetchPublicAddress())) || '',
65
71
  chain: ((_d = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _d === void 0 ? void 0 : _d.connectedChain) || '',
@@ -17,7 +17,6 @@ require('../../../shared/utils/classes/storage/localStorage.cjs');
17
17
  require('viem');
18
18
  require('../../../shared/consts/index.cjs');
19
19
  var useWalletConnectorEvent = require('../useWalletConnectorEvent/useWalletConnectorEvent.cjs');
20
- var sortAccountsByPrimaryWallet = require('./utils/sortAccountsByPrimaryWallet/sortAccountsByPrimaryWallet.cjs');
21
20
 
22
21
  const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnector, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
23
22
  const [loadingNetwork, setLoadingNetwork] = React.useState(true);
@@ -25,7 +24,7 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
25
24
  React.useEffect(() => {
26
25
  const fetchNetwork = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
27
26
  try {
28
- if (!primaryWallet)
27
+ if (!(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector))
29
28
  return;
30
29
  const network = yield primaryWallet.connector.getNetwork();
31
30
  setNetwork(network);
@@ -39,7 +38,7 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
39
38
  }
40
39
  });
41
40
  fetchNetwork();
42
- }, [primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.id]);
41
+ }, [primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector]);
43
42
  useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'disconnect', () => {
44
43
  logger.logger.debug('primary wallet disconnect');
45
44
  handleLogOut();
@@ -65,11 +64,7 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
65
64
  // change the api here
66
65
  if (!primaryWallet)
67
66
  return;
68
- // Sorts the accounts so that the primary wallet is always first
69
- // when multiWallet is disabled to ensure we find the primary address
70
- const [newAddress] = multiWallet
71
- ? accounts
72
- : sortAccountsByPrimaryWallet.sortAccountsByPrimaryWallet(accounts, primaryWallet);
67
+ const [newAddress] = accounts;
73
68
  const newWallet = secondaryWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, newAddress, wallet.chain));
74
69
  if (authMode === 'connect-only') {
75
70
  refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
@@ -13,7 +13,6 @@ import '../../../shared/utils/classes/storage/localStorage.js';
13
13
  import 'viem';
14
14
  import '../../../shared/consts/index.js';
15
15
  import { useWalletConnectorEvent } from '../useWalletConnectorEvent/useWalletConnectorEvent.js';
16
- import { sortAccountsByPrimaryWallet } from './utils/sortAccountsByPrimaryWallet/sortAccountsByPrimaryWallet.js';
17
16
 
18
17
  const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnector, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
19
18
  const [loadingNetwork, setLoadingNetwork] = useState(true);
@@ -21,7 +20,7 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
21
20
  useEffect(() => {
22
21
  const fetchNetwork = () => __awaiter(void 0, void 0, void 0, function* () {
23
22
  try {
24
- if (!primaryWallet)
23
+ if (!(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector))
25
24
  return;
26
25
  const network = yield primaryWallet.connector.getNetwork();
27
26
  setNetwork(network);
@@ -35,7 +34,7 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
35
34
  }
36
35
  });
37
36
  fetchNetwork();
38
- }, [primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.id]);
37
+ }, [primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector]);
39
38
  useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'disconnect', () => {
40
39
  logger.debug('primary wallet disconnect');
41
40
  handleLogOut();
@@ -61,11 +60,7 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
61
60
  // change the api here
62
61
  if (!primaryWallet)
63
62
  return;
64
- // Sorts the accounts so that the primary wallet is always first
65
- // when multiWallet is disabled to ensure we find the primary address
66
- const [newAddress] = multiWallet
67
- ? accounts
68
- : sortAccountsByPrimaryWallet(accounts, primaryWallet);
63
+ const [newAddress] = accounts;
69
64
  const newWallet = secondaryWallets.find((wallet) => isSameAddress(wallet.address, newAddress, wallet.chain));
70
65
  if (authMode === 'connect-only') {
71
66
  refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
@@ -16,7 +16,7 @@ require('../../../../../utils/constants/colors.cjs');
16
16
  require('../../../../../shared/utils/classes/storage/localStorage.cjs');
17
17
  require('viem');
18
18
  require('../../../../../shared/consts/index.cjs');
19
- var useInternalDynamicContext = require('../../../../../context/DynamicContext/useInternalDynamicContext.cjs');
19
+ require('../../../../../context/DynamicContext/DynamicContext.cjs');
20
20
  require('@dynamic-labs/multi-wallet');
21
21
  require('../../../../../components/ShadowDOM/ShadowDOM.cjs');
22
22
  require('../../../../../context/ThemeContext/ThemeContext.cjs');
@@ -61,15 +61,13 @@ var SocialSignIn = require('../../../../../components/SocialSignIn/SocialSignIn.
61
61
  var SocialRedirectContext = require('../../../../../context/SocialRedirectContext/SocialRedirectContext.cjs');
62
62
 
63
63
  const MagicSocialSignIn = ({ defaultProvider, numOfItemsToDisplay, collapsedLayout, }) => {
64
- const { socialProvidersFilter = (providers) => providers } = useInternalDynamicContext.useInternalDynamicContext();
65
64
  const { socialProvider, setSocialProvider, socialWalletConnector, enabledSocialProviders, } = SocialRedirectContext.useSocialRedirectContext();
66
- const socialProviders = socialProvidersFilter(enabledSocialProviders);
67
65
  const { mutate: onClickProvider, isLoading } = useMutation.useMutation((provider) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
68
66
  setSocialProvider(provider);
69
67
  yield (socialWalletConnector === null || socialWalletConnector === void 0 ? void 0 : socialWalletConnector.endSession());
70
68
  return socialWalletConnector === null || socialWalletConnector === void 0 ? void 0 : socialWalletConnector.connect(provider);
71
69
  }));
72
- return (jsxRuntime.jsx(SocialSignIn.SocialSignIn, { onSelectProvider: onClickProvider, providers: socialProviders, selectedProvider: socialProvider, isLoading: isLoading, testId: 'magic-social-sign-in', defaultProvider: defaultProvider, numOfItemsToDisplay: numOfItemsToDisplay, collapsedLayout: collapsedLayout }));
70
+ return (jsxRuntime.jsx(SocialSignIn.SocialSignIn, { onSelectProvider: onClickProvider, providers: enabledSocialProviders, selectedProvider: socialProvider, isLoading: isLoading, testId: 'magic-social-sign-in', defaultProvider: defaultProvider, numOfItemsToDisplay: numOfItemsToDisplay, collapsedLayout: collapsedLayout }));
73
71
  };
74
72
 
75
73
  exports.MagicSocialSignIn = MagicSocialSignIn;
@@ -12,7 +12,7 @@ import '../../../../../utils/constants/colors.js';
12
12
  import '../../../../../shared/utils/classes/storage/localStorage.js';
13
13
  import 'viem';
14
14
  import '../../../../../shared/consts/index.js';
15
- import { useInternalDynamicContext } from '../../../../../context/DynamicContext/useInternalDynamicContext.js';
15
+ import '../../../../../context/DynamicContext/DynamicContext.js';
16
16
  import '@dynamic-labs/multi-wallet';
17
17
  import '../../../../../components/ShadowDOM/ShadowDOM.js';
18
18
  import '../../../../../context/ThemeContext/ThemeContext.js';
@@ -57,15 +57,13 @@ import { SocialSignIn } from '../../../../../components/SocialSignIn/SocialSignI
57
57
  import { useSocialRedirectContext } from '../../../../../context/SocialRedirectContext/SocialRedirectContext.js';
58
58
 
59
59
  const MagicSocialSignIn = ({ defaultProvider, numOfItemsToDisplay, collapsedLayout, }) => {
60
- const { socialProvidersFilter = (providers) => providers } = useInternalDynamicContext();
61
60
  const { socialProvider, setSocialProvider, socialWalletConnector, enabledSocialProviders, } = useSocialRedirectContext();
62
- const socialProviders = socialProvidersFilter(enabledSocialProviders);
63
61
  const { mutate: onClickProvider, isLoading } = useMutation((provider) => __awaiter(void 0, void 0, void 0, function* () {
64
62
  setSocialProvider(provider);
65
63
  yield (socialWalletConnector === null || socialWalletConnector === void 0 ? void 0 : socialWalletConnector.endSession());
66
64
  return socialWalletConnector === null || socialWalletConnector === void 0 ? void 0 : socialWalletConnector.connect(provider);
67
65
  }));
68
- return (jsx(SocialSignIn, { onSelectProvider: onClickProvider, providers: socialProviders, selectedProvider: socialProvider, isLoading: isLoading, testId: 'magic-social-sign-in', defaultProvider: defaultProvider, numOfItemsToDisplay: numOfItemsToDisplay, collapsedLayout: collapsedLayout }));
66
+ return (jsx(SocialSignIn, { onSelectProvider: onClickProvider, providers: enabledSocialProviders, selectedProvider: socialProvider, isLoading: isLoading, testId: 'magic-social-sign-in', defaultProvider: defaultProvider, numOfItemsToDisplay: numOfItemsToDisplay, collapsedLayout: collapsedLayout }));
69
67
  };
70
68
 
71
69
  export { MagicSocialSignIn };
@@ -6,6 +6,7 @@ var React = require('react');
6
6
  var reactI18next = require('react-i18next');
7
7
  var sdkApi = require('@dynamic-labs/sdk-api');
8
8
  var useInternalDynamicContext = require('../../context/DynamicContext/useInternalDynamicContext.cjs');
9
+ var SocialRedirectContext = require('../../context/SocialRedirectContext/SocialRedirectContext.cjs');
9
10
  require('../../shared/logger.cjs');
10
11
  require('@dynamic-labs/iconic');
11
12
  require('@dynamic-labs/wallet-connector-core');
@@ -24,7 +25,9 @@ var index = require('../../utils/functions/getEnabledProviders/index.cjs');
24
25
  /* eslint-disable multiline-comment-style */
25
26
  const NUMBER_OF_WALLETS = 3;
26
27
  const useLoginView = () => {
28
+ var _a, _b, _c, _d;
27
29
  const { projectSettings, authorizationViewDisplayOrder, loginWithEmail, wallets, walletsFilter, } = useInternalDynamicContext.useInternalDynamicContext();
30
+ const { enabledSocialProviders } = SocialRedirectContext.useSocialRedirectContext();
28
31
  /** Takes from wallets only those that can be selected in the wallet list by the user.
29
32
  * Should filter out embedded wallets
30
33
  * WHY: when we decide whether to show wallets or not, we need to know how many wallets
@@ -55,46 +58,51 @@ const useLoginView = () => {
55
58
  * build email and social view sections from project settings design.modal props - backwards compatibility
56
59
  * @returns SdkViewSection[]
57
60
  */
58
- const getEmailViewSectionDefinition = () => {
59
- var _a, _b, _c, _d;
61
+ const getEmailViewSectionDefinition = React.useCallback(() => {
62
+ var _a, _b;
60
63
  const loginViewSections = [
61
64
  {
62
65
  type: sdkApi.SdkViewSectionType.Email,
63
66
  },
64
67
  ];
65
- const enabledSocialProviders = (_b = (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.socialSignIn) === null || _a === void 0 ? void 0 : _a.providers) === null || _b === void 0 ? void 0 : _b.filter((provider) => provider.enabled);
66
68
  if (enabledSocialProviders === null || enabledSocialProviders === void 0 ? void 0 : enabledSocialProviders.length) {
67
- loginViewSections.push({
69
+ const socialSection = {
68
70
  numOfItemsToDisplay: 5,
69
71
  type: sdkApi.SdkViewSectionType.Social,
70
- });
71
- if ((_c = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _c === void 0 ? void 0 : _c.splitEmailAndSocial) {
72
+ };
73
+ loginViewSections.push(socialSection);
74
+ if ((_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _a === void 0 ? void 0 : _a.splitEmailAndSocial) {
72
75
  loginViewSections.splice(1, 0, {
73
76
  label: t('dyn_login.separators.default'),
74
77
  type: sdkApi.SdkViewSectionType.Separator,
75
78
  });
76
- loginViewSections[loginViewSections.length - 1].defaultItem =
77
- enabledSocialProviders[0].provider;
79
+ // eslint-disable-next-line prefer-destructuring
80
+ socialSection.defaultItem = enabledSocialProviders[0];
78
81
  }
79
82
  }
80
- if ((_d = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _d === void 0 ? void 0 : _d.socialAboveEmail) {
83
+ if ((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _b === void 0 ? void 0 : _b.socialAboveEmail) {
81
84
  loginViewSections.reverse();
82
85
  }
83
86
  return loginViewSections;
84
- };
87
+ }, [
88
+ enabledSocialProviders,
89
+ (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _a === void 0 ? void 0 : _a.socialAboveEmail,
90
+ (_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _b === void 0 ? void 0 : _b.splitEmailAndSocial,
91
+ t,
92
+ ]);
85
93
  // TODO: https://linear.app/dynamic-labs/issue/GVTY-212/rethink-or-implement-toolkit-template-for-email-wallet-order
86
94
  /**
87
95
  * remove wallet view section from projectSettings?.sdk?.views if no wallet defined
88
96
  * @param sections
89
97
  * @returns
90
98
  */
91
- const filterLoginViewSections = (sections) => {
99
+ const filterLoginViewSections = React.useCallback((sections) => {
92
100
  if (selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length) {
93
101
  return sections;
94
102
  }
95
103
  return sections.filter((section) => section.type !== 'wallet');
96
- };
97
- const addSeparator = (index, loginItem) => {
104
+ }, [selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length]);
105
+ const addSeparator = React.useCallback((index) => {
98
106
  // if not the first index, no separator is needed
99
107
  // if the first index but does not have wallets or providers,
100
108
  // it'll show only one view section - no separator is needed
@@ -107,12 +115,12 @@ const useLoginView = () => {
107
115
  type: sdkApi.SdkViewSectionType.Separator,
108
116
  },
109
117
  ];
110
- };
118
+ }, [hasEnabledProviders, selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length, t]);
111
119
  /**
112
120
  * build login view sections array from project settings design.modal props - backwards compatibility
113
121
  * @returns SdkViewSection[]
114
122
  */
115
- const buildLoginSections = () => {
123
+ const buildLoginSections = React.useCallback(() => {
116
124
  let loginViewSections = [];
117
125
  authorizationViewDisplayOrder === null || authorizationViewDisplayOrder === void 0 ? void 0 : authorizationViewDisplayOrder.forEach((loginItem, index) => {
118
126
  var _a, _b;
@@ -139,7 +147,14 @@ const useLoginView = () => {
139
147
  }
140
148
  });
141
149
  return loginViewSections;
142
- };
150
+ }, [
151
+ addSeparator,
152
+ authorizationViewDisplayOrder,
153
+ getEmailViewSectionDefinition,
154
+ (_d = (_c = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _c === void 0 ? void 0 : _c.modal) === null || _d === void 0 ? void 0 : _d.showWalletsButton,
155
+ projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers,
156
+ selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length,
157
+ ]);
143
158
  /**
144
159
  * returns the login view sections to be displayed in order from projectSettings?.sdk?.views
145
160
  * and has backwards compatibility with project settings design.modal props
@@ -156,7 +171,6 @@ const useLoginView = () => {
156
171
  return buildLoginSections();
157
172
  }, [
158
173
  projectSettings,
159
- authorizationViewDisplayOrder,
160
174
  getEmailViewSectionDefinition,
161
175
  filterLoginViewSections,
162
176
  buildLoginSections,
@@ -1,7 +1,8 @@
1
- import { useMemo } from 'react';
1
+ import { useMemo, useCallback } from 'react';
2
2
  import { useTranslation } from 'react-i18next';
3
3
  import { SdkViewType, SdkViewSectionType } from '@dynamic-labs/sdk-api';
4
4
  import { useInternalDynamicContext } from '../../context/DynamicContext/useInternalDynamicContext.js';
5
+ import { useSocialRedirectContext } from '../../context/SocialRedirectContext/SocialRedirectContext.js';
5
6
  import '../../shared/logger.js';
6
7
  import '@dynamic-labs/iconic';
7
8
  import '@dynamic-labs/wallet-connector-core';
@@ -20,7 +21,9 @@ import { getEnabledProviders } from '../../utils/functions/getEnabledProviders/i
20
21
  /* eslint-disable multiline-comment-style */
21
22
  const NUMBER_OF_WALLETS = 3;
22
23
  const useLoginView = () => {
24
+ var _a, _b, _c, _d;
23
25
  const { projectSettings, authorizationViewDisplayOrder, loginWithEmail, wallets, walletsFilter, } = useInternalDynamicContext();
26
+ const { enabledSocialProviders } = useSocialRedirectContext();
24
27
  /** Takes from wallets only those that can be selected in the wallet list by the user.
25
28
  * Should filter out embedded wallets
26
29
  * WHY: when we decide whether to show wallets or not, we need to know how many wallets
@@ -51,46 +54,51 @@ const useLoginView = () => {
51
54
  * build email and social view sections from project settings design.modal props - backwards compatibility
52
55
  * @returns SdkViewSection[]
53
56
  */
54
- const getEmailViewSectionDefinition = () => {
55
- var _a, _b, _c, _d;
57
+ const getEmailViewSectionDefinition = useCallback(() => {
58
+ var _a, _b;
56
59
  const loginViewSections = [
57
60
  {
58
61
  type: SdkViewSectionType.Email,
59
62
  },
60
63
  ];
61
- const enabledSocialProviders = (_b = (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.socialSignIn) === null || _a === void 0 ? void 0 : _a.providers) === null || _b === void 0 ? void 0 : _b.filter((provider) => provider.enabled);
62
64
  if (enabledSocialProviders === null || enabledSocialProviders === void 0 ? void 0 : enabledSocialProviders.length) {
63
- loginViewSections.push({
65
+ const socialSection = {
64
66
  numOfItemsToDisplay: 5,
65
67
  type: SdkViewSectionType.Social,
66
- });
67
- if ((_c = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _c === void 0 ? void 0 : _c.splitEmailAndSocial) {
68
+ };
69
+ loginViewSections.push(socialSection);
70
+ if ((_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _a === void 0 ? void 0 : _a.splitEmailAndSocial) {
68
71
  loginViewSections.splice(1, 0, {
69
72
  label: t('dyn_login.separators.default'),
70
73
  type: SdkViewSectionType.Separator,
71
74
  });
72
- loginViewSections[loginViewSections.length - 1].defaultItem =
73
- enabledSocialProviders[0].provider;
75
+ // eslint-disable-next-line prefer-destructuring
76
+ socialSection.defaultItem = enabledSocialProviders[0];
74
77
  }
75
78
  }
76
- if ((_d = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _d === void 0 ? void 0 : _d.socialAboveEmail) {
79
+ if ((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _b === void 0 ? void 0 : _b.socialAboveEmail) {
77
80
  loginViewSections.reverse();
78
81
  }
79
82
  return loginViewSections;
80
- };
83
+ }, [
84
+ enabledSocialProviders,
85
+ (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _a === void 0 ? void 0 : _a.socialAboveEmail,
86
+ (_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _b === void 0 ? void 0 : _b.splitEmailAndSocial,
87
+ t,
88
+ ]);
81
89
  // TODO: https://linear.app/dynamic-labs/issue/GVTY-212/rethink-or-implement-toolkit-template-for-email-wallet-order
82
90
  /**
83
91
  * remove wallet view section from projectSettings?.sdk?.views if no wallet defined
84
92
  * @param sections
85
93
  * @returns
86
94
  */
87
- const filterLoginViewSections = (sections) => {
95
+ const filterLoginViewSections = useCallback((sections) => {
88
96
  if (selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length) {
89
97
  return sections;
90
98
  }
91
99
  return sections.filter((section) => section.type !== 'wallet');
92
- };
93
- const addSeparator = (index, loginItem) => {
100
+ }, [selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length]);
101
+ const addSeparator = useCallback((index) => {
94
102
  // if not the first index, no separator is needed
95
103
  // if the first index but does not have wallets or providers,
96
104
  // it'll show only one view section - no separator is needed
@@ -103,12 +111,12 @@ const useLoginView = () => {
103
111
  type: SdkViewSectionType.Separator,
104
112
  },
105
113
  ];
106
- };
114
+ }, [hasEnabledProviders, selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length, t]);
107
115
  /**
108
116
  * build login view sections array from project settings design.modal props - backwards compatibility
109
117
  * @returns SdkViewSection[]
110
118
  */
111
- const buildLoginSections = () => {
119
+ const buildLoginSections = useCallback(() => {
112
120
  let loginViewSections = [];
113
121
  authorizationViewDisplayOrder === null || authorizationViewDisplayOrder === void 0 ? void 0 : authorizationViewDisplayOrder.forEach((loginItem, index) => {
114
122
  var _a, _b;
@@ -135,7 +143,14 @@ const useLoginView = () => {
135
143
  }
136
144
  });
137
145
  return loginViewSections;
138
- };
146
+ }, [
147
+ addSeparator,
148
+ authorizationViewDisplayOrder,
149
+ getEmailViewSectionDefinition,
150
+ (_d = (_c = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _c === void 0 ? void 0 : _c.modal) === null || _d === void 0 ? void 0 : _d.showWalletsButton,
151
+ projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers,
152
+ selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length,
153
+ ]);
139
154
  /**
140
155
  * returns the login view sections to be displayed in order from projectSettings?.sdk?.views
141
156
  * and has backwards compatibility with project settings design.modal props
@@ -152,7 +167,6 @@ const useLoginView = () => {
152
167
  return buildLoginSections();
153
168
  }, [
154
169
  projectSettings,
155
- authorizationViewDisplayOrder,
156
170
  getEmailViewSectionDefinition,
157
171
  filterLoginViewSections,
158
172
  buildLoginSections,
@@ -1 +0,0 @@
1
- export * from './sortAccountsByPrimaryWallet';
@@ -1 +0,0 @@
1
- export { sortAccountsByPrimaryWallet } from './sortAccountsByPrimaryWallet';
@@ -1,9 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
6
-
7
- const sortAccountsByPrimaryWallet = (accounts, primaryWallet) => [...accounts].sort((account) => walletConnectorCore.isSameAddress(account, primaryWallet.address, primaryWallet.chain) ? -1 : 1);
8
-
9
- exports.sortAccountsByPrimaryWallet = sortAccountsByPrimaryWallet;
@@ -1,2 +0,0 @@
1
- import { Wallet } from '../../../../../shared';
2
- export declare const sortAccountsByPrimaryWallet: (accounts: string[], primaryWallet: Wallet) => string[];
@@ -1,5 +0,0 @@
1
- import { isSameAddress } from '@dynamic-labs/wallet-connector-core';
2
-
3
- const sortAccountsByPrimaryWallet = (accounts, primaryWallet) => [...accounts].sort((account) => isSameAddress(account, primaryWallet.address, primaryWallet.chain) ? -1 : 1);
4
-
5
- export { sortAccountsByPrimaryWallet };