1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-24 02:58:09 +01:00
metamask-extension/ui/app/hooks/useCancelTransaction.js

59 lines
1.9 KiB
JavaScript
Raw Normal View History

import { useDispatch, useSelector } from 'react-redux';
import { useCallback } from 'react';
import { showModal } from '../store/actions';
import { isBalanceSufficient } from '../pages/send/send.utils';
2020-11-03 00:41:28 +01:00
import {
getHexGasTotal,
increaseLastGasPrice,
} from '../helpers/utils/confirm-tx.util';
import { getConversionRate, getSelectedAccount } from '../selectors';
/**
* Determine whether a transaction can be cancelled and provide a method to
* kick off the process of cancellation.
*
* Provides a reusable hook that, given a transactionGroup, will return
* whether or not the account has enough funds to cover the gas cancellation
* fee, and a method for beginning the cancellation process
* @param {Object} transactionGroup
* @return {[boolean, Function]}
*/
2020-11-03 00:41:28 +01:00
export function useCancelTransaction(transactionGroup) {
const { primaryTransaction, initialTransaction } = transactionGroup;
const gasPrice = primaryTransaction.txParams?.gasPrice?.startsWith('-')
? '0x0'
: primaryTransaction.txParams?.gasPrice;
const { id } = initialTransaction;
const dispatch = useDispatch();
const selectedAccount = useSelector(getSelectedAccount);
const conversionRate = useSelector(getConversionRate);
2020-11-03 00:41:28 +01:00
const cancelTransaction = useCallback(
(event) => {
event.stopPropagation();
2020-11-03 00:41:28 +01:00
return dispatch(
showModal({
name: 'CANCEL_TRANSACTION',
transactionId: id,
originalGasPrice: gasPrice,
}),
);
2020-11-03 00:41:28 +01:00
},
[dispatch, id, gasPrice],
);
2020-11-03 00:41:28 +01:00
const hasEnoughCancelGas =
primaryTransaction.txParams &&
isBalanceSufficient({
amount: '0x0',
gasTotal: getHexGasTotal({
gasPrice: increaseLastGasPrice(gasPrice),
gasLimit: primaryTransaction.txParams.gas,
}),
balance: selectedAccount.balance,
conversionRate,
});
return [hasEnoughCancelGas, cancelTransaction];
}