mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
EIP-1559 - Restore custom values in Edit Gas Popover (#11589)
* EIP-1559 - Restore custom values in Edit Gas Popover * Provide method to tell which radio button the user may have selected * Use lodash's findKey * Add case for legacy gas * Use gas instead of gasLimit * Remove unnecessary deletion and todo
This commit is contained in:
parent
813eef6080
commit
604524f94d
@ -79,7 +79,7 @@ export default function EditGasPopover({
|
|||||||
hasGasErrors,
|
hasGasErrors,
|
||||||
gasErrors,
|
gasErrors,
|
||||||
onManualChange,
|
onManualChange,
|
||||||
} = useGasFeeInputs(defaultEstimateToUse);
|
} = useGasFeeInputs(defaultEstimateToUse, transaction);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Temporary placeholder, this should be managed by the parent component but
|
* Temporary placeholder, this should be managed by the parent component but
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { addHexPrefix } from 'ethereumjs-util';
|
import { addHexPrefix } from 'ethereumjs-util';
|
||||||
import { useCallback, useState } from 'react';
|
import { useCallback, useState } from 'react';
|
||||||
import { useSelector } from 'react-redux';
|
import { useSelector } from 'react-redux';
|
||||||
|
import { findKey } from 'lodash';
|
||||||
|
|
||||||
import { GAS_ESTIMATE_TYPES } from '../../shared/constants/gas';
|
import { GAS_ESTIMATE_TYPES } from '../../shared/constants/gas';
|
||||||
import { multiplyCurrencies } from '../../shared/modules/conversion.utils';
|
import { multiplyCurrencies } from '../../shared/modules/conversion.utils';
|
||||||
import {
|
import {
|
||||||
@ -9,8 +11,10 @@ import {
|
|||||||
} from '../../shared/modules/gas.utils';
|
} from '../../shared/modules/gas.utils';
|
||||||
import { PRIMARY, SECONDARY } from '../helpers/constants/common';
|
import { PRIMARY, SECONDARY } from '../helpers/constants/common';
|
||||||
import {
|
import {
|
||||||
|
hexWEIToDecGWEI,
|
||||||
decGWEIToHexWEI,
|
decGWEIToHexWEI,
|
||||||
decimalToHex,
|
decimalToHex,
|
||||||
|
hexToDecimal,
|
||||||
} from '../helpers/utils/conversions.util';
|
} from '../helpers/utils/conversions.util';
|
||||||
import { getShouldShowFiat } from '../selectors';
|
import { getShouldShowFiat } from '../selectors';
|
||||||
import { GAS_FORM_ERRORS } from '../helpers/constants/gas';
|
import { GAS_FORM_ERRORS } from '../helpers/constants/gas';
|
||||||
@ -78,6 +82,30 @@ function getGasFeeEstimate(
|
|||||||
return '0';
|
return '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method tries to determine if any estimate level matches the
|
||||||
|
* current maxFeePerGas and maxPriorityFeePerGas values. If we find
|
||||||
|
* a match, we can pre-select a radio button in the RadioGroup
|
||||||
|
*/
|
||||||
|
function getMatchingEstimateFromGasFees(
|
||||||
|
gasFeeEstimates,
|
||||||
|
maxFeePerGas,
|
||||||
|
maxPriorityFeePerGas,
|
||||||
|
gasPrice,
|
||||||
|
) {
|
||||||
|
return (
|
||||||
|
findKey(gasFeeEstimates, (estimate) => {
|
||||||
|
if (process.env.SHOW_EIP_1559_UI) {
|
||||||
|
return (
|
||||||
|
estimate?.suggestedMaxPriorityFeePerGas === maxPriorityFeePerGas &&
|
||||||
|
estimate?.suggestedMaxFeePerGas === maxFeePerGas
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return estimate?.gasPrice === gasPrice;
|
||||||
|
}) || null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} GasFeeInputReturnType
|
* @typedef {Object} GasFeeInputReturnType
|
||||||
* @property {DecGweiString} [maxFeePerGas] - the maxFeePerGas input value.
|
* @property {DecGweiString} [maxFeePerGas] - the maxFeePerGas input value.
|
||||||
@ -123,7 +151,7 @@ function getGasFeeEstimate(
|
|||||||
* './useGasFeeEstimates'
|
* './useGasFeeEstimates'
|
||||||
* ).GasEstimates} - gas fee input state and the GasFeeEstimates object
|
* ).GasEstimates} - gas fee input state and the GasFeeEstimates object
|
||||||
*/
|
*/
|
||||||
export function useGasFeeInputs(defaultEstimateToUse = 'medium') {
|
export function useGasFeeInputs(defaultEstimateToUse = 'medium', transaction) {
|
||||||
// We need to know whether to show fiat conversions or not, so that we can
|
// We need to know whether to show fiat conversions or not, so that we can
|
||||||
// default our fiat values to empty strings if showing fiat is not wanted or
|
// default our fiat values to empty strings if showing fiat is not wanted or
|
||||||
// possible.
|
// possible.
|
||||||
@ -143,17 +171,6 @@ export function useGasFeeInputs(defaultEstimateToUse = 'medium') {
|
|||||||
numberOfDecimals: fiatNumberOfDecimals,
|
numberOfDecimals: fiatNumberOfDecimals,
|
||||||
} = useUserPreferencedCurrency(SECONDARY);
|
} = useUserPreferencedCurrency(SECONDARY);
|
||||||
|
|
||||||
// This hook keeps track of a few pieces of transitional state. It is
|
|
||||||
// transitional because it is only used to modify a transaction in the
|
|
||||||
// metamask (background) state tree.
|
|
||||||
const [maxFeePerGas, setMaxFeePerGas] = useState(null);
|
|
||||||
const [maxPriorityFeePerGas, setMaxPriorityFeePerGas] = useState(null);
|
|
||||||
const [gasPrice, setGasPrice] = useState(null);
|
|
||||||
const [gasLimit, setGasLimit] = useState(21000);
|
|
||||||
const [estimateToUse, setInternalEstimateToUse] = useState(
|
|
||||||
defaultEstimateToUse,
|
|
||||||
);
|
|
||||||
|
|
||||||
// We need the gas estimates from the GasFeeController in the background.
|
// We need the gas estimates from the GasFeeController in the background.
|
||||||
// Calling this hooks initiates polling for new gas estimates and returns the
|
// Calling this hooks initiates polling for new gas estimates and returns the
|
||||||
// current estimate.
|
// current estimate.
|
||||||
@ -164,6 +181,40 @@ export function useGasFeeInputs(defaultEstimateToUse = 'medium') {
|
|||||||
estimatedGasFeeTimeBounds,
|
estimatedGasFeeTimeBounds,
|
||||||
} = useGasFeeEstimates();
|
} = useGasFeeEstimates();
|
||||||
|
|
||||||
|
// This hook keeps track of a few pieces of transitional state. It is
|
||||||
|
// transitional because it is only used to modify a transaction in the
|
||||||
|
// metamask (background) state tree.
|
||||||
|
const [maxFeePerGas, setMaxFeePerGas] = useState(
|
||||||
|
transaction?.txParams?.maxFeePerGas
|
||||||
|
? Number(hexWEIToDecGWEI(transaction.txParams.maxFeePerGas))
|
||||||
|
: null,
|
||||||
|
);
|
||||||
|
const [maxPriorityFeePerGas, setMaxPriorityFeePerGas] = useState(
|
||||||
|
transaction?.txParams?.maxPriorityFeePerGas
|
||||||
|
? Number(hexWEIToDecGWEI(transaction.txParams.maxPriorityFeePerGas))
|
||||||
|
: null,
|
||||||
|
);
|
||||||
|
const [gasPrice, setGasPrice] = useState(
|
||||||
|
transaction?.txParams?.gasPrice
|
||||||
|
? Number(hexWEIToDecGWEI(transaction.txParams.gasPrice))
|
||||||
|
: null,
|
||||||
|
);
|
||||||
|
const [gasLimit, setGasLimit] = useState(
|
||||||
|
transaction?.txParams?.gas
|
||||||
|
? Number(hexToDecimal(transaction.txParams.gas))
|
||||||
|
: 21000,
|
||||||
|
);
|
||||||
|
const [estimateToUse, setInternalEstimateToUse] = useState(
|
||||||
|
transaction
|
||||||
|
? getMatchingEstimateFromGasFees(
|
||||||
|
gasFeeEstimates,
|
||||||
|
maxFeePerGas,
|
||||||
|
maxPriorityFeePerGas,
|
||||||
|
gasPrice,
|
||||||
|
)
|
||||||
|
: defaultEstimateToUse,
|
||||||
|
);
|
||||||
|
|
||||||
// When a user selects an estimate level, it will wipe out what they have
|
// When a user selects an estimate level, it will wipe out what they have
|
||||||
// previously put in the inputs. This returns the inputs to the estimated
|
// previously put in the inputs. This returns the inputs to the estimated
|
||||||
// values at the level specified.
|
// values at the level specified.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user