1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-22 19:26:13 +02:00
metamask-extension/ui/app/hooks/useRetryTransaction.js
Erik Marks 76a2a9bb8b
@metamask/eslint config@5.0.0 (#10358)
* @metamask/eslint-config@5.0.0
* Update eslintrc and prettierrc
* yarn lint:fix
2021-02-04 10:15:23 -08:00

58 lines
1.8 KiB
JavaScript

import { useDispatch } from 'react-redux';
import { useCallback } from 'react';
import { showSidebar } from '../store/actions';
import {
fetchBasicGasEstimates,
setCustomGasPriceForRetry,
setCustomGasLimit,
} from '../ducks/gas/gas.duck';
import { increaseLastGasPrice } from '../helpers/utils/confirm-tx.util';
import { useMetricEvent } from './useMetricEvent';
/**
* Provides a reusable hook that, given a transactionGroup, will return
* a method for beginning the retry process
* @param {Object} transactionGroup - the transaction group
* @return {Function}
*/
export function useRetryTransaction(transactionGroup) {
const { primaryTransaction, initialTransaction } = transactionGroup;
// Signature requests do not have a txParams, but this hook is called indiscriminately
const gasPrice = primaryTransaction.txParams?.gasPrice;
const trackMetricsEvent = useMetricEvent({
eventOpts: {
category: 'Navigation',
action: 'Activity Log',
name: 'Clicked "Speed Up"',
},
});
const dispatch = useDispatch();
const retryTransaction = useCallback(
async (event) => {
event.stopPropagation();
trackMetricsEvent();
await dispatch(fetchBasicGasEstimates);
const transaction = initialTransaction;
const increasedGasPrice = increaseLastGasPrice(gasPrice);
await dispatch(
setCustomGasPriceForRetry(
increasedGasPrice || transaction.txParams.gasPrice,
),
);
dispatch(setCustomGasLimit(transaction.txParams.gas));
dispatch(
showSidebar({
transitionName: 'sidebar-left',
type: 'customize-gas',
props: { transaction },
}),
);
},
[dispatch, trackMetricsEvent, initialTransaction, gasPrice],
);
return retryTransaction;
}