Edit gas fee modal more changes (#12660)
parent
d6d35d9acb
commit
2c6fb06114
@ -0,0 +1,83 @@ |
||||
import { useEffect, useState } from 'react'; |
||||
import { useSelector } from 'react-redux'; |
||||
import BigNumber from 'bignumber.js'; |
||||
|
||||
import { GAS_ESTIMATE_TYPES } from '../../../../../shared/constants/gas'; |
||||
import { |
||||
getGasEstimateType, |
||||
getIsGasEstimatesLoading, |
||||
} from '../../../../ducks/metamask/metamask'; |
||||
import { getGasFeeTimeEstimate } from '../../../../store/actions'; |
||||
|
||||
export const useCustomTimeEstimate = ({ |
||||
gasFeeEstimates, |
||||
maxFeePerGas, |
||||
maxPriorityFeePerGas, |
||||
}) => { |
||||
const gasEstimateType = useSelector(getGasEstimateType); |
||||
const isGasEstimatesLoading = useSelector(getIsGasEstimatesLoading); |
||||
|
||||
const [customEstimatedTime, setCustomEstimatedTime] = useState(null); |
||||
|
||||
const returnNoEstimates = |
||||
isGasEstimatesLoading || |
||||
gasEstimateType !== GAS_ESTIMATE_TYPES.FEE_MARKET || |
||||
!maxPriorityFeePerGas; |
||||
|
||||
// If the user has chosen a value lower than the low gas fee estimate,
|
||||
// We'll need to use the useEffect hook below to make a call to calculate
|
||||
// the time to show
|
||||
const isUnknownLow = |
||||
gasFeeEstimates?.low && |
||||
Number(maxPriorityFeePerGas) < |
||||
Number(gasFeeEstimates.low.suggestedMaxPriorityFeePerGas); |
||||
|
||||
useEffect(() => { |
||||
if ( |
||||
isGasEstimatesLoading || |
||||
gasEstimateType !== GAS_ESTIMATE_TYPES.FEE_MARKET || |
||||
!maxPriorityFeePerGas |
||||
) |
||||
return; |
||||
if (isUnknownLow) { |
||||
// getGasFeeTimeEstimate requires parameters in string format
|
||||
getGasFeeTimeEstimate( |
||||
new BigNumber(maxPriorityFeePerGas, 10).toString(10), |
||||
new BigNumber(maxFeePerGas, 10).toString(10), |
||||
).then((result) => { |
||||
setCustomEstimatedTime(result); |
||||
}); |
||||
} |
||||
}, [ |
||||
gasEstimateType, |
||||
isUnknownLow, |
||||
isGasEstimatesLoading, |
||||
maxFeePerGas, |
||||
maxPriorityFeePerGas, |
||||
returnNoEstimates, |
||||
]); |
||||
|
||||
if (returnNoEstimates) { |
||||
return {}; |
||||
} |
||||
|
||||
const { low = {}, medium = {}, high = {} } = gasFeeEstimates; |
||||
let waitTimeEstimate = ''; |
||||
|
||||
if ( |
||||
isUnknownLow && |
||||
customEstimatedTime && |
||||
customEstimatedTime !== 'unknown' && |
||||
customEstimatedTime?.upperTimeBound !== 'unknown' |
||||
) { |
||||
waitTimeEstimate = Number(customEstimatedTime?.upperTimeBound); |
||||
} else if ( |
||||
Number(maxPriorityFeePerGas) >= Number(medium.suggestedMaxPriorityFeePerGas) |
||||
) { |
||||
waitTimeEstimate = high.minWaitTimeEstimate; |
||||
} else { |
||||
waitTimeEstimate = low.maxWaitTimeEstimate; |
||||
} |
||||
|
||||
return { waitTimeEstimate }; |
||||
}; |
Loading…
Reference in new issue