fathom/assets/js/components/DatePicker.js

97 lines
1.8 KiB
JavaScript
Raw Normal View History

2016-11-23 20:29:54 +00:00
'use strict';
import { h, render, Component } from 'preact';
2018-05-01 14:06:17 +00:00
import { bind } from 'decko';
2016-11-23 20:29:54 +00:00
const availablePeriods = [
{
2018-05-01 14:06:17 +00:00
id: 'day',
label: 'Today'
},
{
2018-05-01 14:06:17 +00:00
id: 'week',
label: 'This week'
},
{
2018-05-01 14:06:17 +00:00
id: 'month',
label: 'This month'
},
{
2018-05-01 14:06:17 +00:00
id: 'year',
label: 'This year'
}
]
2016-11-23 20:29:54 +00:00
class DatePicker extends Component {
constructor(props) {
super(props)
this.state = {
period: this.props.value,
before: 0,
after: 0,
2016-11-23 20:29:54 +00:00
}
}
componentDidMount() {
this.setTimeRange(this.state.period)
}
@bind
setTimeRange(period) {
let beforeDate = new Date();
let afterDate = new Date();
afterDate.setHours(0, 0, 0, 0);
switch(period) {
case "week":
afterDate.setDate(afterDate.getDate() - (afterDate.getDay() + 6) % 7);
break;
case "month":
afterDate.setDate(1);
break;
case "year":
afterDate.setDate(1);
afterDate.setMonth(0);
break;
}
let before, after;
before = Math.round((+beforeDate ) / 1000);
after = Math.round((+afterDate) / 1000);
this.setState({
before: before,
after: after,
});
this.props.onChange(this.state);
}
2018-05-01 14:06:17 +00:00
@bind
2016-11-23 20:29:54 +00:00
setPeriod(e) {
2018-05-01 14:06:17 +00:00
e.preventDefault();
let period = e.target.dataset.value;
if( period !== this.state.period) {
this.setState({
period: period,
});
this.setTimeRange(this.state.period);
}
2016-11-23 20:29:54 +00:00
}
2018-05-01 14:06:17 +00:00
render(props, state) {
const links = availablePeriods.map((p) => {
let className = ( p.id == state.period ) ? 'active' : '';
return <li class={className} ><a href="#" data-value={p.id} onClick={this.setPeriod}>{p.label}</a></li>
2016-11-23 20:29:54 +00:00
});
return (
2018-05-01 14:06:17 +00:00
<ul>
{links}
</ul>
2016-11-23 20:29:54 +00:00
)
}
}
export default DatePicker