Drop the buy button in the confTx view if account does not have enough eth

feature/default_network_editable
Frankie 8 years ago
parent 17eb53cfcd
commit ef0b535d94
  1. 3
      ui/app/account-detail.js
  2. 3
      ui/app/actions.js
  3. 11
      ui/app/components/buy-button-subview.js
  4. 4
      ui/app/components/pending-tx-details.js
  5. 37
      ui/app/components/pending-tx.js
  6. 22
      ui/app/conf-tx.js
  7. 4
      ui/app/reducers/app.js

@ -279,10 +279,11 @@ AccountDetailScreen.prototype.requestAccountExport = function () {
AccountDetailScreen.prototype.buyButtonDeligator = function () { AccountDetailScreen.prototype.buyButtonDeligator = function () {
var props = this.props var props = this.props
var selected = props.address || Object.keys(props.accounts)[0]
if (this.props.accountDetail.subview === 'buyForm') { if (this.props.accountDetail.subview === 'buyForm') {
props.dispatch(actions.backToAccountDetail(props.address)) props.dispatch(actions.backToAccountDetail(props.address))
} else { } else {
props.dispatch(actions.buyEthView()) props.dispatch(actions.buyEthView(selected))
} }
} }

@ -479,9 +479,10 @@ function showAccountsPage () {
} }
} }
function showConfTxPage () { function showConfTxPage (transForward = true) {
return { return {
type: actions.SHOW_CONF_TX_PAGE, type: actions.SHOW_CONF_TX_PAGE,
transForward: transForward,
} }
} }

@ -16,6 +16,7 @@ function mapStateToProps (state) {
buyView: state.appState.buyView, buyView: state.appState.buyView,
network: state.metamask.network, network: state.metamask.network,
provider: state.metamask.provider, provider: state.metamask.provider,
context: state.appState.currentView.context,
} }
} }
@ -38,7 +39,7 @@ BuyButtonSubview.prototype.render = function () {
}, },
}, [ }, [
h('i.fa.fa-arrow-left.fa-lg.cursor-pointer.color-orange', { h('i.fa.fa-arrow-left.fa-lg.cursor-pointer.color-orange', {
onClick: () => props.dispatch(actions.backToAccountDetail(props.selectedAccount)), onClick: this.backButtonContext.bind(this),
style: { style: {
position: 'absolute', position: 'absolute',
left: '10px', left: '10px',
@ -121,3 +122,11 @@ BuyButtonSubview.prototype.formVersionSubview = function () {
BuyButtonSubview.prototype.navigateTo = function (url) { BuyButtonSubview.prototype.navigateTo = function (url) {
extension.tabs.create({ url }) extension.tabs.create({ url })
} }
BuyButtonSubview.prototype.backButtonContext = function () {
if (this.props.context === 'confTx') {
this.props.dispatch(actions.showConfTxPage(false))
} else {
this.props.dispatch(actions.goHome())
}
}

@ -4,12 +4,12 @@ const inherits = require('util').inherits
const MiniAccountPanel = require('./mini-account-panel') const MiniAccountPanel = require('./mini-account-panel')
const EthBalance = require('./eth-balance') const EthBalance = require('./eth-balance')
const addressSummary = require('../util').addressSummary const util = require('../util')
const addressSummary = util.addressSummary
const nameForAddress = require('../../lib/contract-namer') const nameForAddress = require('../../lib/contract-namer')
const ethUtil = require('ethereumjs-util') const ethUtil = require('ethereumjs-util')
const BN = ethUtil.BN const BN = ethUtil.BN
module.exports = PendingTxDetails module.exports = PendingTxDetails
inherits(PendingTxDetails, Component) inherits(PendingTxDetails, Component)

@ -3,6 +3,8 @@ const h = require('react-hyperscript')
const inherits = require('util').inherits const inherits = require('util').inherits
const PendingTxDetails = require('./pending-tx-details') const PendingTxDetails = require('./pending-tx-details')
const ethUtil = require('ethereumjs-util')
const BN = ethUtil.BN
module.exports = PendingTx module.exports = PendingTx
@ -14,7 +16,6 @@ function PendingTx () {
PendingTx.prototype.render = function () { PendingTx.prototype.render = function () {
var state = this.props var state = this.props
var txData = state.txData var txData = state.txData
return ( return (
h('div', { h('div', {
@ -39,10 +40,8 @@ PendingTx.prototype.render = function () {
margin: '14px 25px', margin: '14px 25px',
}, },
}, [ }, [
h('button.confirm', {
onClick: state.sendTransaction, this.buttonDeligator(),
style: { background: 'rgb(251,117,1)' },
}, 'Accept'),
h('button.cancel', { h('button.cancel', {
onClick: state.cancelTransaction, onClick: state.cancelTransaction,
@ -53,3 +52,31 @@ PendingTx.prototype.render = function () {
) )
} }
PendingTx.prototype.buttonDeligator = function () {
var state = this.props
var txData = state.txData
var txParams = txData.txParams || {}
var address = txParams.from || state.selectedAddress
var account = state.accounts[address]
var balance = account ? account.balance : '0x0'
var gasCost = new BN(ethUtil.stripHexPrefix(txParams.gas || txData.estimatedGas), 16)
var gasPrice = new BN(ethUtil.stripHexPrefix(txParams.gasPrice || '0x4a817c800'), 16)
var txFee = gasCost.mul(gasPrice)
var txValue = new BN(ethUtil.stripHexPrefix(txParams.value || '0x0'), 16)
var maxCost = txValue.add(txFee)
var balanceBn = new BN(ethUtil.stripHexPrefix(balance), 16)
if (maxCost.gt(balanceBn)) {
return h('button.confirm', {
onClick: state.sendTransaction,
style: { background: 'rgb(251,117,1)' },
}, 'Buy')
} else {
return h('button.confirm', {
onClick: state.sendTransaction,
style: { background: 'rgb(251,117,1)' },
}, 'Accept')
}
}

@ -6,6 +6,8 @@ const connect = require('react-redux').connect
const actions = require('./actions') const actions = require('./actions')
const txHelper = require('../lib/tx-helper') const txHelper = require('../lib/tx-helper')
const isPopupOrNotification = require('../../app/scripts/lib/is-popup-or-notification') const isPopupOrNotification = require('../../app/scripts/lib/is-popup-or-notification')
const ethUtil = require('ethereumjs-util')
const BN = ethUtil.BN
const PendingTx = require('./components/pending-tx') const PendingTx = require('./components/pending-tx')
const PendingMsg = require('./components/pending-msg') const PendingMsg = require('./components/pending-msg')
@ -113,8 +115,26 @@ function currentTxView (opts) {
} }
ConfirmTxScreen.prototype.sendTransaction = function (txData, event) { ConfirmTxScreen.prototype.sendTransaction = function (txData, event) {
var state = this.props
var txParams = txData.txParams || {}
var address = txParams.from || state.selectedAddress
var account = state.accounts[address]
var balance = account ? account.balance : '0x0'
var gasCost = new BN(ethUtil.stripHexPrefix(txParams.gas || txData.estimatedGas), 16)
var gasPrice = new BN(ethUtil.stripHexPrefix(txParams.gasPrice || '0x4a817c800'), 16)
var txFee = gasCost.mul(gasPrice)
var txValue = new BN(ethUtil.stripHexPrefix(txParams.value || '0x0'), 16)
var maxCost = txValue.add(txFee)
var balanceBn = new BN(ethUtil.stripHexPrefix(balance), 16)
event.stopPropagation() event.stopPropagation()
this.props.dispatch(actions.sendTx(txData)) if (maxCost.gt(balanceBn)) {
this.props.dispatch(actions.buyEthView(address))
} else {
this.props.dispatch(actions.sendTx(txData))
}
} }
ConfirmTxScreen.prototype.cancelTransaction = function (txData, event) { ConfirmTxScreen.prototype.cancelTransaction = function (txData, event) {

@ -240,7 +240,7 @@ function reduceApp (state, action) {
name: 'confTx', name: 'confTx',
context: 0, context: 0,
}, },
transForward: true, transForward: action.transForward,
warning: null, warning: null,
}) })
@ -408,7 +408,7 @@ function reduceApp (state, action) {
transForward: true, transForward: true,
currentView: { currentView: {
name: 'buyEth', name: 'buyEth',
context: appState.currentView.context, context: appState.currentView.name,
}, },
buyView: { buyView: {
subview: 'buyForm', subview: 'buyForm',

Loading…
Cancel
Save