mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-24 02:58:09 +01:00
63 lines
2.1 KiB
JavaScript
63 lines
2.1 KiB
JavaScript
|
import { useDispatch } from 'react-redux'
|
||
|
import { useCallback } from 'react'
|
||
|
import { setSelectedToken, showSidebar } from '../store/actions'
|
||
|
import {
|
||
|
fetchBasicGasAndTimeEstimates,
|
||
|
fetchGasEstimates,
|
||
|
setCustomGasPriceForRetry,
|
||
|
setCustomGasLimit,
|
||
|
} from '../ducks/gas/gas.duck'
|
||
|
import { TOKEN_METHOD_TRANSFER } from '../helpers/constants/transactions'
|
||
|
import { increaseLastGasPrice } from '../helpers/utils/confirm-tx.util'
|
||
|
import { useMetricEvent } from './useMetricEvent'
|
||
|
import { useMethodData } from './useMethodData'
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 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
|
||
|
const gasPrice = primaryTransaction.txParams?.gasPrice
|
||
|
const methodData = useMethodData(primaryTransaction.txParams?.data)
|
||
|
const trackMetricsEvent = useMetricEvent(({
|
||
|
eventOpts: {
|
||
|
category: 'Navigation',
|
||
|
action: 'Activity Log',
|
||
|
name: 'Clicked "Speed Up"',
|
||
|
},
|
||
|
}))
|
||
|
const dispatch = useDispatch()
|
||
|
|
||
|
const { name: methodName } = methodData || {}
|
||
|
|
||
|
const retryTransaction = useCallback(async (event) => {
|
||
|
event.stopPropagation()
|
||
|
|
||
|
trackMetricsEvent()
|
||
|
const basicEstimates = await dispatch(fetchBasicGasAndTimeEstimates)
|
||
|
await dispatch(fetchGasEstimates(basicEstimates.blockTime))
|
||
|
const transaction = initialTransaction
|
||
|
const increasedGasPrice = increaseLastGasPrice(gasPrice)
|
||
|
dispatch(setCustomGasPriceForRetry(increasedGasPrice || transaction.txParams?.gasPrice))
|
||
|
dispatch(setCustomGasLimit(transaction.txParams?.gas))
|
||
|
dispatch(showSidebar({
|
||
|
transitionName: 'sidebar-left',
|
||
|
type: 'customize-gas',
|
||
|
props: { transaction },
|
||
|
}))
|
||
|
|
||
|
if (
|
||
|
methodName === TOKEN_METHOD_TRANSFER &&
|
||
|
initialTransaction.txParams.to
|
||
|
) {
|
||
|
dispatch(setSelectedToken(initialTransaction.txParams.to))
|
||
|
}
|
||
|
}, [dispatch, methodName, trackMetricsEvent, initialTransaction, gasPrice])
|
||
|
|
||
|
return retryTransaction
|
||
|
}
|