Health.js 1.85 KiB
Newer Older
Amaury Martiny's avatar
Amaury Martiny committed
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
// This file is part of Parity.
//
// SPDX-License-Identifier: MIT

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()}
Amaury Martiny's avatar
Amaury Martiny committed
        </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 = () => {
    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 = () => {
    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';
      case STATUS.RUNNING:
        return 'Running...';
      case STATUS.SYNCING:
        return `Syncing...${payload.percentage
          ? ` (${payload.percentage}%)`
          : ''}`;
      default:
        return JSON.stringify(payload); // Just in case payload is an object
    }
  };
Amaury Martiny's avatar
Amaury Martiny committed
}

export default Health;