2017-10-13 22:19:22 +02:00
|
|
|
const Component = require('react').Component
|
|
|
|
const h = require('react-hyperscript')
|
|
|
|
const inherits = require('util').inherits
|
|
|
|
const connect = require('react-redux').connect
|
|
|
|
const actions = require('../../actions')
|
|
|
|
const GasModalCard = require('./gas-modal-card')
|
|
|
|
|
2017-10-18 21:23:35 +02:00
|
|
|
const {
|
|
|
|
MIN_GAS_PRICE,
|
|
|
|
MIN_GAS_LIMIT,
|
|
|
|
} = require('../send/send-constants')
|
|
|
|
|
2017-10-17 19:22:23 +02:00
|
|
|
const { conversionUtil, multiplyCurrencies } = require('../../conversion-util')
|
2017-10-12 18:42:14 +02:00
|
|
|
|
|
|
|
const {
|
|
|
|
getGasPrice,
|
|
|
|
getGasLimit,
|
|
|
|
conversionRateSelector,
|
|
|
|
} = require('../../selectors')
|
|
|
|
|
2017-10-13 22:19:22 +02:00
|
|
|
function mapStateToProps (state) {
|
2017-10-12 18:42:14 +02:00
|
|
|
return {
|
|
|
|
gasPrice: getGasPrice(state),
|
|
|
|
gasLimit: getGasLimit(state),
|
|
|
|
conversionRate: conversionRateSelector(state),
|
|
|
|
}
|
2017-10-13 22:19:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function mapDispatchToProps (dispatch) {
|
|
|
|
return {
|
|
|
|
hideModal: () => dispatch(actions.hideModal()),
|
2017-10-12 18:42:14 +02:00
|
|
|
updateGasPrice: newGasPrice => dispatch(actions.updateGasPrice(newGasPrice)),
|
|
|
|
updateGasLimit: newGasLimit => dispatch(actions.updateGasLimit(newGasLimit)),
|
2017-10-17 19:22:23 +02:00
|
|
|
updateGasTotal: newGasTotal => dispatch(actions.updateGasTotal(newGasTotal)),
|
2017-10-13 22:19:22 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
inherits(CustomizeGasModal, Component)
|
2017-10-12 18:42:14 +02:00
|
|
|
function CustomizeGasModal (props) {
|
2017-10-13 22:19:22 +02:00
|
|
|
Component.call(this)
|
|
|
|
|
|
|
|
this.state = {
|
2017-10-18 21:23:35 +02:00
|
|
|
gasPrice: props.gasPrice || MIN_GAS_PRICE,
|
|
|
|
gasLimit: props.gasLimit || MIN_GAS_LIMIT,
|
2017-10-13 22:19:22 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = connect(mapStateToProps, mapDispatchToProps)(CustomizeGasModal)
|
|
|
|
|
2017-10-12 18:42:14 +02:00
|
|
|
CustomizeGasModal.prototype.save = function (gasPrice, gasLimit) {
|
|
|
|
const {
|
|
|
|
updateGasPrice,
|
|
|
|
updateGasLimit,
|
|
|
|
hideModal,
|
2017-10-17 19:22:23 +02:00
|
|
|
updateGasTotal
|
2017-10-12 18:42:14 +02:00
|
|
|
} = this.props
|
|
|
|
|
2017-10-17 19:22:23 +02:00
|
|
|
const newGasTotal = multiplyCurrencies(gasLimit, gasPrice, {
|
|
|
|
toNumericBase: 'hex',
|
|
|
|
multiplicandBase: 16,
|
|
|
|
multiplierBase: 16,
|
|
|
|
})
|
|
|
|
|
2017-10-12 18:42:14 +02:00
|
|
|
updateGasPrice(gasPrice)
|
|
|
|
updateGasLimit(gasLimit)
|
2017-10-17 19:22:23 +02:00
|
|
|
updateGasTotal(newGasTotal)
|
2017-10-12 18:42:14 +02:00
|
|
|
hideModal()
|
|
|
|
}
|
|
|
|
|
|
|
|
CustomizeGasModal.prototype.convertAndSetGasLimit = function (newGasLimit) {
|
|
|
|
const convertedGasLimit = conversionUtil(newGasLimit, {
|
|
|
|
fromNumericBase: 'dec',
|
|
|
|
toNumericBase: 'hex',
|
|
|
|
})
|
|
|
|
|
|
|
|
this.setState({ gasLimit: convertedGasLimit })
|
|
|
|
}
|
|
|
|
|
|
|
|
CustomizeGasModal.prototype.convertAndSetGasPrice = function (newGasPrice) {
|
|
|
|
const convertedGasPrice = conversionUtil(newGasPrice, {
|
|
|
|
fromNumericBase: 'dec',
|
|
|
|
toNumericBase: 'hex',
|
|
|
|
fromDenomination: 'GWEI',
|
|
|
|
toDenomination: 'WEI',
|
|
|
|
})
|
|
|
|
|
|
|
|
this.setState({ gasPrice: convertedGasPrice })
|
|
|
|
}
|
|
|
|
|
2017-10-13 22:19:22 +02:00
|
|
|
CustomizeGasModal.prototype.render = function () {
|
2017-10-12 18:42:14 +02:00
|
|
|
const { hideModal, conversionRate } = this.props
|
2017-10-13 22:19:22 +02:00
|
|
|
const { gasPrice, gasLimit } = this.state
|
|
|
|
|
2017-10-12 18:42:14 +02:00
|
|
|
const convertedGasPrice = conversionUtil(gasPrice, {
|
|
|
|
fromNumericBase: 'hex',
|
|
|
|
toNumericBase: 'dec',
|
|
|
|
fromDenomination: 'WEI',
|
|
|
|
toDenomination: 'GWEI',
|
|
|
|
})
|
|
|
|
|
|
|
|
const convertedGasLimit = conversionUtil(gasLimit, {
|
|
|
|
fromNumericBase: 'hex',
|
|
|
|
toNumericBase: 'dec',
|
|
|
|
})
|
|
|
|
|
2017-10-13 22:19:22 +02:00
|
|
|
return h('div.send-v2__customize-gas', {}, [
|
|
|
|
h('div', {
|
|
|
|
}, [
|
|
|
|
h('div.send-v2__customize-gas__header', {}, [
|
|
|
|
|
|
|
|
h('div.send-v2__customize-gas__title', 'Customize Gas'),
|
|
|
|
|
|
|
|
h('div.send-v2__customize-gas__close', {
|
|
|
|
onClick: hideModal,
|
|
|
|
}),
|
|
|
|
|
|
|
|
]),
|
|
|
|
|
|
|
|
h('div.send-v2__customize-gas__body', {}, [
|
|
|
|
|
|
|
|
h(GasModalCard, {
|
2017-10-12 18:42:14 +02:00
|
|
|
value: convertedGasPrice,
|
2017-10-18 21:23:35 +02:00
|
|
|
min: MIN_GAS_PRICE,
|
|
|
|
// max: 1000,
|
2017-10-12 18:42:14 +02:00
|
|
|
step: 1,
|
|
|
|
onChange: value => this.convertAndSetGasPrice(value),
|
2017-10-13 22:19:22 +02:00
|
|
|
title: 'Gas Price',
|
|
|
|
copy: 'We calculate the suggested gas prices based on network success rates.',
|
|
|
|
}),
|
|
|
|
|
|
|
|
h(GasModalCard, {
|
2017-10-12 18:42:14 +02:00
|
|
|
value: convertedGasLimit,
|
2017-10-18 21:23:35 +02:00
|
|
|
min: MIN_GAS_LIMIT,
|
|
|
|
// max: 100000,
|
2017-10-13 22:19:22 +02:00
|
|
|
step: 1,
|
2017-10-12 18:42:14 +02:00
|
|
|
onChange: value => this.convertAndSetGasLimit(value),
|
2017-10-13 22:19:22 +02:00
|
|
|
title: 'Gas Limit',
|
|
|
|
copy: 'We calculate the suggested gas limit based on network success rates.',
|
|
|
|
}),
|
|
|
|
|
|
|
|
]),
|
|
|
|
|
|
|
|
h('div.send-v2__customize-gas__footer', {}, [
|
|
|
|
|
|
|
|
h('div.send-v2__customize-gas__revert', {
|
|
|
|
onClick: () => console.log('Revert'),
|
|
|
|
}, ['Revert']),
|
|
|
|
|
|
|
|
h('div.send-v2__customize-gas__buttons', [
|
|
|
|
h('div.send-v2__customize-gas__cancel', {
|
|
|
|
onClick: this.props.hideModal,
|
|
|
|
}, ['CANCEL']),
|
|
|
|
|
|
|
|
h('div.send-v2__customize-gas__save', {
|
2017-10-12 18:42:14 +02:00
|
|
|
onClick: () => this.save(gasPrice, gasLimit),
|
2017-10-13 22:19:22 +02:00
|
|
|
}, ['SAVE']),
|
|
|
|
])
|
|
|
|
|
|
|
|
]),
|
|
|
|
|
|
|
|
]),
|
|
|
|
])
|
|
|
|
}
|