import React from 'react'; import ReactDOM from 'react-dom'; import ClientDataStore from '../../stores/ClientDataStore'; import EventTypes from '../../constants/EventTypes'; import format from '../../util/formatData'; import Icon from '../icons/Icon'; import LineChart from './LineChart'; const methodsToBind = [ 'onTransferDataRequestError', 'onTransferDataRequestSuccess' ]; class ClientStats extends React.Component { constructor() { super(); this.state = { sidebarWidth: 0, transferDataRequestError: false, transferDataRequestSuccess: false }; methodsToBind.forEach((method) => { this[method] = this[method].bind(this); }); } componentDidMount() { this.setState({ sidebarWidth: ReactDOM.findDOMNode(this).offsetWidth }); ClientDataStore.listen( EventTypes.CLIENT_TRANSFER_DATA_REQUEST_SUCCESS, this.onTransferDataRequestSuccess ); ClientDataStore.fetchTransferData(); } componentWillUnmount() { ClientDataStore.unlisten( EventTypes.CLIENT_TRANSFER_DATA_REQUEST_SUCCESS, this.onTransferDataRequestSuccess ); } onTransferDataRequestError() { this.setState({ transferDataRequestError: true, transferDataRequestSuccess: false }); } onTransferDataRequestSuccess() { this.setState({ transferDataRequestError: false, transferDataRequestSuccess: true }); } render() { if (this.state.transferDataRequestError) { return
Error
; } else if (!this.state.transferDataRequestSuccess) { return
Loading
; } let transferRate = ClientDataStore.getTransferRate(); let transferRates = ClientDataStore.getTransferRates(); let transferTotals = ClientDataStore.getTransferTotals(); let uploadRate = format.data(transferRate.upload, '/s'); let uploadTotal = format.data(transferTotals.upload); let downloadRate = format.data(transferRate.download, '/s'); let downloadTotal = format.data(transferTotals.download); return (
{downloadRate.value} {downloadRate.unit}
{downloadTotal.value} {downloadTotal.unit} Downloaded
{uploadRate.value} {uploadRate.unit}
{uploadTotal.value} {uploadTotal.unit} Uploaded
); } } ClientStats.defaultProps = { historyLength: 20 }; export default ClientStats;