Health.js 2.04 KiB
Newer Older
Amaury Martiny's avatar
Amaury Martiny committed
// 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

Amaury Martiny's avatar
Amaury Martiny committed
import React, { Component } from 'react';
import { inject, observer } from 'mobx-react';
import { STATUS } from '../stores/healthStore';
Amaury Martiny's avatar
Amaury Martiny committed

@inject('healthStore')
@observer
class Health extends Component {
Amaury Martiny's avatar
Amaury Martiny committed
  render () {
Amaury Martiny's avatar
Amaury Martiny committed
    return (
Amaury Martiny's avatar
Amaury Martiny committed
        <span className={['status_icon', this.statusToClassName()].join(' ')}>
          <svg viewBox='0 0 20 20'>
            <circle fill='#DDD' cx='10' cy='10' r='10' />
          </svg>
Amaury Martiny's avatar
Amaury Martiny committed
        </span>
Amaury Martiny's avatar
Amaury Martiny committed
        <span className='status_text'>{this.statusToFriendlyMessage()}</span>
Amaury Martiny's avatar
Amaury Martiny committed
    );
  }
  /**
   * Get className from the status icon from the status enum
   */
Amaury Martiny's avatar
Amaury Martiny committed
  statusToClassName = () => {
Amaury Martiny's avatar
Amaury Martiny committed
    const {
      healthStore: {
        health: { status }
      }
    } = this.props;
Amaury Martiny's avatar
Amaury Martiny committed
    switch (status) {
      case STATUS.GOOD:
Amaury Martiny's avatar
Amaury Martiny committed
        return '-good';
      case STATUS.DOWNLOADING:
      case STATUS.RUNNING:
      case STATUS.SYNCING:
Amaury Martiny's avatar
Amaury Martiny committed
        return '-syncing';
      default:
        return '-bad';
    }
  };

  statusToFriendlyMessage = () => {
Amaury Martiny's avatar
Amaury Martiny committed
    const {
      healthStore: {
        health: { status, payload }
      }
    } = this.props;
    switch (status) {
      case STATUS.CANTCONNECT:
        return "Can't connect to Parity";
      case STATUS.CLOCKNOTSYNC:
        return 'Clock not sync';
      case STATUS.DOWNLOADING:
        return `Downloading... (${payload.percentage}%)`;
      case STATUS.GOOD:
        return 'Synced';
      case STATUS.NOINTERNET:
        return 'No Internet connection';
      case STATUS.NOPEERS:
        return 'Not connected to any peers';
      case STATUS.RUNNING:
        return 'Running...';
      case STATUS.SYNCING:
Amaury Martiny's avatar
Amaury Martiny committed
        return `Syncing...${
Amaury Martiny's avatar
Amaury Martiny committed
          payload && payload.percentage && payload.percentage.gt(0)
            ? ` (${payload.percentage.toFixed(0)}%)`
            : ''
Amaury Martiny's avatar
Amaury Martiny committed
        }`;
      default:
        return JSON.stringify(payload); // Just in case payload is an object
    }
  };
Amaury Martiny's avatar
Amaury Martiny committed
}

export default Health;