aboutsummaryrefslogblamecommitdiffstats
path: root/ui/app/components/modals/deposit-ether-modal.js
blob: 7547dbcf55685cc0f4a3026e42ba4cca9dcf33c2 (plain) (tree)


































                                                                                                 


                                     




























                                                                                
                 








                                                             
                                                                                  













































                                                                                                          
                                  
















































                                                                                                       
                                                        









                                                                                          
                          


                                     
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()
}