Signer.js 3.61 KiB
Newer Older
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
// This file is part of Parity.
//
Amaury Martiny's avatar
Amaury Martiny committed
// SPDX-License-Identifier: BSD-3-Clause
Amaury Martiny's avatar
Amaury Martiny committed
import React, { Component } from 'react';
import { Field, Form } from 'react-final-form';
import { Form as FetherForm, Header } from 'fether-ui';
import { inject, observer } from 'mobx-react';
import { Link, Redirect } from 'react-router-dom';
import { withProps } from 'recompose';
Amaury Martiny's avatar
Amaury Martiny committed
import TokenBalance from '../../Tokens/TokensList/TokenBalance';
import withAccount from '../../utils/withAccount.js';
import withTokens from '../../utils/withTokens';
Amaury Martiny's avatar
Amaury Martiny committed
@inject('sendStore')
@withAccount
Amaury Martiny's avatar
Amaury Martiny committed
@withTokens
Axel Chalon's avatar
Axel Chalon committed
@withProps(({ match: { params: { tokenAddress } }, tokens }) => ({
  token: tokens[tokenAddress]
@observer
class Signer extends Component {
  handleAccept = values => {
Axel Chalon's avatar
Axel Chalon committed
    const { accountAddress, history, sendStore, token } = this.props;
    return sendStore
Amaury Martiny's avatar
Amaury Martiny committed
      .send(token, values.password)
Axel Chalon's avatar
Axel Chalon committed
      .then(() =>
        history.push(`/send/${token.address}/from/${accountAddress}/sent`)
Axel Chalon's avatar
Axel Chalon committed
      )
      .catch(error => ({
Amaury Martiny's avatar
Amaury Martiny committed
        password: error.text
Amaury Martiny's avatar
Amaury Martiny committed
  render () {
      accountAddress,
      sendStore: { tx },
      token
    } = this.props;

    if (!tx || !token) {
Amaury Martiny's avatar
Amaury Martiny committed
      return <Redirect to='/' />;
Amaury Martiny's avatar
Amaury Martiny committed
      <div>
        <Header
          left={
Amaury Martiny's avatar
Amaury Martiny committed
            <Link to={`/tokens/${accountAddress}`} className='icon -close'>
              Close
Amaury Martiny's avatar
Amaury Martiny committed
            </Link>
          title={token && <h1>Send {token.name}</h1>}
Amaury Martiny's avatar
Amaury Martiny committed
        <div className='window_content'>
          <div className='box -padded'>
            <TokenBalance
              drawers={[
Amaury Martiny's avatar
Amaury Martiny committed
                <div key='txForm'>
                  <FetherForm.Field
Amaury Martiny's avatar
Amaury Martiny committed
                    className='form_field_value'
                    disabled
                    defaultValue={`${tx.amount} ${token.symbol}`}
Amaury Martiny's avatar
Amaury Martiny committed
                    label='Amount'
                  />

                  <FetherForm.Field
Amaury Martiny's avatar
Amaury Martiny committed
                    as='textarea'
                    className='form_field_value'
                    disabled
                    defaultValue={tx.to}
Amaury Martiny's avatar
Amaury Martiny committed
                    label='To'
                </div>,
Amaury Martiny's avatar
Amaury Martiny committed
                  key='signerForm'
                  onSubmit={this.handleAccept}
Amaury Martiny's avatar
Amaury Martiny committed
                  render={({ handleSubmit, pristine, submitting }) => (
                    <form onSubmit={handleSubmit}>
Amaury Martiny's avatar
Amaury Martiny committed
                      <div className='text'>
                        <p>Enter your password to confirm this transaction.</p>
                      </div>

                      <Field
Amaury Martiny's avatar
Amaury Martiny committed
                        label='Password'
                        name='password'
                        render={FetherForm.Field}
                        required
Amaury Martiny's avatar
Amaury Martiny committed
                        type='password'
Amaury Martiny's avatar
Amaury Martiny committed
                      <nav className='form-nav -binary'>
Amaury Martiny's avatar
Amaury Martiny committed
                          className='button -cancel'
                          onClick={history.goBack}
Amaury Martiny's avatar
Amaury Martiny committed
                          type='button'
Amaury Martiny's avatar
Amaury Martiny committed
                          className='button -submit'
Amaury Martiny's avatar
Amaury Martiny committed
                          disabled={pristine || submitting}
                        >
                          Confirm transaction
                        </button>
                      </nav>
                    </form>
                  )}
                />
              ]}
              onClick={null}
              token={token}
            />
Amaury Martiny's avatar
Amaury Martiny committed
        </div>
export default Signer;