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:
parent
97013d8028
commit
de5ea66d8d
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user