@dynamic-labs/sdk-react-core 2.2.2 → 2.2.3
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 +12 -2
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +13 -13
- package/src/lib/Main.cjs +1 -0
- package/src/lib/Main.js +1 -0
- package/src/lib/context/DynamicContext/DynamicContext.cjs +2 -1
- package/src/lib/context/DynamicContext/DynamicContext.js +2 -1
- package/src/lib/context/WidgetRegistry/WidgetRegistryContextProvider.cjs +77 -0
- package/src/lib/context/WidgetRegistry/WidgetRegistryContextProvider.d.ts +6 -0
- package/src/lib/context/WidgetRegistry/WidgetRegistryContextProvider.js +71 -0
- package/src/lib/context/WidgetRegistry/index.d.ts +1 -0
- package/src/lib/data/api/wallets/wallets.cjs +2 -1
- package/src/lib/data/api/wallets/wallets.d.ts +2 -1
- package/src/lib/data/api/wallets/wallets.js +2 -1
- package/src/lib/events/dynamicEvents.d.ts +2 -1
- package/src/lib/events/multiWallet.d.ts +5 -0
- package/src/lib/styles/index.shadow.cjs +1 -1
- package/src/lib/styles/index.shadow.js +1 -1
- package/src/lib/utils/hooks/events/useDynamicEvents/useDynamicEvents.d.ts +1 -1
- package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.cjs +3 -1
- package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.js +3 -1
- package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.cjs +6 -2
- package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.js +6 -2
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +1 -6
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +1 -6
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +44 -27
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +45 -28
- package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.cjs +4 -14
- package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.js +5 -15
- package/src/lib/widgets/DynamicMultiWalletPromptsWidget/DynamicMultiWalletPromptsWidget.cjs +5 -5
- package/src/lib/widgets/DynamicMultiWalletPromptsWidget/DynamicMultiWalletPromptsWidget.js +5 -5
- package/src/lib/widgets/DynamicWidget/components/DynamicUserProfile/DynamicUserProfile.cjs +4 -1
- package/src/lib/widgets/DynamicWidget/components/DynamicUserProfile/DynamicUserProfile.js +4 -1
- package/src/lib/widgets/DynamicWidget/prompts/PrimaryNotConnectedModal/PrimaryNotConnectedModal.cjs +1 -1
- package/src/lib/widgets/DynamicWidget/prompts/PrimaryNotConnectedModal/PrimaryNotConnectedModal.js +1 -1
|
@@ -2,7 +2,7 @@ import { DynamicEvents } from '../../../../events';
|
|
|
2
2
|
import { EventArgs } from '../types';
|
|
3
3
|
type DynamicEventListener<E extends keyof DynamicEvents> = (...args: EventArgs<DynamicEvents, E>) => void;
|
|
4
4
|
/** Allows us to subscribe to all dynamicEvents with a hook, even the internal ones */
|
|
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>(event: E, listener: DynamicEventListener<E>) => void;
|
|
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 | "triggerComputePrimaryWalletMultiWalletStateFromAccounts">(event: E, listener: DynamicEventListener<E>) => void;
|
|
6
6
|
/** Allows subscribing to dynamic events directly inside components with a hook */
|
|
7
7
|
export declare const useDynamicEvents: <E extends "logout" | "emailVerificationResult" | "walletAdded" | "embeddedWalletCreated">(event: E, listener: DynamicEventListener<E>) => void;
|
|
8
8
|
export {};
|
|
@@ -46,6 +46,9 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
|
|
|
46
46
|
return;
|
|
47
47
|
yield wallets.unlinkWallet({
|
|
48
48
|
environmentId,
|
|
49
|
+
onSuccess: () => {
|
|
50
|
+
removedWalletsIds.current.push(walletId);
|
|
51
|
+
},
|
|
49
52
|
primaryWalletId: currentPrimaryWalletId,
|
|
50
53
|
walletId,
|
|
51
54
|
});
|
|
@@ -55,7 +58,6 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
|
|
|
55
58
|
if (numberOfLinkedWallets === 1) {
|
|
56
59
|
yield (wallet === null || wallet === void 0 ? void 0 : wallet.connector.endSession());
|
|
57
60
|
}
|
|
58
|
-
removedWalletsIds.current.push(walletId);
|
|
59
61
|
}), [
|
|
60
62
|
primaryWalletId,
|
|
61
63
|
environmentId,
|
|
@@ -42,6 +42,9 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
|
|
|
42
42
|
return;
|
|
43
43
|
yield unlinkWallet({
|
|
44
44
|
environmentId,
|
|
45
|
+
onSuccess: () => {
|
|
46
|
+
removedWalletsIds.current.push(walletId);
|
|
47
|
+
},
|
|
45
48
|
primaryWalletId: currentPrimaryWalletId,
|
|
46
49
|
walletId,
|
|
47
50
|
});
|
|
@@ -51,7 +54,6 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
|
|
|
51
54
|
if (numberOfLinkedWallets === 1) {
|
|
52
55
|
yield (wallet === null || wallet === void 0 ? void 0 : wallet.connector.endSession());
|
|
53
56
|
}
|
|
54
|
-
removedWalletsIds.current.push(walletId);
|
|
55
57
|
}), [
|
|
56
58
|
primaryWalletId,
|
|
57
59
|
environmentId,
|
|
@@ -26,7 +26,7 @@ require('@dynamic-labs/store');
|
|
|
26
26
|
require('../../../locale/locale.cjs');
|
|
27
27
|
var user = require('../../../data/api/user/user.cjs');
|
|
28
28
|
require('../../../context/DynamicContext/DynamicContext.cjs');
|
|
29
|
-
require('../../../events/dynamicEvents.cjs');
|
|
29
|
+
var dynamicEvents = require('../../../events/dynamicEvents.cjs');
|
|
30
30
|
require('../../../context/CaptchaContext/CaptchaContext.cjs');
|
|
31
31
|
require('../../../context/ErrorContext/ErrorContext.cjs');
|
|
32
32
|
require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
|
|
@@ -79,7 +79,7 @@ require('../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCa
|
|
|
79
79
|
var useInternalDynamicContext = require('../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
|
|
80
80
|
|
|
81
81
|
const useMergeUserAccounts = () => {
|
|
82
|
-
const { environmentId, setShowAuthFlow } = useInternalDynamicContext.useInternalDynamicContext();
|
|
82
|
+
const { environmentId, setShowAuthFlow, selectedWalletConnector } = useInternalDynamicContext.useInternalDynamicContext();
|
|
83
83
|
const { addedWalletsIds } = UserWalletsContext.useInternalUserWallets();
|
|
84
84
|
const mergeUserAccounts = (mergeConflictResolutions) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
85
85
|
const user$1 = yield user.verifyMergeUsers(environmentId, mergeConflictResolutions);
|
|
@@ -87,6 +87,10 @@ const useMergeUserAccounts = () => {
|
|
|
87
87
|
if (walletId) {
|
|
88
88
|
addedWalletsIds.current.push(walletId);
|
|
89
89
|
}
|
|
90
|
+
const accounts = yield (selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.getConnectedAccounts());
|
|
91
|
+
if (accounts === null || accounts === void 0 ? void 0 : accounts.length) {
|
|
92
|
+
dynamicEvents.dynamicEvents.emit('triggerComputePrimaryWalletMultiWalletStateFromAccounts', { accounts });
|
|
93
|
+
}
|
|
90
94
|
setShowAuthFlow(false);
|
|
91
95
|
});
|
|
92
96
|
return {
|
|
@@ -22,7 +22,7 @@ import '@dynamic-labs/store';
|
|
|
22
22
|
import '../../../locale/locale.js';
|
|
23
23
|
import { verifyMergeUsers } from '../../../data/api/user/user.js';
|
|
24
24
|
import '../../../context/DynamicContext/DynamicContext.js';
|
|
25
|
-
import '../../../events/dynamicEvents.js';
|
|
25
|
+
import { dynamicEvents } from '../../../events/dynamicEvents.js';
|
|
26
26
|
import '../../../context/CaptchaContext/CaptchaContext.js';
|
|
27
27
|
import '../../../context/ErrorContext/ErrorContext.js';
|
|
28
28
|
import '../../../context/AccessDeniedContext/AccessDeniedContext.js';
|
|
@@ -75,7 +75,7 @@ import '../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCar
|
|
|
75
75
|
import { useInternalDynamicContext } from '../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.js';
|
|
76
76
|
|
|
77
77
|
const useMergeUserAccounts = () => {
|
|
78
|
-
const { environmentId, setShowAuthFlow } = useInternalDynamicContext();
|
|
78
|
+
const { environmentId, setShowAuthFlow, selectedWalletConnector } = useInternalDynamicContext();
|
|
79
79
|
const { addedWalletsIds } = useInternalUserWallets();
|
|
80
80
|
const mergeUserAccounts = (mergeConflictResolutions) => __awaiter(void 0, void 0, void 0, function* () {
|
|
81
81
|
const user = yield verifyMergeUsers(environmentId, mergeConflictResolutions);
|
|
@@ -83,6 +83,10 @@ const useMergeUserAccounts = () => {
|
|
|
83
83
|
if (walletId) {
|
|
84
84
|
addedWalletsIds.current.push(walletId);
|
|
85
85
|
}
|
|
86
|
+
const accounts = yield (selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.getConnectedAccounts());
|
|
87
|
+
if (accounts === null || accounts === void 0 ? void 0 : accounts.length) {
|
|
88
|
+
dynamicEvents.emit('triggerComputePrimaryWalletMultiWalletStateFromAccounts', { accounts });
|
|
89
|
+
}
|
|
86
90
|
setShowAuthFlow(false);
|
|
87
91
|
});
|
|
88
92
|
return {
|
|
@@ -82,14 +82,9 @@ const useWalletConnectors = ({ authMode, connectedWallets, walletConnectorOption
|
|
|
82
82
|
const { setUserWallets } = UserWalletsContext.useInternalUserWallets();
|
|
83
83
|
// Keep userWallets in sync whenever linkedWallets changes
|
|
84
84
|
React.useEffect(() => {
|
|
85
|
-
// we don't want to set the user wallets until their connected states have been computed
|
|
86
|
-
// but that doesn't matter if the wallets list is empty, and if we return early when
|
|
87
|
-
// the wallets list is empty, we'll never set the user wallets correctly after logout
|
|
88
|
-
if (!didConnectedStateLoad.current && wallets.length)
|
|
89
|
-
return;
|
|
90
85
|
logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[useWalletConnectors] will call setUserWallets', wallets);
|
|
91
86
|
setUserWallets((userWallets) => updateUserWalletsFromLinkedWallets.updateUserWalletsFromLinkedWallets(userWallets, wallets));
|
|
92
|
-
}, [
|
|
87
|
+
}, [setUserWallets, wallets]);
|
|
93
88
|
const primaryWallet = React.useMemo(() => { var _a; return (_a = wallets.find((wallet) => wallet.id === primaryWalletId)) !== null && _a !== void 0 ? _a : null; }, [primaryWalletId, wallets]);
|
|
94
89
|
const secondaryWallets = React.useMemo(() => canHaveMultipleWalletsConnected
|
|
95
90
|
? wallets.filter((wallet) => wallet.id !== primaryWalletId)
|
|
@@ -78,14 +78,9 @@ const useWalletConnectors = ({ authMode, connectedWallets, walletConnectorOption
|
|
|
78
78
|
const { setUserWallets } = useInternalUserWallets();
|
|
79
79
|
// Keep userWallets in sync whenever linkedWallets changes
|
|
80
80
|
useEffect(() => {
|
|
81
|
-
// we don't want to set the user wallets until their connected states have been computed
|
|
82
|
-
// but that doesn't matter if the wallets list is empty, and if we return early when
|
|
83
|
-
// the wallets list is empty, we'll never set the user wallets correctly after logout
|
|
84
|
-
if (!didConnectedStateLoad.current && wallets.length)
|
|
85
|
-
return;
|
|
86
81
|
logVerboseTroubleshootingMessage('[useWalletConnectors] will call setUserWallets', wallets);
|
|
87
82
|
setUserWallets((userWallets) => updateUserWalletsFromLinkedWallets(userWallets, wallets));
|
|
88
|
-
}, [
|
|
83
|
+
}, [setUserWallets, wallets]);
|
|
89
84
|
const primaryWallet = useMemo(() => { var _a; return (_a = wallets.find((wallet) => wallet.id === primaryWalletId)) !== null && _a !== void 0 ? _a : null; }, [primaryWalletId, wallets]);
|
|
90
85
|
const secondaryWallets = useMemo(() => canHaveMultipleWalletsConnected
|
|
91
86
|
? wallets.filter((wallet) => wallet.id !== primaryWalletId)
|
|
@@ -17,7 +17,7 @@ require('../../constants/values.cjs');
|
|
|
17
17
|
require('../../../shared/utils/classes/storage/localStorage.cjs');
|
|
18
18
|
require('@dynamic-labs/utils');
|
|
19
19
|
require('../../../shared/consts/index.cjs');
|
|
20
|
-
require('
|
|
20
|
+
var useDynamicEvents = require('../events/useDynamicEvents/useDynamicEvents.cjs');
|
|
21
21
|
var useWalletConnectorEvent = require('../events/useWalletConnectorEvent/useWalletConnectorEvent.cjs');
|
|
22
22
|
|
|
23
23
|
const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
|
|
@@ -32,10 +32,29 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
|
|
|
32
32
|
}
|
|
33
33
|
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
34
34
|
});
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
const handleAccountChangeWhenAwaitingAccountSwitch = React.useCallback((isPrimaryWallet, newAddress) => {
|
|
36
|
+
const linkedSecondaryWallet = secondaryWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
37
|
+
// this means the user is linking a new account, so we need proof of ownership...
|
|
38
|
+
if (!linkedSecondaryWallet) {
|
|
39
|
+
setMultiWalletWidgetState('awaiting_signature', undefined, 'linking_new_wallet');
|
|
40
|
+
if (isPrimaryWallet && primaryWallet) {
|
|
41
|
+
setSelectedWalletConnectorKey(primaryWallet.connector.key);
|
|
42
|
+
}
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// ...otherwise, the user is switching primary accounts betweeen the same wallet
|
|
46
|
+
setSelectedWalletWithAction(null);
|
|
47
|
+
setPrimaryWalletId(linkedSecondaryWallet.id);
|
|
48
|
+
setMultiWalletWidgetState('idle');
|
|
49
|
+
}, [
|
|
50
|
+
setMultiWalletWidgetState,
|
|
51
|
+
primaryWallet,
|
|
52
|
+
secondaryWallets,
|
|
53
|
+
setSelectedWalletConnectorKey,
|
|
54
|
+
setSelectedWalletWithAction,
|
|
55
|
+
setPrimaryWalletId,
|
|
56
|
+
]);
|
|
57
|
+
const calculatePrimaryWalletMultiWalletStateFromAccounts = React.useCallback(({ accounts }) => {
|
|
39
58
|
// change the api here
|
|
40
59
|
if (!primaryWallet)
|
|
41
60
|
return;
|
|
@@ -74,6 +93,26 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
|
|
|
74
93
|
logger.logger.error(`Unexpected multiWalletWidgetState (${multiWalletWidgetState}) and onAccountChange combination. Resetting state to idle.`);
|
|
75
94
|
setMultiWalletWidgetState('idle');
|
|
76
95
|
}
|
|
96
|
+
}, [
|
|
97
|
+
authMode,
|
|
98
|
+
handleAccountChangeWhenAwaitingAccountSwitch,
|
|
99
|
+
multiWallet,
|
|
100
|
+
multiWalletWidgetState,
|
|
101
|
+
primaryWallet,
|
|
102
|
+
refreshConnectedWallet,
|
|
103
|
+
secondaryWallets,
|
|
104
|
+
setMultiWalletWidgetState,
|
|
105
|
+
setPrimaryWalletId,
|
|
106
|
+
setSelectedWalletConnectorKey,
|
|
107
|
+
setSelectedWalletWithAction,
|
|
108
|
+
user,
|
|
109
|
+
]);
|
|
110
|
+
useDynamicEvents.useInternalDynamicEvents('triggerComputePrimaryWalletMultiWalletStateFromAccounts', calculatePrimaryWalletMultiWalletStateFromAccounts);
|
|
111
|
+
useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', ({ accounts }) => {
|
|
112
|
+
logger.logger.debug('primary wallet account change', {
|
|
113
|
+
accounts,
|
|
114
|
+
});
|
|
115
|
+
calculatePrimaryWalletMultiWalletStateFromAccounts({ accounts });
|
|
77
116
|
});
|
|
78
117
|
const uniqueNonPrimaryWallets = React.useMemo(() => {
|
|
79
118
|
const primaryConnector = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector;
|
|
@@ -117,28 +156,6 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
|
|
|
117
156
|
}
|
|
118
157
|
}
|
|
119
158
|
});
|
|
120
|
-
const handleAccountChangeWhenAwaitingAccountSwitch = React.useCallback((isPrimaryWallet, newAddress) => {
|
|
121
|
-
const linkedSecondaryWallet = secondaryWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
122
|
-
// this means the user is linking a new account, so we need proof of ownership...
|
|
123
|
-
if (!linkedSecondaryWallet) {
|
|
124
|
-
setMultiWalletWidgetState('awaiting_signature', undefined, 'linking_new_wallet');
|
|
125
|
-
if (isPrimaryWallet && primaryWallet) {
|
|
126
|
-
setSelectedWalletConnectorKey(primaryWallet.connector.key);
|
|
127
|
-
}
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
// ...otherwise, the user is switching primary accounts betweeen the same wallet
|
|
131
|
-
setSelectedWalletWithAction(null);
|
|
132
|
-
setPrimaryWalletId(linkedSecondaryWallet.id);
|
|
133
|
-
setMultiWalletWidgetState('idle');
|
|
134
|
-
}, [
|
|
135
|
-
setMultiWalletWidgetState,
|
|
136
|
-
primaryWallet,
|
|
137
|
-
secondaryWallets,
|
|
138
|
-
setSelectedWalletConnectorKey,
|
|
139
|
-
setSelectedWalletWithAction,
|
|
140
|
-
setPrimaryWalletId,
|
|
141
|
-
]);
|
|
142
159
|
};
|
|
143
160
|
|
|
144
161
|
exports.useWalletEventListeners = useWalletEventListeners;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { __awaiter } from '../../../../../_virtual/_tslib.js';
|
|
3
|
-
import {
|
|
3
|
+
import { useCallback, useMemo } from 'react';
|
|
4
4
|
import { isSameAddress } from '@dynamic-labs/wallet-connector-core';
|
|
5
5
|
import '@dynamic-labs/sdk-api-core';
|
|
6
6
|
import { logger } from '../../../shared/logger.js';
|
|
@@ -13,7 +13,7 @@ import '../../constants/values.js';
|
|
|
13
13
|
import '../../../shared/utils/classes/storage/localStorage.js';
|
|
14
14
|
import '@dynamic-labs/utils';
|
|
15
15
|
import '../../../shared/consts/index.js';
|
|
16
|
-
import '
|
|
16
|
+
import { useInternalDynamicEvents } from '../events/useDynamicEvents/useDynamicEvents.js';
|
|
17
17
|
import { useWalletConnectorEvent } from '../events/useWalletConnectorEvent/useWalletConnectorEvent.js';
|
|
18
18
|
|
|
19
19
|
const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
|
|
@@ -28,10 +28,29 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
|
|
|
28
28
|
}
|
|
29
29
|
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
30
30
|
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
const handleAccountChangeWhenAwaitingAccountSwitch = useCallback((isPrimaryWallet, newAddress) => {
|
|
32
|
+
const linkedSecondaryWallet = secondaryWallets.find((wallet) => isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
33
|
+
// this means the user is linking a new account, so we need proof of ownership...
|
|
34
|
+
if (!linkedSecondaryWallet) {
|
|
35
|
+
setMultiWalletWidgetState('awaiting_signature', undefined, 'linking_new_wallet');
|
|
36
|
+
if (isPrimaryWallet && primaryWallet) {
|
|
37
|
+
setSelectedWalletConnectorKey(primaryWallet.connector.key);
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// ...otherwise, the user is switching primary accounts betweeen the same wallet
|
|
42
|
+
setSelectedWalletWithAction(null);
|
|
43
|
+
setPrimaryWalletId(linkedSecondaryWallet.id);
|
|
44
|
+
setMultiWalletWidgetState('idle');
|
|
45
|
+
}, [
|
|
46
|
+
setMultiWalletWidgetState,
|
|
47
|
+
primaryWallet,
|
|
48
|
+
secondaryWallets,
|
|
49
|
+
setSelectedWalletConnectorKey,
|
|
50
|
+
setSelectedWalletWithAction,
|
|
51
|
+
setPrimaryWalletId,
|
|
52
|
+
]);
|
|
53
|
+
const calculatePrimaryWalletMultiWalletStateFromAccounts = useCallback(({ accounts }) => {
|
|
35
54
|
// change the api here
|
|
36
55
|
if (!primaryWallet)
|
|
37
56
|
return;
|
|
@@ -70,6 +89,26 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
|
|
|
70
89
|
logger.error(`Unexpected multiWalletWidgetState (${multiWalletWidgetState}) and onAccountChange combination. Resetting state to idle.`);
|
|
71
90
|
setMultiWalletWidgetState('idle');
|
|
72
91
|
}
|
|
92
|
+
}, [
|
|
93
|
+
authMode,
|
|
94
|
+
handleAccountChangeWhenAwaitingAccountSwitch,
|
|
95
|
+
multiWallet,
|
|
96
|
+
multiWalletWidgetState,
|
|
97
|
+
primaryWallet,
|
|
98
|
+
refreshConnectedWallet,
|
|
99
|
+
secondaryWallets,
|
|
100
|
+
setMultiWalletWidgetState,
|
|
101
|
+
setPrimaryWalletId,
|
|
102
|
+
setSelectedWalletConnectorKey,
|
|
103
|
+
setSelectedWalletWithAction,
|
|
104
|
+
user,
|
|
105
|
+
]);
|
|
106
|
+
useInternalDynamicEvents('triggerComputePrimaryWalletMultiWalletStateFromAccounts', calculatePrimaryWalletMultiWalletStateFromAccounts);
|
|
107
|
+
useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', ({ accounts }) => {
|
|
108
|
+
logger.debug('primary wallet account change', {
|
|
109
|
+
accounts,
|
|
110
|
+
});
|
|
111
|
+
calculatePrimaryWalletMultiWalletStateFromAccounts({ accounts });
|
|
73
112
|
});
|
|
74
113
|
const uniqueNonPrimaryWallets = useMemo(() => {
|
|
75
114
|
const primaryConnector = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector;
|
|
@@ -113,28 +152,6 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
|
|
|
113
152
|
}
|
|
114
153
|
}
|
|
115
154
|
});
|
|
116
|
-
const handleAccountChangeWhenAwaitingAccountSwitch = useCallback((isPrimaryWallet, newAddress) => {
|
|
117
|
-
const linkedSecondaryWallet = secondaryWallets.find((wallet) => isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
118
|
-
// this means the user is linking a new account, so we need proof of ownership...
|
|
119
|
-
if (!linkedSecondaryWallet) {
|
|
120
|
-
setMultiWalletWidgetState('awaiting_signature', undefined, 'linking_new_wallet');
|
|
121
|
-
if (isPrimaryWallet && primaryWallet) {
|
|
122
|
-
setSelectedWalletConnectorKey(primaryWallet.connector.key);
|
|
123
|
-
}
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
// ...otherwise, the user is switching primary accounts betweeen the same wallet
|
|
127
|
-
setSelectedWalletWithAction(null);
|
|
128
|
-
setPrimaryWalletId(linkedSecondaryWallet.id);
|
|
129
|
-
setMultiWalletWidgetState('idle');
|
|
130
|
-
}, [
|
|
131
|
-
setMultiWalletWidgetState,
|
|
132
|
-
primaryWallet,
|
|
133
|
-
secondaryWallets,
|
|
134
|
-
setSelectedWalletConnectorKey,
|
|
135
|
-
setSelectedWalletWithAction,
|
|
136
|
-
setPrimaryWalletId,
|
|
137
|
-
]);
|
|
138
155
|
};
|
|
139
156
|
|
|
140
157
|
export { useWalletEventListeners };
|
|
@@ -7,22 +7,19 @@ var _tslib = require('../../../../_virtual/_tslib.cjs');
|
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
8
8
|
var React = require('react');
|
|
9
9
|
var reactI18next = require('react-i18next');
|
|
10
|
-
var walletBook = require('@dynamic-labs/wallet-book');
|
|
11
|
-
var iconic = require('@dynamic-labs/iconic');
|
|
12
10
|
require('../../events/dynamicEvents.cjs');
|
|
13
11
|
require('@dynamic-labs/utils');
|
|
14
12
|
require('../../context/DynamicContext/DynamicContext.cjs');
|
|
15
13
|
require('@dynamic-labs/sdk-api-core');
|
|
16
14
|
var logger = require('../../shared/logger.cjs');
|
|
15
|
+
require('@dynamic-labs/iconic');
|
|
17
16
|
require('@dynamic-labs/wallet-connector-core');
|
|
18
17
|
var ViewContext = require('../../context/ViewContext/ViewContext.cjs');
|
|
19
|
-
|
|
20
|
-
var shortenWalletAddress = require('../../shared/utils/functions/shortenWalletAddress/shortenWalletAddress.cjs');
|
|
18
|
+
require('@dynamic-labs/wallet-book');
|
|
21
19
|
require('../../utils/constants/colors.cjs');
|
|
22
20
|
require('../../utils/constants/values.cjs');
|
|
23
21
|
require('../../shared/utils/classes/storage/localStorage.cjs');
|
|
24
22
|
require('../../shared/consts/index.cjs');
|
|
25
|
-
var useInternalDynamicContext = require('../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
|
|
26
23
|
require('../../context/CaptchaContext/CaptchaContext.cjs');
|
|
27
24
|
require('../../context/ErrorContext/ErrorContext.cjs');
|
|
28
25
|
require('@dynamic-labs/multi-wallet');
|
|
@@ -83,12 +80,11 @@ require('../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/
|
|
|
83
80
|
var useMergeUserAccounts = require('../../utils/hooks/useMergeUserAccounts/useMergeUserAccounts.cjs');
|
|
84
81
|
|
|
85
82
|
const MergeUserAccountsView = (props) => {
|
|
86
|
-
const { selectedWalletConnector } = useInternalDynamicContext.useInternalDynamicContext();
|
|
87
83
|
const { setView } = ViewContext.useViewContext();
|
|
88
84
|
const { mergeUserAccounts } = useMergeUserAccounts.useMergeUserAccounts();
|
|
89
85
|
const { t } = reactI18next.useTranslation();
|
|
90
86
|
const [error, setError] = React.useState('');
|
|
91
|
-
const { mergeConflicts
|
|
87
|
+
const { mergeConflicts } = props;
|
|
92
88
|
const goToConflictsResolutionView = () => {
|
|
93
89
|
// back button on conflicts resolution view should go back to this view
|
|
94
90
|
const onConflictsResolutionBackClick = () => {
|
|
@@ -112,13 +108,7 @@ const MergeUserAccountsView = (props) => {
|
|
|
112
108
|
setError(t('dyn_merge_user_accounts.errors.merge_error'));
|
|
113
109
|
}
|
|
114
110
|
});
|
|
115
|
-
|
|
116
|
-
if (walletAddress) {
|
|
117
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(walletBook.WalletIcon, { walletKey: selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.key, className: 'merge-user-accounts__accounts__item__icon' }), jsxRuntime.jsx(Typography.Typography, { variant: 'body_small', weight: 'bold', color: 'secondary', className: 'merge-user-accounts__accounts__item__text', children: shortenWalletAddress.shortenWalletAddress(walletAddress, 3, 3) })] }));
|
|
118
|
-
}
|
|
119
|
-
return (jsxRuntime.jsx(iconic.UserProfileIcon, { className: 'merge-user-accounts__accounts__item__icon' }));
|
|
120
|
-
};
|
|
121
|
-
return (jsxRuntime.jsxs("div", { className: 'merge-user-accounts', children: [error && (jsxRuntime.jsx(Alert.Alert, { icon: 'error', variant: 'error', className: 'merge-user-accounts__error', children: error })), jsxRuntime.jsxs("div", { className: 'merge-user-accounts__container', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', className: 'merge-user-accounts__title', copykey: 'dyn_merge_user_accounts.wallet.content', children: t('dyn_merge_user_accounts.wallet.content') }), jsxRuntime.jsxs("div", { className: 'merge-user-accounts__accounts', children: [jsxRuntime.jsx("div", { className: 'merge-user-accounts__accounts__item', children: renderDuplicatedInfo() }), jsxRuntime.jsxs("div", { className: 'merge-user-accounts__accounts__divider', children: [jsxRuntime.jsx("div", { className: 'merge-user-accounts__accounts__divider__dash' }), jsxRuntime.jsx("div", { className: 'merge-user-accounts__accounts__divider__icon', children: jsxRuntime.jsx(add.ReactComponent, {}) })] }), jsxRuntime.jsx("div", { className: 'merge-user-accounts__accounts__item', children: renderDuplicatedInfo() })] }), jsxRuntime.jsx(TypographyButton.TypographyButton, { onClick: handleMergeConfirm, buttonClassName: 'merge-user-accounts__button', buttonVariant: 'brand-primary', buttonPadding: 'large', typographyProps: {
|
|
111
|
+
return (jsxRuntime.jsxs("div", { className: 'merge-user-accounts', children: [error && (jsxRuntime.jsx(Alert.Alert, { icon: 'error', variant: 'error', className: 'merge-user-accounts__error', children: error })), jsxRuntime.jsxs("div", { className: 'merge-user-accounts__container', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', className: 'merge-user-accounts__title', copykey: 'dyn_merge_user_accounts.wallet.content', children: t('dyn_merge_user_accounts.wallet.content') }), jsxRuntime.jsx(TypographyButton.TypographyButton, { onClick: handleMergeConfirm, buttonClassName: 'merge-user-accounts__button', buttonVariant: 'brand-primary', buttonPadding: 'large', typographyProps: {
|
|
122
112
|
color: 'inherit',
|
|
123
113
|
}, expanded: true, copykey: 'dyn_merge_user_accounts.confirm_button', children: t('dyn_merge_user_accounts.confirm_button') })] })] }));
|
|
124
114
|
};
|
|
@@ -1,24 +1,21 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { __awaiter } from '../../../../_virtual/_tslib.js';
|
|
3
|
-
import { jsxs, jsx
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
4
|
import { useState } from 'react';
|
|
5
5
|
import { useTranslation } from 'react-i18next';
|
|
6
|
-
import { WalletIcon } from '@dynamic-labs/wallet-book';
|
|
7
|
-
import { UserProfileIcon } from '@dynamic-labs/iconic';
|
|
8
6
|
import '../../events/dynamicEvents.js';
|
|
9
7
|
import '@dynamic-labs/utils';
|
|
10
8
|
import '../../context/DynamicContext/DynamicContext.js';
|
|
11
9
|
import '@dynamic-labs/sdk-api-core';
|
|
12
10
|
import { logger } from '../../shared/logger.js';
|
|
11
|
+
import '@dynamic-labs/iconic';
|
|
13
12
|
import '@dynamic-labs/wallet-connector-core';
|
|
14
13
|
import { useViewContext } from '../../context/ViewContext/ViewContext.js';
|
|
15
|
-
import
|
|
16
|
-
import { shortenWalletAddress } from '../../shared/utils/functions/shortenWalletAddress/shortenWalletAddress.js';
|
|
14
|
+
import '@dynamic-labs/wallet-book';
|
|
17
15
|
import '../../utils/constants/colors.js';
|
|
18
16
|
import '../../utils/constants/values.js';
|
|
19
17
|
import '../../shared/utils/classes/storage/localStorage.js';
|
|
20
18
|
import '../../shared/consts/index.js';
|
|
21
|
-
import { useInternalDynamicContext } from '../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.js';
|
|
22
19
|
import '../../context/CaptchaContext/CaptchaContext.js';
|
|
23
20
|
import '../../context/ErrorContext/ErrorContext.js';
|
|
24
21
|
import '@dynamic-labs/multi-wallet';
|
|
@@ -79,12 +76,11 @@ import '../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/P
|
|
|
79
76
|
import { useMergeUserAccounts } from '../../utils/hooks/useMergeUserAccounts/useMergeUserAccounts.js';
|
|
80
77
|
|
|
81
78
|
const MergeUserAccountsView = (props) => {
|
|
82
|
-
const { selectedWalletConnector } = useInternalDynamicContext();
|
|
83
79
|
const { setView } = useViewContext();
|
|
84
80
|
const { mergeUserAccounts } = useMergeUserAccounts();
|
|
85
81
|
const { t } = useTranslation();
|
|
86
82
|
const [error, setError] = useState('');
|
|
87
|
-
const { mergeConflicts
|
|
83
|
+
const { mergeConflicts } = props;
|
|
88
84
|
const goToConflictsResolutionView = () => {
|
|
89
85
|
// back button on conflicts resolution view should go back to this view
|
|
90
86
|
const onConflictsResolutionBackClick = () => {
|
|
@@ -108,13 +104,7 @@ const MergeUserAccountsView = (props) => {
|
|
|
108
104
|
setError(t('dyn_merge_user_accounts.errors.merge_error'));
|
|
109
105
|
}
|
|
110
106
|
});
|
|
111
|
-
|
|
112
|
-
if (walletAddress) {
|
|
113
|
-
return (jsxs(Fragment, { children: [jsx(WalletIcon, { walletKey: selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.key, className: 'merge-user-accounts__accounts__item__icon' }), jsx(Typography, { variant: 'body_small', weight: 'bold', color: 'secondary', className: 'merge-user-accounts__accounts__item__text', children: shortenWalletAddress(walletAddress, 3, 3) })] }));
|
|
114
|
-
}
|
|
115
|
-
return (jsx(UserProfileIcon, { className: 'merge-user-accounts__accounts__item__icon' }));
|
|
116
|
-
};
|
|
117
|
-
return (jsxs("div", { className: 'merge-user-accounts', children: [error && (jsx(Alert, { icon: 'error', variant: 'error', className: 'merge-user-accounts__error', children: error })), jsxs("div", { className: 'merge-user-accounts__container', children: [jsx(Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', className: 'merge-user-accounts__title', copykey: 'dyn_merge_user_accounts.wallet.content', children: t('dyn_merge_user_accounts.wallet.content') }), jsxs("div", { className: 'merge-user-accounts__accounts', children: [jsx("div", { className: 'merge-user-accounts__accounts__item', children: renderDuplicatedInfo() }), jsxs("div", { className: 'merge-user-accounts__accounts__divider', children: [jsx("div", { className: 'merge-user-accounts__accounts__divider__dash' }), jsx("div", { className: 'merge-user-accounts__accounts__divider__icon', children: jsx(SvgAdd, {}) })] }), jsx("div", { className: 'merge-user-accounts__accounts__item', children: renderDuplicatedInfo() })] }), jsx(TypographyButton, { onClick: handleMergeConfirm, buttonClassName: 'merge-user-accounts__button', buttonVariant: 'brand-primary', buttonPadding: 'large', typographyProps: {
|
|
107
|
+
return (jsxs("div", { className: 'merge-user-accounts', children: [error && (jsx(Alert, { icon: 'error', variant: 'error', className: 'merge-user-accounts__error', children: error })), jsxs("div", { className: 'merge-user-accounts__container', children: [jsx(Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', className: 'merge-user-accounts__title', copykey: 'dyn_merge_user_accounts.wallet.content', children: t('dyn_merge_user_accounts.wallet.content') }), jsx(TypographyButton, { onClick: handleMergeConfirm, buttonClassName: 'merge-user-accounts__button', buttonVariant: 'brand-primary', buttonPadding: 'large', typographyProps: {
|
|
118
108
|
color: 'inherit',
|
|
119
109
|
}, expanded: true, copykey: 'dyn_merge_user_accounts.confirm_button', children: t('dyn_merge_user_accounts.confirm_button') })] })] }));
|
|
120
110
|
};
|
|
@@ -22,7 +22,7 @@ require('@dynamic-labs/sdk-api-core');
|
|
|
22
22
|
require('../../shared/logger.cjs');
|
|
23
23
|
require('@dynamic-labs/iconic');
|
|
24
24
|
require('@dynamic-labs/wallet-connector-core');
|
|
25
|
-
|
|
25
|
+
require('../../context/ViewContext/ViewContext.cjs');
|
|
26
26
|
require('@dynamic-labs/wallet-book');
|
|
27
27
|
require('../../utils/constants/colors.cjs');
|
|
28
28
|
require('../../utils/constants/values.cjs');
|
|
@@ -86,13 +86,13 @@ require('../DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs
|
|
|
86
86
|
require('../DynamicWidget/context/DynamicWidgetContext.cjs');
|
|
87
87
|
require('../../views/TransactionConfirmationView/helpers/transactionErrorMessage.cjs');
|
|
88
88
|
require('../DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs');
|
|
89
|
+
var WidgetRegistryContextProvider = require('../../context/WidgetRegistry/WidgetRegistryContextProvider.cjs');
|
|
89
90
|
|
|
90
|
-
const pendingSignModalView = ['pending-signature', 'wallet-sign'];
|
|
91
91
|
const DynamicMultiWalletPromptsWidget = () => {
|
|
92
92
|
const isLoggedIn = useIsLoggedIn.useIsLoggedIn();
|
|
93
|
-
const
|
|
94
|
-
const {
|
|
95
|
-
const isRenderingSignMessageInLinkWalletModal = showAuthFlow &&
|
|
93
|
+
const isUserProfilePresent = WidgetRegistryContextProvider.useWidgetRegistryCheck('user-profile');
|
|
94
|
+
const { showAuthFlow, showDynamicUserProfile } = useInternalDynamicContext.useInternalDynamicContext();
|
|
95
|
+
const isRenderingSignMessageInLinkWalletModal = showAuthFlow || (showDynamicUserProfile && isUserProfilePresent);
|
|
96
96
|
const multiWalletPromptState = useMultiWalletPromptState.useMultiWalletPromptState();
|
|
97
97
|
const mapMultiWalletPromptStateToModalComponent = {
|
|
98
98
|
awaiting_connection: AwaitingConnectionModal.AwaitingConnectionModal,
|
|
@@ -18,7 +18,7 @@ import '@dynamic-labs/sdk-api-core';
|
|
|
18
18
|
import '../../shared/logger.js';
|
|
19
19
|
import '@dynamic-labs/iconic';
|
|
20
20
|
import '@dynamic-labs/wallet-connector-core';
|
|
21
|
-
import
|
|
21
|
+
import '../../context/ViewContext/ViewContext.js';
|
|
22
22
|
import '@dynamic-labs/wallet-book';
|
|
23
23
|
import '../../utils/constants/colors.js';
|
|
24
24
|
import '../../utils/constants/values.js';
|
|
@@ -82,13 +82,13 @@ import '../DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js';
|
|
|
82
82
|
import '../DynamicWidget/context/DynamicWidgetContext.js';
|
|
83
83
|
import '../../views/TransactionConfirmationView/helpers/transactionErrorMessage.js';
|
|
84
84
|
import '../DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js';
|
|
85
|
+
import { useWidgetRegistryCheck } from '../../context/WidgetRegistry/WidgetRegistryContextProvider.js';
|
|
85
86
|
|
|
86
|
-
const pendingSignModalView = ['pending-signature', 'wallet-sign'];
|
|
87
87
|
const DynamicMultiWalletPromptsWidget = () => {
|
|
88
88
|
const isLoggedIn = useIsLoggedIn();
|
|
89
|
-
const
|
|
90
|
-
const {
|
|
91
|
-
const isRenderingSignMessageInLinkWalletModal = showAuthFlow &&
|
|
89
|
+
const isUserProfilePresent = useWidgetRegistryCheck('user-profile');
|
|
90
|
+
const { showAuthFlow, showDynamicUserProfile } = useInternalDynamicContext();
|
|
91
|
+
const isRenderingSignMessageInLinkWalletModal = showAuthFlow || (showDynamicUserProfile && isUserProfilePresent);
|
|
92
92
|
const multiWalletPromptState = useMultiWalletPromptState();
|
|
93
93
|
const mapMultiWalletPromptStateToModalComponent = {
|
|
94
94
|
awaiting_connection: AwaitingConnectionModal,
|
|
@@ -79,6 +79,7 @@ var SandboxIndicatorWrapper = require('../../../../components/SandboxIndicatorWr
|
|
|
79
79
|
var DynamicWidgetContext = require('../../context/DynamicWidgetContext.cjs');
|
|
80
80
|
var DynamicWidgetCard = require('../DynamicWidgetCard/DynamicWidgetCard.cjs');
|
|
81
81
|
var DynamicWidgetVariants = require('../DynamicWidgetVariants/DynamicWidgetVariants.cjs');
|
|
82
|
+
var WidgetRegistryContextProvider = require('../../../../context/WidgetRegistry/WidgetRegistryContextProvider.cjs');
|
|
82
83
|
|
|
83
84
|
const DynamicUserProfile = ({ variant, }) => {
|
|
84
85
|
const { projectSettings, setShowDynamicUserProfile, showAuthFlow } = useInternalDynamicContext.useInternalDynamicContext();
|
|
@@ -100,7 +101,9 @@ const DynamicUserProfile = ({ variant, }) => {
|
|
|
100
101
|
}
|
|
101
102
|
}, [inlineControlsRef, variant, showAuthFlow, setShowDynamicUserProfile]);
|
|
102
103
|
index$1.useOnClickOutside(widgetRef, closeOnOutsideClick);
|
|
103
|
-
|
|
104
|
+
const shouldRenderUserProfile = Boolean(projectSettings);
|
|
105
|
+
WidgetRegistryContextProvider.useRegisterWidget('user-profile', shouldRenderUserProfile);
|
|
106
|
+
if (!shouldRenderUserProfile)
|
|
104
107
|
return null;
|
|
105
108
|
return (jsxRuntime.jsx(IsBrowser.IsBrowser, { children: jsxRuntime.jsx(PopperContext.PopperProvider, { children: jsxRuntime.jsx(DynamicWidgetVariants.DynamicWidgetVariants, { isOpen: isOpen, setIsOpen: setIsOpen, variant: _variant, zIndex: index.widgetModalZIndex, children: jsxRuntime.jsx(SandboxIndicatorWrapper.SandboxIndicatorWrapper, { children: jsxRuntime.jsx(DynamicWidgetCard.DynamicWidgetCard, { ref: widgetRef, children: jsxRuntime.jsx(DynamicUserProfileLayout.DynamicUserProfileLayout, { variant: variant }) }) }) }) }) }));
|
|
106
109
|
};
|
|
@@ -75,6 +75,7 @@ import { SandboxIndicatorWrapper } from '../../../../components/SandboxIndicator
|
|
|
75
75
|
import { useWidgetContext } from '../../context/DynamicWidgetContext.js';
|
|
76
76
|
import { DynamicWidgetCard } from '../DynamicWidgetCard/DynamicWidgetCard.js';
|
|
77
77
|
import { DynamicWidgetVariants } from '../DynamicWidgetVariants/DynamicWidgetVariants.js';
|
|
78
|
+
import { useRegisterWidget } from '../../../../context/WidgetRegistry/WidgetRegistryContextProvider.js';
|
|
78
79
|
|
|
79
80
|
const DynamicUserProfile = ({ variant, }) => {
|
|
80
81
|
const { projectSettings, setShowDynamicUserProfile, showAuthFlow } = useInternalDynamicContext();
|
|
@@ -96,7 +97,9 @@ const DynamicUserProfile = ({ variant, }) => {
|
|
|
96
97
|
}
|
|
97
98
|
}, [inlineControlsRef, variant, showAuthFlow, setShowDynamicUserProfile]);
|
|
98
99
|
useOnClickOutside(widgetRef, closeOnOutsideClick);
|
|
99
|
-
|
|
100
|
+
const shouldRenderUserProfile = Boolean(projectSettings);
|
|
101
|
+
useRegisterWidget('user-profile', shouldRenderUserProfile);
|
|
102
|
+
if (!shouldRenderUserProfile)
|
|
100
103
|
return null;
|
|
101
104
|
return (jsx(IsBrowser, { children: jsx(PopperProvider, { children: jsx(DynamicWidgetVariants, { isOpen: isOpen, setIsOpen: setIsOpen, variant: _variant, zIndex: widgetModalZIndex, children: jsx(SandboxIndicatorWrapper, { children: jsx(DynamicWidgetCard, { ref: widgetRef, children: jsx(DynamicUserProfileLayout, { variant: variant }) }) }) }) }) }));
|
|
102
105
|
};
|
package/src/lib/widgets/DynamicWidget/prompts/PrimaryNotConnectedModal/PrimaryNotConnectedModal.cjs
CHANGED
|
@@ -87,7 +87,7 @@ require('../../../../context/IpConfigurationContext/IpConfigurationContext.cjs')
|
|
|
87
87
|
const PrimaryNotConnectedContent = () => {
|
|
88
88
|
var _a;
|
|
89
89
|
const { primaryWallet } = useInternalDynamicContext.useInternalDynamicContext();
|
|
90
|
-
return (jsxRuntime.jsxs(DefaultPromptModal.DefaultPromptLayout, { dataTestId: 'wallet-not-connected', icon: jsxRuntime.jsx(walletBook.WalletIcon, { walletKey: (_a = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector) === null || _a === void 0 ? void 0 : _a.key }), title: `Switch wallet in ${primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.name}`, children: [jsxRuntime.jsxs(Typography.Typography, { variant: 'body_normal', color: 'secondary', weight: 'regular', "data-testid": 'content', children: ["Your active wallet in", ' ', jsxRuntime.jsx(Typography.Typography, { as: 'span', weight: 'medium', color: 'primary', children: primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.name }), ' ', "is not linked. Please switch to wallet", ' ', jsxRuntime.jsx(Typography.Typography, { as: 'span', weight: 'medium', color: 'primary', children: shortenWalletAddress.shortenWalletAddress(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.address, 3, 3) }),
|
|
90
|
+
return (jsxRuntime.jsxs(DefaultPromptModal.DefaultPromptLayout, { dataTestId: 'wallet-not-connected', icon: jsxRuntime.jsx(walletBook.WalletIcon, { walletKey: (_a = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector) === null || _a === void 0 ? void 0 : _a.key }), title: `Switch wallet in ${primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.name}`, children: [jsxRuntime.jsxs(Typography.Typography, { variant: 'body_normal', color: 'secondary', weight: 'regular', "data-testid": 'content', children: ["Your active wallet in", ' ', jsxRuntime.jsx(Typography.Typography, { as: 'span', weight: 'medium', color: 'primary', children: primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.name }), ' ', "is not linked. Please switch to wallet", ' ', jsxRuntime.jsx(Typography.Typography, { as: 'span', weight: 'medium', color: 'primary', children: shortenWalletAddress.shortenWalletAddress(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.address, 3, 3) }), "."] }), jsxRuntime.jsx(Divider.Divider, { fullWidth: true, text: 'Or' }), jsxRuntime.jsx(LogoutButton.LogoutButton, { isTextButton: false, buttonClassName: 'primary-not-connected__log-out-button' })] }));
|
|
91
91
|
};
|
|
92
92
|
const PrimaryNotConnectedWidgetPortal = () => (jsxRuntime.jsx(WidgetPortal.WidgetPortal, { children: jsxRuntime.jsx(PrimaryNotConnectedContent, {}) }));
|
|
93
93
|
const PrimaryNotConnectedModal = () => {
|
package/src/lib/widgets/DynamicWidget/prompts/PrimaryNotConnectedModal/PrimaryNotConnectedModal.js
CHANGED
|
@@ -83,7 +83,7 @@ import '../../../../context/IpConfigurationContext/IpConfigurationContext.js';
|
|
|
83
83
|
const PrimaryNotConnectedContent = () => {
|
|
84
84
|
var _a;
|
|
85
85
|
const { primaryWallet } = useInternalDynamicContext();
|
|
86
|
-
return (jsxs(DefaultPromptLayout, { dataTestId: 'wallet-not-connected', icon: jsx(WalletIcon, { walletKey: (_a = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector) === null || _a === void 0 ? void 0 : _a.key }), title: `Switch wallet in ${primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.name}`, children: [jsxs(Typography, { variant: 'body_normal', color: 'secondary', weight: 'regular', "data-testid": 'content', children: ["Your active wallet in", ' ', jsx(Typography, { as: 'span', weight: 'medium', color: 'primary', children: primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.name }), ' ', "is not linked. Please switch to wallet", ' ', jsx(Typography, { as: 'span', weight: 'medium', color: 'primary', children: shortenWalletAddress(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.address, 3, 3) }),
|
|
86
|
+
return (jsxs(DefaultPromptLayout, { dataTestId: 'wallet-not-connected', icon: jsx(WalletIcon, { walletKey: (_a = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector) === null || _a === void 0 ? void 0 : _a.key }), title: `Switch wallet in ${primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.name}`, children: [jsxs(Typography, { variant: 'body_normal', color: 'secondary', weight: 'regular', "data-testid": 'content', children: ["Your active wallet in", ' ', jsx(Typography, { as: 'span', weight: 'medium', color: 'primary', children: primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.name }), ' ', "is not linked. Please switch to wallet", ' ', jsx(Typography, { as: 'span', weight: 'medium', color: 'primary', children: shortenWalletAddress(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.address, 3, 3) }), "."] }), jsx(Divider, { fullWidth: true, text: 'Or' }), jsx(LogoutButton, { isTextButton: false, buttonClassName: 'primary-not-connected__log-out-button' })] }));
|
|
87
87
|
};
|
|
88
88
|
const PrimaryNotConnectedWidgetPortal = () => (jsx(WidgetPortal, { children: jsx(PrimaryNotConnectedContent, {}) }));
|
|
89
89
|
const PrimaryNotConnectedModal = () => {
|