mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Add Copy Tx ID button to transaction-list-item-details (#6146)
* Add Copy Tx ID button to transaction-list-item-details * Move justCopied toggle timeout inside setState callback
This commit is contained in:
parent
ce48d1f49c
commit
b58a9bd202
@ -305,6 +305,12 @@
|
|||||||
"copyAddress": {
|
"copyAddress": {
|
||||||
"message": "Copy address to clipboard"
|
"message": "Copy address to clipboard"
|
||||||
},
|
},
|
||||||
|
"copyTransactionId": {
|
||||||
|
"message": "Copy Transaction ID"
|
||||||
|
},
|
||||||
|
"copiedTransactionId": {
|
||||||
|
"message": "Copied Transaction ID"
|
||||||
|
},
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"message": "Copy to clipboard"
|
"message": "Copy to clipboard"
|
||||||
},
|
},
|
||||||
|
@ -22,6 +22,11 @@
|
|||||||
&:not(:last-child) {
|
&:not(:last-child) {
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&__copy-icon {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__sender-to-recipient-container {
|
&__sender-to-recipient-container {
|
||||||
|
@ -37,7 +37,7 @@ describe('TransactionListItemDetails Component', () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
assert.ok(wrapper.hasClass('transaction-list-item-details'))
|
assert.ok(wrapper.hasClass('transaction-list-item-details'))
|
||||||
assert.equal(wrapper.find(Button).length, 1)
|
assert.equal(wrapper.find(Button).length, 2)
|
||||||
assert.equal(wrapper.find(SenderToRecipient).length, 1)
|
assert.equal(wrapper.find(SenderToRecipient).length, 1)
|
||||||
assert.equal(wrapper.find(TransactionBreakdown).length, 1)
|
assert.equal(wrapper.find(TransactionBreakdown).length, 1)
|
||||||
assert.equal(wrapper.find(TransactionActivityLog).length, 1)
|
assert.equal(wrapper.find(TransactionActivityLog).length, 1)
|
||||||
@ -76,6 +76,6 @@ describe('TransactionListItemDetails Component', () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
assert.ok(wrapper.hasClass('transaction-list-item-details'))
|
assert.ok(wrapper.hasClass('transaction-list-item-details'))
|
||||||
assert.equal(wrapper.find(Button).length, 2)
|
assert.equal(wrapper.find(Button).length, 3)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import React, { PureComponent } from 'react'
|
import React, { PureComponent } from 'react'
|
||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types'
|
||||||
|
import copyToClipboard from 'copy-to-clipboard'
|
||||||
import SenderToRecipient from '../sender-to-recipient'
|
import SenderToRecipient from '../sender-to-recipient'
|
||||||
import { FLAT_VARIANT } from '../sender-to-recipient/sender-to-recipient.constants'
|
import { FLAT_VARIANT } from '../sender-to-recipient/sender-to-recipient.constants'
|
||||||
import TransactionActivityLog from '../transaction-activity-log'
|
import TransactionActivityLog from '../transaction-activity-log'
|
||||||
@ -21,6 +22,10 @@ export default class TransactionListItemDetails extends PureComponent {
|
|||||||
transactionGroup: PropTypes.object,
|
transactionGroup: PropTypes.object,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
state = {
|
||||||
|
justCopied: false,
|
||||||
|
}
|
||||||
|
|
||||||
handleEtherscanClick = () => {
|
handleEtherscanClick = () => {
|
||||||
const { transactionGroup: { primaryTransaction } } = this.props
|
const { transactionGroup: { primaryTransaction } } = this.props
|
||||||
const { hash, metamaskNetworkId } = primaryTransaction
|
const { hash, metamaskNetworkId } = primaryTransaction
|
||||||
@ -45,8 +50,20 @@ export default class TransactionListItemDetails extends PureComponent {
|
|||||||
onRetry(id)
|
onRetry(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleCopyTxId = () => {
|
||||||
|
const { transactionGroup} = this.props
|
||||||
|
const { primaryTransaction: transaction } = transactionGroup
|
||||||
|
const { hash } = transaction
|
||||||
|
|
||||||
|
this.setState({ justCopied: true }, () => {
|
||||||
|
copyToClipboard(hash)
|
||||||
|
setTimeout(() => this.setState({ justCopied: false }), 1000)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { t } = this.context
|
const { t } = this.context
|
||||||
|
const { justCopied } = this.state
|
||||||
const { transactionGroup, showCancel, showRetry, onCancel, onRetry } = this.props
|
const { transactionGroup, showCancel, showRetry, onCancel, onRetry } = this.props
|
||||||
const { primaryTransaction: transaction } = transactionGroup
|
const { primaryTransaction: transaction } = transactionGroup
|
||||||
const { txParams: { to, from } = {} } = transaction
|
const { txParams: { to, from } = {} } = transaction
|
||||||
@ -78,6 +95,18 @@ export default class TransactionListItemDetails extends PureComponent {
|
|||||||
</Button>
|
</Button>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
<Tooltip title={justCopied ? t('copiedTransactionId') : t('copyTransactionId')}>
|
||||||
|
<Button
|
||||||
|
type="raised"
|
||||||
|
onClick={this.handleCopyTxId}
|
||||||
|
className="transaction-list-item-details__header-button"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
className="transaction-list-item-details__header-button__copy-icon"
|
||||||
|
src="/images/copy-to-clipboard.svg"
|
||||||
|
/>
|
||||||
|
</Button>
|
||||||
|
</Tooltip>
|
||||||
<Tooltip title={t('viewOnEtherscan')}>
|
<Tooltip title={t('viewOnEtherscan')}>
|
||||||
<Button
|
<Button
|
||||||
type="raised"
|
type="raised"
|
||||||
|
Loading…
Reference in New Issue
Block a user