import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import { Card } from 'react-bootstrap'; export default class Widget extends Component { constructor(props) { super(props) this.state = { title: this.props.title, unit: this.props.unit, icon: this.props.icon, failed: this.props.failed, data: this.props.data } } parseData(title, data) { var returnData = {}; if(title == 'Ping') { returnData.value = parseFloat(data.data.ping).toFixed(1); if(window.config.widgets.show_average) { returnData.avg = parseFloat(data.average.ping).toFixed(1); } if(window.config.widgets.show_max) { returnData.max = parseFloat(data.maximum.ping).toFixed(1); } if(window.config.widgets.show_min) { returnData.min = parseFloat(data.minimum.ping).toFixed(1); } } if(title == 'Upload') { returnData.value = parseFloat(data.data.upload).toFixed(1); if(window.config.widgets.show_average) { returnData.avg = parseFloat(data.average.upload).toFixed(1); } if(window.config.widgets.show_max) { returnData.max = parseFloat(data.maximum.upload).toFixed(1); } if(window.config.widgets.show_min) { returnData.min = parseFloat(data.minimum.upload).toFixed(1); } } if(title == 'Download') { returnData.value = parseFloat(data.data.download).toFixed(1); if(window.config.widgets.show_average) { returnData.avg = parseFloat(data.average.download).toFixed(1); } if(window.config.widgets.show_max) { returnData.max = parseFloat(data.maximum.download).toFixed(1); } if(window.config.widgets.show_min) { returnData.min = parseFloat(data.minimum.download).toFixed(1); } } return returnData; } componentDidUpdate = () => { if(this.props.title != this.state.title || this.props.data != this.state.data || this.props.unit != this.state.unit || this.props.icon != this.state.icon || this.props.failed != this.state.failed) { this.setState({ title: this.props.title, unit: this.props.unit, icon: this.props.icon, failed: this.props.failed, data: this.props.data }); } } render() { var title = this.state.title; var unit = this.state.unit; var icon = this.state.icon; var failed = Boolean(Number(this.state.failed)); var data = this.parseData(title, this.state.data); switch(icon) { case 'ping': icon = ; break; case 'dl': icon = ; break; case 'ul': icon = ; break; } return ( {title} {icon} {(!failed) ? data.value : } {unit} (current) {window.config.widgets.show_average && {data.avg} {unit} (average) } {window.config.widgets.show_max && {data.max} {unit} (maximum) } {window.config.widgets.show_min && {data.min} {unit} (minimum) } ); } } if (document.getElementById('Widget')) { ReactDOM.render(, document.getElementById('Widget')); }
{unit} (current)
{unit} (average)
{unit} (maximum)
{unit} (minimum)