// Copyright 2015-2017 Parity Technologies (UK) Ltd. // This file is part of Parity. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Parity is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Parity. If not, see . import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import BigNumber from 'bignumber.js'; import { fromWei } from '@parity/api/util/wei'; import { Checkbox, Form, Input } from '@parity/ui'; import { DoneIcon, ErrorIcon, InfoIcon } from '@parity/ui/Icons'; import { nullableProptype } from '@parity/shared/util/proptypes'; import smsTermsOfService from '~/3rdparty/sms-verification/terms-of-service'; import emailTermsOfService from '~/3rdparty/email-verification/terms-of-service'; import { howSMSVerificationWorks, howEmailVerificationWorks } from '../how-it-works'; import styles from './gatherData.css'; const boolOfError = PropTypes.oneOfType([ PropTypes.bool, PropTypes.instanceOf(Error) ]); export default class GatherData extends Component { static propTypes = { fee: React.PropTypes.instanceOf(BigNumber), fields: PropTypes.array.isRequired, accountHasRequested: nullableProptype(PropTypes.bool.isRequired), isServerRunning: nullableProptype(PropTypes.bool.isRequired), isAbleToRequest: nullableProptype(boolOfError.isRequired), accountIsVerified: nullableProptype(PropTypes.bool.isRequired), method: PropTypes.string.isRequired, setConsentGiven: PropTypes.func.isRequired } render () { const { method, accountIsVerified } = this.props; const termsOfService = method === 'email' ? emailTermsOfService : smsTermsOfService; const howItWorks = method === 'email' ? howEmailVerificationWorks : howSMSVerificationWorks; return (
{ howItWorks } { this.renderServerRunning() } { this.renderFee() } { this.renderCertified() } { this.renderRequested() } { this.renderFields() } { this.renderIfAbleToRequest() } } disabled={ accountIsVerified } onClick={ this.consentOnChange } />
{ termsOfService }
); } renderServerRunning () { const { isServerRunning } = this.props; if (isServerRunning) { return (

); } else if (isServerRunning === false) { return (

); } return (

); } renderFee () { const { fee } = this.props; if (!fee) { return (

Fetching the fee…

); } if (fee.eq(0)) { return (

); } return (

); } renderCertified () { const { accountIsVerified } = this.props; if (accountIsVerified) { return (

); } else if (accountIsVerified === false) { return (

); } return (

); } renderRequested () { const { accountIsVerified, accountHasRequested } = this.props; // If the account is verified, don't show that it has requested verification. if (accountIsVerified) { return null; } if (accountHasRequested) { return (

); } else if (accountHasRequested === false) { return (

); } return (

); } renderFields () { const { accountIsVerified, fields } = this.props; const rendered = fields.map((field, index) => { const onChange = (_, v) => { field.onChange(v); }; const onSubmit = field.onChange; return ( ); }); return (
{rendered}
); } renderIfAbleToRequest () { const { accountIsVerified, isAbleToRequest } = this.props; // If the account is verified, don't show a warning. // If the client is able to send the request, don't show a warning if (accountIsVerified || isAbleToRequest === true) { return null; } if (isAbleToRequest === null) { return (

); } else if (isAbleToRequest) { return (

{ isAbleToRequest.message }

); } } consentOnChange = (_, consentGiven) => { this.props.setConsentGiven(consentGiven); } }