Split ShiftListItem into container and component files with JSX (#7539)
parent
c3e834d17b
commit
3377228b74
@ -1,204 +0,0 @@ |
|||||||
const inherits = require('util').inherits |
|
||||||
const Component = require('react').Component |
|
||||||
const PropTypes = require('prop-types') |
|
||||||
const h = require('react-hyperscript') |
|
||||||
const connect = require('react-redux').connect |
|
||||||
const explorerLink = require('etherscan-link').createExplorerLink |
|
||||||
const actions = require('../../store/actions') |
|
||||||
const { formatDate, addressSummary } = require('../../helpers/utils/util') |
|
||||||
|
|
||||||
const CopyButton = require('../ui/copyButton') |
|
||||||
const EthBalance = require('../ui/eth-balance') |
|
||||||
const Tooltip = require('../ui/tooltip') |
|
||||||
|
|
||||||
|
|
||||||
ShiftListItem.contextTypes = { |
|
||||||
t: PropTypes.func, |
|
||||||
} |
|
||||||
|
|
||||||
module.exports = connect(mapStateToProps)(ShiftListItem) |
|
||||||
|
|
||||||
|
|
||||||
function mapStateToProps (state) { |
|
||||||
return { |
|
||||||
selectedAddress: state.metamask.selectedAddress, |
|
||||||
conversionRate: state.metamask.conversionRate, |
|
||||||
currentCurrency: state.metamask.currentCurrency, |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
inherits(ShiftListItem, Component) |
|
||||||
|
|
||||||
function ShiftListItem () { |
|
||||||
Component.call(this) |
|
||||||
} |
|
||||||
|
|
||||||
ShiftListItem.prototype.render = function () { |
|
||||||
return h('div.transaction-list-item.tx-list-clickable', { |
|
||||||
style: { |
|
||||||
paddingTop: '20px', |
|
||||||
paddingBottom: '20px', |
|
||||||
justifyContent: 'space-around', |
|
||||||
alignItems: 'center', |
|
||||||
flexDirection: 'row', |
|
||||||
}, |
|
||||||
}, [ |
|
||||||
h('div', { |
|
||||||
style: { |
|
||||||
width: '0px', |
|
||||||
position: 'relative', |
|
||||||
bottom: '19px', |
|
||||||
}, |
|
||||||
}, [ |
|
||||||
h('img', { |
|
||||||
src: 'https://shapeshift.io/logo.png', |
|
||||||
style: { |
|
||||||
height: '35px', |
|
||||||
width: '132px', |
|
||||||
position: 'absolute', |
|
||||||
clip: 'rect(0px,30px,34px,0px)', |
|
||||||
}, |
|
||||||
}), |
|
||||||
]), |
|
||||||
|
|
||||||
this.renderInfo(), |
|
||||||
this.renderUtilComponents(), |
|
||||||
]) |
|
||||||
} |
|
||||||
|
|
||||||
ShiftListItem.prototype.renderUtilComponents = function () { |
|
||||||
var props = this.props |
|
||||||
const { conversionRate, currentCurrency } = props |
|
||||||
|
|
||||||
switch (props.response.status) { |
|
||||||
case 'no_deposits': |
|
||||||
return h('.flex-row', [ |
|
||||||
h(CopyButton, { |
|
||||||
value: this.props.depositAddress, |
|
||||||
}), |
|
||||||
h(Tooltip, { |
|
||||||
title: this.context.t('qrCode'), |
|
||||||
}, [ |
|
||||||
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', |
|
||||||
}, |
|
||||||
}), |
|
||||||
]), |
|
||||||
]) |
|
||||||
case 'received': |
|
||||||
return h('.flex-row') |
|
||||||
|
|
||||||
case 'complete': |
|
||||||
return h('.flex-row', [ |
|
||||||
h(CopyButton, { |
|
||||||
value: this.props.response.transaction, |
|
||||||
}), |
|
||||||
h(EthBalance, { |
|
||||||
value: `${props.response.outgoingCoin}`, |
|
||||||
conversionRate, |
|
||||||
currentCurrency, |
|
||||||
width: '55px', |
|
||||||
shorten: true, |
|
||||||
needsParse: false, |
|
||||||
incoming: true, |
|
||||||
style: { |
|
||||||
fontSize: '15px', |
|
||||||
color: '#01888C', |
|
||||||
}, |
|
||||||
}), |
|
||||||
]) |
|
||||||
|
|
||||||
case 'failed': |
|
||||||
return '' |
|
||||||
default: |
|
||||||
return '' |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
ShiftListItem.prototype.renderInfo = function () { |
|
||||||
var props = this.props |
|
||||||
switch (props.response.status) { |
|
||||||
case 'no_deposits': |
|
||||||
return h('.flex-column', { |
|
||||||
style: { |
|
||||||
overflow: 'hidden', |
|
||||||
}, |
|
||||||
}, [ |
|
||||||
h('div', { |
|
||||||
style: { |
|
||||||
fontSize: 'x-small', |
|
||||||
color: '#ABA9AA', |
|
||||||
width: '100%', |
|
||||||
}, |
|
||||||
}, this.context.t('toETHviaShapeShift', [props.depositType])), |
|
||||||
h('div', this.context.t('noDeposits')), |
|
||||||
h('div', { |
|
||||||
style: { |
|
||||||
fontSize: 'x-small', |
|
||||||
color: '#ABA9AA', |
|
||||||
width: '100%', |
|
||||||
}, |
|
||||||
}, formatDate(props.time)), |
|
||||||
]) |
|
||||||
case 'received': |
|
||||||
return h('.flex-column', { |
|
||||||
style: { |
|
||||||
width: '200px', |
|
||||||
overflow: 'hidden', |
|
||||||
}, |
|
||||||
}, [ |
|
||||||
h('div', { |
|
||||||
style: { |
|
||||||
fontSize: 'x-small', |
|
||||||
color: '#ABA9AA', |
|
||||||
width: '100%', |
|
||||||
}, |
|
||||||
}, this.context.t('toETHviaShapeShift', [props.depositType])), |
|
||||||
h('div', this.context.t('conversionProgress')), |
|
||||||
h('div', { |
|
||||||
style: { |
|
||||||
fontSize: 'x-small', |
|
||||||
color: '#ABA9AA', |
|
||||||
width: '100%', |
|
||||||
}, |
|
||||||
}, formatDate(props.time)), |
|
||||||
]) |
|
||||||
case 'complete': |
|
||||||
var url = explorerLink(props.response.transaction, parseInt('1')) |
|
||||||
|
|
||||||
return h('.flex-column.pointer', { |
|
||||||
style: { |
|
||||||
width: '200px', |
|
||||||
overflow: 'hidden', |
|
||||||
}, |
|
||||||
onClick: () => global.platform.openWindow({ url }), |
|
||||||
}, [ |
|
||||||
h('div', { |
|
||||||
style: { |
|
||||||
fontSize: 'x-small', |
|
||||||
color: '#ABA9AA', |
|
||||||
width: '100%', |
|
||||||
}, |
|
||||||
}, this.context.t('fromShapeShift')), |
|
||||||
h('div', formatDate(props.time)), |
|
||||||
h('div', { |
|
||||||
style: { |
|
||||||
fontSize: 'x-small', |
|
||||||
color: '#ABA9AA', |
|
||||||
width: '100%', |
|
||||||
}, |
|
||||||
}, addressSummary(props.response.transaction)), |
|
||||||
]) |
|
||||||
|
|
||||||
case 'failed': |
|
||||||
return h('span.error', '(' + this.context.t('failed') + ')') |
|
||||||
default: |
|
||||||
return '' |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1 @@ |
|||||||
|
export { default } from './shift-list-item.container' |
@ -0,0 +1,240 @@ |
|||||||
|
import PropTypes from 'prop-types' |
||||||
|
import React, { Component } from 'react' |
||||||
|
const explorerLink = require('etherscan-link').createExplorerLink |
||||||
|
const actions = require('../../../store/actions') |
||||||
|
const { formatDate, addressSummary } = require('../../../helpers/utils/util') |
||||||
|
|
||||||
|
const CopyButton = require('../../ui/copyButton') |
||||||
|
const EthBalance = require('../../ui/eth-balance') |
||||||
|
const Tooltip = require('../../ui/tooltip') |
||||||
|
|
||||||
|
export default class ShiftListItem extends Component { |
||||||
|
static contextTypes = { |
||||||
|
t: PropTypes.func, |
||||||
|
} |
||||||
|
|
||||||
|
static defaultProps = { |
||||||
|
conversionRate: undefined, |
||||||
|
currentCurrency: undefined, |
||||||
|
} |
||||||
|
|
||||||
|
static propTypes = { |
||||||
|
depositType: PropTypes.string.isRequired, |
||||||
|
dispatch: PropTypes.func.isRequired, |
||||||
|
depositAddress: PropTypes.string.isRequired, |
||||||
|
conversionRate: PropTypes.any, |
||||||
|
currentCurrency: PropTypes.any, |
||||||
|
time: PropTypes.string.isRequired, |
||||||
|
response: PropTypes.shape({ |
||||||
|
outgoingCoin: PropTypes.number.isRequired, |
||||||
|
status: PropTypes.string.isRequired, |
||||||
|
transaction: PropTypes.string.isRequired, |
||||||
|
}), |
||||||
|
} |
||||||
|
|
||||||
|
renderUtilComponents () { |
||||||
|
const { conversionRate, currentCurrency } = this.props |
||||||
|
|
||||||
|
switch (this.props.response.status) { |
||||||
|
case 'no_deposits': |
||||||
|
return ( |
||||||
|
<div className="flex-row"> |
||||||
|
<CopyButton value={this.props.depositAddress} /> |
||||||
|
<Tooltip title={this.context.t('qrCode')}> |
||||||
|
<i |
||||||
|
className="fa fa-qrcode pointer pop-hover" |
||||||
|
onClick={() => { |
||||||
|
this.props.dispatch(actions.reshowQrCode(this.props.depositAddress, this.props.depositType)) |
||||||
|
}} |
||||||
|
style={{ |
||||||
|
margin: '5px', |
||||||
|
marginLeft: '23px', |
||||||
|
marginRight: '12px', |
||||||
|
fontSize: '20px', |
||||||
|
color: '#F7861C', |
||||||
|
}} |
||||||
|
/> |
||||||
|
</Tooltip> |
||||||
|
</div> |
||||||
|
) |
||||||
|
case 'received': |
||||||
|
return <div className="flex-row" /> |
||||||
|
|
||||||
|
case 'complete': |
||||||
|
return ( |
||||||
|
<div className="flex-row"> |
||||||
|
<CopyButton value={this.props.response.transaction} /> |
||||||
|
<EthBalance |
||||||
|
value={`${this.props.response.outgoingCoin}`} |
||||||
|
conversionRate={conversionRate} |
||||||
|
currentCurrency={currentCurrency} |
||||||
|
width="55px" |
||||||
|
shorten |
||||||
|
needsParse={false} |
||||||
|
incoming |
||||||
|
style={{ |
||||||
|
fontSize: '15px', |
||||||
|
color: '#01888C', |
||||||
|
}} |
||||||
|
/> |
||||||
|
</div> |
||||||
|
) |
||||||
|
|
||||||
|
case 'failed': |
||||||
|
return '' |
||||||
|
|
||||||
|
default: |
||||||
|
return '' |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
renderInfo () { |
||||||
|
switch (this.props.response.status) { |
||||||
|
case 'no_deposits': |
||||||
|
return ( |
||||||
|
<div |
||||||
|
className="flex-column" |
||||||
|
style={{ |
||||||
|
overflow: 'hidden', |
||||||
|
}} |
||||||
|
> |
||||||
|
<div |
||||||
|
style={{ |
||||||
|
fontSize: 'x-small', |
||||||
|
color: '#ABA9AA', |
||||||
|
width: '100%', |
||||||
|
}} |
||||||
|
> |
||||||
|
{this.context.t('toETHviaShapeShift', [this.props.depositType])} |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
{this.context.t('noDeposits')} |
||||||
|
</div> |
||||||
|
<div |
||||||
|
style={{ |
||||||
|
fontSize: 'x-small', |
||||||
|
color: '#ABA9AA', |
||||||
|
width: '100%', |
||||||
|
}} |
||||||
|
> |
||||||
|
{formatDate(this.props.time)} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
) |
||||||
|
|
||||||
|
case 'received': |
||||||
|
return ( |
||||||
|
<div |
||||||
|
className="flex-column" |
||||||
|
style={{ |
||||||
|
width: '200px', |
||||||
|
overflow: 'hidden', |
||||||
|
}} |
||||||
|
> |
||||||
|
<div |
||||||
|
style={{ |
||||||
|
fontSize: 'x-small', |
||||||
|
color: '#ABA9AA', |
||||||
|
width: '100%', |
||||||
|
}} |
||||||
|
> |
||||||
|
{this.context.t('toETHviaShapeShift', [this.props.depositType])} |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
{this.context.t('conversionProgress')} |
||||||
|
</div> |
||||||
|
<div |
||||||
|
style={{ |
||||||
|
fontSize: 'x-small', |
||||||
|
color: '#ABA9AA', |
||||||
|
width: '100%', |
||||||
|
}} |
||||||
|
> |
||||||
|
{formatDate(this.props.time)} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
) |
||||||
|
|
||||||
|
case 'complete': |
||||||
|
const url = explorerLink(this.props.response.transaction, parseInt('1')) |
||||||
|
return ( |
||||||
|
<div |
||||||
|
className="flex-column pointer" |
||||||
|
style={{ |
||||||
|
width: '200px', |
||||||
|
overflow: 'hidden', |
||||||
|
}} |
||||||
|
onClick={() => global.platform.openWindow({ url })} |
||||||
|
> |
||||||
|
<div |
||||||
|
style={{ |
||||||
|
fontSize: 'x-small', |
||||||
|
color: '#ABA9AA', |
||||||
|
width: '100%', |
||||||
|
}} |
||||||
|
> |
||||||
|
{this.context.t('fromShapeShift')} |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
{formatDate(this.props.time)} |
||||||
|
</div> |
||||||
|
<div |
||||||
|
style={{ |
||||||
|
fontSize: 'x-small', |
||||||
|
color: '#ABA9AA', |
||||||
|
width: '100%', |
||||||
|
}} |
||||||
|
> |
||||||
|
{addressSummary(this.props.response.transaction)} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
) |
||||||
|
|
||||||
|
case 'failed': |
||||||
|
return ( |
||||||
|
<span className="error"> |
||||||
|
{`(${this.context.t('failed')})`} |
||||||
|
</span> |
||||||
|
) |
||||||
|
|
||||||
|
default: |
||||||
|
return '' |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
render () { |
||||||
|
return ( |
||||||
|
<div |
||||||
|
className="transaction-list-item tx-list-clickable" |
||||||
|
style={{ |
||||||
|
paddingTop: '20px', |
||||||
|
paddingBottom: '20px', |
||||||
|
justifyContent: 'space-around', |
||||||
|
alignItems: 'center', |
||||||
|
flexDirection: 'row', |
||||||
|
}} |
||||||
|
> |
||||||
|
<div |
||||||
|
style={{ |
||||||
|
width: '0px', |
||||||
|
position: 'relative', |
||||||
|
bottom: '19px', |
||||||
|
}} |
||||||
|
> |
||||||
|
<img |
||||||
|
src="https://shapeshift.io/logo.png" |
||||||
|
alt="" |
||||||
|
style={{ |
||||||
|
height: '35px', |
||||||
|
width: '132px', |
||||||
|
position: 'absolute', |
||||||
|
clip: 'rect(0px,30px,34px,0px)', |
||||||
|
}} |
||||||
|
/> |
||||||
|
</div> |
||||||
|
{this.renderInfo()} |
||||||
|
{this.renderUtilComponents()} |
||||||
|
</div> |
||||||
|
) |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
import {connect} from 'react-redux' |
||||||
|
import ShiftListItem from './shift-list-item.component' |
||||||
|
|
||||||
|
function mapStateToProps (state) { |
||||||
|
return { |
||||||
|
selectedAddress: state.metamask.selectedAddress, |
||||||
|
conversionRate: state.metamask.conversionRate, |
||||||
|
currentCurrency: state.metamask.currentCurrency, |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
export default connect(mapStateToProps)(ShiftListItem) |
Loading…
Reference in new issue