// Copyright 2015-2018 Parity Technologies (UK) Ltd.
// This file is part of Parity.
//
// SPDX-License-Identifier: BSD-3-Clause
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { inject, observer } from 'mobx-react';
import { chainName$, withoutLoading } from '@parity/light.js';
import light from '@parity/light.js-react';
import { withProps } from 'recompose';
import { Modal } from 'fether-ui';
import RequireHealthOverlay from '../../RequireHealthOverlay';
import check from '../../assets/img/icons/check.svg';
import loading from '../../assets/img/icons/loading.svg';
import withTokens from '../../utils/withTokens';
import { blockscoutTxUrl } from '../../utils/blockscout';
// Number of confirmations to consider a transaction successful
const MIN_CONFIRMATIONS = 6;
@light({
chainName: () => chainName$().pipe(withoutLoading())
})
@inject('sendStore')
@withTokens
@withProps(({ match: { params: { tokenAddress } }, tokens }) => ({
token: tokens[tokenAddress]
}))
@observer
class Sent extends Component {
static propTypes = {
chainName: PropTypes.string,
sendStore: PropTypes.object,
token: PropTypes.object
};
componentWillMount () {
// If we refresh on this page, return to homepage
if (!this.props.sendStore.txStatus) {
this.handleGoToHomepage();
}
}
handleGoToHomepage = () => {
const { history, sendStore } = this.props;
sendStore.clear();
history.push('/');
};
render () {
return (
);
}
renderDescription = () => {
const {
sendStore: { confirmations, txStatus }
} = this.props;
if (!txStatus) {
return '';
}
if (confirmations >= MIN_CONFIRMATIONS) {
return null;
}
if (confirmations > 0) {
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;
if (confirmations >= MIN_CONFIRMATIONS) {
return check;
}
return loading;
};
renderTitle = () => {
const {
sendStore: { confirmations, txStatus }
} = this.props;
if (!txStatus) {
return '';
}
if (txStatus.confirmed) {
return (
{confirmations >= MIN_CONFIRMATIONS
? 'Transaction confirmed'
: 'Submitted'}
);
}
if (txStatus.failed) {
return 'Error';
}
return 'Sending your transaction...';
};
renderGoHomepage = () => {
const {
sendStore: { confirmations }
} = this.props;
if (confirmations < MIN_CONFIRMATIONS) {
return;
}
return (
);
};
renderLink = () => {
const {
chainName,
sendStore: { confirmations, txStatus },
token
} = this.props;
if (txStatus && txStatus.confirmed && confirmations >= 0) {
return (
);
}
return null;
};
}
export default Sent;