1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-29 23:58:06 +01:00
metamask-extension/ui/app/components/shift-list-item.js

210 lines
5.2 KiB
JavaScript
Raw Normal View History

2016-08-18 19:40:35 +02:00
const inherits = require('util').inherits
const Component = require('react').Component
const PropTypes = require('prop-types')
2016-08-18 19:40:35 +02:00
const h = require('react-hyperscript')
const connect = require('react-redux').connect
2017-08-03 23:48:19 +02:00
const vreme = new (require('vreme'))()
2017-10-14 17:23:44 +02:00
const explorerLink = require('etherscan-link').createExplorerLink
2016-08-18 19:40:35 +02:00
const actions = require('../actions')
const addressSummary = require('../util').addressSummary
const CopyButton = require('./copyButton')
const EthBalance = require('./eth-balance')
2016-08-19 00:20:26 +02:00
const Tooltip = require('./tooltip')
2016-08-18 19:40:35 +02:00
ShiftListItem.contextTypes = {
t: PropTypes.func,
}
2016-08-18 19:40:35 +02:00
module.exports = connect(mapStateToProps)(ShiftListItem)
2016-08-18 19:40:35 +02:00
function mapStateToProps (state) {
return {
selectedAddress: state.metamask.selectedAddress,
conversionRate: state.metamask.conversionRate,
currentCurrency: state.metamask.currentCurrency,
}
2016-08-18 19:40:35 +02:00
}
inherits(ShiftListItem, Component)
2016-08-19 00:20:26 +02:00
2016-08-18 19:40:35 +02:00
function ShiftListItem () {
Component.call(this)
}
ShiftListItem.prototype.render = function () {
return h('div.tx-list-item.tx-list-clickable', {
style: {
paddingTop: '20px',
paddingBottom: '20px',
justifyContent: 'space-around',
alignItems: 'center',
},
}, [
h('div', {
style: {
width: '0px',
position: 'relative',
bottom: '19px',
},
}, [
h('img', {
src: 'https://info.shapeshift.io/sites/default/files/logo.png',
2016-08-18 19:40:35 +02:00
style: {
height: '35px',
width: '132px',
position: 'absolute',
clip: 'rect(0px,23px,34px,0px)',
2016-08-18 19:40:35 +02:00
},
}),
]),
2016-08-18 19:40:35 +02:00
this.renderInfo(),
this.renderUtilComponents(),
])
2016-08-18 19:40:35 +02:00
}
function formatDate (date) {
return vreme.format(new Date(date), 'March 16 2014 14:30')
}
ShiftListItem.prototype.renderUtilComponents = function () {
var props = this.props
const { conversionRate, currentCurrency } = props
2016-08-18 19:40:35 +02:00
switch (props.response.status) {
case 'no_deposits':
return h('.flex-row', [
2016-08-19 00:20:26 +02:00
h(CopyButton, {
value: this.props.depositAddress,
2016-08-18 19:40:35 +02:00
}),
2016-08-19 00:20:26 +02:00
h(Tooltip, {
title: this.context.t('qrCode'),
2016-08-19 00:20:26 +02:00
}, [
h('i.fa.fa-qrcode.pointer.pop-hover', {
onClick: () => props.dispatch(actions.reshowQrCode(props.depositAddress, props.depositType)),
style: {
margin: '5px',
marginLeft: '23px',
marginRight: '12px',
fontSize: '20px',
color: '#F7861C',
},
}),
]),
2016-08-18 19:40:35 +02:00
])
case 'received':
return h('.flex-row')
case 'complete':
return h('.flex-row', [
2016-08-19 00:20:26 +02:00
h(CopyButton, {
value: this.props.response.transaction,
}),
h(EthBalance, {
value: `${props.response.outgoingCoin}`,
conversionRate,
currentCurrency,
width: '55px',
shorten: true,
needsParse: false,
incoming: true,
2016-08-19 00:20:26 +02:00
style: {
fontSize: '15px',
color: '#01888C',
2016-08-19 00:20:26 +02:00
},
}),
2016-08-18 19:40:35 +02:00
])
case 'failed':
return ''
default:
return ''
}
}
ShiftListItem.prototype.renderInfo = function () {
var props = this.props
switch (props.response.status) {
case 'no_deposits':
2016-08-19 00:20:26 +02:00
return h('.flex-column', {
style: {
width: '200px',
overflow: 'hidden',
},
}, [
2016-08-18 19:40:35 +02:00
h('div', {
2016-08-19 00:20:26 +02:00
style: {
fontSize: 'x-small',
color: '#ABA9AA',
width: '100%',
},
}, this.context.t('toETHviaShapeShift', [props.depositType])),
h('div', this.context.t('noDeposits')),
2016-08-18 19:40:35 +02:00
h('div', {
style: {
fontSize: 'x-small',
color: '#ABA9AA',
width: '100%',
},
}, formatDate(props.time)),
])
case 'received':
2016-08-19 00:20:26 +02:00
return h('.flex-column', {
style: {
width: '200px',
overflow: 'hidden',
},
}, [
2016-08-18 19:40:35 +02:00
h('div', {
2016-08-19 00:20:26 +02:00
style: {
fontSize: 'x-small',
color: '#ABA9AA',
width: '100%',
},
}, this.context.t('toETHviaShapeShift', [props.depositType])),
h('div', this.context.t('conversionProgress')),
2016-08-18 19:40:35 +02:00
h('div', {
style: {
fontSize: 'x-small',
color: '#ABA9AA',
width: '100%',
},
}, formatDate(props.time)),
])
case 'complete':
2016-08-19 00:20:26 +02:00
var url = explorerLink(props.response.transaction, parseInt('1'))
2016-08-18 19:40:35 +02:00
return h('.flex-column.pointer', {
2016-08-19 00:20:26 +02:00
style: {
width: '200px',
overflow: 'hidden',
},
onClick: () => global.platform.openWindow({ url }),
2016-08-18 19:40:35 +02:00
}, [
h('div', {
2016-08-19 00:20:26 +02:00
style: {
fontSize: 'x-small',
color: '#ABA9AA',
width: '100%',
},
}, this.context.t('fromShapeShift')),
2016-08-19 00:20:26 +02:00
h('div', formatDate(props.time)),
2016-08-18 19:40:35 +02:00
h('div', {
style: {
fontSize: 'x-small',
color: '#ABA9AA',
width: '100%',
},
}, addressSummary(props.response.transaction)),
])
case 'failed':
return h('span.error', '(' + this.context.t('failed') + ')')
2016-08-18 19:40:35 +02:00
default:
return ''
}
}