1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-22 18:00:18 +01:00

Merge pull request #5223 from whymarrh/tx-error-tooltips

Show transaction error message tooltips for statuses
This commit is contained in:
Frankie 2018-09-10 13:25:59 -10:00 committed by GitHub
commit a43e71693f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 81 additions and 34 deletions

View File

@ -353,6 +353,7 @@ class TransactionStateManager extends EventEmitter {
const txMeta = this.getTx(txId)
txMeta.err = {
message: err.toString(),
rpc: err.value,
stack: err.stack,
}
this.updateTx(txMeta)

View File

@ -3,7 +3,7 @@ import PropTypes from 'prop-types'
import copyToClipboard from 'copy-to-clipboard'
import { addressSlicer } from '../../util'
const Tooltip = require('../tooltip-v2.js')
const Tooltip = require('../tooltip-v2.js').default
class SelectedAccount extends Component {
state = {

View File

@ -1,33 +1,66 @@
const Component = require('react').Component
const h = require('react-hyperscript')
const inherits = require('util').inherits
const ReactTippy = require('react-tippy').Tooltip
import PropTypes from 'prop-types'
import React, {PureComponent} from 'react'
import {Tooltip as ReactTippy} from 'react-tippy'
module.exports = Tooltip
export default class Tooltip extends PureComponent {
static defaultProps = {
arrow: true,
children: null,
containerClassName: '',
hideOnClick: false,
onHidden: null,
position: 'left',
size: 'small',
title: null,
trigger: 'mouseenter',
wrapperClassName: '',
}
inherits(Tooltip, Component)
function Tooltip () {
Component.call(this)
}
Tooltip.prototype.render = function () {
const props = this.props
const { position, title, children, wrapperClassName, containerClassName, onHidden } = props
return h('div', {
className: wrapperClassName,
}, [
h(ReactTippy, {
title,
position: position || 'left',
trigger: 'mouseenter',
hideOnClick: false,
size: 'small',
arrow: true,
className: containerClassName,
onHidden,
}, children),
])
static propTypes = {
arrow: PropTypes.bool,
children: PropTypes.node,
containerClassName: PropTypes.string,
onHidden: PropTypes.func,
position: PropTypes.oneOf([
'top',
'right',
'bottom',
'left',
]),
size: PropTypes.oneOf([
'small', 'regular', 'big',
]),
title: PropTypes.string,
trigger: PropTypes.any,
wrapperClassName: PropTypes.string,
}
render () {
const {arrow, children, containerClassName, position, size, title, trigger, onHidden, wrapperClassName } = this.props
if (!title) {
return (
<div className={wrapperClassName}>
{children}
</div>
)
}
return (
<div className={wrapperClassName}>
<ReactTippy
className={containerClassName}
title={title}
position={position}
trigger={trigger}
hideOnClick={false}
size={size}
arrow={arrow}
onHidden={onHidden}
>
{children}
</ReactTippy>
</div>
)
}
}

View File

@ -131,6 +131,11 @@ export default class TransactionListItem extends PureComponent {
<TransactionStatus
className="transaction-list-item__status"
statusKey={transaction.status}
title={(
(transaction.err && transaction.err.rpc)
? transaction.err.rpc.message
: transaction.err && transaction.err.message
)}
/>
{ this.renderPrimaryCurrency() }
{ this.renderSecondaryCurrency() }

View File

@ -1,6 +1,7 @@
import React, { PureComponent } from 'react'
import PropTypes from 'prop-types'
import classnames from 'classnames'
import Tooltip from '../tooltip-v2'
import {
UNAPPROVED_STATUS,
REJECTED_STATUS,
@ -29,6 +30,10 @@ const statusToTextHash = {
}
export default class TransactionStatus extends PureComponent {
static defaultProps = {
title: null,
}
static contextTypes = {
t: PropTypes.func,
}
@ -36,15 +41,18 @@ export default class TransactionStatus extends PureComponent {
static propTypes = {
statusKey: PropTypes.string,
className: PropTypes.string,
title: PropTypes.string,
}
render () {
const { className, statusKey } = this.props
const { className, statusKey, title } = this.props
const statusText = this.context.t(statusToTextHash[statusKey] || statusKey)
return (
<div className={classnames('transaction-status', className, statusToClassNameHash[statusKey])}>
{ statusText }
<Tooltip position="top" title={title}>
{ statusText }
</Tooltip>
</div>
)
}

View File

@ -9,7 +9,7 @@ const classnames = require('classnames')
const { checksumAddress } = require('../util')
const Identicon = require('./identicon')
// const AccountDropdowns = require('./dropdowns/index.js').AccountDropdowns
const Tooltip = require('./tooltip-v2.js')
const Tooltip = require('./tooltip-v2.js').default
const copyToClipboard = require('copy-to-clipboard')
const actions = require('../actions')
const BalanceComponent = require('./balance-component')