Signer.js 3.63 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 { consumeTokens } from "../../contexts/TokensContext.js";
import TokenBalance from "../../Tokens/TokensList/TokenBalance";
import withAccount from "../../utils/withAccount.js";
Amaury Martiny's avatar
Amaury Martiny committed
@inject("sendStore")
@withAccount
Axel Chalon's avatar
Axel Chalon committed
@consumeTokens
@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;