fathom/assets/js/components/CountWidget.js

70 lines
1.5 KiB
JavaScript
Raw Normal View History

'use strict';
import { h, render, Component } from 'preact';
import * as numbers from '../lib/numbers.js';
import Client from '../lib/client.js';
2018-05-01 14:06:17 +00:00
import { bind } from 'decko';
function getSundayOfCurrentWeek(d){
var day = d.getDay();
return new Date(d.getFullYear(), d.getMonth(), d.getDate() + (day == 0?0:7)-day );
}
const dayInSeconds = 60 * 60 * 24;
class CountWidget extends Component {
constructor(props) {
super(props)
this.state = {
2018-05-01 14:06:17 +00:00
value: '-',
loading: false,
before: props.before,
after: props.after,
}
}
componentDidMount() {
this.fetchData();
}
componentWillReceiveProps(newProps, prevState) {
if(newProps.before == prevState.before && newProps.after == prevState.after) {
return;
}
2018-05-01 14:06:17 +00:00
this.setState({
before: newProps.before,
after: newProps.after,
});
this.fetchData();
}
@bind
fetchData() {
2016-12-10 17:19:44 +00:00
this.setState({ loading: true })
Client.request(`${this.props.endpoint}/count?before=${this.state.before}&after=${this.state.after}`)
2018-05-01 14:06:17 +00:00
.then((d) => {
this.setState({
loading: false,
value: numbers.formatWithComma(d),
})
})
}
2018-05-01 14:06:17 +00:00
render(props, state) {
const loadingOverlay = state.loading ? <div class="loading-overlay"><div></div></div> : '';
return (
2018-05-01 14:06:17 +00:00
<div class="totals-detail">
2016-12-10 17:19:44 +00:00
{loadingOverlay}
2018-05-01 14:06:17 +00:00
<div class="total-heading">{props.title}</div>
<div class="total-numbers">{state.value}</div>
</div>
)
}
}
export default CountWidget