@dynamic-labs/sdk-react-core 4.70.0 → 4.71.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 +13 -0
- package/package.cjs +3 -3
- package/package.js +3 -3
- package/package.json +14 -14
- package/src/lib/client/extension/deprecated/mfa/verifyTotpMfaDevice/verifyTotpMfaDevice.d.ts +1 -1
- package/src/lib/client/extension/hooks/useInitializeSdkClient/syncEvents/syncEvents.cjs +12 -0
- package/src/lib/client/extension/hooks/useInitializeSdkClient/syncEvents/syncEvents.js +12 -0
- package/src/lib/components/SendBalanceForm/SendBalanceForm.cjs +15 -2
- package/src/lib/components/SendBalanceForm/SendBalanceForm.d.ts +4 -0
- package/src/lib/components/SendBalanceForm/SendBalanceForm.js +15 -2
- package/src/lib/components/SendBalancePageLayout/SendBalancePageLayout.cjs +25 -3
- package/src/lib/components/SendBalancePageLayout/SendBalancePageLayout.js +26 -4
- package/src/lib/components/SendBalancePageLayout/components/TokensBalanceDropdown/TokensBalanceDropdown.cjs +4 -1
- package/src/lib/components/SendBalancePageLayout/components/TokensBalanceDropdown/TokensBalanceDropdown.js +4 -1
- package/src/lib/components/TransactionCard/SendBalanceTransactionCard.cjs +9 -5
- package/src/lib/components/TransactionCard/SendBalanceTransactionCard.js +9 -5
- package/src/lib/events/deviceRegistration.d.ts +4 -0
- package/src/lib/events/dynamicEvents.cjs +2 -0
- package/src/lib/events/dynamicEvents.d.ts +3 -2
- package/src/lib/events/dynamicEvents.js +2 -0
- package/src/lib/shared/utils/functions/chain/getChainIcon.cjs +1 -0
- package/src/lib/shared/utils/functions/chain/getChainIcon.js +2 -1
- package/src/lib/styles/index.shadow.cjs +1 -1
- package/src/lib/styles/index.shadow.js +1 -1
- package/src/lib/utils/functions/compareChains/compareChains.cjs +1 -0
- package/src/lib/utils/functions/compareChains/compareChains.js +1 -0
- package/src/lib/utils/hooks/events/useDynamicEvents/useDynamicEvents.d.ts +2 -2
- package/src/lib/utils/hooks/useExternalAuth/useExternalAuth.cjs +26 -34
- package/src/lib/utils/hooks/useExternalAuth/useExternalAuth.d.ts +5 -2
- package/src/lib/utils/hooks/useExternalAuth/useExternalAuth.js +27 -35
- package/src/lib/utils/hooks/useNetworkConfigurationsFromProjectSettings/useNetworkConfigurationsFromProjectSettings.cjs +7 -2
- package/src/lib/utils/hooks/useNetworkConfigurationsFromProjectSettings/useNetworkConfigurationsFromProjectSettings.d.ts +2 -1
- package/src/lib/utils/hooks/useNetworkConfigurationsFromProjectSettings/useNetworkConfigurationsFromProjectSettings.js +7 -2
- package/src/lib/views/WalletList/data.cjs +1 -0
- package/src/lib/views/WalletList/data.d.ts +1 -1
- package/src/lib/views/WalletList/data.js +1 -0
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/ActiveWalletBalance.cjs +9 -1
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/ActiveWalletBalance.js +9 -1
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/TokenBalanceItem/TokenBalanceItem.cjs +2 -1
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/TokenBalanceItem/TokenBalanceItem.js +2 -1
- package/src/lib/widgets/DynamicWidget/helpers/helpers.cjs +22 -0
- package/src/lib/widgets/DynamicWidget/helpers/helpers.js +22 -0
- package/src/lib/data/api/externalAuth/externalAuth.cjs +0 -66
- package/src/lib/data/api/externalAuth/externalAuth.js +0 -62
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
|
|
2
|
+
## [4.71.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.70.0...v4.71.0) (2026-03-24)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* add Tempo chain connector and core type definitions ([#10672](https://github.com/dynamic-labs/dynamic-auth/issues/10672)) ([0439c15](https://github.com/dynamic-labs/dynamic-auth/commit/0439c153238359083b9f226dcd2ebf6d83e26519))
|
|
8
|
+
* add verifySocial method to demo site step-up auth methods ([#10721](https://github.com/dynamic-labs/dynamic-auth/issues/10721)) ([b9ef517](https://github.com/dynamic-labs/dynamic-auth/commit/b9ef5173df3e3ed08f718de49b036ea899dc1832))
|
|
9
|
+
* **demo:** add Tempo chain support to demo app ([#10674](https://github.com/dynamic-labs/dynamic-auth/issues/10674)) ([a5918fc](https://github.com/dynamic-labs/dynamic-auth/commit/a5918fc2ab0821e7f025aa470573129f71de33cc))
|
|
10
|
+
* repurpose verifyWithExternalJwt for elevated access token requests ([#10743](https://github.com/dynamic-labs/dynamic-auth/issues/10743)) ([d1abda0](https://github.com/dynamic-labs/dynamic-auth/commit/d1abda0111d68c78226d30bd0630e6e341dedad9))
|
|
11
|
+
* **sdk:** add Tempo chain support to UI components ([#10673](https://github.com/dynamic-labs/dynamic-auth/issues/10673)) ([aec9fbb](https://github.com/dynamic-labs/dynamic-auth/commit/aec9fbb20754a2935bffe106e7e8715f46be3de7))
|
|
12
|
+
* support multi-chain wallet creation in createWallet ([#10694](https://github.com/dynamic-labs/dynamic-auth/issues/10694)) ([0b6b57f](https://github.com/dynamic-labs/dynamic-auth/commit/0b6b57f4179c35d1f86d1c8c9c40f52cb307c849))
|
|
13
|
+
* wire up elevatedAccessToken for sign, reshare, and refresh operations ([#10737](https://github.com/dynamic-labs/dynamic-auth/issues/10737)) ([f9d5c76](https://github.com/dynamic-labs/dynamic-auth/commit/f9d5c768037aff4f5d7994b6bc6c338621a6ee6b))
|
|
14
|
+
|
|
2
15
|
## [4.70.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.69.0...v4.70.0) (2026-03-23)
|
|
3
16
|
|
|
4
17
|
|
package/package.cjs
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
5
|
|
|
6
|
-
var version = "4.
|
|
6
|
+
var version = "4.71.0";
|
|
7
7
|
var dependencies = {
|
|
8
8
|
"@dynamic-labs/sdk-api-core": "0.0.909",
|
|
9
|
-
"@dynamic-labs-sdk/client": "0.
|
|
10
|
-
"@dynamic-labs-wallet/browser-wallet-client": "0.0.
|
|
9
|
+
"@dynamic-labs-sdk/client": "0.18.0",
|
|
10
|
+
"@dynamic-labs-wallet/browser-wallet-client": "0.0.314",
|
|
11
11
|
"@hcaptcha/react-hcaptcha": "1.4.4",
|
|
12
12
|
"@thumbmarkjs/thumbmarkjs": "0.16.0",
|
|
13
13
|
"country-list": "2.3.0",
|
package/package.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client'
|
|
2
|
-
var version = "4.
|
|
2
|
+
var version = "4.71.0";
|
|
3
3
|
var dependencies = {
|
|
4
4
|
"@dynamic-labs/sdk-api-core": "0.0.909",
|
|
5
|
-
"@dynamic-labs-sdk/client": "0.
|
|
6
|
-
"@dynamic-labs-wallet/browser-wallet-client": "0.0.
|
|
5
|
+
"@dynamic-labs-sdk/client": "0.18.0",
|
|
6
|
+
"@dynamic-labs-wallet/browser-wallet-client": "0.0.314",
|
|
7
7
|
"@hcaptcha/react-hcaptcha": "1.4.4",
|
|
8
8
|
"@thumbmarkjs/thumbmarkjs": "0.16.0",
|
|
9
9
|
"country-list": "2.3.0",
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/sdk-react-core",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.71.0",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@dynamic-labs/sdk-api-core": "0.0.909",
|
|
6
|
-
"@dynamic-labs-sdk/client": "0.
|
|
7
|
-
"@dynamic-labs-wallet/browser-wallet-client": "0.0.
|
|
6
|
+
"@dynamic-labs-sdk/client": "0.18.0",
|
|
7
|
+
"@dynamic-labs-wallet/browser-wallet-client": "0.0.314",
|
|
8
8
|
"@hcaptcha/react-hcaptcha": "1.4.4",
|
|
9
9
|
"@thumbmarkjs/thumbmarkjs": "0.16.0",
|
|
10
10
|
"country-list": "2.3.0",
|
|
@@ -16,17 +16,17 @@
|
|
|
16
16
|
"yup": "0.32.11",
|
|
17
17
|
"react-international-phone": "4.5.0",
|
|
18
18
|
"bs58": "5.0.0",
|
|
19
|
-
"@dynamic-labs/assert-package-version": "4.
|
|
20
|
-
"@dynamic-labs/iconic": "4.
|
|
21
|
-
"@dynamic-labs/locale": "4.
|
|
22
|
-
"@dynamic-labs/logger": "4.
|
|
23
|
-
"@dynamic-labs/multi-wallet": "4.
|
|
24
|
-
"@dynamic-labs/rpc-providers": "4.
|
|
25
|
-
"@dynamic-labs/store": "4.
|
|
26
|
-
"@dynamic-labs/types": "4.
|
|
27
|
-
"@dynamic-labs/utils": "4.
|
|
28
|
-
"@dynamic-labs/wallet-book": "4.
|
|
29
|
-
"@dynamic-labs/wallet-connector-core": "4.
|
|
19
|
+
"@dynamic-labs/assert-package-version": "4.71.0",
|
|
20
|
+
"@dynamic-labs/iconic": "4.71.0",
|
|
21
|
+
"@dynamic-labs/locale": "4.71.0",
|
|
22
|
+
"@dynamic-labs/logger": "4.71.0",
|
|
23
|
+
"@dynamic-labs/multi-wallet": "4.71.0",
|
|
24
|
+
"@dynamic-labs/rpc-providers": "4.71.0",
|
|
25
|
+
"@dynamic-labs/store": "4.71.0",
|
|
26
|
+
"@dynamic-labs/types": "4.71.0",
|
|
27
|
+
"@dynamic-labs/utils": "4.71.0",
|
|
28
|
+
"@dynamic-labs/wallet-book": "4.71.0",
|
|
29
|
+
"@dynamic-labs/wallet-connector-core": "4.71.0",
|
|
30
30
|
"eventemitter3": "5.0.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
@@ -25,6 +25,18 @@ const syncEvents = (client$1) => {
|
|
|
25
25
|
dynamicEvents.dynamicEvents.emit('logout');
|
|
26
26
|
},
|
|
27
27
|
}, client$1);
|
|
28
|
+
client.onEvent({
|
|
29
|
+
event: 'deviceRegistrationCompleted',
|
|
30
|
+
listener: () => {
|
|
31
|
+
dynamicEvents.dynamicEvents.emit('deviceRegistrationCompleted');
|
|
32
|
+
},
|
|
33
|
+
}, client$1);
|
|
34
|
+
client.onEvent({
|
|
35
|
+
event: 'deviceRegistrationCompletedInAnotherTab',
|
|
36
|
+
listener: () => {
|
|
37
|
+
dynamicEvents.dynamicEvents.emit('deviceRegistrationCompletedInAnotherTab');
|
|
38
|
+
},
|
|
39
|
+
}, client$1);
|
|
28
40
|
};
|
|
29
41
|
|
|
30
42
|
exports.syncEvents = syncEvents;
|
|
@@ -21,6 +21,18 @@ const syncEvents = (client) => {
|
|
|
21
21
|
dynamicEvents.emit('logout');
|
|
22
22
|
},
|
|
23
23
|
}, client);
|
|
24
|
+
onEvent({
|
|
25
|
+
event: 'deviceRegistrationCompleted',
|
|
26
|
+
listener: () => {
|
|
27
|
+
dynamicEvents.emit('deviceRegistrationCompleted');
|
|
28
|
+
},
|
|
29
|
+
}, client);
|
|
30
|
+
onEvent({
|
|
31
|
+
event: 'deviceRegistrationCompletedInAnotherTab',
|
|
32
|
+
listener: () => {
|
|
33
|
+
dynamicEvents.emit('deviceRegistrationCompletedInAnotherTab');
|
|
34
|
+
},
|
|
35
|
+
}, client);
|
|
24
36
|
};
|
|
25
37
|
|
|
26
38
|
export { syncEvents };
|
|
@@ -139,7 +139,9 @@ const getDisplayErrorMessage = (errors, t, field, decimals) => {
|
|
|
139
139
|
}
|
|
140
140
|
return '';
|
|
141
141
|
};
|
|
142
|
-
const SendBalanceForm = ({ initialValues, onSubmit, decimals = 18, validateAddress = () => true, validateAmount = () => true, currentToken, transaction, tokenBalances, setCurrentToken, isLoading,
|
|
142
|
+
const SendBalanceForm = ({ initialValues, onSubmit, decimals = 18, validateAddress = () => true, validateAmount = () => true, currentToken, transaction, tokenBalances, setCurrentToken, isLoading,
|
|
143
|
+
// Tempo-specific props
|
|
144
|
+
isTempo = false, feeTokenOptions, currentFeeToken, setCurrentFeeToken, }) => {
|
|
143
145
|
const { t } = reactI18next.useTranslation();
|
|
144
146
|
const { showFiat } = useInternalDynamicContext.useInternalDynamicContext();
|
|
145
147
|
const floatingValueRef = React.useRef(null);
|
|
@@ -194,7 +196,18 @@ const SendBalanceForm = ({ initialValues, onSubmit, decimals = 18, validateAddre
|
|
|
194
196
|
paddingLeft: `${leftSymbolPadding}px`,
|
|
195
197
|
} }), jsxRuntime.jsx("div", { className: 'send-balance-form__amount-container__floating_value', ref: floatingValueRef, children: jsxRuntime.jsx(Typography.Typography, { variant: 'title', weight: 'regular', color: 'secondary', children: currentToken === null || currentToken === void 0 ? void 0 : currentToken.symbol }) }), jsxRuntime.jsx("div", { className: 'send-balance-form__amount-container__balance', children: showFiat && !Number.isNaN(amount) && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_mini', weight: 'bold', color: 'secondary', children: "$" }), jsxRuntime.jsx(Typography.Typography, { variant: 'body_mini', weight: 'regular', color: 'secondary', children: utils.getDisplayFiatPrice(amount, currentToken) })] })) })] }), jsxRuntime.jsx(Typography.Typography, { className: 'send-balance-form__amount_available', variant: 'body_small', weight: 'regular', color: 'secondary', as: 'div', children: jsxRuntime.jsxs("div", { style: { display: 'flex', gap: '0.225rem' }, children: [jsxRuntime.jsx(Typography.Typography, { className: 'send-balance-form__amount_available__line', variant: 'body_small', weight: 'bold', color: 'primary', as: 'div', children: (_a = currentToken === null || currentToken === void 0 ? void 0 : currentToken.balance) !== null && _a !== void 0 ? _a : 0 }), t('dyn_send_transaction.data.symbol_available', {
|
|
196
198
|
symbol: currentToken === null || currentToken === void 0 ? void 0 : currentToken.symbol,
|
|
197
|
-
})] }) }),
|
|
199
|
+
})] }) }), isTempo &&
|
|
200
|
+
feeTokenOptions &&
|
|
201
|
+
feeTokenOptions.length > 0 &&
|
|
202
|
+
setCurrentFeeToken && (jsxRuntime.jsxs("div", { className: 'send-balance-form__fee-token-container', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_small', weight: 'regular', color: 'secondary', style: { marginBottom: '8px' }, children: t('dyn_send_transaction.data.fee_token_label') }), jsxRuntime.jsx("select", { className: 'send-balance-form__fee-token-select', value: (currentFeeToken === null || currentFeeToken === void 0 ? void 0 : currentFeeToken.address) || '', onChange: ({ target: { value } }) => {
|
|
203
|
+
const selected = feeTokenOptions.find((token) => token.address === value);
|
|
204
|
+
if (selected) {
|
|
205
|
+
setCurrentFeeToken(selected);
|
|
206
|
+
}
|
|
207
|
+
}, children: feeTokenOptions.map((token) => {
|
|
208
|
+
var _a;
|
|
209
|
+
return (jsxRuntime.jsxs("option", { value: token.address, children: [token.symbol, " (", ((_a = token.balance) === null || _a === void 0 ? void 0 : _a.toLocaleString()) || 0, ' ', "available)"] }, token.address));
|
|
210
|
+
}) })] })), jsxRuntime.jsx(Typography.Typography, { variant: 'body_small', weight: 'regular', color: 'secondary', copykey: 'dyn_send_transaction.data.recipient.label', children: "Recipient Address" }), jsxRuntime.jsx(formik.Field, { className: 'send-balance-form__field', placeholder: t('dyn_send_transaction.data.recipient.placeholder'), label: t('dyn_send_transaction.data.recipient.label'), id: 'recipient', name: 'recipient', as: Input.Input, error: errors['recipient'], copykey: 'dyn_send_transaction.data.recipient.label', message: touched['recipient'] &&
|
|
198
211
|
getDisplayErrorMessage(errors, t, 'recipient') }), jsxRuntime.jsx(TypographyButton.TypographyButton, { dataTestId: 'sendBalanceFormSubmitButton', expanded: true, type: 'submit', buttonVariant: 'primary', buttonPadding: 'small', buttonClassName: 'send-balance-form__button', copykey: 'dyn_send_transaction.preview_transaction', children: t('dyn_send_transaction.preview_transaction') })] }));
|
|
199
212
|
} }));
|
|
200
213
|
};
|
|
@@ -16,5 +16,9 @@ export type Props = {
|
|
|
16
16
|
setCurrentToken: Dispatch<SetStateAction<TokenBalance | undefined>>;
|
|
17
17
|
isLoading?: boolean;
|
|
18
18
|
transaction: IUITransaction;
|
|
19
|
+
isTempo?: boolean;
|
|
20
|
+
feeTokenOptions?: TokenBalance[];
|
|
21
|
+
currentFeeToken?: TokenBalance;
|
|
22
|
+
setCurrentFeeToken?: Dispatch<SetStateAction<TokenBalance | undefined>>;
|
|
19
23
|
};
|
|
20
24
|
export declare const SendBalanceForm: FC<Props>;
|
|
@@ -135,7 +135,9 @@ const getDisplayErrorMessage = (errors, t, field, decimals) => {
|
|
|
135
135
|
}
|
|
136
136
|
return '';
|
|
137
137
|
};
|
|
138
|
-
const SendBalanceForm = ({ initialValues, onSubmit, decimals = 18, validateAddress = () => true, validateAmount = () => true, currentToken, transaction, tokenBalances, setCurrentToken, isLoading,
|
|
138
|
+
const SendBalanceForm = ({ initialValues, onSubmit, decimals = 18, validateAddress = () => true, validateAmount = () => true, currentToken, transaction, tokenBalances, setCurrentToken, isLoading,
|
|
139
|
+
// Tempo-specific props
|
|
140
|
+
isTempo = false, feeTokenOptions, currentFeeToken, setCurrentFeeToken, }) => {
|
|
139
141
|
const { t } = useTranslation();
|
|
140
142
|
const { showFiat } = useInternalDynamicContext();
|
|
141
143
|
const floatingValueRef = useRef(null);
|
|
@@ -190,7 +192,18 @@ const SendBalanceForm = ({ initialValues, onSubmit, decimals = 18, validateAddre
|
|
|
190
192
|
paddingLeft: `${leftSymbolPadding}px`,
|
|
191
193
|
} }), jsx("div", { className: 'send-balance-form__amount-container__floating_value', ref: floatingValueRef, children: jsx(Typography, { variant: 'title', weight: 'regular', color: 'secondary', children: currentToken === null || currentToken === void 0 ? void 0 : currentToken.symbol }) }), jsx("div", { className: 'send-balance-form__amount-container__balance', children: showFiat && !Number.isNaN(amount) && (jsxs(Fragment, { children: [jsx(Typography, { variant: 'body_mini', weight: 'bold', color: 'secondary', children: "$" }), jsx(Typography, { variant: 'body_mini', weight: 'regular', color: 'secondary', children: getDisplayFiatPrice(amount, currentToken) })] })) })] }), jsx(Typography, { className: 'send-balance-form__amount_available', variant: 'body_small', weight: 'regular', color: 'secondary', as: 'div', children: jsxs("div", { style: { display: 'flex', gap: '0.225rem' }, children: [jsx(Typography, { className: 'send-balance-form__amount_available__line', variant: 'body_small', weight: 'bold', color: 'primary', as: 'div', children: (_a = currentToken === null || currentToken === void 0 ? void 0 : currentToken.balance) !== null && _a !== void 0 ? _a : 0 }), t('dyn_send_transaction.data.symbol_available', {
|
|
192
194
|
symbol: currentToken === null || currentToken === void 0 ? void 0 : currentToken.symbol,
|
|
193
|
-
})] }) }),
|
|
195
|
+
})] }) }), isTempo &&
|
|
196
|
+
feeTokenOptions &&
|
|
197
|
+
feeTokenOptions.length > 0 &&
|
|
198
|
+
setCurrentFeeToken && (jsxs("div", { className: 'send-balance-form__fee-token-container', children: [jsx(Typography, { variant: 'body_small', weight: 'regular', color: 'secondary', style: { marginBottom: '8px' }, children: t('dyn_send_transaction.data.fee_token_label') }), jsx("select", { className: 'send-balance-form__fee-token-select', value: (currentFeeToken === null || currentFeeToken === void 0 ? void 0 : currentFeeToken.address) || '', onChange: ({ target: { value } }) => {
|
|
199
|
+
const selected = feeTokenOptions.find((token) => token.address === value);
|
|
200
|
+
if (selected) {
|
|
201
|
+
setCurrentFeeToken(selected);
|
|
202
|
+
}
|
|
203
|
+
}, children: feeTokenOptions.map((token) => {
|
|
204
|
+
var _a;
|
|
205
|
+
return (jsxs("option", { value: token.address, children: [token.symbol, " (", ((_a = token.balance) === null || _a === void 0 ? void 0 : _a.toLocaleString()) || 0, ' ', "available)"] }, token.address));
|
|
206
|
+
}) })] })), jsx(Typography, { variant: 'body_small', weight: 'regular', color: 'secondary', copykey: 'dyn_send_transaction.data.recipient.label', children: "Recipient Address" }), jsx(Field, { className: 'send-balance-form__field', placeholder: t('dyn_send_transaction.data.recipient.placeholder'), label: t('dyn_send_transaction.data.recipient.label'), id: 'recipient', name: 'recipient', as: Input, error: errors['recipient'], copykey: 'dyn_send_transaction.data.recipient.label', message: touched['recipient'] &&
|
|
194
207
|
getDisplayErrorMessage(errors, t, 'recipient') }), jsx(TypographyButton, { dataTestId: 'sendBalanceFormSubmitButton', expanded: true, type: 'submit', buttonVariant: 'primary', buttonPadding: 'small', buttonClassName: 'send-balance-form__button', copykey: 'dyn_send_transaction.preview_transaction', children: t('dyn_send_transaction.preview_transaction') })] }));
|
|
195
208
|
} }));
|
|
196
209
|
};
|
|
@@ -123,7 +123,7 @@ require('../../shared/utils/functions/getInitialUrl/getInitialUrl.cjs');
|
|
|
123
123
|
var useInternalDynamicContext = require('../../context/DynamicContext/useDynamicContext/useInternalDynamicContext/useInternalDynamicContext.cjs');
|
|
124
124
|
|
|
125
125
|
const SendBalancePageLayout = ({ error, onClickClose, onClickBack, onSubmit, displayPoweredByDynamicFooter = false, transaction, networkCurrencyDecimals, tokenBalances, currentToken, setCurrentToken, isLoading, isNativeToken, }) => {
|
|
126
|
-
var _a;
|
|
126
|
+
var _a, _b;
|
|
127
127
|
const { t } = reactI18next.useTranslation();
|
|
128
128
|
const { primaryWallet, projectSettings, overrides } = useInternalDynamicContext.useInternalDynamicContext();
|
|
129
129
|
const networkInfo = useNetworkConfigurationsFromProjectSettings.useNetworkConfigurationsFromProjectSettings({
|
|
@@ -132,6 +132,21 @@ const SendBalancePageLayout = ({ error, onClickClose, onClickBack, onSubmit, dis
|
|
|
132
132
|
});
|
|
133
133
|
const walletConnector = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector;
|
|
134
134
|
const { chain } = useFetchChain.useFetchChain(walletConnector);
|
|
135
|
+
// Tempo-specific: detect Tempo chain and manage fee token state
|
|
136
|
+
const isTempo = ((_a = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector) === null || _a === void 0 ? void 0 : _a.connectedChain) === 'TEMPO';
|
|
137
|
+
const [currentFeeToken, setCurrentFeeToken] = React.useState(undefined);
|
|
138
|
+
// Initialize fee token to first available token for Tempo
|
|
139
|
+
// Also reset if current token is no longer in the list (stale after refresh)
|
|
140
|
+
React.useEffect(() => {
|
|
141
|
+
if (isTempo && tokenBalances && tokenBalances.length > 0) {
|
|
142
|
+
const currentTokenStillExists = currentFeeToken
|
|
143
|
+
? tokenBalances.some((token) => token.address === currentFeeToken.address)
|
|
144
|
+
: false;
|
|
145
|
+
if (!currentFeeToken || !currentTokenStillExists) {
|
|
146
|
+
setCurrentFeeToken(tokenBalances[0]);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}, [isTempo, tokenBalances, currentFeeToken]);
|
|
135
150
|
const closeButton = onClickClose && (jsxRuntime.jsx(IconButton.IconButton, { type: 'button', onClick: onClickClose, "data-testid": 'close-button', children: jsxRuntime.jsx(close.ReactComponent, {}) }));
|
|
136
151
|
const backButton = onClickBack && (jsxRuntime.jsx(IconButton.IconButton, { type: 'button', onClick: onClickBack, "data-testid": 'back-button', children: jsxRuntime.jsx(arrowLeft.ReactComponent, {}) }));
|
|
137
152
|
const { data: balance } = usePromise.usePromise(() => transaction.getBalance(), {
|
|
@@ -191,7 +206,9 @@ const SendBalancePageLayout = ({ error, onClickClose, onClickBack, onSubmit, dis
|
|
|
191
206
|
? transaction.formatNonNativeToken(transaction.nonNativeValue, transaction.nonNativeDecimal)
|
|
192
207
|
: '';
|
|
193
208
|
};
|
|
194
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ModalHeader.ModalHeader, { leading: backButton, trailing: closeButton, alignContent: 'bottom', children: jsxRuntime.jsx("div", { className: 'send-balance-page-layout__header-content', children: jsxRuntime.jsx(Typography.Typography, { variant: 'title', color: 'primary', copykey: 'dyn_send_transaction.data.send', children: t('dyn_send_transaction.data.send') }) }) }), jsxRuntime.jsxs("div", { className: 'send-balance-page-layout__body', children: [jsxRuntime.jsx(AnimatePresence.AnimatePresence, { animationComponent: jsxRuntime.jsx(VerticalDrawerTransition.VerticalDrawerTransition, {}), children: error && (jsxRuntime.jsx("div", { className: 'send-balance-page-layout__error', children: jsxRuntime.jsx(Alert.Alert, { icon: 'error', variant: 'error', children: error }) })) }), jsxRuntime.jsx(SendBalanceForm.SendBalanceForm, { tokenBalances: tokenBalances, setCurrentToken: setCurrentToken, isLoading: isLoading,
|
|
209
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ModalHeader.ModalHeader, { leading: backButton, trailing: closeButton, alignContent: 'bottom', children: jsxRuntime.jsx("div", { className: 'send-balance-page-layout__header-content', children: jsxRuntime.jsx(Typography.Typography, { variant: 'title', color: 'primary', copykey: 'dyn_send_transaction.data.send', children: t('dyn_send_transaction.data.send') }) }) }), jsxRuntime.jsxs("div", { className: 'send-balance-page-layout__body', children: [jsxRuntime.jsx(AnimatePresence.AnimatePresence, { animationComponent: jsxRuntime.jsx(VerticalDrawerTransition.VerticalDrawerTransition, {}), children: error && (jsxRuntime.jsx("div", { className: 'send-balance-page-layout__error', children: jsxRuntime.jsx(Alert.Alert, { icon: 'error', variant: 'error', children: error }) })) }), jsxRuntime.jsx(SendBalanceForm.SendBalanceForm, { tokenBalances: tokenBalances, setCurrentToken: setCurrentToken, isLoading: isLoading,
|
|
210
|
+
// Tempo-specific props
|
|
211
|
+
isTempo: isTempo, feeTokenOptions: isTempo ? tokenBalances : undefined, currentFeeToken: currentFeeToken, setCurrentFeeToken: setCurrentFeeToken, onSubmit: ({ amount, recipient }) => {
|
|
195
212
|
if (isNativeToken) {
|
|
196
213
|
transaction.value = transaction.parse(amount);
|
|
197
214
|
}
|
|
@@ -202,10 +219,15 @@ const SendBalancePageLayout = ({ error, onClickClose, onClickBack, onSubmit, dis
|
|
|
202
219
|
transaction.nonNativeDecimal = currentToken === null || currentToken === void 0 ? void 0 : currentToken.decimals;
|
|
203
220
|
}
|
|
204
221
|
transaction.to = recipient;
|
|
222
|
+
// Tempo-specific: set fee token address and symbol
|
|
223
|
+
if (isTempo && (currentFeeToken === null || currentFeeToken === void 0 ? void 0 : currentFeeToken.address)) {
|
|
224
|
+
transaction.feeTokenAddress = currentFeeToken.address;
|
|
225
|
+
transaction.feeTokenSymbol = currentFeeToken.symbol;
|
|
226
|
+
}
|
|
205
227
|
onSubmit();
|
|
206
228
|
}, initialValues: {
|
|
207
229
|
amount: getAmount(),
|
|
208
|
-
recipient: (
|
|
230
|
+
recipient: (_b = transaction.to) !== null && _b !== void 0 ? _b : '',
|
|
209
231
|
}, decimals: isNativeToken ? networkCurrencyDecimals : currentToken === null || currentToken === void 0 ? void 0 : currentToken.decimals, validateAddress: (value) => {
|
|
210
232
|
if (!value)
|
|
211
233
|
return true;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { __awaiter } from '../../../../_virtual/_tslib.js';
|
|
3
3
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
|
-
import { useEffect } from 'react';
|
|
4
|
+
import { useState, useEffect } from 'react';
|
|
5
5
|
import { useTranslation } from 'react-i18next';
|
|
6
6
|
import '../../context/DynamicContext/DynamicContext.js';
|
|
7
7
|
import '../../store/state/loadingAndLifecycle/loadingAndLifecycle.js';
|
|
@@ -119,7 +119,7 @@ import '../../shared/utils/functions/getInitialUrl/getInitialUrl.js';
|
|
|
119
119
|
import { useInternalDynamicContext } from '../../context/DynamicContext/useDynamicContext/useInternalDynamicContext/useInternalDynamicContext.js';
|
|
120
120
|
|
|
121
121
|
const SendBalancePageLayout = ({ error, onClickClose, onClickBack, onSubmit, displayPoweredByDynamicFooter = false, transaction, networkCurrencyDecimals, tokenBalances, currentToken, setCurrentToken, isLoading, isNativeToken, }) => {
|
|
122
|
-
var _a;
|
|
122
|
+
var _a, _b;
|
|
123
123
|
const { t } = useTranslation();
|
|
124
124
|
const { primaryWallet, projectSettings, overrides } = useInternalDynamicContext();
|
|
125
125
|
const networkInfo = useNetworkConfigurationsFromProjectSettings({
|
|
@@ -128,6 +128,21 @@ const SendBalancePageLayout = ({ error, onClickClose, onClickBack, onSubmit, dis
|
|
|
128
128
|
});
|
|
129
129
|
const walletConnector = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector;
|
|
130
130
|
const { chain } = useFetchChain(walletConnector);
|
|
131
|
+
// Tempo-specific: detect Tempo chain and manage fee token state
|
|
132
|
+
const isTempo = ((_a = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector) === null || _a === void 0 ? void 0 : _a.connectedChain) === 'TEMPO';
|
|
133
|
+
const [currentFeeToken, setCurrentFeeToken] = useState(undefined);
|
|
134
|
+
// Initialize fee token to first available token for Tempo
|
|
135
|
+
// Also reset if current token is no longer in the list (stale after refresh)
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
if (isTempo && tokenBalances && tokenBalances.length > 0) {
|
|
138
|
+
const currentTokenStillExists = currentFeeToken
|
|
139
|
+
? tokenBalances.some((token) => token.address === currentFeeToken.address)
|
|
140
|
+
: false;
|
|
141
|
+
if (!currentFeeToken || !currentTokenStillExists) {
|
|
142
|
+
setCurrentFeeToken(tokenBalances[0]);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}, [isTempo, tokenBalances, currentFeeToken]);
|
|
131
146
|
const closeButton = onClickClose && (jsx(IconButton, { type: 'button', onClick: onClickClose, "data-testid": 'close-button', children: jsx(SvgClose, {}) }));
|
|
132
147
|
const backButton = onClickBack && (jsx(IconButton, { type: 'button', onClick: onClickBack, "data-testid": 'back-button', children: jsx(SvgArrowLeft, {}) }));
|
|
133
148
|
const { data: balance } = usePromise(() => transaction.getBalance(), {
|
|
@@ -187,7 +202,9 @@ const SendBalancePageLayout = ({ error, onClickClose, onClickBack, onSubmit, dis
|
|
|
187
202
|
? transaction.formatNonNativeToken(transaction.nonNativeValue, transaction.nonNativeDecimal)
|
|
188
203
|
: '';
|
|
189
204
|
};
|
|
190
|
-
return (jsxs(Fragment, { children: [jsx(ModalHeader, { leading: backButton, trailing: closeButton, alignContent: 'bottom', children: jsx("div", { className: 'send-balance-page-layout__header-content', children: jsx(Typography, { variant: 'title', color: 'primary', copykey: 'dyn_send_transaction.data.send', children: t('dyn_send_transaction.data.send') }) }) }), jsxs("div", { className: 'send-balance-page-layout__body', children: [jsx(AnimatePresence, { animationComponent: jsx(VerticalDrawerTransition, {}), children: error && (jsx("div", { className: 'send-balance-page-layout__error', children: jsx(Alert, { icon: 'error', variant: 'error', children: error }) })) }), jsx(SendBalanceForm, { tokenBalances: tokenBalances, setCurrentToken: setCurrentToken, isLoading: isLoading,
|
|
205
|
+
return (jsxs(Fragment, { children: [jsx(ModalHeader, { leading: backButton, trailing: closeButton, alignContent: 'bottom', children: jsx("div", { className: 'send-balance-page-layout__header-content', children: jsx(Typography, { variant: 'title', color: 'primary', copykey: 'dyn_send_transaction.data.send', children: t('dyn_send_transaction.data.send') }) }) }), jsxs("div", { className: 'send-balance-page-layout__body', children: [jsx(AnimatePresence, { animationComponent: jsx(VerticalDrawerTransition, {}), children: error && (jsx("div", { className: 'send-balance-page-layout__error', children: jsx(Alert, { icon: 'error', variant: 'error', children: error }) })) }), jsx(SendBalanceForm, { tokenBalances: tokenBalances, setCurrentToken: setCurrentToken, isLoading: isLoading,
|
|
206
|
+
// Tempo-specific props
|
|
207
|
+
isTempo: isTempo, feeTokenOptions: isTempo ? tokenBalances : undefined, currentFeeToken: currentFeeToken, setCurrentFeeToken: setCurrentFeeToken, onSubmit: ({ amount, recipient }) => {
|
|
191
208
|
if (isNativeToken) {
|
|
192
209
|
transaction.value = transaction.parse(amount);
|
|
193
210
|
}
|
|
@@ -198,10 +215,15 @@ const SendBalancePageLayout = ({ error, onClickClose, onClickBack, onSubmit, dis
|
|
|
198
215
|
transaction.nonNativeDecimal = currentToken === null || currentToken === void 0 ? void 0 : currentToken.decimals;
|
|
199
216
|
}
|
|
200
217
|
transaction.to = recipient;
|
|
218
|
+
// Tempo-specific: set fee token address and symbol
|
|
219
|
+
if (isTempo && (currentFeeToken === null || currentFeeToken === void 0 ? void 0 : currentFeeToken.address)) {
|
|
220
|
+
transaction.feeTokenAddress = currentFeeToken.address;
|
|
221
|
+
transaction.feeTokenSymbol = currentFeeToken.symbol;
|
|
222
|
+
}
|
|
201
223
|
onSubmit();
|
|
202
224
|
}, initialValues: {
|
|
203
225
|
amount: getAmount(),
|
|
204
|
-
recipient: (
|
|
226
|
+
recipient: (_b = transaction.to) !== null && _b !== void 0 ? _b : '',
|
|
205
227
|
}, decimals: isNativeToken ? networkCurrencyDecimals : currentToken === null || currentToken === void 0 ? void 0 : currentToken.decimals, validateAddress: (value) => {
|
|
206
228
|
if (!value)
|
|
207
229
|
return true;
|
|
@@ -78,6 +78,7 @@ require('../../../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
|
|
|
78
78
|
require('../../../IconButton/IconButton.cjs');
|
|
79
79
|
require('../../../../utils/hooks/useGetMfaToken/useGetMfaToken.cjs');
|
|
80
80
|
require('../../../MenuList/Dropdown/Dropdown.cjs');
|
|
81
|
+
var Image = require('../../../Image/Image.cjs');
|
|
81
82
|
require('formik');
|
|
82
83
|
require('../../../../utils/hooks/useSubdomainCheck/useSubdomainCheck.cjs');
|
|
83
84
|
var sendBalances = require('../../../../store/state/sendBalances.cjs');
|
|
@@ -192,7 +193,9 @@ const TokensBalanceDropdown = ({ tokenBalances, currentToken, setCurrentToken, i
|
|
|
192
193
|
if (isLoading) {
|
|
193
194
|
return jsxRuntime.jsx(Skeleton.Skeleton, {});
|
|
194
195
|
}
|
|
195
|
-
const tokenLogo = (token, size) => (token === null || token === void 0 ? void 0 : token.logoURI
|
|
196
|
+
const tokenLogo = (token, size) => (jsxRuntime.jsx(Image.Image, { src: token === null || token === void 0 ? void 0 : token.logoURI, alt: token === null || token === void 0 ? void 0 : token.name, className: 'token-balance-item__icon', dataTestId: 'token-balance-item-icon', fallback:
|
|
197
|
+
// eslint-disable-next-line react/jsx-wrap-multilines
|
|
198
|
+
jsxRuntime.jsx("div", { className: 'token-balance-item__skeleton-icon', "data-testid": 'token-balance-item__skeleton-icon', style: { height: `${size}px`, width: `${size}px` } }) }));
|
|
196
199
|
return (jsxRuntime.jsxs("div", { className: 'tokens-balance-dropdown', ref: anchorRef, onClick: () => setIsDropdownOpen(!isDropdownOpen), "data-testid": 'tokens-balance-dropdown', children: [!isLoading && (jsxRuntime.jsxs("div", { className: 'tokens-balance-dropdown__selected', children: [tokenLogo(currentToken, '20'), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'primary', children: currentToken === null || currentToken === void 0 ? void 0 : currentToken.name }), jsxRuntime.jsx(Icon.Icon, { color: 'text-primary', size: 'small', className: classNames.classNames('evm-network-control__arrow-icon', {
|
|
197
200
|
'evm-network-control__arrow-icon--active': isDropdownOpen,
|
|
198
201
|
}), children: jsxRuntime.jsx(stroke.ReactComponent, {}) })] })), jsxRuntime.jsx(MenuList.MenuList, { className: 'tokens-balance-dropdown__menu_list', isOpen: isDropdownOpen, popperProps: {
|
|
@@ -74,6 +74,7 @@ import '../../../../widgets/DynamicWidget/context/DynamicWidgetContext.js';
|
|
|
74
74
|
import '../../../IconButton/IconButton.js';
|
|
75
75
|
import '../../../../utils/hooks/useGetMfaToken/useGetMfaToken.js';
|
|
76
76
|
import '../../../MenuList/Dropdown/Dropdown.js';
|
|
77
|
+
import { Image } from '../../../Image/Image.js';
|
|
77
78
|
import 'formik';
|
|
78
79
|
import '../../../../utils/hooks/useSubdomainCheck/useSubdomainCheck.js';
|
|
79
80
|
import { setSendBalanceVariable } from '../../../../store/state/sendBalances.js';
|
|
@@ -188,7 +189,9 @@ const TokensBalanceDropdown = ({ tokenBalances, currentToken, setCurrentToken, i
|
|
|
188
189
|
if (isLoading) {
|
|
189
190
|
return jsx(Skeleton, {});
|
|
190
191
|
}
|
|
191
|
-
const tokenLogo = (token, size) => (token === null || token === void 0 ? void 0 : token.logoURI
|
|
192
|
+
const tokenLogo = (token, size) => (jsx(Image, { src: token === null || token === void 0 ? void 0 : token.logoURI, alt: token === null || token === void 0 ? void 0 : token.name, className: 'token-balance-item__icon', dataTestId: 'token-balance-item-icon', fallback:
|
|
193
|
+
// eslint-disable-next-line react/jsx-wrap-multilines
|
|
194
|
+
jsx("div", { className: 'token-balance-item__skeleton-icon', "data-testid": 'token-balance-item__skeleton-icon', style: { height: `${size}px`, width: `${size}px` } }) }));
|
|
192
195
|
return (jsxs("div", { className: 'tokens-balance-dropdown', ref: anchorRef, onClick: () => setIsDropdownOpen(!isDropdownOpen), "data-testid": 'tokens-balance-dropdown', children: [!isLoading && (jsxs("div", { className: 'tokens-balance-dropdown__selected', children: [tokenLogo(currentToken, '20'), jsx(Typography, { variant: 'body_normal', color: 'primary', children: currentToken === null || currentToken === void 0 ? void 0 : currentToken.name }), jsx(Icon, { color: 'text-primary', size: 'small', className: classNames('evm-network-control__arrow-icon', {
|
|
193
196
|
'evm-network-control__arrow-icon--active': isDropdownOpen,
|
|
194
197
|
}), children: jsx(SvgStroke, {}) })] })), jsx(MenuList, { className: 'tokens-balance-dropdown__menu_list', isOpen: isDropdownOpen, popperProps: {
|
|
@@ -120,7 +120,7 @@ require('../../shared/utils/functions/getInitialUrl/getInitialUrl.cjs');
|
|
|
120
120
|
var useInternalDynamicContext = require('../../context/DynamicContext/useDynamicContext/useInternalDynamicContext/useInternalDynamicContext.cjs');
|
|
121
121
|
|
|
122
122
|
const SendBalanceTransactionCard = ({ transaction, currentToken, currencySymbol, valueRounded, transactionValue, isGasSponsored, gasFiatValue, totalGasFiatValue, currency, total, t, onFeeUpdate, }) => {
|
|
123
|
-
var _a, _b;
|
|
123
|
+
var _a, _b, _c;
|
|
124
124
|
const { primaryWallet, projectSettings, overrides } = useInternalDynamicContext.useInternalDynamicContext();
|
|
125
125
|
const networkInfo = useNetworkConfigurationsFromProjectSettings.useNetworkConfigurationsFromProjectSettings({
|
|
126
126
|
evmNetworksOverrides: overrides === null || overrides === void 0 ? void 0 : overrides.evmNetworks,
|
|
@@ -136,15 +136,17 @@ const SendBalanceTransactionCard = ({ transaction, currentToken, currencySymbol,
|
|
|
136
136
|
const isBitcoinTransaction = transaction.chain === 'BTC' ||
|
|
137
137
|
((_b = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector) === null || _b === void 0 ? void 0 : _b.connectedChain) === 'BTC' ||
|
|
138
138
|
((primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector) && walletConnectorCore.isBitcoinConnector(primaryWallet.connector));
|
|
139
|
+
// Check if this is a Tempo transaction (for fee token display)
|
|
140
|
+
const isTempoTransaction = ((_c = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector) === null || _c === void 0 ? void 0 : _c.connectedChain) === 'TEMPO';
|
|
139
141
|
const bitcoinTransaction = transaction;
|
|
140
142
|
const [feePriority, setFeePriority] = React.useState((bitcoinTransaction === null || bitcoinTransaction === void 0 ? void 0 : bitcoinTransaction.feePriority) || 'medium');
|
|
141
143
|
const handleFeePriorityChange = React.useCallback((newPriority) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
142
|
-
var
|
|
144
|
+
var _d;
|
|
143
145
|
if (!isBitcoinTransaction || feePriority === newPriority) {
|
|
144
146
|
return;
|
|
145
147
|
}
|
|
146
148
|
setFeePriority(newPriority);
|
|
147
|
-
yield ((
|
|
149
|
+
yield ((_d = bitcoinTransaction.updateFeePriority) === null || _d === void 0 ? void 0 : _d.call(bitcoinTransaction, newPriority));
|
|
148
150
|
onFeeUpdate === null || onFeeUpdate === void 0 ? void 0 : onFeeUpdate();
|
|
149
151
|
}), [isBitcoinTransaction, feePriority, bitcoinTransaction, onFeeUpdate]);
|
|
150
152
|
const renderTransferDetails = () => (jsxRuntime.jsx("div", { className: 'transaction-card', children: jsxRuntime.jsx("div", { className: 'transaction-card__assets-container', children: jsxRuntime.jsx("div", { className: 'transaction-card__out', children: jsxRuntime.jsxs("div", { className: 'transaction-card__info-container', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'secondary', children: t('dyn_send_transaction.confirmation.data.transfer.send') }), jsxRuntime.jsxs("div", { className: 'transaction-card__amount-symbol', children: [jsxRuntime.jsxs("div", { className: 'transaction-card__token-info', children: [jsxRuntime.jsxs("div", { className: 'transaction-card__token-row', children: [jsxRuntime.jsxs(Typography.Typography, { variant: 'body_normal', color: 'error-1', "data-testid": 'transaction-transfer-amount', children: ["-", valueRounded ||
|
|
@@ -154,7 +156,7 @@ const SendBalanceTransactionCard = ({ transaction, currentToken, currencySymbol,
|
|
|
154
156
|
})
|
|
155
157
|
: '')] }), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'secondary', children: currencySymbol })] }), transactionValue && (jsxRuntime.jsxs(Typography.Typography, { variant: 'body_small', color: 'error-1', "data-testid": 'transaction-transfer-amount-fiat', children: ["$", utils.getDisplayFiatPrice(Number(transactionValue) || Number(valueRounded) || 0, currentToken)] }))] }), jsxRuntime.jsx("div", { className: 'transaction-card__icon', children: jsxRuntime.jsx("div", { className: 'transaction-card__icon__container', children: jsxRuntime.jsx("img", { src: (currentToken === null || currentToken === void 0 ? void 0 : currentToken.logoURI) ||
|
|
156
158
|
(networkInfoEntry === null || networkInfoEntry === void 0 ? void 0 : networkInfoEntry.nativeCurrency.iconUrl), alt: currencySymbol, width: 32, height: 32, className: 'transaction-card__icon__container__main' }) }) })] })] }) }) }) }));
|
|
157
|
-
const renderTransactionDetails = () => (jsxRuntime.jsx("div", { className: 'transaction-card', children: jsxRuntime.jsxs("div", { className: 'transaction-card__details', children: [jsxRuntime.jsxs("div", { className: 'transaction-card__row', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'secondary', copykey: 'dyn_send_transaction.confirmation.data.destination', children: t('dyn_send_transaction.confirmation.data.destination') }), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'primary', "data-testid": 'transaction-destination', children: shortenWalletAddress.shortenWalletAddress(transaction.to) })] }), !isGasSponsored && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: 'transaction-card__divider' }), jsxRuntime.jsxs("div", { className: 'transaction-card__row', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'secondary', "data-testid": 'transaction-network', copykey: 'dyn_send_transaction.confirmation.data.network', children: t('dyn_send_transaction.confirmation.data.network') }), jsxRuntime.jsxs("div", { className: 'transaction-card__network-info', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'primary', children: (networkInfoEntry === null || networkInfoEntry === void 0 ? void 0 : networkInfoEntry.name) ||
|
|
159
|
+
const renderTransactionDetails = () => (jsxRuntime.jsx("div", { className: 'transaction-card', children: jsxRuntime.jsxs("div", { className: 'transaction-card__details', children: [jsxRuntime.jsxs("div", { className: 'transaction-card__row', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'secondary', copykey: 'dyn_send_transaction.confirmation.data.destination', children: t('dyn_send_transaction.confirmation.data.destination') }), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'primary', "data-testid": 'transaction-destination', children: shortenWalletAddress.shortenWalletAddress(transaction.to) })] }), (!isGasSponsored || isTempoTransaction) && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: 'transaction-card__divider' }), jsxRuntime.jsxs("div", { className: 'transaction-card__row', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'secondary', "data-testid": 'transaction-network', copykey: 'dyn_send_transaction.confirmation.data.network', children: t('dyn_send_transaction.confirmation.data.network') }), jsxRuntime.jsxs("div", { className: 'transaction-card__network-info', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'primary', children: (networkInfoEntry === null || networkInfoEntry === void 0 ? void 0 : networkInfoEntry.name) ||
|
|
158
160
|
(isBitcoinTransaction ? 'Bitcoin' : 'Ethereum') }), jsxRuntime.jsx("img", { src: (networkInfoEntry === null || networkInfoEntry === void 0 ? void 0 : networkInfoEntry.iconUrls[0]) || (chain === null || chain === void 0 ? void 0 : chain.icon), alt: (networkInfoEntry === null || networkInfoEntry === void 0 ? void 0 : networkInfoEntry.name) ||
|
|
159
161
|
(isBitcoinTransaction ? 'Bitcoin' : 'Network icon'), width: 16, height: 16, className: 'transaction-card__network-icon' })] })] }), isBitcoinTransaction && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: 'transaction-card__divider' }), jsxRuntime.jsxs("div", { className: 'transaction-card__row', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'secondary', copykey: 'dyn_send_transaction.confirmation.data.fee_priority', children: "Fee Priority" }), jsxRuntime.jsxs("div", { className: 'transaction-card__value', style: {
|
|
160
162
|
alignItems: 'center',
|
|
@@ -180,7 +182,9 @@ const SendBalanceTransactionCard = ({ transaction, currentToken, currencySymbol,
|
|
|
180
182
|
pointerEvents: 'none',
|
|
181
183
|
position: 'absolute',
|
|
182
184
|
right: 0,
|
|
183
|
-
}, children: jsxRuntime.jsx(Icon.Icon, { size: 'small', children: jsxRuntime.jsx(chevronDown.ReactComponent, {}) }) })] })] })] })), jsxRuntime.jsx("div", { className: 'transaction-card__divider' }), jsxRuntime.jsxs("div", { className: 'transaction-card__row', children: [jsxRuntime.jsxs("div", { className: 'transaction-card__label-with-tooltip', children: [jsxRuntime.
|
|
185
|
+
}, children: jsxRuntime.jsx(Icon.Icon, { size: 'small', children: jsxRuntime.jsx(chevronDown.ReactComponent, {}) }) })] })] })] })), jsxRuntime.jsx("div", { className: 'transaction-card__divider' }), jsxRuntime.jsxs("div", { className: 'transaction-card__row', children: [jsxRuntime.jsxs("div", { className: 'transaction-card__label-with-tooltip', children: [jsxRuntime.jsxs(Typography.Typography, { variant: 'body_normal', color: 'secondary', copykey: 'dyn_send_transaction.confirmation.data.gas_estimate', children: [t('dyn_send_transaction.confirmation.data.gas_estimate'), isTempoTransaction && transaction.feeTokenSymbol && (jsxRuntime.jsxs("span", { style: { fontWeight: 'normal' }, children: [' ', "(in ", transaction.feeTokenSymbol, ")"] }))] }), jsxRuntime.jsx(Tooltip.Tooltip, { content: isTempoTransaction && transaction.feeTokenSymbol
|
|
186
|
+
? `Network fees paid in ${transaction.feeTokenSymbol}`
|
|
187
|
+
: 'Network fees are paid to process your transaction', className: 'transaction-confirmation', children: jsxRuntime.jsx(Icon.Icon, { size: 'small', className: 'fee-tooltip', children: jsxRuntime.jsx(tooltip.ReactComponent, {}) }) })] }), jsxRuntime.jsx("div", { className: 'transaction-card__value', children: (currentToken === null || currentToken === void 0 ? void 0 : currentToken.price) ? (jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'primary', "data-testid": 'transaction-estimated-gas-fee', children: Number(gasFiatValue) <= 0.01
|
|
184
188
|
? '<$0.01'
|
|
185
189
|
: `$${gasFiatValue}` })) : (jsxRuntime.jsxs(Typography.Typography, { variant: 'body_normal', color: 'primary', "data-testid": 'transaction-estimated-gas-fee', children: [transaction.fee.gas
|
|
186
190
|
? transaction.format(transaction.fee.gas, {
|
|
@@ -116,7 +116,7 @@ import '../../shared/utils/functions/getInitialUrl/getInitialUrl.js';
|
|
|
116
116
|
import { useInternalDynamicContext } from '../../context/DynamicContext/useDynamicContext/useInternalDynamicContext/useInternalDynamicContext.js';
|
|
117
117
|
|
|
118
118
|
const SendBalanceTransactionCard = ({ transaction, currentToken, currencySymbol, valueRounded, transactionValue, isGasSponsored, gasFiatValue, totalGasFiatValue, currency, total, t, onFeeUpdate, }) => {
|
|
119
|
-
var _a, _b;
|
|
119
|
+
var _a, _b, _c;
|
|
120
120
|
const { primaryWallet, projectSettings, overrides } = useInternalDynamicContext();
|
|
121
121
|
const networkInfo = useNetworkConfigurationsFromProjectSettings({
|
|
122
122
|
evmNetworksOverrides: overrides === null || overrides === void 0 ? void 0 : overrides.evmNetworks,
|
|
@@ -132,15 +132,17 @@ const SendBalanceTransactionCard = ({ transaction, currentToken, currencySymbol,
|
|
|
132
132
|
const isBitcoinTransaction = transaction.chain === 'BTC' ||
|
|
133
133
|
((_b = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector) === null || _b === void 0 ? void 0 : _b.connectedChain) === 'BTC' ||
|
|
134
134
|
((primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector) && isBitcoinConnector(primaryWallet.connector));
|
|
135
|
+
// Check if this is a Tempo transaction (for fee token display)
|
|
136
|
+
const isTempoTransaction = ((_c = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector) === null || _c === void 0 ? void 0 : _c.connectedChain) === 'TEMPO';
|
|
135
137
|
const bitcoinTransaction = transaction;
|
|
136
138
|
const [feePriority, setFeePriority] = useState((bitcoinTransaction === null || bitcoinTransaction === void 0 ? void 0 : bitcoinTransaction.feePriority) || 'medium');
|
|
137
139
|
const handleFeePriorityChange = useCallback((newPriority) => __awaiter(void 0, void 0, void 0, function* () {
|
|
138
|
-
var
|
|
140
|
+
var _d;
|
|
139
141
|
if (!isBitcoinTransaction || feePriority === newPriority) {
|
|
140
142
|
return;
|
|
141
143
|
}
|
|
142
144
|
setFeePriority(newPriority);
|
|
143
|
-
yield ((
|
|
145
|
+
yield ((_d = bitcoinTransaction.updateFeePriority) === null || _d === void 0 ? void 0 : _d.call(bitcoinTransaction, newPriority));
|
|
144
146
|
onFeeUpdate === null || onFeeUpdate === void 0 ? void 0 : onFeeUpdate();
|
|
145
147
|
}), [isBitcoinTransaction, feePriority, bitcoinTransaction, onFeeUpdate]);
|
|
146
148
|
const renderTransferDetails = () => (jsx("div", { className: 'transaction-card', children: jsx("div", { className: 'transaction-card__assets-container', children: jsx("div", { className: 'transaction-card__out', children: jsxs("div", { className: 'transaction-card__info-container', children: [jsx(Typography, { variant: 'body_normal', color: 'secondary', children: t('dyn_send_transaction.confirmation.data.transfer.send') }), jsxs("div", { className: 'transaction-card__amount-symbol', children: [jsxs("div", { className: 'transaction-card__token-info', children: [jsxs("div", { className: 'transaction-card__token-row', children: [jsxs(Typography, { variant: 'body_normal', color: 'error-1', "data-testid": 'transaction-transfer-amount', children: ["-", valueRounded ||
|
|
@@ -150,7 +152,7 @@ const SendBalanceTransactionCard = ({ transaction, currentToken, currencySymbol,
|
|
|
150
152
|
})
|
|
151
153
|
: '')] }), jsx(Typography, { variant: 'body_normal', color: 'secondary', children: currencySymbol })] }), transactionValue && (jsxs(Typography, { variant: 'body_small', color: 'error-1', "data-testid": 'transaction-transfer-amount-fiat', children: ["$", getDisplayFiatPrice(Number(transactionValue) || Number(valueRounded) || 0, currentToken)] }))] }), jsx("div", { className: 'transaction-card__icon', children: jsx("div", { className: 'transaction-card__icon__container', children: jsx("img", { src: (currentToken === null || currentToken === void 0 ? void 0 : currentToken.logoURI) ||
|
|
152
154
|
(networkInfoEntry === null || networkInfoEntry === void 0 ? void 0 : networkInfoEntry.nativeCurrency.iconUrl), alt: currencySymbol, width: 32, height: 32, className: 'transaction-card__icon__container__main' }) }) })] })] }) }) }) }));
|
|
153
|
-
const renderTransactionDetails = () => (jsx("div", { className: 'transaction-card', children: jsxs("div", { className: 'transaction-card__details', children: [jsxs("div", { className: 'transaction-card__row', children: [jsx(Typography, { variant: 'body_normal', color: 'secondary', copykey: 'dyn_send_transaction.confirmation.data.destination', children: t('dyn_send_transaction.confirmation.data.destination') }), jsx(Typography, { variant: 'body_normal', color: 'primary', "data-testid": 'transaction-destination', children: shortenWalletAddress(transaction.to) })] }), !isGasSponsored && (jsxs(Fragment, { children: [jsx("div", { className: 'transaction-card__divider' }), jsxs("div", { className: 'transaction-card__row', children: [jsx(Typography, { variant: 'body_normal', color: 'secondary', "data-testid": 'transaction-network', copykey: 'dyn_send_transaction.confirmation.data.network', children: t('dyn_send_transaction.confirmation.data.network') }), jsxs("div", { className: 'transaction-card__network-info', children: [jsx(Typography, { variant: 'body_normal', color: 'primary', children: (networkInfoEntry === null || networkInfoEntry === void 0 ? void 0 : networkInfoEntry.name) ||
|
|
155
|
+
const renderTransactionDetails = () => (jsx("div", { className: 'transaction-card', children: jsxs("div", { className: 'transaction-card__details', children: [jsxs("div", { className: 'transaction-card__row', children: [jsx(Typography, { variant: 'body_normal', color: 'secondary', copykey: 'dyn_send_transaction.confirmation.data.destination', children: t('dyn_send_transaction.confirmation.data.destination') }), jsx(Typography, { variant: 'body_normal', color: 'primary', "data-testid": 'transaction-destination', children: shortenWalletAddress(transaction.to) })] }), (!isGasSponsored || isTempoTransaction) && (jsxs(Fragment, { children: [jsx("div", { className: 'transaction-card__divider' }), jsxs("div", { className: 'transaction-card__row', children: [jsx(Typography, { variant: 'body_normal', color: 'secondary', "data-testid": 'transaction-network', copykey: 'dyn_send_transaction.confirmation.data.network', children: t('dyn_send_transaction.confirmation.data.network') }), jsxs("div", { className: 'transaction-card__network-info', children: [jsx(Typography, { variant: 'body_normal', color: 'primary', children: (networkInfoEntry === null || networkInfoEntry === void 0 ? void 0 : networkInfoEntry.name) ||
|
|
154
156
|
(isBitcoinTransaction ? 'Bitcoin' : 'Ethereum') }), jsx("img", { src: (networkInfoEntry === null || networkInfoEntry === void 0 ? void 0 : networkInfoEntry.iconUrls[0]) || (chain === null || chain === void 0 ? void 0 : chain.icon), alt: (networkInfoEntry === null || networkInfoEntry === void 0 ? void 0 : networkInfoEntry.name) ||
|
|
155
157
|
(isBitcoinTransaction ? 'Bitcoin' : 'Network icon'), width: 16, height: 16, className: 'transaction-card__network-icon' })] })] }), isBitcoinTransaction && (jsxs(Fragment, { children: [jsx("div", { className: 'transaction-card__divider' }), jsxs("div", { className: 'transaction-card__row', children: [jsx(Typography, { variant: 'body_normal', color: 'secondary', copykey: 'dyn_send_transaction.confirmation.data.fee_priority', children: "Fee Priority" }), jsxs("div", { className: 'transaction-card__value', style: {
|
|
156
158
|
alignItems: 'center',
|
|
@@ -176,7 +178,9 @@ const SendBalanceTransactionCard = ({ transaction, currentToken, currencySymbol,
|
|
|
176
178
|
pointerEvents: 'none',
|
|
177
179
|
position: 'absolute',
|
|
178
180
|
right: 0,
|
|
179
|
-
}, children: jsx(Icon, { size: 'small', children: jsx(SvgChevronDown, {}) }) })] })] })] })), jsx("div", { className: 'transaction-card__divider' }), jsxs("div", { className: 'transaction-card__row', children: [jsxs("div", { className: 'transaction-card__label-with-tooltip', children: [
|
|
181
|
+
}, children: jsx(Icon, { size: 'small', children: jsx(SvgChevronDown, {}) }) })] })] })] })), jsx("div", { className: 'transaction-card__divider' }), jsxs("div", { className: 'transaction-card__row', children: [jsxs("div", { className: 'transaction-card__label-with-tooltip', children: [jsxs(Typography, { variant: 'body_normal', color: 'secondary', copykey: 'dyn_send_transaction.confirmation.data.gas_estimate', children: [t('dyn_send_transaction.confirmation.data.gas_estimate'), isTempoTransaction && transaction.feeTokenSymbol && (jsxs("span", { style: { fontWeight: 'normal' }, children: [' ', "(in ", transaction.feeTokenSymbol, ")"] }))] }), jsx(Tooltip, { content: isTempoTransaction && transaction.feeTokenSymbol
|
|
182
|
+
? `Network fees paid in ${transaction.feeTokenSymbol}`
|
|
183
|
+
: 'Network fees are paid to process your transaction', className: 'transaction-confirmation', children: jsx(Icon, { size: 'small', className: 'fee-tooltip', children: jsx(SvgTooltip, {}) }) })] }), jsx("div", { className: 'transaction-card__value', children: (currentToken === null || currentToken === void 0 ? void 0 : currentToken.price) ? (jsx(Typography, { variant: 'body_normal', color: 'primary', "data-testid": 'transaction-estimated-gas-fee', children: Number(gasFiatValue) <= 0.01
|
|
180
184
|
? '<$0.01'
|
|
181
185
|
: `$${gasFiatValue}` })) : (jsxs(Typography, { variant: 'body_normal', color: 'primary', "data-testid": 'transaction-estimated-gas-fee', children: [transaction.fee.gas
|
|
182
186
|
? transaction.format(transaction.fee.gas, {
|
|
@@ -34,6 +34,8 @@ const externalEvents = [
|
|
|
34
34
|
'embeddedWalletRevealCompleted',
|
|
35
35
|
'embeddedWalletRevealFailed',
|
|
36
36
|
'walletReturnFromDeepLink',
|
|
37
|
+
'deviceRegistrationCompleted',
|
|
38
|
+
'deviceRegistrationCompletedInAnotherTab',
|
|
37
39
|
];
|
|
38
40
|
// Full internal event emitter
|
|
39
41
|
const dynamicEvents = new EventEmitter__default["default"]();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import EventEmitter from 'eventemitter3';
|
|
2
2
|
import { AuthEvents } from './auth';
|
|
3
|
+
import { DeviceRegistrationEvents } from './deviceRegistration';
|
|
3
4
|
import { EmbeddedWalletEvents } from './embeddedWallet';
|
|
4
5
|
import { FundingEvents } from './funding';
|
|
5
6
|
import { MultiWalletInternalEvents } from './multiWallet';
|
|
@@ -11,10 +12,10 @@ import { UIEvents } from './ui';
|
|
|
11
12
|
import { UserEvents } from './user';
|
|
12
13
|
import { WalletEvents } from './wallets';
|
|
13
14
|
/** Maps internal event names to their listeners */
|
|
14
|
-
export type DynamicEvents = AuthEvents & UIEvents & OTPEvents & WalletEvents & PasskeyEvents & SocialEvents & EmbeddedWalletEvents & MultiWalletInternalEvents & TokenBalancesEvents & UserEvents & FundingEvents;
|
|
15
|
+
export type DynamicEvents = AuthEvents & DeviceRegistrationEvents & UIEvents & OTPEvents & WalletEvents & PasskeyEvents & SocialEvents & EmbeddedWalletEvents & MultiWalletInternalEvents & TokenBalancesEvents & UserEvents & FundingEvents;
|
|
15
16
|
type PublicDynamicEvents = Pick<DynamicEvents, typeof externalEvents[number]>;
|
|
16
17
|
/** Which events are accessible by our clients */
|
|
17
|
-
export declare const externalEvents: ("authFailure" | "authInit" | "logout" | "mfaCompletionSuccess" | "mfaCompletionFailure" | "authFlowOpen" | "authFlowClose" | "authFlowCancelled" | "walletTabSelected" | "emailVerificationResult" | "smsVerificationResult" | "walletAdded" | "walletRemoved" | "primaryWalletChanged" | "primaryWalletNetworkChanged" | "userWalletsChanged" | "walletConnectionFailed" | "walletConnectionQrCodeReady" | "walletReturnFromDeepLink" | "embeddedWalletCreated" | "embeddedWalletRevealCompleted" | "embeddedWalletRevealFailed" | "walletConnectedForFunding")[];
|
|
18
|
+
export declare const externalEvents: ("authFailure" | "authInit" | "logout" | "mfaCompletionSuccess" | "mfaCompletionFailure" | "deviceRegistrationCompleted" | "deviceRegistrationCompletedInAnotherTab" | "authFlowOpen" | "authFlowClose" | "authFlowCancelled" | "walletTabSelected" | "emailVerificationResult" | "smsVerificationResult" | "walletAdded" | "walletRemoved" | "primaryWalletChanged" | "primaryWalletNetworkChanged" | "userWalletsChanged" | "walletConnectionFailed" | "walletConnectionQrCodeReady" | "walletReturnFromDeepLink" | "embeddedWalletCreated" | "embeddedWalletRevealCompleted" | "embeddedWalletRevealFailed" | "walletConnectedForFunding")[];
|
|
18
19
|
export declare const dynamicEvents: EventEmitter<DynamicEvents, any>;
|
|
19
20
|
export declare const publicDynamicEvents: EventEmitter<PublicDynamicEvents, any>;
|
|
20
21
|
export type DynamicEventEmitter = typeof dynamicEvents;
|
|
@@ -26,6 +26,8 @@ const externalEvents = [
|
|
|
26
26
|
'embeddedWalletRevealCompleted',
|
|
27
27
|
'embeddedWalletRevealFailed',
|
|
28
28
|
'walletReturnFromDeepLink',
|
|
29
|
+
'deviceRegistrationCompleted',
|
|
30
|
+
'deviceRegistrationCompletedInAnotherTab',
|
|
29
31
|
];
|
|
30
32
|
// Full internal event emitter
|
|
31
33
|
const dynamicEvents = new EventEmitter();
|