mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-24 02:58:09 +01:00
2a6d6fcd15
Tx list no longer enlarges on hover, and failed transactions no longer have hover styles nor direct to an explorer page.
160 lines
3.3 KiB
JavaScript
160 lines
3.3 KiB
JavaScript
const h = require('react-hyperscript')
|
|
const vreme = new (require('vreme'))
|
|
const formatBalance = require('../util').formatBalance
|
|
const addressSummary = require('../util').addressSummary
|
|
const explorerLink = require('../../lib/explorer-link')
|
|
const Panel = require('./panel')
|
|
const Identicon = require('./identicon')
|
|
const EtherBalance = require('./eth-balance')
|
|
|
|
|
|
module.exports = function(transactions, network) {
|
|
return (
|
|
|
|
h('section.transaction-list', [
|
|
|
|
h('style', `
|
|
.transaction-list .transaction-list-item:not(:last-of-type) {
|
|
border-bottom: 1px solid #D4D4D4;
|
|
}
|
|
.transaction-list .transaction-list-item .ether-balance-label {
|
|
display: block !important;
|
|
font-size: small;
|
|
}
|
|
`),
|
|
|
|
h('h3.flex-center.text-transform-uppercase', {
|
|
style: {
|
|
background: '#EBEBEB',
|
|
color: '#AEAEAE',
|
|
},
|
|
}, [
|
|
'Transactions',
|
|
]),
|
|
|
|
h('.tx-list', {
|
|
style: {
|
|
overflowY: 'auto',
|
|
height: '204px',
|
|
padding: '0 20px',
|
|
textAlign: 'center',
|
|
},
|
|
}, (
|
|
|
|
transactions.length ?
|
|
transactions.map(renderTransaction)
|
|
:
|
|
[h('.flex-center', {
|
|
style: {
|
|
height: '100%',
|
|
},
|
|
}, 'No transaction history...')]
|
|
|
|
))
|
|
|
|
])
|
|
|
|
)
|
|
|
|
|
|
function renderTransaction(transaction, i){
|
|
|
|
var txParams = transaction.txParams
|
|
var date = formatDate(transaction.time)
|
|
|
|
return (
|
|
|
|
h(`.transaction-list-item.flex-row.flex-space-between${transaction.hash ? '.pointer' : ''}`, {
|
|
key: `tx-${transaction.id + i}`,
|
|
onClick: (event) => {
|
|
if (!transaction.hash) return
|
|
var url = explorerLink(transaction.hash, parseInt(network))
|
|
chrome.tabs.create({ url })
|
|
},
|
|
style: {
|
|
padding: '20px 0',
|
|
},
|
|
}, [
|
|
|
|
// large identicon
|
|
h('.identicon-wrapper.flex-column.flex-center.select-none', [
|
|
identicon(txParams, transaction),
|
|
]),
|
|
|
|
h('.flex-column', [
|
|
|
|
h('div', date),
|
|
|
|
recipientField(txParams, transaction),
|
|
|
|
]),
|
|
|
|
h(EtherBalance, {
|
|
value: txParams.value,
|
|
}),
|
|
])
|
|
|
|
)
|
|
}
|
|
}
|
|
|
|
function recipientField(txParams, transaction) {
|
|
if (txParams.to) {
|
|
return h('div', {
|
|
style: {
|
|
fontSize: 'small',
|
|
color: '#ABA9AA',
|
|
},
|
|
}, [
|
|
addressSummary(txParams.to),
|
|
failIfFailed(transaction),
|
|
])
|
|
|
|
} else {
|
|
|
|
return h('div', {
|
|
style: {
|
|
fontSize: 'small',
|
|
color: '#ABA9AA',
|
|
},
|
|
},[
|
|
'Contract Published',
|
|
failIfFailed(transaction),
|
|
])
|
|
|
|
}
|
|
}
|
|
|
|
function formatDate(date){
|
|
return vreme.format(new Date(date), 'March 16 2014 14:30')
|
|
}
|
|
|
|
function identicon(txParams, transaction) {
|
|
if (transaction.status === 'rejected') {
|
|
return h('i.fa.fa-exclamation-triangle.fa-lg.error', {
|
|
style: {
|
|
width: '24px',
|
|
}
|
|
})
|
|
}
|
|
|
|
if (txParams.to) {
|
|
return h(Identicon, {
|
|
diameter: 24,
|
|
address: txParams.to || transaction.hash,
|
|
})
|
|
} else {
|
|
return h('i.fa.fa-file-text-o.fa-lg', {
|
|
style: {
|
|
width: '24px',
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
function failIfFailed(transaction) {
|
|
if (transaction.status === 'rejected') {
|
|
return h('span.error', ' (Failed)')
|
|
}
|
|
}
|