import { useCallback } from 'react'; import { useDispatch } from 'react-redux'; import { EDIT_GAS_MODES, PRIORITY_LEVELS } from '../../../shared/constants/gas'; import { decimalToHex, decGWEIToHexWEI, } from '../../helpers/utils/conversions.util'; import { updateCustomSwapsEIP1559GasParams, updateSwapsUserFeeLevel, updateTransaction as updateTransactionFn, } from '../../store/actions'; export const useTransactionFunctions = ({ defaultEstimateToUse, editGasMode, gasFeeEstimates, gasLimit: gasLimitInTransaction, transaction, }) => { const dispatch = useDispatch(); const updateTransaction = useCallback( ({ estimateUsed, maxFeePerGas, maxPriorityFeePerGas, gasLimit = gasLimitInTransaction, }) => { const newGasSettings = { gas: decimalToHex(gasLimit), gasLimit: decimalToHex(gasLimit), estimateSuggested: defaultEstimateToUse, estimateUsed, }; if (maxFeePerGas) { newGasSettings.maxFeePerGas = maxFeePerGas; } if (maxPriorityFeePerGas) { newGasSettings.maxPriorityFeePerGas = maxPriorityFeePerGas; } const updatedTxMeta = { ...transaction, userFeeLevel: estimateUsed || PRIORITY_LEVELS.CUSTOM, txParams: { ...transaction.txParams, ...newGasSettings, }, }; if (editGasMode === EDIT_GAS_MODES.SWAPS) { dispatch( updateSwapsUserFeeLevel(estimateUsed || PRIORITY_LEVELS.CUSTOM), ); dispatch(updateCustomSwapsEIP1559GasParams(newGasSettings)); } else { dispatch(updateTransactionFn(updatedTxMeta)); } }, [ defaultEstimateToUse, dispatch, editGasMode, gasLimitInTransaction, transaction, ], ); const updateTransactionUsingGasFeeEstimates = useCallback( (gasFeeEstimateToUse) => { if (gasFeeEstimateToUse === PRIORITY_LEVELS.DAPP_SUGGESTED) { const { maxFeePerGas, maxPriorityFeePerGas, } = transaction?.dappSuggestedGasFees; updateTransaction({ estimateUsed: PRIORITY_LEVELS.DAPP_SUGGESTED, maxFeePerGas, maxPriorityFeePerGas, }); } else { const { suggestedMaxFeePerGas, suggestedMaxPriorityFeePerGas, } = gasFeeEstimates[gasFeeEstimateToUse]; updateTransaction({ estimateUsed: gasFeeEstimateToUse, maxFeePerGas: decGWEIToHexWEI(suggestedMaxFeePerGas), maxPriorityFeePerGas: decGWEIToHexWEI(suggestedMaxPriorityFeePerGas), }); } }, [gasFeeEstimates, transaction?.dappSuggestedGasFees, updateTransaction], ); return { updateTransaction, updateTransactionUsingGasFeeEstimates }; };