parent
a257a73172
commit
313def1ce2
@ -1,40 +0,0 @@ |
|||||||
const Component = require('react').Component |
|
||||||
const h = require('react-hyperscript') |
|
||||||
const inherits = require('util').inherits |
|
||||||
const connect = require('react-redux').connect |
|
||||||
const actions = require('../../../store/actions') |
|
||||||
const QrView = require('../../ui/qr-code') |
|
||||||
const AccountModalContainer = require('./account-modal-container') |
|
||||||
|
|
||||||
function mapStateToProps (state) { |
|
||||||
return { |
|
||||||
Qr: state.appState.modal.modalState.props.Qr, |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function mapDispatchToProps (dispatch) { |
|
||||||
return { |
|
||||||
hideModal: () => { |
|
||||||
dispatch(actions.hideModal()) |
|
||||||
}, |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
inherits(ShapeshiftDepositTxModal, Component) |
|
||||||
function ShapeshiftDepositTxModal () { |
|
||||||
Component.call(this) |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
module.exports = connect(mapStateToProps, mapDispatchToProps)(ShapeshiftDepositTxModal) |
|
||||||
|
|
||||||
ShapeshiftDepositTxModal.prototype.render = function () { |
|
||||||
const { Qr } = this.props |
|
||||||
|
|
||||||
return h(AccountModalContainer, { |
|
||||||
}, [ |
|
||||||
h('div', {}, [ |
|
||||||
h(QrView, {key: 'qr', Qr}), |
|
||||||
]), |
|
||||||
]) |
|
||||||
} |
|
@ -1,256 +0,0 @@ |
|||||||
const h = require('react-hyperscript') |
|
||||||
const inherits = require('util').inherits |
|
||||||
const PropTypes = require('prop-types') |
|
||||||
const Component = require('react').Component |
|
||||||
const connect = require('react-redux').connect |
|
||||||
const classnames = require('classnames') |
|
||||||
const qrcode = require('qrcode-generator') |
|
||||||
const { shapeShiftSubview, pairUpdate, buyWithShapeShift } = require('../../store/actions') |
|
||||||
const { isValidAddress } = require('../../helpers/utils/util') |
|
||||||
const SimpleDropdown = require('./dropdowns/simple-dropdown') |
|
||||||
|
|
||||||
import Button from '../ui/button' |
|
||||||
|
|
||||||
function mapStateToProps (state) { |
|
||||||
const { |
|
||||||
coinOptions, |
|
||||||
tokenExchangeRates, |
|
||||||
selectedAddress, |
|
||||||
} = state.metamask |
|
||||||
const { warning } = state.appState |
|
||||||
|
|
||||||
return { |
|
||||||
coinOptions, |
|
||||||
tokenExchangeRates, |
|
||||||
selectedAddress, |
|
||||||
warning, |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function mapDispatchToProps (dispatch) { |
|
||||||
return { |
|
||||||
shapeShiftSubview: () => dispatch(shapeShiftSubview()), |
|
||||||
pairUpdate: coin => dispatch(pairUpdate(coin)), |
|
||||||
buyWithShapeShift: data => dispatch(buyWithShapeShift(data)), |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
ShapeshiftForm.contextTypes = { |
|
||||||
t: PropTypes.func, |
|
||||||
} |
|
||||||
|
|
||||||
module.exports = connect(mapStateToProps, mapDispatchToProps)(ShapeshiftForm) |
|
||||||
|
|
||||||
|
|
||||||
inherits(ShapeshiftForm, Component) |
|
||||||
function ShapeshiftForm () { |
|
||||||
Component.call(this) |
|
||||||
|
|
||||||
this.state = { |
|
||||||
depositCoin: 'btc', |
|
||||||
refundAddress: '', |
|
||||||
showQrCode: false, |
|
||||||
depositAddress: '', |
|
||||||
errorMessage: '', |
|
||||||
isLoading: false, |
|
||||||
bought: false, |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
ShapeshiftForm.prototype.getCoinPair = function () { |
|
||||||
return `${this.state.depositCoin.toUpperCase()}_ETH` |
|
||||||
} |
|
||||||
|
|
||||||
ShapeshiftForm.prototype.componentWillMount = function () { |
|
||||||
this.props.shapeShiftSubview() |
|
||||||
} |
|
||||||
|
|
||||||
ShapeshiftForm.prototype.onCoinChange = function (coin) { |
|
||||||
this.setState({ |
|
||||||
depositCoin: coin, |
|
||||||
errorMessage: '', |
|
||||||
}) |
|
||||||
this.props.pairUpdate(coin) |
|
||||||
} |
|
||||||
|
|
||||||
ShapeshiftForm.prototype.onBuyWithShapeShift = function () { |
|
||||||
this.setState({ |
|
||||||
isLoading: true, |
|
||||||
showQrCode: true, |
|
||||||
}) |
|
||||||
|
|
||||||
const { |
|
||||||
buyWithShapeShift, |
|
||||||
selectedAddress: withdrawal, |
|
||||||
} = this.props |
|
||||||
const { |
|
||||||
refundAddress: returnAddress, |
|
||||||
depositCoin, |
|
||||||
} = this.state |
|
||||||
const pair = `${depositCoin}_eth` |
|
||||||
const data = { |
|
||||||
withdrawal, |
|
||||||
pair, |
|
||||||
returnAddress, |
|
||||||
// Public api key
|
|
||||||
'apiKey': '803d1f5df2ed1b1476e4b9e6bcd089e34d8874595dda6a23b67d93c56ea9cc2445e98a6748b219b2b6ad654d9f075f1f1db139abfa93158c04e825db122c14b6', |
|
||||||
} |
|
||||||
|
|
||||||
if (isValidAddress(withdrawal)) { |
|
||||||
buyWithShapeShift(data) |
|
||||||
.then(d => this.setState({ |
|
||||||
showQrCode: true, |
|
||||||
depositAddress: d.deposit, |
|
||||||
isLoading: false, |
|
||||||
})) |
|
||||||
.catch(() => this.setState({ |
|
||||||
showQrCode: false, |
|
||||||
errorMessage: this.context.t('invalidRequest'), |
|
||||||
isLoading: false, |
|
||||||
})) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
ShapeshiftForm.prototype.renderMetadata = function (label, value) { |
|
||||||
return h('div', {className: 'shapeshift-form__metadata-wrapper'}, [ |
|
||||||
|
|
||||||
h('div.shapeshift-form__metadata-label', {}, [ |
|
||||||
h('span', `${label}:`), |
|
||||||
]), |
|
||||||
|
|
||||||
h('div.shapeshift-form__metadata-value', {}, [ |
|
||||||
h('span', value), |
|
||||||
]), |
|
||||||
|
|
||||||
]) |
|
||||||
} |
|
||||||
|
|
||||||
ShapeshiftForm.prototype.renderMarketInfo = function () { |
|
||||||
const { tokenExchangeRates } = this.props |
|
||||||
const { |
|
||||||
limit, |
|
||||||
rate, |
|
||||||
minimum, |
|
||||||
} = tokenExchangeRates[this.getCoinPair()] || {} |
|
||||||
|
|
||||||
return h('div.shapeshift-form__metadata', {}, [ |
|
||||||
|
|
||||||
this.renderMetadata(this.context.t('status'), limit ? this.context.t('available') : this.context.t('unavailable')), |
|
||||||
this.renderMetadata(this.context.t('limit'), limit), |
|
||||||
this.renderMetadata(this.context.t('exchangeRate'), rate), |
|
||||||
this.renderMetadata(this.context.t('min'), minimum), |
|
||||||
|
|
||||||
]) |
|
||||||
} |
|
||||||
|
|
||||||
ShapeshiftForm.prototype.renderQrCode = function () { |
|
||||||
const { depositAddress, isLoading, depositCoin } = this.state |
|
||||||
const qrImage = qrcode(4, 'M') |
|
||||||
qrImage.addData(depositAddress) |
|
||||||
qrImage.make() |
|
||||||
|
|
||||||
return h('div.shapeshift-form', {}, [ |
|
||||||
|
|
||||||
h('div.shapeshift-form__deposit-instruction', [ |
|
||||||
this.context.t('depositCoin', [depositCoin.toUpperCase()]), |
|
||||||
]), |
|
||||||
|
|
||||||
h('div', depositAddress), |
|
||||||
|
|
||||||
h('div.shapeshift-form__qr-code', [ |
|
||||||
isLoading |
|
||||||
? h('img', { |
|
||||||
src: 'images/loading.svg', |
|
||||||
style: { width: '60px'}, |
|
||||||
}) |
|
||||||
: h('div', { |
|
||||||
dangerouslySetInnerHTML: { __html: qrImage.createTableTag(4) }, |
|
||||||
}), |
|
||||||
]), |
|
||||||
|
|
||||||
this.renderMarketInfo(), |
|
||||||
|
|
||||||
]) |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
ShapeshiftForm.prototype.render = function () { |
|
||||||
const { coinOptions, btnClass, warning } = this.props |
|
||||||
const { errorMessage, showQrCode, depositAddress } = this.state |
|
||||||
const { tokenExchangeRates } = this.props |
|
||||||
const token = tokenExchangeRates[this.getCoinPair()] |
|
||||||
|
|
||||||
return h('div.shapeshift-form-wrapper', [ |
|
||||||
showQrCode |
|
||||||
? this.renderQrCode() |
|
||||||
: h('div.modal-shapeshift-form', [ |
|
||||||
h('div.shapeshift-form__selectors', [ |
|
||||||
|
|
||||||
h('div.shapeshift-form__selector', [ |
|
||||||
|
|
||||||
h('div.shapeshift-form__selector-label', this.context.t('deposit')), |
|
||||||
|
|
||||||
h(SimpleDropdown, { |
|
||||||
selectedOption: this.state.depositCoin, |
|
||||||
onSelect: (coin) => this.onCoinChange(coin), |
|
||||||
options: Object.entries(coinOptions).map(([coin]) => ({ |
|
||||||
value: coin.toLowerCase(), |
|
||||||
displayValue: coin, |
|
||||||
})), |
|
||||||
}), |
|
||||||
|
|
||||||
]), |
|
||||||
|
|
||||||
h('div.icon.shapeshift-form__caret', { |
|
||||||
style: { backgroundImage: 'url(images/caret-right.svg)'}, |
|
||||||
}), |
|
||||||
|
|
||||||
h('div.shapeshift-form__selector', [ |
|
||||||
|
|
||||||
h('div.shapeshift-form__selector-label', [ |
|
||||||
this.context.t('receive'), |
|
||||||
]), |
|
||||||
|
|
||||||
h('div.shapeshift-form__selector-input', ['ETH']), |
|
||||||
|
|
||||||
]), |
|
||||||
|
|
||||||
]), |
|
||||||
|
|
||||||
warning && h('div.shapeshift-form__address-input-label', warning), |
|
||||||
|
|
||||||
!warning && h('div', { |
|
||||||
className: classnames('shapeshift-form__address-input-wrapper', { |
|
||||||
'shapeshift-form__address-input-wrapper--error': errorMessage, |
|
||||||
}), |
|
||||||
}, [ |
|
||||||
|
|
||||||
h('div.shapeshift-form__address-input-label', [ |
|
||||||
this.context.t('refundAddress'), |
|
||||||
]), |
|
||||||
|
|
||||||
h('input.shapeshift-form__address-input', { |
|
||||||
type: 'text', |
|
||||||
onChange: e => this.setState({ |
|
||||||
refundAddress: e.target.value, |
|
||||||
errorMessage: '', |
|
||||||
}), |
|
||||||
}), |
|
||||||
|
|
||||||
h('divshapeshift-form__address-input-error-message', [errorMessage]), |
|
||||||
]), |
|
||||||
|
|
||||||
!warning && this.renderMarketInfo(), |
|
||||||
|
|
||||||
]), |
|
||||||
|
|
||||||
!depositAddress && h(Button, { |
|
||||||
type: 'secondary', |
|
||||||
large: true, |
|
||||||
className: `${btnClass} shapeshift-form__shapeshift-buy-btn`, |
|
||||||
disabled: !token, |
|
||||||
onClick: () => this.onBuyWithShapeShift(), |
|
||||||
}, [this.context.t('buy')]), |
|
||||||
|
|
||||||
]) |
|
||||||
} |
|
Loading…
Reference in new issue