1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-28 23:06:37 +01:00
metamask-extension/ui/app/pages/send/send-content/send-gas-row/send-gas-row.container.js

144 lines
4.1 KiB
JavaScript
Raw Normal View History

import { connect } from 'react-redux';
2018-04-11 16:21:54 +02:00
import {
getConversionRate,
getGasTotal,
getGasPrice,
getGasLimit,
getSendAmount,
getSendFromBalance,
getTokenBalance,
getSendMaxModeState,
getGasLoadingError,
gasFeeIsInError,
getGasButtonGroupShown,
getAdvancedInlineGasShown,
getCurrentEthBalance,
getSendToken,
getBasicGasEstimateLoadingStatus,
getRenderableEstimateDataForSmallButtonsFromGWEI,
getDefaultActiveButtonIndex,
getIsMainnet,
} from '../../../../selectors';
import { isBalanceSufficient, calcGasTotal } from '../../send.utils';
import { calcMaxAmount } from '../send-amount-row/amount-max-button/amount-max-button.utils';
import {
showGasButtonGroup,
updateSendErrors,
} from '../../../../ducks/send/send.duck';
import {
resetCustomData,
setCustomGasPrice,
setCustomGasLimit,
} from '../../../../ducks/gas/gas.duck';
2020-11-03 00:41:28 +01:00
import {
showModal,
setGasPrice,
setGasLimit,
setGasTotal,
updateSendAmount,
} from '../../../../store/actions';
import SendGasRow from './send-gas-row.component';
2018-04-11 16:21:54 +02:00
2020-11-03 00:41:28 +01:00
export default connect(
mapStateToProps,
mapDispatchToProps,
mergeProps,
)(SendGasRow);
2018-04-11 16:21:54 +02:00
2020-11-03 00:41:28 +01:00
function mapStateToProps(state) {
const gasButtonInfo = getRenderableEstimateDataForSmallButtonsFromGWEI(state);
const gasPrice = getGasPrice(state);
const gasLimit = getGasLimit(state);
const activeButtonIndex = getDefaultActiveButtonIndex(
gasButtonInfo,
gasPrice,
);
const gasTotal = getGasTotal(state);
const conversionRate = getConversionRate(state);
const balance = getCurrentEthBalance(state);
const insufficientBalance = !isBalanceSufficient({
amount: getSendToken(state) ? '0x0' : getSendAmount(state),
gasTotal,
balance,
conversionRate,
});
2018-04-11 16:21:54 +02:00
return {
balance: getSendFromBalance(state),
gasTotal,
2018-06-29 19:19:40 +02:00
gasFeeError: gasFeeIsInError(state),
gasLoadingError: getGasLoadingError(state),
gasPriceButtonGroupProps: {
buttonDataLoading: getBasicGasEstimateLoadingStatus(state),
defaultActiveButtonIndex: 1,
newActiveButtonIndex: activeButtonIndex > -1 ? activeButtonIndex : null,
gasButtonInfo,
},
gasButtonGroupShown: getGasButtonGroupShown(state),
advancedInlineGasShown: getAdvancedInlineGasShown(state),
2019-02-08 14:50:25 +01:00
gasPrice,
gasLimit,
insufficientBalance,
maxModeOn: getSendMaxModeState(state),
sendToken: getSendToken(state),
tokenBalance: getTokenBalance(state),
isMainnet: getIsMainnet(state),
};
2018-04-11 16:21:54 +02:00
}
2020-11-03 00:41:28 +01:00
function mapDispatchToProps(dispatch) {
2018-04-11 16:21:54 +02:00
return {
2020-11-03 00:41:28 +01:00
showCustomizeGasModal: () =>
dispatch(showModal({ name: 'CUSTOMIZE_GAS', hideBasic: true })),
setGasPrice: ({ gasPrice, gasLimit }) => {
dispatch(setGasPrice(gasPrice));
dispatch(setCustomGasPrice(gasPrice));
if (gasLimit) {
dispatch(setGasTotal(calcGasTotal(gasLimit, gasPrice)));
}
},
setGasLimit: (newLimit, gasPrice) => {
dispatch(setGasLimit(newLimit));
dispatch(setCustomGasLimit(newLimit));
if (gasPrice) {
dispatch(setGasTotal(calcGasTotal(newLimit, gasPrice)));
}
},
2020-02-15 21:34:12 +01:00
setAmountToMax: (maxAmountDataObject) => {
dispatch(updateSendErrors({ amount: null }));
dispatch(updateSendAmount(calcMaxAmount(maxAmountDataObject)));
},
showGasButtonGroup: () => dispatch(showGasButtonGroup()),
resetCustomData: () => dispatch(resetCustomData()),
};
2018-04-11 16:21:54 +02:00
}
2020-11-03 00:41:28 +01:00
function mergeProps(stateProps, dispatchProps, ownProps) {
const { gasPriceButtonGroupProps } = stateProps;
const { gasButtonInfo } = gasPriceButtonGroupProps;
const {
setGasPrice: dispatchSetGasPrice,
showGasButtonGroup: dispatchShowGasButtonGroup,
resetCustomData: dispatchResetCustomData,
...otherDispatchProps
} = dispatchProps;
return {
...stateProps,
...otherDispatchProps,
...ownProps,
gasPriceButtonGroupProps: {
...gasPriceButtonGroupProps,
handleGasPriceSelection: dispatchSetGasPrice,
},
resetGasButtons: () => {
dispatchResetCustomData();
dispatchSetGasPrice(gasButtonInfo[1].priceInHexWei);
dispatchShowGasButtonGroup();
},
setGasPrice: dispatchSetGasPrice,
};
}