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')); }