aboutsummaryrefslogblamecommitdiffstats
path: root/ui/app/components/modals/deposit-ether-modal.js
blob: 6c593e4e551c4589b4165577da890d64c3f9471b (plain) (tree)
1
2
3
4
5
6
7
8
9






                                                                              
                                  
 






                                                                


                                               















                                                                    


                                     




























                                                                                
                 








                                                             
                                                                                  




































                                                                                         
                                                                       

                                                         
                               




                                                        
                                  











                                                                                                       
                                      







                                                            
                                   









                                                                    
                                             









                                                                      
                                        




                                                                           
                                                        









                                                                                          
                          


                                     
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 t = require('../../../i18n')

const DIRECT_DEPOSIT_ROW_TITLE = t('directDepositEther')
const DIRECT_DEPOSIT_ROW_TEXT = t('directDepositEtherExplainer')
const COINBASE_ROW_TITLE = t('buyCoinbase')
const COINBASE_ROW_TEXT = t('buyCoinbaseExplainer')
const SHAPESHIFT_ROW_TITLE = t('depositShapeShift')
const SHAPESHIFT_ROW_TEXT = t('depositShapeShiftExplainer')
const FAUCET_ROW_TITLE = t('testFaucet')
const facuetRowText = (networkName) => {
  return t('getEtherFromFaucet', [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', [t('depositEther')]),

      h('div.deposit-ether-modal__header__description', [
        t('needEtherInWallet'),
      ]),

      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: t('viewAccount'),
        onButtonClick: () => this.goToAccountDetailsModal(),
        hide: buyingWithShapeshift,
      }),

      this.renderRow({
        logo: h('i.fa.fa-tint.fa-2x'),
        title: FAUCET_ROW_TITLE,
        text: facuetRowText(networkName),
        buttonLabel: t('getEther'),
        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: t('continueToCoinbase'),
        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: t('shapeshiftBuy'),
        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()
}