mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-27 21:00:13 +01:00
190 lines
5.6 KiB
JavaScript
190 lines
5.6 KiB
JavaScript
const Component = require('react').Component
|
||
const h = require('react-hyperscript')
|
||
const inherits = require('util').inherits
|
||
const connect = require('react-redux').connect
|
||
const actions = require('../../actions')
|
||
const networkNames = require('../../../../app/scripts/config.js').networkNames
|
||
const ShapeshiftForm = require('../shapeshift-form')
|
||
|
||
const DIRECT_DEPOSIT_ROW_TITLE = 'Directly Deposit Ether'
|
||
const DIRECT_DEPOSIT_ROW_TEXT = `If you already have some Ether, the quickest way to get Ether in
|
||
your new wallet by direct deposit.`
|
||
const COINBASE_ROW_TITLE = 'Buy on Coinbase'
|
||
const COINBASE_ROW_TEXT = `Coinbase is the world’s most popular way to buy and sell bitcoin,
|
||
ethereum, and litecoin.`
|
||
const SHAPESHIFT_ROW_TITLE = 'Deposit with ShapeShift'
|
||
const SHAPESHIFT_ROW_TEXT = `If you own other cryptocurrencies, you can trade and deposit Ether
|
||
directly into your MetaMask wallet. No Account Needed.`
|
||
const FAUCET_ROW_TITLE = 'Test Faucet'
|
||
const facuetRowText = networkName => `Get Ether from a faucet for the ${networkName}`
|
||
|
||
function mapStateToProps (state) {
|
||
return {
|
||
network: state.metamask.network,
|
||
address: state.metamask.selectedAddress,
|
||
}
|
||
}
|
||
|
||
function mapDispatchToProps (dispatch) {
|
||
return {
|
||
toCoinbase: (address) => {
|
||
dispatch(actions.buyEth({ network: '1', address, amount: 0 }))
|
||
},
|
||
hideModal: () => {
|
||
dispatch(actions.hideModal())
|
||
},
|
||
hideWarning: () => {
|
||
dispatch(actions.hideWarning())
|
||
},
|
||
showAccountDetailModal: () => {
|
||
dispatch(actions.showModal({ name: 'ACCOUNT_DETAILS' }))
|
||
},
|
||
toFaucet: network => dispatch(actions.buyEth({ network })),
|
||
}
|
||
}
|
||
|
||
inherits(DepositEtherModal, Component)
|
||
function DepositEtherModal () {
|
||
Component.call(this)
|
||
|
||
this.state = {
|
||
buyingWithShapeshift: false,
|
||
}
|
||
}
|
||
|
||
module.exports = connect(mapStateToProps, mapDispatchToProps)(DepositEtherModal)
|
||
|
||
DepositEtherModal.prototype.renderRow = function ({
|
||
logo,
|
||
title,
|
||
text,
|
||
buttonLabel,
|
||
onButtonClick,
|
||
hide,
|
||
className,
|
||
hideButton,
|
||
hideTitle,
|
||
onBackClick,
|
||
showBackButton,
|
||
}) {
|
||
if (hide) {
|
||
return null
|
||
}
|
||
|
||
return h('div', {
|
||
className: className || 'deposit-ether-modal__buy-row',
|
||
}, [
|
||
|
||
onBackClick && showBackButton && h('div.deposit-ether-modal__buy-row__back', {
|
||
onClick: onBackClick,
|
||
}, [
|
||
|
||
h('i.fa.fa-arrow-left.cursor-pointer'),
|
||
|
||
]),
|
||
|
||
h('div.deposit-ether-modal__buy-row__logo', [logo]),
|
||
|
||
h('div.deposit-ether-modal__buy-row__description', [
|
||
|
||
!hideTitle && h('div.deposit-ether-modal__buy-row__description__title', [title]),
|
||
|
||
h('div.deposit-ether-modal__buy-row__description__text', [text]),
|
||
|
||
]),
|
||
|
||
!hideButton && h('div.deposit-ether-modal__buy-row__button', [
|
||
h('button.deposit-ether-modal__deposit-button', {
|
||
onClick: onButtonClick,
|
||
}, [buttonLabel]),
|
||
]),
|
||
|
||
])
|
||
}
|
||
|
||
DepositEtherModal.prototype.render = function () {
|
||
const { network, toCoinbase, address, toFaucet } = this.props
|
||
const { buyingWithShapeshift } = this.state
|
||
|
||
const isTestNetwork = ['3', '4', '42'].find(n => n === network)
|
||
const networkName = networkNames[network]
|
||
|
||
return h('div.deposit-ether-modal', {}, [
|
||
|
||
h('div.deposit-ether-modal__header', [
|
||
|
||
h('div.deposit-ether-modal__header__title', ['Deposit Ether']),
|
||
|
||
h('div.deposit-ether-modal__header__description', [
|
||
'To interact with decentralized applications using MetaMask, you’ll need Ether in your wallet.',
|
||
]),
|
||
|
||
h('div.deposit-ether-modal__header__close', {
|
||
onClick: () => {
|
||
this.setState({ buyingWithShapeshift: false })
|
||
this.props.hideWarning()
|
||
this.props.hideModal()
|
||
},
|
||
}),
|
||
|
||
]),
|
||
|
||
h('div.deposit-ether-modal__buy-rows', [
|
||
|
||
this.renderRow({
|
||
logo: h('img.deposit-ether-modal__buy-row__eth-logo', { src: '../../../images/eth_logo.svg' }),
|
||
title: DIRECT_DEPOSIT_ROW_TITLE,
|
||
text: DIRECT_DEPOSIT_ROW_TEXT,
|
||
buttonLabel: 'View Account',
|
||
onButtonClick: () => this.goToAccountDetailsModal(),
|
||
hide: buyingWithShapeshift,
|
||
}),
|
||
|
||
this.renderRow({
|
||
logo: h('i.fa.fa-tint.fa-2x'),
|
||
title: FAUCET_ROW_TITLE,
|
||
text: facuetRowText(networkName),
|
||
buttonLabel: 'Get Ether',
|
||
onButtonClick: () => toFaucet(network),
|
||
hide: !isTestNetwork || buyingWithShapeshift,
|
||
}),
|
||
|
||
this.renderRow({
|
||
logo: h('img.deposit-ether-modal__buy-row__coinbase-logo', {
|
||
src: '../../../images/coinbase logo.png',
|
||
}),
|
||
title: COINBASE_ROW_TITLE,
|
||
text: COINBASE_ROW_TEXT,
|
||
buttonLabel: 'Continue to Coinbase',
|
||
onButtonClick: () => toCoinbase(address),
|
||
hide: isTestNetwork || buyingWithShapeshift,
|
||
}),
|
||
|
||
this.renderRow({
|
||
logo: h('img.deposit-ether-modal__buy-row__shapeshift-logo', {
|
||
src: '../../../images/shapeshift logo.png',
|
||
}),
|
||
title: SHAPESHIFT_ROW_TITLE,
|
||
text: SHAPESHIFT_ROW_TEXT,
|
||
buttonLabel: 'Buy with Shapeshift',
|
||
onButtonClick: () => this.setState({ buyingWithShapeshift: true }),
|
||
hide: isTestNetwork,
|
||
hideButton: buyingWithShapeshift,
|
||
hideTitle: buyingWithShapeshift,
|
||
onBackClick: () => this.setState({ buyingWithShapeshift: false }),
|
||
showBackButton: this.state.buyingWithShapeshift,
|
||
className: buyingWithShapeshift && 'deposit-ether-modal__buy-row__shapeshift-buy',
|
||
}),
|
||
|
||
buyingWithShapeshift && h(ShapeshiftForm),
|
||
|
||
]),
|
||
])
|
||
}
|
||
|
||
DepositEtherModal.prototype.goToAccountDetailsModal = function () {
|
||
this.props.hideWarning()
|
||
this.props.hideModal()
|
||
this.props.showAccountDetailModal()
|
||
}
|