@dynamic-labs/sdk-react-core 0.19.5 → 0.19.6

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 (107) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +9 -9
  5. package/src/index.cjs +2 -0
  6. package/src/index.d.ts +1 -1
  7. package/src/index.js +1 -0
  8. package/src/lib/Main.cjs +1 -0
  9. package/src/lib/Main.js +1 -0
  10. package/src/lib/components/Accordion/components/AccordionItem/AccordionItem.cjs +1 -1
  11. package/src/lib/components/Accordion/components/AccordionItem/AccordionItem.js +1 -1
  12. package/src/lib/components/AnimatePresence/AnimatePresence.cjs +1 -1
  13. package/src/lib/components/AnimatePresence/AnimatePresence.js +1 -1
  14. package/src/lib/components/AuthProviderIcon/AuthProviderIcon.cjs +1 -1
  15. package/src/lib/components/AuthProviderIcon/AuthProviderIcon.js +1 -1
  16. package/src/lib/components/MenuList/Dropdown/Dropdown.cjs +1 -1
  17. package/src/lib/components/MenuList/Dropdown/Dropdown.js +1 -1
  18. package/src/lib/components/Modal/Modal.cjs +1 -1
  19. package/src/lib/components/Modal/Modal.js +1 -1
  20. package/src/lib/components/NeedHelpSection/NeedHelpSection.cjs +5 -4
  21. package/src/lib/components/NeedHelpSection/NeedHelpSection.js +5 -4
  22. package/src/lib/components/NetworkPicker/NetworkPicker.cjs +11 -9
  23. package/src/lib/components/NetworkPicker/NetworkPicker.d.ts +2 -1
  24. package/src/lib/components/NetworkPicker/NetworkPicker.js +11 -9
  25. package/src/lib/components/OverlayCard/OverlayCard.cjs +1 -1
  26. package/src/lib/components/OverlayCard/OverlayCard.js +1 -1
  27. package/src/lib/components/Portal/Portal.cjs +1 -1
  28. package/src/lib/components/Portal/Portal.js +1 -1
  29. package/src/lib/components/SendBalancePageLayout/components/TokenBalanceCard/TokenBalanceCard.cjs +2 -1
  30. package/src/lib/components/SendBalancePageLayout/components/TokenBalanceCard/TokenBalanceCard.js +2 -1
  31. package/src/lib/components/SocialSignIn/SocialSignIn.cjs +1 -1
  32. package/src/lib/components/SocialSignIn/SocialSignIn.js +1 -1
  33. package/src/lib/components/SyncPasskeyFlow/SyncPasskeyFlow.cjs +1 -1
  34. package/src/lib/components/SyncPasskeyFlow/SyncPasskeyFlow.js +1 -1
  35. package/src/lib/components/Tooltip/Tooltip.cjs +1 -1
  36. package/src/lib/components/Tooltip/Tooltip.js +1 -1
  37. package/src/lib/components/TransactionStatusLayout/TransactionStatusLayout.cjs +1 -1
  38. package/src/lib/components/TransactionStatusLayout/TransactionStatusLayout.js +1 -1
  39. package/src/lib/components/Transition/VerticalDrawerTransition/VerticalDrawerTransition.cjs +1 -1
  40. package/src/lib/components/Transition/VerticalDrawerTransition/VerticalDrawerTransition.js +1 -1
  41. package/src/lib/components/UserAddress/UserAddress.cjs +1 -1
  42. package/src/lib/components/UserAddress/UserAddress.js +1 -1
  43. package/src/lib/context/DynamicContext/DynamicContext.cjs +1 -1
  44. package/src/lib/context/DynamicContext/DynamicContext.js +1 -1
  45. package/src/lib/context/DynamicContext/useCustomerCallbacks/useCustomerAuthFlowCallbacks.cjs +1 -1
  46. package/src/lib/context/DynamicContext/useCustomerCallbacks/useCustomerAuthFlowCallbacks.js +1 -1
  47. package/src/lib/context/MockContext/MockContext.cjs +1 -0
  48. package/src/lib/context/MockContext/MockContext.js +1 -0
  49. package/src/lib/context/QrCodeContext/QrCodeContext.cjs +1 -1
  50. package/src/lib/context/QrCodeContext/QrCodeContext.js +1 -1
  51. package/src/lib/context/SendBalanceContext/SendBalanceContext.cjs +1 -1
  52. package/src/lib/context/SendBalanceContext/SendBalanceContext.js +1 -1
  53. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.cjs +16 -2
  54. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.js +17 -3
  55. package/src/lib/context/UserFieldEditorContext/UserFieldEditorContext.cjs +1 -1
  56. package/src/lib/context/UserFieldEditorContext/UserFieldEditorContext.js +1 -1
  57. package/src/lib/layout/DynamicUserProfileLayout/DynamicUserProfileLayout.cjs +1 -0
  58. package/src/lib/layout/DynamicUserProfileLayout/DynamicUserProfileLayout.js +1 -0
  59. package/src/lib/styles/index.shadow.cjs +1 -1
  60. package/src/lib/styles/index.shadow.js +1 -1
  61. package/src/lib/utils/hooks/useConnectedWalletsNetworkValidation/useConnectedWalletsNetworkValidation.cjs +8 -9
  62. package/src/lib/utils/hooks/useConnectedWalletsNetworkValidation/useConnectedWalletsNetworkValidation.js +8 -9
  63. package/src/lib/utils/hooks/useWalletConnectorEvent/useWalletConnectorEvent.cjs +34 -5
  64. package/src/lib/utils/hooks/useWalletConnectorEvent/useWalletConnectorEvent.d.ts +33 -1
  65. package/src/lib/utils/hooks/useWalletConnectorEvent/useWalletConnectorEvent.js +34 -5
  66. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +19 -18
  67. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.d.ts +2 -1
  68. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +19 -18
  69. package/src/lib/utils/hooks/useWalletUiUtils/useWalletUiUtils.cjs +1 -1
  70. package/src/lib/utils/hooks/useWalletUiUtils/useWalletUiUtils.js +1 -1
  71. package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.cjs +32 -8
  72. package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.js +33 -9
  73. package/src/lib/views/CollectUserDataView/CollectUserDataView.cjs +1 -1
  74. package/src/lib/views/CollectUserDataView/CollectUserDataView.js +1 -1
  75. package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.cjs +1 -1
  76. package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.js +1 -1
  77. package/src/lib/views/LoginView/useLoginView.cjs +5 -0
  78. package/src/lib/views/LoginView/useLoginView.js +5 -0
  79. package/src/lib/views/NetworkNotSupported/NetworkNotSupported.cjs +6 -3
  80. package/src/lib/views/NetworkNotSupported/NetworkNotSupported.js +6 -3
  81. package/src/lib/views/QrCodeView/QRCode.cjs +1 -1
  82. package/src/lib/views/QrCodeView/QRCode.js +1 -1
  83. package/src/lib/views/QrCodeView/QrCodeView.cjs +1 -1
  84. package/src/lib/views/QrCodeView/QrCodeView.js +1 -1
  85. package/src/lib/views/SendBalanceView/components/TransactionStage/TransactionStage.cjs +1 -1
  86. package/src/lib/views/SendBalanceView/components/TransactionStage/TransactionStage.js +1 -1
  87. package/src/lib/views/TransactionConfirmationView/TransactionConfirmationView.cjs +1 -1
  88. package/src/lib/views/TransactionConfirmationView/TransactionConfirmationView.js +1 -1
  89. package/src/lib/views/TransactionConfirmationView/hooks/useTransactionGas/useTransactionGas.cjs +1 -1
  90. package/src/lib/views/TransactionConfirmationView/hooks/useTransactionGas/useTransactionGas.js +1 -1
  91. package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedUserProfile/DynamicEmbeddedUserProfile.cjs +1 -0
  92. package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedUserProfile/DynamicEmbeddedUserProfile.js +1 -0
  93. package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.cjs +1 -1
  94. package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.js +1 -1
  95. package/src/lib/widgets/DynamicWidget/components/DynamicNav/DynamicNav.cjs +2 -2
  96. package/src/lib/widgets/DynamicWidget/components/DynamicNav/DynamicNav.js +2 -2
  97. package/src/lib/widgets/DynamicWidget/components/DynamicUserProfile/DynamicUserProfile.cjs +1 -0
  98. package/src/lib/widgets/DynamicWidget/components/DynamicUserProfile/DynamicUserProfile.js +1 -0
  99. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs +1 -1
  100. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js +1 -1
  101. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetVariants/variants/DynamicWidgetDropdown/DynamicWidgetDropdown.cjs +1 -1
  102. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetVariants/variants/DynamicWidgetDropdown/DynamicWidgetDropdown.js +1 -1
  103. package/src/lib/widgets/DynamicWidget/context/DynamicWidgetContext.cjs +1 -1
  104. package/src/lib/widgets/DynamicWidget/context/DynamicWidgetContext.js +1 -1
  105. package/src/lib/widgets/DynamicWidget/helpers/helpers.cjs +7 -7
  106. package/src/lib/widgets/DynamicWidget/helpers/helpers.d.ts +1 -1
  107. package/src/lib/widgets/DynamicWidget/helpers/helpers.js +7 -7
@@ -3,13 +3,42 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
- var useIsomorphicLayoutEffect = require('../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs');
7
6
 
7
+ /**
8
+ * Hook for handling events from a WalletConnector or an array of WalletConnectors.
9
+ * This hook allows you to specify an event to listen to and a handler function that will be called
10
+ * whenever the event is emitted. The handler will receive the event arguments followed by the instance
11
+ * of the WalletConnector that emitted the event.
12
+ *
13
+ * @template Event - The type of the event to listen for, which should be a key of WalletConnectorEventTypes.
14
+ *
15
+ * @param eventEmitters - The WalletConnector instance(s) to attach the event listener to.
16
+ * If an array is provided, the event listener is attached to all provided connectors.
17
+ * @param eventName - The name of the event to listen for.
18
+ * @param handler - The callback function to execute when the event is emitted.
19
+ * The arguments to the callback are the arguments emitted with the event, followed by the WalletConnector instance
20
+ * that emitted the event.
21
+ *
22
+ * @returns {void} This hook does not return anything.
23
+ *
24
+ * @example
25
+ * // Example usage of useWalletConnectorEvent
26
+ * const { primaryWallet } = useDynamicContext();
27
+ *
28
+ * useWalletConnectorEvent(
29
+ * primaryWallet?.connector,
30
+ * 'accountChange',
31
+ * ({ accounts }, connector) => {
32
+ * console.group('accountChange');
33
+ * console.log('accounts', accounts);
34
+ * console.log('connector that emitted', connector);
35
+ * console.groupEnd();
36
+ * },
37
+ * );
38
+ */
8
39
  const useWalletConnectorEvent = (eventEmitters, eventName, handler) => {
9
40
  const callbackRef = React.useRef(handler);
10
- useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
11
- callbackRef.current = handler;
12
- }, [handler]);
41
+ callbackRef.current = handler;
13
42
  React.useEffect(() => {
14
43
  if (!eventEmitters)
15
44
  return;
@@ -24,7 +53,7 @@ const useWalletConnectorEvent = (eventEmitters, eventName, handler) => {
24
53
  const uniqueEventEmitters = Array.from(new Set(eventEmittersArray));
25
54
  const unsubscribeCallbacks = uniqueEventEmitters.map((emitter) => {
26
55
  const callback = (...args) => {
27
- callbackRef.current(emitter, ...args);
56
+ callbackRef.current(...args, emitter);
28
57
  };
29
58
  emitter.on(eventName, callback);
30
59
  return () => emitter.off(eventName, callback);
@@ -8,5 +8,37 @@ type ArgumentMap<T extends object> = {
8
8
  [K in keyof T]: T[K] extends (...args: any[]) => void ? Parameters<T[K]> : T[K] extends any[] ? T[K] : any[];
9
9
  };
10
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;
11
+ /**
12
+ * Hook for handling events from a WalletConnector or an array of WalletConnectors.
13
+ * This hook allows you to specify an event to listen to and a handler function that will be called
14
+ * whenever the event is emitted. The handler will receive the event arguments followed by the instance
15
+ * of the WalletConnector that emitted the event.
16
+ *
17
+ * @template Event - The type of the event to listen for, which should be a key of WalletConnectorEventTypes.
18
+ *
19
+ * @param eventEmitters - The WalletConnector instance(s) to attach the event listener to.
20
+ * If an array is provided, the event listener is attached to all provided connectors.
21
+ * @param eventName - The name of the event to listen for.
22
+ * @param handler - The callback function to execute when the event is emitted.
23
+ * The arguments to the callback are the arguments emitted with the event, followed by the WalletConnector instance
24
+ * that emitted the event.
25
+ *
26
+ * @returns {void} This hook does not return anything.
27
+ *
28
+ * @example
29
+ * // Example usage of useWalletConnectorEvent
30
+ * const { primaryWallet } = useDynamicContext();
31
+ *
32
+ * useWalletConnectorEvent(
33
+ * primaryWallet?.connector,
34
+ * 'accountChange',
35
+ * ({ accounts }, connector) => {
36
+ * console.group('accountChange');
37
+ * console.log('accounts', accounts);
38
+ * console.log('connector that emitted', connector);
39
+ * console.groupEnd();
40
+ * },
41
+ * );
42
+ */
43
+ export declare const useWalletConnectorEvent: <Event_1 extends keyof WalletConnectorEventTypes = keyof WalletConnectorEventTypes>(eventEmitters: WalletConnector | WalletConnector[] | undefined, eventName: Event_1, handler: (...args: [...EventArg<Event_1>, import("@dynamic-labs/wallet-connector-core").WalletConnectorCore.WalletConnector]) => void) => void;
12
44
  export {};
@@ -1,11 +1,40 @@
1
1
  import { useRef, useEffect } from 'react';
2
- import { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.js';
3
2
 
3
+ /**
4
+ * Hook for handling events from a WalletConnector or an array of WalletConnectors.
5
+ * This hook allows you to specify an event to listen to and a handler function that will be called
6
+ * whenever the event is emitted. The handler will receive the event arguments followed by the instance
7
+ * of the WalletConnector that emitted the event.
8
+ *
9
+ * @template Event - The type of the event to listen for, which should be a key of WalletConnectorEventTypes.
10
+ *
11
+ * @param eventEmitters - The WalletConnector instance(s) to attach the event listener to.
12
+ * If an array is provided, the event listener is attached to all provided connectors.
13
+ * @param eventName - The name of the event to listen for.
14
+ * @param handler - The callback function to execute when the event is emitted.
15
+ * The arguments to the callback are the arguments emitted with the event, followed by the WalletConnector instance
16
+ * that emitted the event.
17
+ *
18
+ * @returns {void} This hook does not return anything.
19
+ *
20
+ * @example
21
+ * // Example usage of useWalletConnectorEvent
22
+ * const { primaryWallet } = useDynamicContext();
23
+ *
24
+ * useWalletConnectorEvent(
25
+ * primaryWallet?.connector,
26
+ * 'accountChange',
27
+ * ({ accounts }, connector) => {
28
+ * console.group('accountChange');
29
+ * console.log('accounts', accounts);
30
+ * console.log('connector that emitted', connector);
31
+ * console.groupEnd();
32
+ * },
33
+ * );
34
+ */
4
35
  const useWalletConnectorEvent = (eventEmitters, eventName, handler) => {
5
36
  const callbackRef = useRef(handler);
6
- useIsomorphicLayoutEffect(() => {
7
- callbackRef.current = handler;
8
- }, [handler]);
37
+ callbackRef.current = handler;
9
38
  useEffect(() => {
10
39
  if (!eventEmitters)
11
40
  return;
@@ -20,7 +49,7 @@ const useWalletConnectorEvent = (eventEmitters, eventName, handler) => {
20
49
  const uniqueEventEmitters = Array.from(new Set(eventEmittersArray));
21
50
  const unsubscribeCallbacks = uniqueEventEmitters.map((emitter) => {
22
51
  const callback = (...args) => {
23
- callbackRef.current(emitter, ...args);
52
+ callbackRef.current(...args, emitter);
24
53
  };
25
54
  emitter.on(eventName, callback);
26
55
  return () => emitter.off(eventName, callback);
@@ -43,7 +43,7 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
43
43
  logger.logger.debug('primary wallet disconnect');
44
44
  handleLogOut();
45
45
  });
46
- useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'chainChange', (_, { chain }) => {
46
+ useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'chainChange', ({ chain }) => {
47
47
  logger.logger.debug('primary wallet chain change', { chain });
48
48
  if (!primaryWallet) {
49
49
  return;
@@ -57,7 +57,7 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
57
57
  setNetwork(parseInt(chain));
58
58
  }
59
59
  });
60
- useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', (_, { accounts }) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
60
+ useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', ({ accounts }) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
61
61
  logger.logger.debug('primary wallet account change', {
62
62
  accounts,
63
63
  });
@@ -114,35 +114,36 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
114
114
  }
115
115
  return Array.from(allWalletConnectors);
116
116
  }, [secondaryWallets, selectedWalletConnector, primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector]);
117
- useWalletConnectorEvent.useWalletConnectorEvent(uniqueNonPrimaryWallets, 'accountChange', () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
117
+ useWalletConnectorEvent.useWalletConnectorEvent(uniqueNonPrimaryWallets, 'accountChange', (_, changedConnector) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
118
118
  logger.logger.debug('secondary wallet account change');
119
119
  if (authMode === 'connect-only' && secondaryWallets.length) {
120
- refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
120
+ const affectedWallets = secondaryWallets.filter(({ connector }) => connector.key === changedConnector.key);
121
+ for (const wallet of affectedWallets)
122
+ refreshConnectedWallet(wallet.id, wallet.connector);
121
123
  return;
122
124
  }
123
125
  if (multiWalletWidgetState === 'awaiting_account_switch') {
124
126
  handleAccountChangeWhenAwaitingAccountSwitch(false, (selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet.address) || '');
125
127
  }
126
- yield computeConnectedStateForWallets();
127
128
  }));
128
- useWalletConnectorEvent.useWalletConnectorEvent(uniqueNonPrimaryWallets, 'chainChange', () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
129
+ useWalletConnectorEvent.useWalletConnectorEvent(uniqueNonPrimaryWallets, 'chainChange', (_, changedConnector) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
129
130
  logger.logger.debug('secondary wallet chain change');
130
- // We should pass the proper walletId here
131
- if (!secondaryWallets.length) {
132
- return;
133
- }
134
- refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
131
+ // Get all wallets with this connector
132
+ const affectedWallets = secondaryWallets.filter(({ connector }) => connector.key === changedConnector.key);
133
+ for (const wallet of affectedWallets)
134
+ refreshConnectedWallet(wallet.id, wallet.connector);
135
135
  }));
136
- useWalletConnectorEvent.useWalletConnectorEvent(uniqueNonPrimaryWallets, 'disconnect', () => {
136
+ useWalletConnectorEvent.useWalletConnectorEvent(uniqueNonPrimaryWallets, 'disconnect', (affectedConnector) => {
137
137
  logger.logger.debug('secondary wallet disconnect');
138
138
  // argent sends a disconnect event when the user adds a new account
139
- if (authMode === 'connect-only' &&
140
- secondaryWallets.length &&
141
- secondaryWallets[0].connector.key === 'argentx') {
142
- refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
143
- return;
139
+ if (authMode === 'connect-only') {
140
+ // Get all wallets with this connector
141
+ const affectedWallets = secondaryWallets.filter(({ connector }) => connector.key === affectedConnector.key);
142
+ for (const wallet of affectedWallets) {
143
+ if (wallet.connector.key === 'argentx')
144
+ refreshConnectedWallet(wallet.id, wallet.connector);
145
+ }
144
146
  }
145
- computeConnectedStateForWallets();
146
147
  });
147
148
  const handleAccountChangeWhenAwaitingAccountSwitch = React.useCallback((isPrimaryWallet, newAddress) => {
148
149
  const linkedSecondaryWallet = secondaryWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, newAddress, wallet.chain));
@@ -2,6 +2,7 @@
2
2
  import type { WalletConnector } from '@dynamic-labs/wallet-connector-core';
3
3
  import { AuthModeType, MultiWalletWidgetState, UserProfile, Wallet, WalletWithAction } from '../../../shared';
4
4
  import { MultiWalletWidgetStateSetter } from '../multiWallet';
5
+ import { IDynamicContext } from '../../../context/DynamicContext/types';
5
6
  export type UseWalletEventListenersArgs = {
6
7
  computeConnectedStateForWallets(): Promise<void>;
7
8
  handleLogOut(): Promise<void>;
@@ -13,7 +14,7 @@ export type UseWalletEventListenersArgs = {
13
14
  selectedWalletWithAction: WalletWithAction | null;
14
15
  setMultiWalletWidgetState: MultiWalletWidgetStateSetter;
15
16
  setPrimaryWalletId(walletId: string): void;
16
- setSelectedWalletConnector(connector: WalletConnector | null): void;
17
+ setSelectedWalletConnector: IDynamicContext['setSelectedWalletConnector'];
17
18
  setSelectedWalletWithAction(walletWithAction: WalletWithAction | null): void;
18
19
  user: UserProfile | undefined;
19
20
  authMode: AuthModeType;
@@ -39,7 +39,7 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
39
39
  logger.debug('primary wallet disconnect');
40
40
  handleLogOut();
41
41
  });
42
- useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'chainChange', (_, { chain }) => {
42
+ useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'chainChange', ({ chain }) => {
43
43
  logger.debug('primary wallet chain change', { chain });
44
44
  if (!primaryWallet) {
45
45
  return;
@@ -53,7 +53,7 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
53
53
  setNetwork(parseInt(chain));
54
54
  }
55
55
  });
56
- useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', (_, { accounts }) => __awaiter(void 0, void 0, void 0, function* () {
56
+ useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', ({ accounts }) => __awaiter(void 0, void 0, void 0, function* () {
57
57
  logger.debug('primary wallet account change', {
58
58
  accounts,
59
59
  });
@@ -110,35 +110,36 @@ const useWalletEventListeners = ({ computeConnectedStateForWallets, handleLogOut
110
110
  }
111
111
  return Array.from(allWalletConnectors);
112
112
  }, [secondaryWallets, selectedWalletConnector, primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector]);
113
- useWalletConnectorEvent(uniqueNonPrimaryWallets, 'accountChange', () => __awaiter(void 0, void 0, void 0, function* () {
113
+ useWalletConnectorEvent(uniqueNonPrimaryWallets, 'accountChange', (_, changedConnector) => __awaiter(void 0, void 0, void 0, function* () {
114
114
  logger.debug('secondary wallet account change');
115
115
  if (authMode === 'connect-only' && secondaryWallets.length) {
116
- refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
116
+ const affectedWallets = secondaryWallets.filter(({ connector }) => connector.key === changedConnector.key);
117
+ for (const wallet of affectedWallets)
118
+ refreshConnectedWallet(wallet.id, wallet.connector);
117
119
  return;
118
120
  }
119
121
  if (multiWalletWidgetState === 'awaiting_account_switch') {
120
122
  handleAccountChangeWhenAwaitingAccountSwitch(false, (selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet.address) || '');
121
123
  }
122
- yield computeConnectedStateForWallets();
123
124
  }));
124
- useWalletConnectorEvent(uniqueNonPrimaryWallets, 'chainChange', () => __awaiter(void 0, void 0, void 0, function* () {
125
+ useWalletConnectorEvent(uniqueNonPrimaryWallets, 'chainChange', (_, changedConnector) => __awaiter(void 0, void 0, void 0, function* () {
125
126
  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);
127
+ // Get all wallets with this connector
128
+ const affectedWallets = secondaryWallets.filter(({ connector }) => connector.key === changedConnector.key);
129
+ for (const wallet of affectedWallets)
130
+ refreshConnectedWallet(wallet.id, wallet.connector);
131
131
  }));
132
- useWalletConnectorEvent(uniqueNonPrimaryWallets, 'disconnect', () => {
132
+ useWalletConnectorEvent(uniqueNonPrimaryWallets, 'disconnect', (affectedConnector) => {
133
133
  logger.debug('secondary wallet disconnect');
134
134
  // argent sends a disconnect event when the user adds a new account
135
- if (authMode === 'connect-only' &&
136
- secondaryWallets.length &&
137
- secondaryWallets[0].connector.key === 'argentx') {
138
- refreshConnectedWallet(secondaryWallets[0].id, secondaryWallets[0].connector);
139
- return;
135
+ if (authMode === 'connect-only') {
136
+ // Get all wallets with this connector
137
+ const affectedWallets = secondaryWallets.filter(({ connector }) => connector.key === affectedConnector.key);
138
+ for (const wallet of affectedWallets) {
139
+ if (wallet.connector.key === 'argentx')
140
+ refreshConnectedWallet(wallet.id, wallet.connector);
141
+ }
140
142
  }
141
- computeConnectedStateForWallets();
142
143
  });
143
144
  const handleAccountChangeWhenAwaitingAccountSwitch = useCallback((isPrimaryWallet, newAddress) => {
144
145
  const linkedSecondaryWallet = secondaryWallets.find((wallet) => isSameAddress(wallet.address, newAddress, wallet.chain));
@@ -45,6 +45,7 @@ require('../../../components/Alert/Alert.cjs');
45
45
  require('../../../components/Popper/Popper/Popper.cjs');
46
46
  require('../../../components/Popper/PopperContext/PopperContext.cjs');
47
47
  require('formik');
48
+ require('i18next');
48
49
  require('../../../components/InlineWidget/InlineWidget.cjs');
49
50
  require('../../../components/MenuList/Dropdown/Dropdown.cjs');
50
51
  require('../../../components/OverlayCard/OverlayCard.context.cjs');
@@ -54,7 +55,6 @@ require('../../../context/WalletGroupContext/WalletGroupContext.cjs');
54
55
  require('../../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs');
55
56
  require('qrcode');
56
57
  require('../../../context/LoadingContext/LoadingContext.cjs');
57
- require('i18next');
58
58
  require('../../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
59
59
  require('../../../components/UserProfile/parts/UserProfileField/components/VerifiedEmailIcon/VerifiedEmailIcon.cjs');
60
60
  require('../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs');
@@ -41,6 +41,7 @@ import '../../../components/Alert/Alert.js';
41
41
  import '../../../components/Popper/Popper/Popper.js';
42
42
  import '../../../components/Popper/PopperContext/PopperContext.js';
43
43
  import 'formik';
44
+ import 'i18next';
44
45
  import '../../../components/InlineWidget/InlineWidget.js';
45
46
  import '../../../components/MenuList/Dropdown/Dropdown.js';
46
47
  import '../../../components/OverlayCard/OverlayCard.context.js';
@@ -50,7 +51,6 @@ import '../../../context/WalletGroupContext/WalletGroupContext.js';
50
51
  import '../../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js';
51
52
  import 'qrcode';
52
53
  import '../../../context/LoadingContext/LoadingContext.js';
53
- import 'i18next';
54
54
  import '../../../widgets/DynamicWidget/context/DynamicWidgetContext.js';
55
55
  import '../../../components/UserProfile/parts/UserProfileField/components/VerifiedEmailIcon/VerifiedEmailIcon.js';
56
56
  import '../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js';
@@ -18,6 +18,8 @@ require('@dynamic-labs/utils');
18
18
  require('../../../shared/consts/index.cjs');
19
19
  require('@dynamic-labs/multi-wallet');
20
20
  var isWalletConnected = require('../../functions/isWalletConnected/isWalletConnected.cjs');
21
+ var useEventListener = require('../useEventListener/useEventListener.cjs');
22
+ var useWalletConnectorEvent = require('../useWalletConnectorEvent/useWalletConnectorEvent.cjs');
21
23
 
22
24
  const connectedWalletStateReducer = (state, connectedWalletsMap) => {
23
25
  const isConnectedWalletsMapEmpty = Object.values(connectedWalletsMap).length === 0;
@@ -26,14 +28,23 @@ const connectedWalletStateReducer = (state, connectedWalletsMap) => {
26
28
  }
27
29
  return Object.assign(Object.assign({}, state), { connectedWalletsMap, didLoad: true });
28
30
  };
29
- const useWalletsConnectionState = (linkedWallets) => {
31
+ const useWalletsConnectionState = (wallets) => {
30
32
  const [state, setState] = React.useReducer(connectedWalletStateReducer, {
31
33
  connectedWalletsMap: {},
32
34
  didLoad: false,
33
35
  });
36
+ const refreshKey = wallets.map(({ id }) => id).join('-');
37
+ const connectors = wallets.map(({ connector }) => connector);
34
38
  const lastCallTimestamp = React.useRef(0);
35
39
  const computeConnectedStateForWallets = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
36
- if (!linkedWallets.length)
40
+ const connectedWalletsMap = {};
41
+ yield Promise.all(wallets.map((wallet) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
42
+ connectedWalletsMap[wallet.id] = yield isWalletConnected.isWalletConnected(wallet);
43
+ })));
44
+ setState(connectedWalletsMap);
45
+ }), [wallets]);
46
+ const handleOnEventUpdate = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
47
+ if (!wallets.length)
37
48
  return;
38
49
  const callTimestamp = new Date().getTime();
39
50
  const diffFromLastCall = callTimestamp - lastCallTimestamp.current;
@@ -44,12 +55,25 @@ const useWalletsConnectionState = (linkedWallets) => {
44
55
  logger.logger.warn('computeConnectedStateForWallets: skipping due too many calls.');
45
56
  return;
46
57
  }
47
- const connectedWalletsMap = {};
48
- yield Promise.all(linkedWallets.map((wallet) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
49
- connectedWalletsMap[wallet.id] = yield isWalletConnected.isWalletConnected(wallet);
50
- })));
51
- setState(connectedWalletsMap);
52
- }), [linkedWallets, setState]);
58
+ computeConnectedStateForWallets();
59
+ }), [computeConnectedStateForWallets, wallets.length]);
60
+ useWalletConnectorEvent.useWalletConnectorEvent(connectors, 'accountChange', handleOnEventUpdate);
61
+ useWalletConnectorEvent.useWalletConnectorEvent(connectors, 'disconnect', handleOnEventUpdate);
62
+ useWalletConnectorEvent.useWalletConnectorEvent(connectors, 'chainChange', handleOnEventUpdate);
63
+ React.useEffect(() => {
64
+ computeConnectedStateForWallets();
65
+ },
66
+ /**
67
+ * This is using a custom key to force the useEffect to run only when a connector is
68
+ * added or removed from the connectors list.
69
+ */
70
+ // eslint-disable-next-line react-hooks/exhaustive-deps
71
+ [refreshKey]);
72
+ /**
73
+ * This is a workaround to detect when the user switches to another tab/extension
74
+ * and then comes back to the dapp.
75
+ */
76
+ useEventListener.useEventListener('focus', computeConnectedStateForWallets);
53
77
  return {
54
78
  computeConnectedStateForWallets,
55
79
  connectedWalletMap: state.connectedWalletsMap,
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from '../../../../../_virtual/_tslib.js';
2
- import { useReducer, useRef, useCallback } from 'react';
2
+ import { useReducer, useRef, useCallback, useEffect } from 'react';
3
3
  import '@dynamic-labs/sdk-api';
4
4
  import { logger } from '../../../shared/logger.js';
5
5
  import '@dynamic-labs/iconic';
@@ -14,6 +14,8 @@ import '@dynamic-labs/utils';
14
14
  import '../../../shared/consts/index.js';
15
15
  import '@dynamic-labs/multi-wallet';
16
16
  import { isWalletConnected } from '../../functions/isWalletConnected/isWalletConnected.js';
17
+ import { useEventListener } from '../useEventListener/useEventListener.js';
18
+ import { useWalletConnectorEvent } from '../useWalletConnectorEvent/useWalletConnectorEvent.js';
17
19
 
18
20
  const connectedWalletStateReducer = (state, connectedWalletsMap) => {
19
21
  const isConnectedWalletsMapEmpty = Object.values(connectedWalletsMap).length === 0;
@@ -22,14 +24,23 @@ const connectedWalletStateReducer = (state, connectedWalletsMap) => {
22
24
  }
23
25
  return Object.assign(Object.assign({}, state), { connectedWalletsMap, didLoad: true });
24
26
  };
25
- const useWalletsConnectionState = (linkedWallets) => {
27
+ const useWalletsConnectionState = (wallets) => {
26
28
  const [state, setState] = useReducer(connectedWalletStateReducer, {
27
29
  connectedWalletsMap: {},
28
30
  didLoad: false,
29
31
  });
32
+ const refreshKey = wallets.map(({ id }) => id).join('-');
33
+ const connectors = wallets.map(({ connector }) => connector);
30
34
  const lastCallTimestamp = useRef(0);
31
35
  const computeConnectedStateForWallets = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
32
- if (!linkedWallets.length)
36
+ const connectedWalletsMap = {};
37
+ yield Promise.all(wallets.map((wallet) => __awaiter(void 0, void 0, void 0, function* () {
38
+ connectedWalletsMap[wallet.id] = yield isWalletConnected(wallet);
39
+ })));
40
+ setState(connectedWalletsMap);
41
+ }), [wallets]);
42
+ const handleOnEventUpdate = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
43
+ if (!wallets.length)
33
44
  return;
34
45
  const callTimestamp = new Date().getTime();
35
46
  const diffFromLastCall = callTimestamp - lastCallTimestamp.current;
@@ -40,12 +51,25 @@ const useWalletsConnectionState = (linkedWallets) => {
40
51
  logger.warn('computeConnectedStateForWallets: skipping due too many calls.');
41
52
  return;
42
53
  }
43
- const connectedWalletsMap = {};
44
- yield Promise.all(linkedWallets.map((wallet) => __awaiter(void 0, void 0, void 0, function* () {
45
- connectedWalletsMap[wallet.id] = yield isWalletConnected(wallet);
46
- })));
47
- setState(connectedWalletsMap);
48
- }), [linkedWallets, setState]);
54
+ computeConnectedStateForWallets();
55
+ }), [computeConnectedStateForWallets, wallets.length]);
56
+ useWalletConnectorEvent(connectors, 'accountChange', handleOnEventUpdate);
57
+ useWalletConnectorEvent(connectors, 'disconnect', handleOnEventUpdate);
58
+ useWalletConnectorEvent(connectors, 'chainChange', handleOnEventUpdate);
59
+ useEffect(() => {
60
+ computeConnectedStateForWallets();
61
+ },
62
+ /**
63
+ * This is using a custom key to force the useEffect to run only when a connector is
64
+ * added or removed from the connectors list.
65
+ */
66
+ // eslint-disable-next-line react-hooks/exhaustive-deps
67
+ [refreshKey]);
68
+ /**
69
+ * This is a workaround to detect when the user switches to another tab/extension
70
+ * and then comes back to the dapp.
71
+ */
72
+ useEventListener('focus', computeConnectedStateForWallets);
49
73
  return {
50
74
  computeConnectedStateForWallets,
51
75
  connectedWalletMap: state.connectedWalletsMap,
@@ -83,7 +83,7 @@ const CollectUserDataView = () => {
83
83
  const evmNetworks = walletConnector.evmNetworks || [];
84
84
  const _isSupportedNetwork = !network || isSupportedNetwork.isSupportedNetwork({ network, walletConnector });
85
85
  const walletAddress = (_a = userProfile === null || userProfile === void 0 ? void 0 : userProfile.verifiedCredentials.find((verifiedCredential) => verifiedCredential.id === userProfile.lastVerifiedCredentialId)) === null || _a === void 0 ? void 0 : _a.address;
86
- return (jsxRuntime.jsxs("div", { className: 'collect-user-data', "data-testid": 'collect-user-data-view', children: [jsxRuntime.jsxs("div", { className: 'collect-user-data__network-container', children: [jsxRuntime.jsxs("div", { className: 'collect-user-data__img-container', children: [(nameService === null || nameService === void 0 ? void 0 : nameService.avatar) ? (jsxRuntime.jsx("img", { src: nameService.avatar, alt: '', className: 'collect-user-data__img collect-user-data__img--rounded' })) : (jsxRuntime.jsx(AuthProviderIcon.AuthProviderIcon, { jwt: onboardingOnlyJwt, iconSize: 28 })), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'primary', weight: 'medium', className: 'collect-user-data__wallet-address', children: (nameService === null || nameService === void 0 ? void 0 : nameService.name) || shortenWalletAddress.shortenWalletAddress(walletAddress, 3, 3) })] }), jsxRuntime.jsx(NetworkPicker.NetworkPicker, { evmNetworks: evmNetworks, connector: walletConnector, showNetworkName: true, isNetworkPickerOpen: isNetworkPickerOpen, setIsNetworkPickerOpen: setIsNetworkPickerOpen, buttonClassName: 'collect-user-data__network-picker-button', mainClassName: 'collect-user-data__network-picker' })] }), onboardingImageUrl && (jsxRuntime.jsx("img", { className: 'collect-user-data__main-img', src: onboardingImageUrl, alt: 'onboarding' })), !_isSupportedNetwork && (jsxRuntime.jsx(ErrorContainer.ErrorContainer, { withIcon: false, className: 'collect-user-data__error--not-supported', children: t('dyn_collect_user_data.not_supported_network.error_message') })), jsxRuntime.jsxs("div", { className: classNames.classNames('collect-user-data__form', {
86
+ return (jsxRuntime.jsxs("div", { className: 'collect-user-data', "data-testid": 'collect-user-data-view', children: [jsxRuntime.jsxs("div", { className: 'collect-user-data__network-container', children: [jsxRuntime.jsxs("div", { className: 'collect-user-data__img-container', children: [(nameService === null || nameService === void 0 ? void 0 : nameService.avatar) ? (jsxRuntime.jsx("img", { src: nameService.avatar, alt: '', className: 'collect-user-data__img collect-user-data__img--rounded' })) : (jsxRuntime.jsx(AuthProviderIcon.AuthProviderIcon, { jwt: onboardingOnlyJwt, iconSize: 28 })), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'primary', weight: 'medium', className: 'collect-user-data__wallet-address', children: (nameService === null || nameService === void 0 ? void 0 : nameService.name) || shortenWalletAddress.shortenWalletAddress(walletAddress, 3, 3) })] }), jsxRuntime.jsx(NetworkPicker.NetworkPicker, { evmNetworks: evmNetworks, currentNetwork: network, connector: walletConnector, showNetworkName: true, isNetworkPickerOpen: isNetworkPickerOpen, setIsNetworkPickerOpen: setIsNetworkPickerOpen, buttonClassName: 'collect-user-data__network-picker-button', mainClassName: 'collect-user-data__network-picker' })] }), onboardingImageUrl && (jsxRuntime.jsx("img", { className: 'collect-user-data__main-img', src: onboardingImageUrl, alt: 'onboarding' })), !_isSupportedNetwork && (jsxRuntime.jsx(ErrorContainer.ErrorContainer, { withIcon: false, className: 'collect-user-data__error--not-supported', children: t('dyn_collect_user_data.not_supported_network.error_message') })), jsxRuntime.jsxs("div", { className: classNames.classNames('collect-user-data__form', {
87
87
  'collect-user-data__form--error': !_isSupportedNetwork,
88
88
  }), children: [jsxRuntime.jsx("div", { className: 'collect-user-data__success-icon', children: jsxRuntime.jsx(Icon.Icon, { color: 'text-primary', size: 'large', children: jsxRuntime.jsx(checkConnection.ReactComponent, {}) }) }), jsxRuntime.jsx(OnboardingUserDataForm.OnboardingUserDataForm, { disableSubmit: !_isSupportedNetwork, userProfile: userProfile, children: !_isSupportedNetwork ? (jsxRuntime.jsxs("div", { className: 'collect-user-data__welcome-container', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'title', color: 'primary', className: 'collect-user-data__welcome-title', children: t('dyn_collect_user_data.not_supported_network.title') }), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', children: t('dyn_collect_user_data.not_supported_network.description') })] })) : (jsxRuntime.jsxs("div", { className: 'collect-user-data__welcome-container', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'title', color: 'primary', className: 'collect-user-data__welcome-title', children: (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.general.collectUserDataWelcomeHeader) ||
89
89
  t('dyn_collect_user_data.greeting', { appName }) }), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', children: (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.general.collectUserDataWelcomeMessage) ||
@@ -79,7 +79,7 @@ const CollectUserDataView = () => {
79
79
  const evmNetworks = walletConnector.evmNetworks || [];
80
80
  const _isSupportedNetwork = !network || isSupportedNetwork({ network, walletConnector });
81
81
  const walletAddress = (_a = userProfile === null || userProfile === void 0 ? void 0 : userProfile.verifiedCredentials.find((verifiedCredential) => verifiedCredential.id === userProfile.lastVerifiedCredentialId)) === null || _a === void 0 ? void 0 : _a.address;
82
- return (jsxs("div", { className: 'collect-user-data', "data-testid": 'collect-user-data-view', children: [jsxs("div", { className: 'collect-user-data__network-container', children: [jsxs("div", { className: 'collect-user-data__img-container', children: [(nameService === null || nameService === void 0 ? void 0 : nameService.avatar) ? (jsx("img", { src: nameService.avatar, alt: '', className: 'collect-user-data__img collect-user-data__img--rounded' })) : (jsx(AuthProviderIcon, { jwt: onboardingOnlyJwt, iconSize: 28 })), jsx(Typography, { variant: 'body_normal', color: 'primary', weight: 'medium', className: 'collect-user-data__wallet-address', children: (nameService === null || nameService === void 0 ? void 0 : nameService.name) || shortenWalletAddress(walletAddress, 3, 3) })] }), jsx(NetworkPicker, { evmNetworks: evmNetworks, connector: walletConnector, showNetworkName: true, isNetworkPickerOpen: isNetworkPickerOpen, setIsNetworkPickerOpen: setIsNetworkPickerOpen, buttonClassName: 'collect-user-data__network-picker-button', mainClassName: 'collect-user-data__network-picker' })] }), onboardingImageUrl && (jsx("img", { className: 'collect-user-data__main-img', src: onboardingImageUrl, alt: 'onboarding' })), !_isSupportedNetwork && (jsx(ErrorContainer, { withIcon: false, className: 'collect-user-data__error--not-supported', children: t('dyn_collect_user_data.not_supported_network.error_message') })), jsxs("div", { className: classNames('collect-user-data__form', {
82
+ return (jsxs("div", { className: 'collect-user-data', "data-testid": 'collect-user-data-view', children: [jsxs("div", { className: 'collect-user-data__network-container', children: [jsxs("div", { className: 'collect-user-data__img-container', children: [(nameService === null || nameService === void 0 ? void 0 : nameService.avatar) ? (jsx("img", { src: nameService.avatar, alt: '', className: 'collect-user-data__img collect-user-data__img--rounded' })) : (jsx(AuthProviderIcon, { jwt: onboardingOnlyJwt, iconSize: 28 })), jsx(Typography, { variant: 'body_normal', color: 'primary', weight: 'medium', className: 'collect-user-data__wallet-address', children: (nameService === null || nameService === void 0 ? void 0 : nameService.name) || shortenWalletAddress(walletAddress, 3, 3) })] }), jsx(NetworkPicker, { evmNetworks: evmNetworks, currentNetwork: network, connector: walletConnector, showNetworkName: true, isNetworkPickerOpen: isNetworkPickerOpen, setIsNetworkPickerOpen: setIsNetworkPickerOpen, buttonClassName: 'collect-user-data__network-picker-button', mainClassName: 'collect-user-data__network-picker' })] }), onboardingImageUrl && (jsx("img", { className: 'collect-user-data__main-img', src: onboardingImageUrl, alt: 'onboarding' })), !_isSupportedNetwork && (jsx(ErrorContainer, { withIcon: false, className: 'collect-user-data__error--not-supported', children: t('dyn_collect_user_data.not_supported_network.error_message') })), jsxs("div", { className: classNames('collect-user-data__form', {
83
83
  'collect-user-data__form--error': !_isSupportedNetwork,
84
84
  }), children: [jsx("div", { className: 'collect-user-data__success-icon', children: jsx(Icon, { color: 'text-primary', size: 'large', children: jsx(SvgCheckConnection, {}) }) }), jsx(OnboardingUserDataForm, { disableSubmit: !_isSupportedNetwork, userProfile: userProfile, children: !_isSupportedNetwork ? (jsxs("div", { className: 'collect-user-data__welcome-container', children: [jsx(Typography, { variant: 'title', color: 'primary', className: 'collect-user-data__welcome-title', children: t('dyn_collect_user_data.not_supported_network.title') }), jsx(Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', children: t('dyn_collect_user_data.not_supported_network.description') })] })) : (jsxs("div", { className: 'collect-user-data__welcome-container', children: [jsx(Typography, { variant: 'title', color: 'primary', className: 'collect-user-data__welcome-title', children: (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.general.collectUserDataWelcomeHeader) ||
85
85
  t('dyn_collect_user_data.greeting', { appName }) }), jsx(Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', children: (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.general.collectUserDataWelcomeMessage) ||
@@ -38,6 +38,7 @@ require('../../components/Popper/Popper/Popper.cjs');
38
38
  require('../../components/Popper/PopperContext/PopperContext.cjs');
39
39
  require('formik');
40
40
  require('yup');
41
+ require('i18next');
41
42
  require('../../components/InlineWidget/InlineWidget.cjs');
42
43
  require('../../components/MenuList/Dropdown/Dropdown.cjs');
43
44
  require('../../components/OverlayCard/OverlayCard.context.cjs');
@@ -50,7 +51,6 @@ require('../../context/CaptchaContext/CaptchaContext.cjs');
50
51
  require('../../context/EmailVerificationContext/EmailVerificationContext.cjs');
51
52
  require('qrcode');
52
53
  require('../../context/LoadingContext/LoadingContext.cjs');
53
- require('i18next');
54
54
  require('../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
55
55
  require('../../components/UserProfile/parts/UserProfileField/components/VerifiedEmailIcon/VerifiedEmailIcon.cjs');
56
56
  require('@dynamic-labs/types');
@@ -34,6 +34,7 @@ import '../../components/Popper/Popper/Popper.js';
34
34
  import '../../components/Popper/PopperContext/PopperContext.js';
35
35
  import 'formik';
36
36
  import 'yup';
37
+ import 'i18next';
37
38
  import '../../components/InlineWidget/InlineWidget.js';
38
39
  import '../../components/MenuList/Dropdown/Dropdown.js';
39
40
  import '../../components/OverlayCard/OverlayCard.context.js';
@@ -46,7 +47,6 @@ import '../../context/CaptchaContext/CaptchaContext.js';
46
47
  import '../../context/EmailVerificationContext/EmailVerificationContext.js';
47
48
  import 'qrcode';
48
49
  import '../../context/LoadingContext/LoadingContext.js';
49
- import 'i18next';
50
50
  import '../../widgets/DynamicWidget/context/DynamicWidgetContext.js';
51
51
  import '../../components/UserProfile/parts/UserProfileField/components/VerifiedEmailIcon/VerifiedEmailIcon.js';
52
52
  import '@dynamic-labs/types';
@@ -142,6 +142,7 @@ const useLoginView = () => {
142
142
  * @returns SdkViewSection[]
143
143
  */
144
144
  const buildLoginSections = React.useCallback((buildOrder) => {
145
+ var _a;
145
146
  const loginViewSections = [];
146
147
  buildOrder === null || buildOrder === void 0 ? void 0 : buildOrder.forEach((loginItem) => {
147
148
  // Add a separator if there are sections already
@@ -162,6 +163,10 @@ const useLoginView = () => {
162
163
  loginViewSections.push(...getWalletViewSectionDefinition());
163
164
  }
164
165
  });
166
+ // remove last separator
167
+ if (((_a = loginViewSections[loginViewSections.length - 1]) === null || _a === void 0 ? void 0 : _a.type) === 'separator') {
168
+ loginViewSections.pop();
169
+ }
165
170
  return loginViewSections;
166
171
  }, [
167
172
  applyLoginModalSettings,
@@ -138,6 +138,7 @@ const useLoginView = () => {
138
138
  * @returns SdkViewSection[]
139
139
  */
140
140
  const buildLoginSections = useCallback((buildOrder) => {
141
+ var _a;
141
142
  const loginViewSections = [];
142
143
  buildOrder === null || buildOrder === void 0 ? void 0 : buildOrder.forEach((loginItem) => {
143
144
  // Add a separator if there are sections already
@@ -158,6 +159,10 @@ const useLoginView = () => {
158
159
  loginViewSections.push(...getWalletViewSectionDefinition());
159
160
  }
160
161
  });
162
+ // remove last separator
163
+ if (((_a = loginViewSections[loginViewSections.length - 1]) === null || _a === void 0 ? void 0 : _a.type) === 'separator') {
164
+ loginViewSections.pop();
165
+ }
161
166
  return loginViewSections;
162
167
  }, [
163
168
  applyLoginModalSettings,