1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-23 11:46:13 +02:00
metamask-extension/ui/app/conf-tx.js

226 lines
6.7 KiB
JavaScript
Raw Normal View History

const inherits = require('util').inherits
const Component = require('react').Component
const h = require('react-hyperscript')
const connect = require('react-redux').connect
2018-04-04 01:59:32 +02:00
const { withRouter } = require('react-router-dom')
const { compose } = require('recompose')
const actions = require('./actions')
const txHelper = require('../lib/tx-helper')
const log = require('loglevel')
const R = require('ramda')
const SignatureRequest = require('./components/signature-request')
2018-05-01 03:28:34 +02:00
const Loading = require('./components/loading-screen')
const { DEFAULT_ROUTE } = require('./routes')
const { getMetaMaskAccounts } = require('./selectors')
module.exports = compose(
withRouter,
connect(mapStateToProps)
)(ConfirmTxScreen)
2016-06-21 22:18:32 +02:00
function mapStateToProps (state) {
2017-12-05 04:27:42 +01:00
const { metamask } = state
const {
unapprovedMsgCount,
unapprovedPersonalMsgCount,
2018-04-04 01:59:32 +02:00
unapprovedTypedMessagesCount,
2017-12-05 04:27:42 +01:00
} = metamask
return {
identities: state.metamask.identities,
accounts: getMetaMaskAccounts(state),
selectedAddress: state.metamask.selectedAddress,
unapprovedTxs: state.metamask.unapprovedTxs,
unapprovedMsgs: state.metamask.unapprovedMsgs,
2017-02-23 01:23:13 +01:00
unapprovedPersonalMsgs: state.metamask.unapprovedPersonalMsgs,
2017-09-29 18:24:08 +02:00
unapprovedTypedMessages: state.metamask.unapprovedTypedMessages,
index: state.appState.currentView.context,
warning: state.appState.warning,
2016-09-08 21:56:04 +02:00
network: state.metamask.network,
provider: state.metamask.provider,
conversionRate: state.metamask.conversionRate,
currentCurrency: state.metamask.currentCurrency,
blockGasLimit: state.metamask.currentBlockGasLimit,
computedBalances: state.metamask.computedBalances,
2017-12-05 04:27:42 +01:00
unapprovedMsgCount,
unapprovedPersonalMsgCount,
2018-04-04 01:59:32 +02:00
unapprovedTypedMessagesCount,
send: state.metamask.send,
selectedAddressTxList: state.metamask.selectedAddressTxList,
}
}
inherits(ConfirmTxScreen, Component)
2016-06-21 22:18:32 +02:00
function ConfirmTxScreen () {
Component.call(this)
}
2018-04-04 01:59:32 +02:00
ConfirmTxScreen.prototype.getUnapprovedMessagesTotal = function () {
const {
unapprovedMsgCount = 0,
unapprovedPersonalMsgCount = 0,
unapprovedTypedMessagesCount = 0,
} = this.props
return unapprovedTypedMessagesCount + unapprovedMsgCount + unapprovedPersonalMsgCount
}
ConfirmTxScreen.prototype.componentDidMount = function () {
const {
unapprovedTxs = {},
network,
send,
} = this.props
const unconfTxList = txHelper(unapprovedTxs, {}, {}, {}, network)
2018-04-04 01:59:32 +02:00
if (unconfTxList.length === 0 && !send.to && this.getUnapprovedMessagesTotal() === 0) {
this.props.history.push(DEFAULT_ROUTE)
}
}
ConfirmTxScreen.prototype.componentDidUpdate = function (prevProps) {
const {
unapprovedTxs = {},
network,
selectedAddressTxList,
send,
history,
match: { params: { id: transactionId } = {} },
} = this.props
let prevTx
if (transactionId) {
prevTx = R.find(({ id }) => id + '' === transactionId)(selectedAddressTxList)
} else {
const { index: prevIndex, unapprovedTxs: prevUnapprovedTxs } = prevProps
const prevUnconfTxList = txHelper(prevUnapprovedTxs, {}, {}, {}, network)
const prevTxData = prevUnconfTxList[prevIndex] || {}
prevTx = selectedAddressTxList.find(({ id }) => id === prevTxData.id) || {}
}
const unconfTxList = txHelper(unapprovedTxs, {}, {}, {}, network)
if (prevTx && prevTx.status === 'dropped') {
this.props.dispatch(actions.showModal({
name: 'TRANSACTION_CONFIRMED',
onSubmit: () => history.push(DEFAULT_ROUTE),
}))
return
}
if (unconfTxList.length === 0 && !send.to && this.getUnapprovedMessagesTotal() === 0) {
this.props.history.push(DEFAULT_ROUTE)
}
}
ConfirmTxScreen.prototype.getTxData = function () {
2017-09-28 07:32:07 +02:00
const {
network,
index,
unapprovedTxs,
unapprovedMsgs,
unapprovedPersonalMsgs,
unapprovedTypedMessages,
match: { params: { id: transactionId } = {} },
} = this.props
const unconfTxList = txHelper(
2017-09-28 07:32:07 +02:00
unapprovedTxs,
unapprovedMsgs,
unapprovedPersonalMsgs,
2017-10-19 07:58:46 +02:00
unapprovedTypedMessages,
network
)
log.info(`rendering a combined ${unconfTxList.length} unconf msgs & txs`)
return transactionId
? R.find(({ id }) => id + '' === transactionId)(unconfTxList)
: unconfTxList[index]
}
ConfirmTxScreen.prototype.render = function () {
const props = this.props
const {
currentCurrency,
2017-09-28 07:32:07 +02:00
conversionRate,
blockGasLimit,
} = props
var txData = this.getTxData() || {}
const { msgParams } = txData
log.debug('msgParams detected, rendering pending msg')
return msgParams
? h(SignatureRequest, {
// Properties
txData: txData,
key: txData.id,
selectedAddress: props.selectedAddress,
accounts: props.accounts,
identities: props.identities,
conversionRate,
currentCurrency,
blockGasLimit,
// Actions
signMessage: this.signMessage.bind(this, txData),
signPersonalMessage: this.signPersonalMessage.bind(this, txData),
signTypedMessage: this.signTypedMessage.bind(this, txData),
cancelMessage: this.cancelMessage.bind(this, txData),
cancelPersonalMessage: this.cancelPersonalMessage.bind(this, txData),
cancelTypedMessage: this.cancelTypedMessage.bind(this, txData),
})
: h(Loading)
2017-09-08 00:03:25 +02:00
}
2016-06-21 22:18:32 +02:00
ConfirmTxScreen.prototype.signMessage = function (msgData, event) {
log.info('conf-tx.js: signing message')
var params = msgData.msgParams
params.metamaskId = msgData.id
2017-03-22 23:14:33 +01:00
this.stopPropagation(event)
return this.props.dispatch(actions.signMsg(params))
}
2017-03-22 23:14:33 +01:00
ConfirmTxScreen.prototype.stopPropagation = function (event) {
if (event.stopPropagation) {
event.stopPropagation()
}
}
ConfirmTxScreen.prototype.signPersonalMessage = function (msgData, event) {
log.info('conf-tx.js: signing personal message')
var params = msgData.msgParams
params.metamaskId = msgData.id
2017-03-22 23:14:33 +01:00
this.stopPropagation(event)
return this.props.dispatch(actions.signPersonalMsg(params))
}
2017-09-29 18:24:08 +02:00
ConfirmTxScreen.prototype.signTypedMessage = function (msgData, event) {
log.info('conf-tx.js: signing typed message')
var params = msgData.msgParams
params.metamaskId = msgData.id
this.stopPropagation(event)
return this.props.dispatch(actions.signTypedMsg(params))
2017-09-29 18:24:08 +02:00
}
2016-06-21 22:18:32 +02:00
ConfirmTxScreen.prototype.cancelMessage = function (msgData, event) {
log.info('canceling message')
2017-03-22 23:14:33 +01:00
this.stopPropagation(event)
return this.props.dispatch(actions.cancelMsg(msgData))
}
2017-02-24 01:00:43 +01:00
ConfirmTxScreen.prototype.cancelPersonalMessage = function (msgData, event) {
log.info('canceling personal message')
2017-03-22 23:14:33 +01:00
this.stopPropagation(event)
return this.props.dispatch(actions.cancelPersonalMsg(msgData))
2017-02-24 01:00:43 +01:00
}
2017-09-29 18:24:08 +02:00
ConfirmTxScreen.prototype.cancelTypedMessage = function (msgData, event) {
log.info('canceling typed message')
this.stopPropagation(event)
return this.props.dispatch(actions.cancelTypedMsg(msgData))
2017-09-29 18:24:08 +02:00
}