diff --git a/ui/components/app/confirm-page-container/confirm-page-container-container.test.js b/ui/components/app/confirm-page-container/confirm-page-container-container.test.js
index 008abbdab388..8bbbdd072544 100644
--- a/ui/components/app/confirm-page-container/confirm-page-container-container.test.js
+++ b/ui/components/app/confirm-page-container/confirm-page-container-container.test.js
@@ -23,13 +23,116 @@ jest.mock('../../../pages/swaps/swaps.util', () => {
};
});
+jest.mock('../../../selectors', () => {
+ return {
+ ...jest.requireActual('../../../selectors/'),
+ getTxData: jest.fn(() => ({
+ id: 1230035278491151,
+ time: 1671022500513,
+ status: 'unapproved',
+ metamaskNetworkId: '80001',
+ originalGasEstimate: '0xea60',
+ userEditedGasLimit: false,
+ chainId: '0x13881',
+ loadingDefaults: false,
+ dappSuggestedGasFees: {
+ gasPrice: '0x4a817c800',
+ gas: '0xea60',
+ },
+ sendFlowHistory: [],
+ txParams: {
+ from: '0xdd34b35ca1de17dfcdc07f79ff1f8f94868c40a1',
+ to: '0x7a67ff4a59594a56d46e9308a5c6e197fa83a3cf',
+ value: '0x0',
+ data: '0x095ea7b30000000000000000000000009bc5baf874d2da8d216ae9f137804184ee5afef40000000000000000000000000000000000000000000000000000000000011170',
+ gas: '0xea60',
+ maxFeePerGas: '0x0',
+ maxPriorityFeePerGas: '0x0',
+ },
+ origin: 'https://metamask.github.io',
+ type: 'simpleSend',
+ history: [
+ {
+ id: 1230035278491151,
+ time: 1671022500513,
+ status: 'unapproved',
+ metamaskNetworkId: '80001',
+ originalGasEstimate: '0xea60',
+ userEditedGasLimit: false,
+ chainId: '0x13881',
+ loadingDefaults: true,
+ dappSuggestedGasFees: {
+ gasPrice: '0x4a817c800',
+ gas: '0xea60',
+ },
+ sendFlowHistory: [],
+ txParams: {
+ from: '0xdd34b35ca1de17dfcdc07f79ff1f8f94868c40a1',
+ to: '0x7a67ff4a59594a56d46e9308a5c6e197fa83a3cf',
+ value: '0x0',
+ data: '0x095ea7b30000000000000000000000009bc5baf874d2da8d216ae9f137804184ee5afef40000000000000000000000000000000000000000000000000000000000011170',
+ gas: '0xea60',
+ gasPrice: '0x4a817c800',
+ },
+ origin: 'https://metamask.github.io',
+ type: 'simpleSend',
+ },
+ [
+ {
+ op: 'remove',
+ path: '/txParams/gasPrice',
+ note: 'Added new unapproved transaction.',
+ timestamp: 1671022501288,
+ },
+ {
+ op: 'add',
+ path: '/txParams/maxFeePerGas',
+ value: '0x0',
+ },
+ {
+ op: 'add',
+ path: '/txParams/maxPriorityFeePerGas',
+ value: '0x0',
+ },
+ {
+ op: 'replace',
+ path: '/loadingDefaults',
+ value: false,
+ },
+ {
+ op: 'add',
+ path: '/userFeeLevel',
+ value: 'custom',
+ },
+ {
+ op: 'add',
+ path: '/defaultGasEstimates',
+ value: {
+ estimateType: 'custom',
+ gas: '0xea60',
+ maxFeePerGas: '0',
+ maxPriorityFeePerGas: '0',
+ },
+ },
+ ],
+ ],
+ userFeeLevel: 'custom',
+ defaultGasEstimates: {
+ estimateType: 'custom',
+ gas: '0xea60',
+ maxFeePerGas: '0',
+ maxPriorityFeePerGas: '0',
+ },
+ })),
+ };
+});
+
describe('Confirm Page Container Container Test', () => {
const props = {
title: 'Title',
fromAddress: '0xd8f6a2ffb0fc5952d16c9768b71cfd35b6399aa5',
toAddress: '0x7a1A4Ad9cc746a70ee58568466f7996dD0aCE4E8',
origin: 'testOrigin', // required
- onNextTx: sinon.spy(),
// Footer
onCancelAll: sinon.spy(),
onCancel: sinon.spy(),
diff --git a/ui/components/app/confirm-page-container/confirm-page-container-navigation/confirm-page-container-navigation.component.js b/ui/components/app/confirm-page-container/confirm-page-container-navigation/confirm-page-container-navigation.component.js
index 06b944a6e710..37e8f666eb04 100755
--- a/ui/components/app/confirm-page-container/confirm-page-container-navigation/confirm-page-container-navigation.component.js
+++ b/ui/components/app/confirm-page-container/confirm-page-container-navigation/confirm-page-container-navigation.component.js
@@ -1,19 +1,48 @@
-import React from 'react';
-import PropTypes from 'prop-types';
+import React, { useContext } from 'react';
+import { useDispatch, useSelector } from 'react-redux';
+import { useHistory } from 'react-router-dom';
+import { getTxData, getUnapprovedTransactions } from '../../../../selectors';
+import { transactionMatchesNetwork } from '../../../../../shared/modules/transaction.utils';
+import { I18nContext } from '../../../../contexts/i18n';
+import { CONFIRM_TRANSACTION_ROUTE } from '../../../../helpers/constants/routes';
+import { clearConfirmTransaction } from '../../../../ducks/confirm-transaction/confirm-transaction.duck';
+import { hexToDecimal } from '../../../../../shared/lib/metamask-controller-utils';
-const ConfirmPageContainerNavigation = (props) => {
- const {
- onNextTx,
- totalTx,
- positionOfCurrentTx,
- nextTxId,
- prevTxId,
- showNavigation,
- firstTx,
- lastTx,
- ofText,
- requestsWaitingText,
- } = props;
+const ConfirmPageContainerNavigation = () => {
+ const t = useContext(I18nContext);
+ const dispatch = useDispatch();
+ const history = useHistory();
+
+ const unapprovedTxs = useSelector(getUnapprovedTransactions);
+ const txData = useSelector(getTxData);
+
+ const network = hexToDecimal(txData.chainId);
+
+ const currentNetworkUnapprovedTxs = Object.keys(unapprovedTxs)
+ .filter((key) =>
+ transactionMatchesNetwork(unapprovedTxs[key], txData.chainId, network),
+ )
+ .reduce((acc, key) => ({ ...acc, [key]: unapprovedTxs[key] }), {});
+
+ const enumUnapprovedTxs = Object.keys(currentNetworkUnapprovedTxs);
+ const currentPosition = enumUnapprovedTxs.indexOf(
+ txData.id ? txData.id.toString() : '',
+ );
+
+ const totalTx = enumUnapprovedTxs.length;
+ const positionOfCurrentTx = currentPosition + 1;
+ const nextTxId = enumUnapprovedTxs[currentPosition + 1];
+ const prevTxId = enumUnapprovedTxs[currentPosition - 1];
+ const showNavigation = enumUnapprovedTxs.length > 1;
+ const firstTx = enumUnapprovedTxs[0];
+ const lastTx = enumUnapprovedTxs[enumUnapprovedTxs.length - 1];
+
+ const onNextTx = (txId) => {
+ if (txId) {
+ dispatch(clearConfirmTransaction());
+ history.push(`${CONFIRM_TRANSACTION_ROUTE}/${txId}`);
+ }
+ };
return (
{
- {positionOfCurrentTx} {ofText} {totalTx}
+ {positionOfCurrentTx} {t('ofTextNofM')} {totalTx}
- {requestsWaitingText}
+ {t('requestsAwaitingAcknowledgement')}
{
);
};
-ConfirmPageContainerNavigation.propTypes = {
- totalTx: PropTypes.number,
- positionOfCurrentTx: PropTypes.number,
- onNextTx: PropTypes.func,
- nextTxId: PropTypes.string,
- prevTxId: PropTypes.string,
- showNavigation: PropTypes.bool,
- firstTx: PropTypes.string,
- lastTx: PropTypes.string,
- ofText: PropTypes.string,
- requestsWaitingText: PropTypes.string,
-};
-
export default ConfirmPageContainerNavigation;
diff --git a/ui/components/app/confirm-page-container/confirm-page-container.component.js b/ui/components/app/confirm-page-container/confirm-page-container.component.js
index b4ea1a3fb725..52e5d1d12f6c 100644
--- a/ui/components/app/confirm-page-container/confirm-page-container.component.js
+++ b/ui/components/app/confirm-page-container/confirm-page-container.component.js
@@ -83,17 +83,6 @@ export default class ConfirmPageContainer extends Component {
origin: PropTypes.string.isRequired,
ethGasPriceWarning: PropTypes.string,
networkIdentifier: PropTypes.string,
- // Navigation
- totalTx: PropTypes.number,
- positionOfCurrentTx: PropTypes.number,
- nextTxId: PropTypes.string,
- prevTxId: PropTypes.string,
- showNavigation: PropTypes.bool,
- onNextTx: PropTypes.func,
- firstTx: PropTypes.string,
- lastTx: PropTypes.string,
- ofText: PropTypes.string,
- requestsWaitingText: PropTypes.string,
// Footer
onCancelAll: PropTypes.func,
onCancel: PropTypes.func,
@@ -158,16 +147,6 @@ export default class ConfirmPageContainer extends Component {
nonce,
unapprovedTxCount,
warning,
- totalTx,
- positionOfCurrentTx,
- nextTxId,
- prevTxId,
- showNavigation,
- onNextTx,
- firstTx,
- lastTx,
- ofText,
- requestsWaitingText,
hideSenderToRecipient,
showAccountInHeader,
origin,
@@ -208,18 +187,7 @@ export default class ConfirmPageContainer extends Component {
return (
- onNextTx(txId)}
- firstTx={firstTx}
- lastTx={lastTx}
- ofText={ofText}
- requestsWaitingText={requestsWaitingText}
- />
+
{assetStandard === ERC20 ||
assetStandard === ERC721 ||
assetStandard === ERC1155 ? (
diff --git a/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js b/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js
index c5dddfdaa640..7465bd4d1eda 100644
--- a/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js
+++ b/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js
@@ -7,10 +7,7 @@ import ConfirmPageContainer from '../../components/app/confirm-page-container';
import TransactionDecoding from '../../components/app/transaction-decoding';
import { isBalanceSufficient } from '../send/send.utils';
import { addHexes } from '../../helpers/utils/conversions.util';
-import {
- CONFIRM_TRANSACTION_ROUTE,
- DEFAULT_ROUTE,
-} from '../../helpers/constants/routes';
+import { DEFAULT_ROUTE } from '../../helpers/constants/routes';
import {
INSUFFICIENT_FUNDS_ERROR_KEY,
GAS_LIMIT_TOO_LOW_ERROR_KEY,
@@ -116,7 +113,6 @@ export default class ConfirmTransactionBase extends Component {
transactionStatus: PropTypes.string,
txData: PropTypes.object,
unapprovedTxCount: PropTypes.number,
- currentNetworkUnapprovedTxs: PropTypes.object,
customGas: PropTypes.object,
// Component props
actionKey: PropTypes.string,
@@ -1015,33 +1011,6 @@ export default class ConfirmTransactionBase extends Component {
);
}
- handleNextTx(txId) {
- const { history, clearConfirmTransaction } = this.props;
-
- if (txId) {
- clearConfirmTransaction();
- history.push(`${CONFIRM_TRANSACTION_ROUTE}/${txId}`);
- }
- }
-
- getNavigateTxData() {
- const { currentNetworkUnapprovedTxs, txData: { id } = {} } = this.props;
- const enumUnapprovedTxs = Object.keys(currentNetworkUnapprovedTxs);
- const currentPosition = enumUnapprovedTxs.indexOf(id ? id.toString() : '');
-
- return {
- totalTx: enumUnapprovedTxs.length,
- positionOfCurrentTx: currentPosition + 1,
- nextTxId: enumUnapprovedTxs[currentPosition + 1],
- prevTxId: enumUnapprovedTxs[currentPosition - 1],
- showNavigation: enumUnapprovedTxs.length > 1,
- firstTx: enumUnapprovedTxs[0],
- lastTx: enumUnapprovedTxs[enumUnapprovedTxs.length - 1],
- ofText: this.context.t('ofTextNofM'),
- requestsWaitingText: this.context.t('requestsAwaitingAcknowledgement'),
- };
- }
-
_beforeUnloadForGasPolling = () => {
this._isMounted = false;
if (this.state.pollingToken) {
@@ -1150,17 +1119,6 @@ export default class ConfirmTransactionBase extends Component {
const hasSimulationError = Boolean(txData.simulationFails);
const renderSimulationFailureWarning =
hasSimulationError && !userAcknowledgedGasMissing;
- const {
- totalTx,
- positionOfCurrentTx,
- nextTxId,
- prevTxId,
- showNavigation,
- firstTx,
- lastTx,
- ofText,
- requestsWaitingText,
- } = this.getNavigateTxData();
const isContractInteractionFromDapp =
txData.type === TRANSACTION_TYPES.CONTRACT_INTERACTION &&
@@ -1209,16 +1167,6 @@ export default class ConfirmTransactionBase extends Component {
errorKey={errorKey}
hasSimulationError={hasSimulationError}
warning={submitWarning}
- totalTx={totalTx}
- positionOfCurrentTx={positionOfCurrentTx}
- nextTxId={nextTxId}
- prevTxId={prevTxId}
- showNavigation={showNavigation}
- onNextTx={(txId) => this.handleNextTx(txId)}
- firstTx={firstTx}
- lastTx={lastTx}
- ofText={ofText}
- requestsWaitingText={requestsWaitingText}
disabled={
renderSimulationFailureWarning ||
!valid ||
diff --git a/ui/pages/confirm-transaction-base/confirm-transaction-base.container.js b/ui/pages/confirm-transaction-base/confirm-transaction-base.container.js
index be74a6c789a1..e68f1eeafd3b 100644
--- a/ui/pages/confirm-transaction-base/confirm-transaction-base.container.js
+++ b/ui/pages/confirm-transaction-base/confirm-transaction-base.container.js
@@ -219,7 +219,6 @@ const mapStateToProps = (state, ownProps) => {
nonce,
unapprovedTxs,
unapprovedTxCount,
- currentNetworkUnapprovedTxs,
customGas: {
gasLimit,
gasPrice,
diff --git a/ui/pages/token-allowance/token-allowance.js b/ui/pages/token-allowance/token-allowance.js
index 87151e5e6b3f..2528a8fa64f7 100644
--- a/ui/pages/token-allowance/token-allowance.js
+++ b/ui/pages/token-allowance/token-allowance.js
@@ -51,9 +51,6 @@ import { getCustomTxParamsData } from '../confirm-approve/confirm-approve.util';
import { setCustomTokenAmount } from '../../ducks/app/app';
import { valuesFor } from '../../helpers/utils/util';
import { ConfirmPageContainerNavigation } from '../../components/app/confirm-page-container';
-import { transactionMatchesNetwork } from '../../../shared/modules/transaction.utils';
-import { hexToDecimal } from '../../../shared/lib/metamask-controller-utils';
-import { CONFIRM_TRANSACTION_ROUTE } from '../../helpers/constants/routes';
export default function TokenAllowance({
origin,
@@ -212,38 +209,6 @@ export default function TokenAllowance({
const isEmpty = customTokenAmount === '';
- const network = hexToDecimal(fullTxData.chainId);
-
- const currentNetworkUnapprovedTxs = Object.keys(unapprovedTxs)
- .filter((key) =>
- transactionMatchesNetwork(
- unapprovedTxs[key],
- fullTxData.chainId,
- network,
- ),
- )
- .reduce((acc, key) => ({ ...acc, [key]: unapprovedTxs[key] }), {});
-
- const enumUnapprovedTxs = Object.keys(currentNetworkUnapprovedTxs);
- const currentPosition = enumUnapprovedTxs.indexOf(
- fullTxData.id ? fullTxData.id.toString() : '',
- );
-
- const totalTx = enumUnapprovedTxs.length;
- const positionOfCurrentTx = currentPosition + 1;
- const nextTxId = enumUnapprovedTxs[currentPosition + 1];
- const prevTxId = enumUnapprovedTxs[currentPosition - 1];
- const showNavigation = enumUnapprovedTxs.length > 1;
- const firstTx = enumUnapprovedTxs[0];
- const lastTx = enumUnapprovedTxs[enumUnapprovedTxs.length - 1];
-
- const handleNextTx = (txId) => {
- if (txId) {
- dispatch(clearConfirmTransaction());
- history.push(`${CONFIRM_TRANSACTION_ROUTE}/${txId}`);
- }
- };
-
const renderContractTokenValues = (
- handleNextTx(txId)}
- firstTx={firstTx}
- lastTx={lastTx}
- ofText={t('ofTextNofM')}
- requestsWaitingText={t('requestsAwaitingAcknowledgement')}
- />
+