Sent.js 2.58 KiB
Newer Older
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
// This file is part of Parity.
//
// SPDX-License-Identifier: MIT

import React, { Component } from 'react';
import { chainName$ } from '@parity/light.js';
import { inject, observer } from 'mobx-react';
import light from 'light-hoc';
Amaury Martiny's avatar
Amaury Martiny committed
import { Link } from 'react-router-dom';

import check from '../../assets/img/icons/check.svg';
import loading from '../../assets/img/icons/loading.svg';

Amaury Martiny's avatar
Amaury Martiny committed
// Number of confirmations to consider a transaction successful
const MIN_CONFIRMATIONS = 6;

  chainName: chainName$
})
@inject('sendStore')
@observer
class Sent extends Component {
  render () {
    return (
      <div className='window_content'>
        <div className='alert-screen'>
          <div className='alert-screen_content'>
            <div className='alert-screen_image'>
              <img alt='loading' src={this.renderIcon()} />
            </div>
            <div className='alert-screen_text'>
              <h1>{this.renderTitle()}</h1>
              <p>{this.renderDescription()}</p>
Amaury Martiny's avatar
Amaury Martiny committed
            </div>
          </div>
        </div>
      </div>
    );
  }

  renderDescription = () => {
    const {
      sendStore: { confirmations, txStatus }
    } = this.props;

Amaury Martiny's avatar
Amaury Martiny committed
    if (confirmations >= MIN_CONFIRMATIONS) {
      return (
        <Link to='/'>
          <button className='button'>Go back</button>
        </Link>
      );
    }

    if (confirmations > 0) {
Amaury Martiny's avatar
Amaury Martiny committed
      return `Waiting ${confirmations}/${MIN_CONFIRMATIONS} confirmations`;
    if (txStatus.confirmed) {
      return 'Waiting for confirmations...';
    }

    if (txStatus.failed) {
      return JSON.stringify(txStatus.failed);
    }

    return null;
  };

  renderIcon = () => {
    const {
      sendStore: { confirmations }
    } = this.props;
Amaury Martiny's avatar
Amaury Martiny committed
    if (confirmations >= MIN_CONFIRMATIONS) {
      return check;
    }
    return loading;
  };

  renderTitle = () => {
    const {
      chainName,
Amaury Martiny's avatar
Amaury Martiny committed
      sendStore: { confirmations, txStatus }
    } = this.props;

    if (txStatus.confirmed) {
      return (
        <span>
Amaury Martiny's avatar
Amaury Martiny committed
          {confirmations >= MIN_CONFIRMATIONS
            ? 'Confirmed on the '
            : 'Submitted to the '}
Amaury Martiny's avatar
Amaury Martiny committed
            className='text -underline'
            href={`https://${
              chainName === 'foundation' ? '' : `${chainName}.`
            }etherscan.io/tx/${txStatus.confirmed.transactionHash}`}
            target='_blank'
          >
Amaury Martiny's avatar
Amaury Martiny committed
            blockchain
    }

    if (txStatus.failed) {
      return 'Error';
    }

    return 'Sending your transaction...';
  };
}

export default Sent;