public/components/CapiStats/CapiStats.react.js (100 lines of code) (raw):

import React from 'react'; import moment from 'moment'; import {getByTag} from '../../util/capiClient.js'; export default class CapiStats extends React.Component { constructor(props) { super(props); this.state = { dayUses: undefined, prevDayUses: undefined, weekUses: undefined, prevWeekUses: undefined, totalUses: undefined }; } componentDidMount() { this.fetchUseStats(); } fetchUseStats() { const CAPI_DATE_FORMAT = 'YYYY-MM-DDTHH:mm:ss'; const today = moment().subtract(1, 'days').format(CAPI_DATE_FORMAT); const yesterday = moment().subtract(2, 'days').format(CAPI_DATE_FORMAT); const thisweek = moment().subtract(7, 'days').format(CAPI_DATE_FORMAT); const lastweek = moment().subtract(14, 'days').format(CAPI_DATE_FORMAT); getByTag(this.props.tag, { 'from-date': today, 'page-size': 0 }).then(res => { this.setState({ dayUses: res.response.total }); }); getByTag(this.props.tag, { 'from-date': thisweek, 'page-size': 0 }).then(res => { this.setState({ weekUses: res.response.total }); }); getByTag(this.props.tag, { 'from-date': yesterday, 'to-date': today, 'page-size': 0 }).then(res => { this.setState({ prevDayUses: res.response.total }); }); getByTag(this.props.tag, { 'from-date': lastweek, 'to-date': thisweek, 'page-size': 0 }).then(res => { this.setState({ prevWeekUses: res.response.total }); }); getByTag(this.props.tag, { 'page-size': 0 }).then(res => { this.setState({ totalUses: res.response.total }); }); } render () { var dayclass = 'capi-stats__stat__arrow'; if (this.state.dayUses > this.state.prevDayUses) { dayclass += '--increase'; } else if (this.state.dayUses < this.state.prevDayUses) { dayclass += '--decrease'; } var weekclass = 'capi-stats__stat__arrow'; if (this.state.weekUses > this.state.prevWeekUses) { weekclass += '--increase'; } else if (this.state.weekUses < this.state.prevWeekUses) { weekclass += '--decrease'; } return ( <div className="capi-stats"> <div className="capi-stats__header">CAPI Stats</div> <div className="capi-stats__stat"> <div className="capi-stats__stat__header">Last 24 Hours</div> <div className="capi-stats__stat__value"> {this.state.dayUses !== undefined ? this.state.dayUses : '...'} <span className={dayclass} title={'Previous 24hrs: ' + this.state.prevDayUses}></span> </div> </div> <div className="capi-stats__stat"> <div className="capi-stats__stat__header">This week</div> <div className="capi-stats__stat__value"> {this.state.weekUses !== undefined ? this.state.weekUses : '...'} <span className={weekclass} title={'Previous Week: ' + this.state.prevWeekUses}></span> </div> </div> <div className="capi-stats__stat"> <div className="capi-stats__stat__header">Total uses</div> <div className="capi-stats__stat__value">{this.state.totalUses !== undefined ? this.state.totalUses : '...'}</div> </div> </div> ); } }