1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-22 19:26:13 +02:00

Clean ConfirmTranscationPage component (#17546)

* ConfirmTransaction: rm unused metricEvent context

* ConfirmTransaction: rm unused mapToProps props:
- unapprovedTxs
- id

* ConfirmTransaction: convert to FC

* ConfirmTransaction: use const ORIGIN_METAMASK

* ConfirmTransaction: rm mapStateToProps

* ConfirmTransaction: mv confirm-transaction ducks

* ConfirmTransaction: mv getContractMethodData duck

* ConfirmTransaction: rm container file

* ConfirmTransaction: use ORIGIN_METAMASK const

* clean: rn totalUnapprovedCount -> totalUnapproved

* clean: reorder ConfirmTransaction & alphabetize

* clean: rn validTransactionId> isValidTransactionId

* clean: rn unconfirmedTransactions > unconfirmedTxs

* ConfirmationTransaction: add tests

* ConfirmTransaction: mv const

* ConfirmTransaction: update jest mock after merge

* ConfirmTransaction: fix from merge fault

* tests: update snapshot after mock-state updates
This commit is contained in:
Ariella Vu 2023-02-11 22:17:12 +07:00 committed by PeterYinusa
parent 97013d8028
commit de5ea66d8d

View File

@ -1,13 +1,14 @@
import React, { useCallback, useEffect, useMemo, useState } from 'react'; import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { Switch, Route, useHistory, useParams } from 'react-router-dom'; import { Switch, Route, useHistory, useParams } from 'react-router-dom';
import Loading from '../../components/ui/loading-screen'; import Loading from '../../components/ui/loading-screen';
import ConfirmTransactionSwitch from '../confirm-transaction-switch';
import ConfirmContractInteraction from '../confirm-contract-interaction'; import ConfirmContractInteraction from '../confirm-contract-interaction';
import ConfirmSendEther from '../confirm-send-ether';
import ConfirmDeployContract from '../confirm-deploy-contract'; import ConfirmDeployContract from '../confirm-deploy-contract';
import ConfirmDecryptMessage from '../confirm-decrypt-message'; import ConfirmDecryptMessage from '../confirm-decrypt-message';
import ConfirmEncryptionPublicKey from '../confirm-encryption-public-key'; import ConfirmEncryptionPublicKey from '../confirm-encryption-public-key';
import ConfirmSendEther from '../confirm-send-ether';
import ConfirmTransactionSwitch from '../confirm-transaction-switch';
import { ORIGIN_METAMASK } from '../../../shared/constants/app'; import { ORIGIN_METAMASK } from '../../../shared/constants/app';
@ -18,14 +19,14 @@ import {
import { getMostRecentOverviewPage } from '../../ducks/history/history'; import { getMostRecentOverviewPage } from '../../ducks/history/history';
import { getSendTo } from '../../ducks/send'; import { getSendTo } from '../../ducks/send';
import { import {
CONFIRM_TRANSACTION_ROUTE,
CONFIRM_DEPLOY_CONTRACT_PATH, CONFIRM_DEPLOY_CONTRACT_PATH,
CONFIRM_SEND_ETHER_PATH, CONFIRM_SEND_ETHER_PATH,
CONFIRM_TOKEN_METHOD_PATH, CONFIRM_TOKEN_METHOD_PATH,
SIGNATURE_REQUEST_PATH, CONFIRM_TRANSACTION_ROUTE,
DECRYPT_MESSAGE_REQUEST_PATH, DECRYPT_MESSAGE_REQUEST_PATH,
ENCRYPTION_PUBLIC_KEY_REQUEST_PATH,
DEFAULT_ROUTE, DEFAULT_ROUTE,
ENCRYPTION_PUBLIC_KEY_REQUEST_PATH,
SIGNATURE_REQUEST_PATH,
} from '../../helpers/constants/routes'; } from '../../helpers/constants/routes';
import { isTokenMethodAction } from '../../helpers/utils/transactions.util'; import { isTokenMethodAction } from '../../helpers/utils/transactions.util';
import { usePrevious } from '../../hooks/usePrevious'; import { usePrevious } from '../../hooks/usePrevious';
@ -56,29 +57,31 @@ const ConfirmTransaction = () => {
const mostRecentOverviewPage = useSelector(getMostRecentOverviewPage); const mostRecentOverviewPage = useSelector(getMostRecentOverviewPage);
const sendTo = useSelector(getSendTo); const sendTo = useSelector(getSendTo);
const unapprovedTxs = useSelector(getUnapprovedTransactions); const unapprovedTxs = useSelector(getUnapprovedTransactions);
const unconfirmedTransactions = useSelector( const unconfirmedTxs = useSelector(unconfirmedTransactionsListSelector);
unconfirmedTransactionsListSelector,
);
const unconfirmedMessages = useSelector(unconfirmedTransactionsHashSelector); const unconfirmedMessages = useSelector(unconfirmedTransactionsHashSelector);
const totalUnapprovedCount = unconfirmedTransactions.length || 0; const totalUnapproved = unconfirmedTxs.length || 0;
const transaction = useMemo(() => { const transaction = useMemo(() => {
return totalUnapprovedCount return totalUnapproved
? unapprovedTxs[paramsTransactionId] || ? unapprovedTxs[paramsTransactionId] ||
unconfirmedMessages[paramsTransactionId] || unconfirmedMessages[paramsTransactionId] ||
unconfirmedTransactions[0] unconfirmedTxs[0]
: {}; : {};
}, [ }, [
paramsTransactionId, paramsTransactionId,
totalUnapprovedCount, totalUnapproved,
unapprovedTxs, unapprovedTxs,
unconfirmedMessages, unconfirmedMessages,
unconfirmedTransactions, unconfirmedTxs,
]); ]);
const { id, type } = transaction; const { id, type } = transaction;
const transactionId = id && String(id); const transactionId = id && String(id);
const isValidERC20TokenMethod = isTokenMethodAction(type); const isValidERC20TokenMethod = isTokenMethodAction(type);
const isValidTransactionId =
transactionId &&
(!paramsTransactionId || paramsTransactionId === transactionId);
const prevParamsTransactionId = usePrevious(paramsTransactionId); const prevParamsTransactionId = usePrevious(paramsTransactionId);
const prevTransactionId = usePrevious(transactionId); const prevTransactionId = usePrevious(transactionId);
@ -95,8 +98,6 @@ const ConfirmTransaction = () => {
useEffect(() => { useEffect(() => {
setIsMounted(true); setIsMounted(true);
const { txParams: { data } = {}, origin } = transaction;
getGasFeeEstimatesAndStartPolling().then((_pollingToken) => { getGasFeeEstimatesAndStartPolling().then((_pollingToken) => {
if (isMounted) { if (isMounted) {
setPollingToken(_pollingToken); setPollingToken(_pollingToken);
@ -109,9 +110,11 @@ const ConfirmTransaction = () => {
window.addEventListener('beforeunload', _beforeUnload); window.addEventListener('beforeunload', _beforeUnload);
if (!totalUnapprovedCount && !sendTo) { if (!totalUnapproved && !sendTo) {
history.replace(mostRecentOverviewPage); history.replace(mostRecentOverviewPage);
} else { } else {
const { txParams: { data } = {}, origin } = transaction;
if (origin !== ORIGIN_METAMASK) { if (origin !== ORIGIN_METAMASK) {
dispatch(getContractMethodData(data)); dispatch(getContractMethodData(data));
} }
@ -130,19 +133,19 @@ const ConfirmTransaction = () => {
}, []); }, []);
useEffect(() => { useEffect(() => {
const { txData: { txParams: { data } = {}, origin } = {} } = transaction;
if ( if (
paramsTransactionId && paramsTransactionId &&
transactionId && transactionId &&
prevParamsTransactionId !== paramsTransactionId prevParamsTransactionId !== paramsTransactionId
) { ) {
const { txData: { txParams: { data } = {}, origin } = {} } = transaction;
dispatch(clearConfirmTransaction()); dispatch(clearConfirmTransaction());
dispatch(setTransactionToConfirm(paramsTransactionId)); dispatch(setTransactionToConfirm(paramsTransactionId));
if (origin !== ORIGIN_METAMASK) { if (origin !== ORIGIN_METAMASK) {
dispatch(getContractMethodData(data)); dispatch(getContractMethodData(data));
} }
} else if (prevTransactionId && !transactionId && !totalUnapprovedCount) { } else if (prevTransactionId && !transactionId && !totalUnapproved) {
dispatch(setDefaultHomeActiveTabName('activity')).then(() => { dispatch(setDefaultHomeActiveTabName('activity')).then(() => {
history.replace(DEFAULT_ROUTE); history.replace(DEFAULT_ROUTE);
}); });
@ -155,27 +158,23 @@ const ConfirmTransaction = () => {
} }
}, [ }, [
dispatch, dispatch,
transaction,
paramsTransactionId,
transactionId,
history, history,
mostRecentOverviewPage, mostRecentOverviewPage,
paramsTransactionId,
prevParamsTransactionId, prevParamsTransactionId,
prevTransactionId, prevTransactionId,
totalUnapprovedCount, totalUnapproved,
transaction,
transactionId,
]); ]);
const validTransactionId = if (isValidERC20TokenMethod && isValidTransactionId) {
transactionId &&
(!paramsTransactionId || paramsTransactionId === transactionId);
if (isValidERC20TokenMethod && validTransactionId) {
return <ConfirmTokenTransactionSwitch transaction={transaction} />; return <ConfirmTokenTransactionSwitch transaction={transaction} />;
} }
// Show routes when state.confirmTransaction has been set and when either the ID in the params // Show routes when state.confirmTransaction has been set and when either the ID in the params
// isn't specified or is specified and matches the ID in state.confirmTransaction in order to // isn't specified or is specified and matches the ID in state.confirmTransaction in order to
// support URLs of /confirm-transaction or /confirm-transaction/<transactionId> // support URLs of /confirm-transaction or /confirm-transaction/<transactionId>
return validTransactionId ? ( return isValidTransactionId ? (
<Switch> <Switch>
<Route <Route
exact exact