@dynamic-labs/sdk-react-core 3.7.0 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +11 -11
- package/src/index.cjs +2 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -1
- package/src/lib/context/DynamicContext/DynamicContext.cjs +8 -2
- package/src/lib/context/DynamicContext/DynamicContext.js +8 -2
- package/src/lib/events/dynamicEvents.cjs +22 -0
- package/src/lib/events/dynamicEvents.d.ts +3 -0
- package/src/lib/events/dynamicEvents.js +21 -1
- package/src/lib/events/wallets.d.ts +4 -0
- package/src/lib/utils/hooks/events/useDynamicEvents/useDynamicEvents.cjs +1 -16
- package/src/lib/utils/hooks/events/useDynamicEvents/useDynamicEvents.d.ts +1 -1
- package/src/lib/utils/hooks/events/useDynamicEvents/useDynamicEvents.js +1 -16
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +10 -0
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +11 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
|
|
2
|
+
## [3.8.0](https://github.com/dynamic-labs/DynamicAuth/compare/v3.7.0...v3.8.0) (2024-11-20)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* allow listening to dynamic events without using a hook ([#7466](https://github.com/dynamic-labs/DynamicAuth/issues/7466)) ([#7473](https://github.com/dynamic-labs/DynamicAuth/issues/7473)) ([680afb3](https://github.com/dynamic-labs/DynamicAuth/commit/680afb31c6e6ef5d8bf3c6e129bea7a6f7d052f0))
|
|
8
|
+
* emit primaryWalletChanged event when primary wallets changes ([#7464](https://github.com/dynamic-labs/DynamicAuth/issues/7464)) ([#7469](https://github.com/dynamic-labs/DynamicAuth/issues/7469)) ([52cfe2a](https://github.com/dynamic-labs/DynamicAuth/commit/52cfe2a17dea14d4a2748f7a16acbb156d5292f8))
|
|
9
|
+
* emit primaryWalletNetworkChanged event when primary wallet network changes ([#7471](https://github.com/dynamic-labs/DynamicAuth/issues/7471)) ([185b8b4](https://github.com/dynamic-labs/DynamicAuth/commit/185b8b497d71898df319ca11e2f15c4b96d8f745)), closes [#7465](https://github.com/dynamic-labs/DynamicAuth/issues/7465)
|
|
10
|
+
|
|
2
11
|
## [3.7.0](https://github.com/dynamic-labs/DynamicAuth/compare/v3.6.3...v3.7.0) (2024-11-19)
|
|
3
12
|
|
|
4
13
|
|
package/package.cjs
CHANGED
package/package.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/sdk-react-core",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.8.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/dynamic-labs/dynamic-auth.git",
|
|
@@ -17,16 +17,16 @@
|
|
|
17
17
|
"react-i18next": "13.5.0",
|
|
18
18
|
"yup": "0.32.11",
|
|
19
19
|
"react-international-phone": "4.2.5",
|
|
20
|
-
"@dynamic-labs/assert-package-version": "3.
|
|
21
|
-
"@dynamic-labs/iconic": "3.
|
|
22
|
-
"@dynamic-labs/logger": "3.
|
|
23
|
-
"@dynamic-labs/multi-wallet": "3.
|
|
24
|
-
"@dynamic-labs/rpc-providers": "3.
|
|
25
|
-
"@dynamic-labs/store": "3.
|
|
26
|
-
"@dynamic-labs/types": "3.
|
|
27
|
-
"@dynamic-labs/utils": "3.
|
|
28
|
-
"@dynamic-labs/wallet-book": "3.
|
|
29
|
-
"@dynamic-labs/wallet-connector-core": "3.
|
|
20
|
+
"@dynamic-labs/assert-package-version": "3.8.0",
|
|
21
|
+
"@dynamic-labs/iconic": "3.8.0",
|
|
22
|
+
"@dynamic-labs/logger": "3.8.0",
|
|
23
|
+
"@dynamic-labs/multi-wallet": "3.8.0",
|
|
24
|
+
"@dynamic-labs/rpc-providers": "3.8.0",
|
|
25
|
+
"@dynamic-labs/store": "3.8.0",
|
|
26
|
+
"@dynamic-labs/types": "3.8.0",
|
|
27
|
+
"@dynamic-labs/utils": "3.8.0",
|
|
28
|
+
"@dynamic-labs/wallet-book": "3.8.0",
|
|
29
|
+
"@dynamic-labs/wallet-connector-core": "3.8.0",
|
|
30
30
|
"bs58": "5.0.0",
|
|
31
31
|
"eventemitter3": "5.0.1"
|
|
32
32
|
},
|
package/src/index.cjs
CHANGED
|
@@ -61,7 +61,7 @@ var stroke = require('./lib/shared/assets/stroke.cjs');
|
|
|
61
61
|
require('./lib/shared/consts/index.cjs');
|
|
62
62
|
require('../_virtual/_tslib.cjs');
|
|
63
63
|
require('react-dom');
|
|
64
|
-
require('./lib/events/dynamicEvents.cjs');
|
|
64
|
+
var dynamicEvents = require('./lib/events/dynamicEvents.cjs');
|
|
65
65
|
var api = require('./lib/data/api/api.cjs');
|
|
66
66
|
require('@dynamic-labs/multi-wallet');
|
|
67
67
|
require('react-international-phone');
|
|
@@ -212,6 +212,7 @@ exports.LogoutIcon = logout.ReactComponent;
|
|
|
212
212
|
exports.PencilIcon = pencil.ReactComponent;
|
|
213
213
|
exports.SpinnerIcon = spinner.ReactComponent;
|
|
214
214
|
exports.ArrowIcon = stroke.ReactComponent;
|
|
215
|
+
exports.dynamicEvents = dynamicEvents.publicDynamicEvents;
|
|
215
216
|
exports.apiClient = api.sdkApi;
|
|
216
217
|
exports.mergeNetworks = mergeNetworks.mergeNetworks;
|
|
217
218
|
exports.isAuthenticatedWithAWallet = isAuthenticatedWithAWallet.isAuthenticatedWithAWallet;
|
package/src/index.d.ts
CHANGED
|
@@ -98,6 +98,7 @@ export type { EvmNetwork, PhoneData, OtpDestination, UserProfile,
|
|
|
98
98
|
AuthOptions as AuthOption, AuthOptions,
|
|
99
99
|
/** @deprecated use AuthMethod instead */
|
|
100
100
|
AuthMethod as AuthType, AuthMethod, } from '@dynamic-labs/types';
|
|
101
|
+
export { publicDynamicEvents as dynamicEvents } from './lib/events/dynamicEvents';
|
|
101
102
|
export { mergeNetworks } from './lib/utils/functions/mergeNetworks';
|
|
102
103
|
export {
|
|
103
104
|
/** @deprecated use https://www.npmjs.com/package/classnames */
|
package/src/index.js
CHANGED
|
@@ -57,7 +57,7 @@ export { ReactComponent as ArrowIcon } from './lib/shared/assets/stroke.js';
|
|
|
57
57
|
import './lib/shared/consts/index.js';
|
|
58
58
|
import '../_virtual/_tslib.js';
|
|
59
59
|
import 'react-dom';
|
|
60
|
-
|
|
60
|
+
export { publicDynamicEvents as dynamicEvents } from './lib/events/dynamicEvents.js';
|
|
61
61
|
export { sdkApi as apiClient } from './lib/data/api/api.js';
|
|
62
62
|
import '@dynamic-labs/multi-wallet';
|
|
63
63
|
import 'react-international-phone';
|
|
@@ -15,7 +15,7 @@ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
|
|
|
15
15
|
var app = require('../../app.cjs');
|
|
16
16
|
require('../../components/Accordion/components/AccordionItem/AccordionItem.cjs');
|
|
17
17
|
require('../../components/Alert/Alert.cjs');
|
|
18
|
-
require('../../events/dynamicEvents.cjs');
|
|
18
|
+
var dynamicEvents = require('../../events/dynamicEvents.cjs');
|
|
19
19
|
require('@dynamic-labs/sdk-api-core');
|
|
20
20
|
var logger$1 = require('../../shared/logger.cjs');
|
|
21
21
|
var ViewContext = require('../ViewContext/ViewContext.cjs');
|
|
@@ -385,7 +385,13 @@ const InnerDynamicContextProvider = ({ children, theme, settings: settings$1, lo
|
|
|
385
385
|
secondaryWallets,
|
|
386
386
|
verifiedCredentials: (user$1 === null || user$1 === void 0 ? void 0 : user$1.verifiedCredentials) || [],
|
|
387
387
|
});
|
|
388
|
-
const { isLoading: loadingNetwork, network } = useWalletConnectorNetwork.useWalletConnectorNetwork(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector
|
|
388
|
+
const { isLoading: loadingNetwork, network } = useWalletConnectorNetwork.useWalletConnectorNetwork(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, {
|
|
389
|
+
onChange: (newNetwork) => {
|
|
390
|
+
if (newNetwork) {
|
|
391
|
+
dynamicEvents.dynamicEvents.emit('primaryWalletNetworkChanged', newNetwork);
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
});
|
|
389
395
|
useWalletEventListeners.useWalletEventListeners({
|
|
390
396
|
authMode,
|
|
391
397
|
detectNewWalletsForLinking,
|
|
@@ -11,7 +11,7 @@ import { setChainInfoOverrides, logger as logger$1, isSessionKeyCompatibleWallet
|
|
|
11
11
|
import { DynamicAuthFlow } from '../../app.js';
|
|
12
12
|
import '../../components/Accordion/components/AccordionItem/AccordionItem.js';
|
|
13
13
|
import '../../components/Alert/Alert.js';
|
|
14
|
-
import '../../events/dynamicEvents.js';
|
|
14
|
+
import { dynamicEvents } from '../../events/dynamicEvents.js';
|
|
15
15
|
import '@dynamic-labs/sdk-api-core';
|
|
16
16
|
import { logger } from '../../shared/logger.js';
|
|
17
17
|
import { ViewContextProvider } from '../ViewContext/ViewContext.js';
|
|
@@ -381,7 +381,13 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, enable
|
|
|
381
381
|
secondaryWallets,
|
|
382
382
|
verifiedCredentials: (user === null || user === void 0 ? void 0 : user.verifiedCredentials) || [],
|
|
383
383
|
});
|
|
384
|
-
const { isLoading: loadingNetwork, network } = useWalletConnectorNetwork(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector
|
|
384
|
+
const { isLoading: loadingNetwork, network } = useWalletConnectorNetwork(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, {
|
|
385
|
+
onChange: (newNetwork) => {
|
|
386
|
+
if (newNetwork) {
|
|
387
|
+
dynamicEvents.emit('primaryWalletNetworkChanged', newNetwork);
|
|
388
|
+
}
|
|
389
|
+
},
|
|
390
|
+
});
|
|
385
391
|
useWalletEventListeners({
|
|
386
392
|
authMode,
|
|
387
393
|
detectNewWalletsForLinking,
|
|
@@ -9,6 +9,28 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
9
9
|
|
|
10
10
|
var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
|
|
11
11
|
|
|
12
|
+
// ATTENTION
|
|
13
|
+
// Everything below should be made public soon, but we need to plan this out first
|
|
14
|
+
// Main issues:
|
|
15
|
+
// 1. How should we map customer callback names to our dynamic event names?
|
|
16
|
+
// -> Gui's suggestion: breaking change to rename customer callbacks so they fit these events names
|
|
17
|
+
// 2. We would have to remove these callbacks from the useCustomerCallbacks hook
|
|
18
|
+
/** Which events are accessible by our clients */
|
|
19
|
+
const externalEvents = [
|
|
20
|
+
'emailVerificationResult',
|
|
21
|
+
'embeddedWalletCreated',
|
|
22
|
+
'logout',
|
|
23
|
+
'walletAdded',
|
|
24
|
+
'primaryWalletChanged',
|
|
25
|
+
'primaryWalletNetworkChanged',
|
|
26
|
+
'mfaCompletionSuccess',
|
|
27
|
+
'mfaCompletionFailure',
|
|
28
|
+
];
|
|
29
|
+
// Full internal event emitter
|
|
12
30
|
const dynamicEvents = new EventEmitter__default["default"]();
|
|
31
|
+
// Limited public event emitter with subset of events
|
|
32
|
+
const publicDynamicEvents = dynamicEvents;
|
|
13
33
|
|
|
14
34
|
exports.dynamicEvents = dynamicEvents;
|
|
35
|
+
exports.externalEvents = externalEvents;
|
|
36
|
+
exports.publicDynamicEvents = publicDynamicEvents;
|
|
@@ -10,5 +10,8 @@ import { MultiWalletInternalEvents } from './multiWallet';
|
|
|
10
10
|
import { tokenBalancesEvents } from './tokenBalances';
|
|
11
11
|
/** Maps internal event names to their listeners */
|
|
12
12
|
export type DynamicEvents = AuthEvents & UIEvents & OTPEvents & WalletEvents & PasskeyEvents & SocialEvents & EmbeddedWalletEvents & MultiWalletInternalEvents & tokenBalancesEvents;
|
|
13
|
+
/** Which events are accessible by our clients */
|
|
14
|
+
export declare const externalEvents: ("logout" | "mfaCompletionSuccess" | "mfaCompletionFailure" | "emailVerificationResult" | "walletAdded" | "primaryWalletChanged" | "primaryWalletNetworkChanged" | "embeddedWalletCreated")[];
|
|
13
15
|
export declare const dynamicEvents: EventEmitter<DynamicEvents, any>;
|
|
16
|
+
export declare const publicDynamicEvents: EventEmitter<"logout" | "mfaCompletionSuccess" | "mfaCompletionFailure" | "emailVerificationResult" | "walletAdded" | "primaryWalletChanged" | "primaryWalletNetworkChanged" | "embeddedWalletCreated", any>;
|
|
14
17
|
export type DynamicEventEmitter = typeof dynamicEvents;
|
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import EventEmitter from 'eventemitter3';
|
|
3
3
|
|
|
4
|
+
// ATTENTION
|
|
5
|
+
// Everything below should be made public soon, but we need to plan this out first
|
|
6
|
+
// Main issues:
|
|
7
|
+
// 1. How should we map customer callback names to our dynamic event names?
|
|
8
|
+
// -> Gui's suggestion: breaking change to rename customer callbacks so they fit these events names
|
|
9
|
+
// 2. We would have to remove these callbacks from the useCustomerCallbacks hook
|
|
10
|
+
/** Which events are accessible by our clients */
|
|
11
|
+
const externalEvents = [
|
|
12
|
+
'emailVerificationResult',
|
|
13
|
+
'embeddedWalletCreated',
|
|
14
|
+
'logout',
|
|
15
|
+
'walletAdded',
|
|
16
|
+
'primaryWalletChanged',
|
|
17
|
+
'primaryWalletNetworkChanged',
|
|
18
|
+
'mfaCompletionSuccess',
|
|
19
|
+
'mfaCompletionFailure',
|
|
20
|
+
];
|
|
21
|
+
// Full internal event emitter
|
|
4
22
|
const dynamicEvents = new EventEmitter();
|
|
23
|
+
// Limited public event emitter with subset of events
|
|
24
|
+
const publicDynamicEvents = dynamicEvents;
|
|
5
25
|
|
|
6
|
-
export { dynamicEvents };
|
|
26
|
+
export { dynamicEvents, externalEvents, publicDynamicEvents };
|
|
@@ -4,4 +4,8 @@ export type WalletEvents = {
|
|
|
4
4
|
walletAdded: (wallet: Wallet, userWallets: Wallet[]) => void;
|
|
5
5
|
/** Triggered when a wallet is removed from user wallets list */
|
|
6
6
|
walletRemoved: (wallet: Wallet, userWallets: Wallet[]) => void;
|
|
7
|
+
/** Triggered when the primary wallet changes (a different wallet is selected) */
|
|
8
|
+
primaryWalletChanged: (newPrimaryWallet: Wallet) => void;
|
|
9
|
+
/** Triggered when the network changes in primary wallet */
|
|
10
|
+
primaryWalletNetworkChanged: (newNetwork: string | number) => void;
|
|
7
11
|
};
|
|
@@ -18,24 +18,9 @@ const useInternalDynamicEvents = (event, listener) => {
|
|
|
18
18
|
};
|
|
19
19
|
}, [event]);
|
|
20
20
|
};
|
|
21
|
-
// ATTENTION
|
|
22
|
-
// Everything below should be made public soon, but we need to plan this out first
|
|
23
|
-
// Main issues:
|
|
24
|
-
// 1. How should we map customer callback names to our dynamic event names?
|
|
25
|
-
// -> Gui's suggestion: breaking change to rename customer callbacks so they fit these events names
|
|
26
|
-
// 2. We would have to remove these callbacks from the useCustomerCallbacks hook
|
|
27
|
-
/** Which events are accessible by our clients */
|
|
28
|
-
const externalEvents = [
|
|
29
|
-
'emailVerificationResult',
|
|
30
|
-
'embeddedWalletCreated',
|
|
31
|
-
'logout',
|
|
32
|
-
'walletAdded',
|
|
33
|
-
'mfaCompletionSuccess',
|
|
34
|
-
'mfaCompletionFailure',
|
|
35
|
-
];
|
|
36
21
|
/** Allows subscribing to dynamic events directly inside components with a hook */
|
|
37
22
|
const useDynamicEvents = (event, listener) => {
|
|
38
|
-
if (!externalEvents.includes(event))
|
|
23
|
+
if (!dynamicEvents.externalEvents.includes(event))
|
|
39
24
|
throw new Error(`Unrecognized event "${event}" used with useDynamicEvents`);
|
|
40
25
|
useInternalDynamicEvents(event, listener);
|
|
41
26
|
};
|
|
@@ -4,5 +4,5 @@ type DynamicEventListener<E extends keyof DynamicEvents> = (...args: EventArgs<D
|
|
|
4
4
|
/** Allows us to subscribe to all dynamicEvents with a hook, even the internal ones */
|
|
5
5
|
export declare const useInternalDynamicEvents: <E extends keyof import("../../../../events/auth").AuthEvents | keyof import("../../../../events/ui").UIEvents | keyof import("../../../../events/otp").OTPEvents | keyof import("../../../../events/wallets").WalletEvents | keyof import("../../../../events/passkey").PasskeyEvents | "farcasterConnectCancelled" | keyof import("../../../../events/embeddedWallet").EmbeddedWalletEvents | keyof import("../../../../events/multiWallet").MultiWalletInternalEvents | "tokenBalancesChanged">(event: E, listener: DynamicEventListener<E>) => void;
|
|
6
6
|
/** Allows subscribing to dynamic events directly inside components with a hook */
|
|
7
|
-
export declare const useDynamicEvents: <E extends "logout" | "mfaCompletionSuccess" | "mfaCompletionFailure" | "emailVerificationResult" | "walletAdded" | "embeddedWalletCreated">(event: E, listener: DynamicEventListener<E>) => void;
|
|
7
|
+
export declare const useDynamicEvents: <E extends "logout" | "mfaCompletionSuccess" | "mfaCompletionFailure" | "emailVerificationResult" | "walletAdded" | "primaryWalletChanged" | "primaryWalletNetworkChanged" | "embeddedWalletCreated">(event: E, listener: DynamicEventListener<E>) => void;
|
|
8
8
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { useRef, useEffect } from 'react';
|
|
3
|
-
import { dynamicEvents } from '../../../../events/dynamicEvents.js';
|
|
3
|
+
import { externalEvents, dynamicEvents } from '../../../../events/dynamicEvents.js';
|
|
4
4
|
|
|
5
5
|
/** Allows us to subscribe to all dynamicEvents with a hook, even the internal ones */
|
|
6
6
|
const useInternalDynamicEvents = (event, listener) => {
|
|
@@ -14,21 +14,6 @@ const useInternalDynamicEvents = (event, listener) => {
|
|
|
14
14
|
};
|
|
15
15
|
}, [event]);
|
|
16
16
|
};
|
|
17
|
-
// ATTENTION
|
|
18
|
-
// Everything below should be made public soon, but we need to plan this out first
|
|
19
|
-
// Main issues:
|
|
20
|
-
// 1. How should we map customer callback names to our dynamic event names?
|
|
21
|
-
// -> Gui's suggestion: breaking change to rename customer callbacks so they fit these events names
|
|
22
|
-
// 2. We would have to remove these callbacks from the useCustomerCallbacks hook
|
|
23
|
-
/** Which events are accessible by our clients */
|
|
24
|
-
const externalEvents = [
|
|
25
|
-
'emailVerificationResult',
|
|
26
|
-
'embeddedWalletCreated',
|
|
27
|
-
'logout',
|
|
28
|
-
'walletAdded',
|
|
29
|
-
'mfaCompletionSuccess',
|
|
30
|
-
'mfaCompletionFailure',
|
|
31
|
-
];
|
|
32
17
|
/** Allows subscribing to dynamic events directly inside components with a hook */
|
|
33
18
|
const useDynamicEvents = (event, listener) => {
|
|
34
19
|
if (!externalEvents.includes(event))
|
|
@@ -18,11 +18,14 @@ require('../../constants/colors.cjs');
|
|
|
18
18
|
require('../../constants/values.cjs');
|
|
19
19
|
require('../../../store/state/loadingAndLifecycle.cjs');
|
|
20
20
|
require('../../../shared/consts/index.cjs');
|
|
21
|
+
var dynamicEvents = require('../../../events/dynamicEvents.cjs');
|
|
21
22
|
var createLinkedWalletsFromWalletOptions = require('./utils/createLinkedWalletsFromWalletOptions/createLinkedWalletsFromWalletOptions.cjs');
|
|
22
23
|
var updateUserWalletsFromLinkedWallets = require('./utils/updateUserWalletsFromLinkedWallets/updateUserWalletsFromLinkedWallets.cjs');
|
|
23
24
|
|
|
24
25
|
const useWalletConnectors = ({ authMode, connectedWallets, walletConnectorOptions, setMultiWalletWidgetState, primaryWalletId, setPrimaryWalletId, user, canHaveMultipleWalletsConnected, separateSmartWalletAndSigner = false, }) => {
|
|
25
26
|
const [showQrcodeModal, setShowQrcodeModal] = React.useState(false);
|
|
27
|
+
// keeps track of the last primary wallet id to avoid emitting the same event multiple times
|
|
28
|
+
const lastPrimaryWalletId = React.useRef(primaryWalletId);
|
|
26
29
|
const linkedWallets = React.useMemo(() => {
|
|
27
30
|
if (!user) {
|
|
28
31
|
return [];
|
|
@@ -77,6 +80,13 @@ const useWalletConnectors = ({ authMode, connectedWallets, walletConnectorOption
|
|
|
77
80
|
setUserWallets((userWallets) => updateUserWalletsFromLinkedWallets.updateUserWalletsFromLinkedWallets(userWallets, wallets));
|
|
78
81
|
}, [setUserWallets, wallets]);
|
|
79
82
|
const primaryWallet = React.useMemo(() => { var _a; return (_a = wallets.find((wallet) => wallet.id === primaryWalletId)) !== null && _a !== void 0 ? _a : null; }, [primaryWalletId, wallets]);
|
|
83
|
+
// emit primaryWalletChanged event if the primary wallet changes
|
|
84
|
+
React.useEffect(() => {
|
|
85
|
+
if (primaryWallet && primaryWallet.id !== lastPrimaryWalletId.current) {
|
|
86
|
+
lastPrimaryWalletId.current = primaryWallet.id;
|
|
87
|
+
dynamicEvents.dynamicEvents.emit('primaryWalletChanged', primaryWallet);
|
|
88
|
+
}
|
|
89
|
+
}, [primaryWallet]);
|
|
80
90
|
const secondaryWallets = React.useMemo(() => canHaveMultipleWalletsConnected
|
|
81
91
|
? wallets.filter((wallet) => wallet.id !== primaryWalletId)
|
|
82
92
|
: [], [primaryWalletId, wallets, canHaveMultipleWalletsConnected]);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { __awaiter } from '../../../../../_virtual/_tslib.js';
|
|
3
|
-
import { useState, useMemo, useEffect, useCallback } from 'react';
|
|
3
|
+
import { useState, useRef, useMemo, useEffect, useCallback } from 'react';
|
|
4
4
|
import { DynamicError } from '@dynamic-labs/utils';
|
|
5
5
|
import { isEmbeddedConnector, isEmailWalletConnector } from '@dynamic-labs/wallet-connector-core';
|
|
6
6
|
import { useInternalUserWallets } from '../../../context/UserWalletsContext/UserWalletsContext.js';
|
|
@@ -14,11 +14,14 @@ import '../../constants/colors.js';
|
|
|
14
14
|
import '../../constants/values.js';
|
|
15
15
|
import '../../../store/state/loadingAndLifecycle.js';
|
|
16
16
|
import '../../../shared/consts/index.js';
|
|
17
|
+
import { dynamicEvents } from '../../../events/dynamicEvents.js';
|
|
17
18
|
import { createLinkedWalletsFromWalletOptions } from './utils/createLinkedWalletsFromWalletOptions/createLinkedWalletsFromWalletOptions.js';
|
|
18
19
|
import { updateUserWalletsFromLinkedWallets } from './utils/updateUserWalletsFromLinkedWallets/updateUserWalletsFromLinkedWallets.js';
|
|
19
20
|
|
|
20
21
|
const useWalletConnectors = ({ authMode, connectedWallets, walletConnectorOptions, setMultiWalletWidgetState, primaryWalletId, setPrimaryWalletId, user, canHaveMultipleWalletsConnected, separateSmartWalletAndSigner = false, }) => {
|
|
21
22
|
const [showQrcodeModal, setShowQrcodeModal] = useState(false);
|
|
23
|
+
// keeps track of the last primary wallet id to avoid emitting the same event multiple times
|
|
24
|
+
const lastPrimaryWalletId = useRef(primaryWalletId);
|
|
22
25
|
const linkedWallets = useMemo(() => {
|
|
23
26
|
if (!user) {
|
|
24
27
|
return [];
|
|
@@ -73,6 +76,13 @@ const useWalletConnectors = ({ authMode, connectedWallets, walletConnectorOption
|
|
|
73
76
|
setUserWallets((userWallets) => updateUserWalletsFromLinkedWallets(userWallets, wallets));
|
|
74
77
|
}, [setUserWallets, wallets]);
|
|
75
78
|
const primaryWallet = useMemo(() => { var _a; return (_a = wallets.find((wallet) => wallet.id === primaryWalletId)) !== null && _a !== void 0 ? _a : null; }, [primaryWalletId, wallets]);
|
|
79
|
+
// emit primaryWalletChanged event if the primary wallet changes
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
if (primaryWallet && primaryWallet.id !== lastPrimaryWalletId.current) {
|
|
82
|
+
lastPrimaryWalletId.current = primaryWallet.id;
|
|
83
|
+
dynamicEvents.emit('primaryWalletChanged', primaryWallet);
|
|
84
|
+
}
|
|
85
|
+
}, [primaryWallet]);
|
|
76
86
|
const secondaryWallets = useMemo(() => canHaveMultipleWalletsConnected
|
|
77
87
|
? wallets.filter((wallet) => wallet.id !== primaryWalletId)
|
|
78
88
|
: [], [primaryWalletId, wallets, canHaveMultipleWalletsConnected]);
|