fathom/assets/js/pages/dashboard.js

79 lines
2.5 KiB
JavaScript
Raw Normal View History

2016-11-24 15:29:11 +00:00
'use strict'
import { h, render, Component } from 'preact';
import Pageviews from '../components/Pageviews.js';
import Realtime from '../components/Realtime.js';
import Graph from '../components/Graph.js';
import DatePicker from '../components/DatePicker.js';
import Table from '../components/Table.js';
2016-11-25 12:38:20 +00:00
import HeaderBar from '../components/HeaderBar.js';
import CountWidget from '../components/CountWidget.js';
2016-11-24 15:29:11 +00:00
2016-11-26 15:17:52 +00:00
function removeImgElement(e) {
e.target.parentNode.removeChild(e.target);
}
function formatCountryLabel(p) {
const src = "/static/img/country-flags/"+ p.Label.toLowerCase() +".png"
return (
<td>
{p.Label}
<img height="12" src={src} class="pull-right" onError={removeImgElement} />
</td>
)
}
2016-11-24 15:29:11 +00:00
class Dashboard extends Component {
constructor(props) {
super(props)
this.state = {
period: 7
}
}
render() {
2016-11-25 12:16:42 +00:00
return (
<div>
2016-11-25 12:38:20 +00:00
<HeaderBar showLogout={true} onLogout={this.props.onLogout} />
2016-11-25 12:16:42 +00:00
<div class="container">
2016-11-24 15:29:11 +00:00
<Realtime />
<div class="clear">
<DatePicker period={this.state.period} onChoose={(p) => { this.setState({ period: p })}} />
</div>
<div class="row">
<div class="col-2">
<CountWidget title="Visitors" endpoint="visits" period={this.state.period} />
</div>
<div class="col-2">
<CountWidget title="Pageviews" endpoint="pageviews" period={this.state.period} />
</div>
</div>
2016-11-24 15:29:11 +00:00
<Graph period={this.state.period} />
2016-11-24 15:47:33 +00:00
<div class="row">
<div class="col-4">
<Pageviews period={this.state.period} />
</div>
<div class="col-2">
<Table period={this.state.period} endpoint="languages" title="Languages" headers={["#", "Language", "Count", "%"]} />
</div>
</div>
<div class="row">
<div class="col-2">
<Table period={this.state.period} endpoint="screen-resolutions" title="Screen Resolutions" headers={["#", "Resolution", "Count", "%"]} />
</div>
<div class="col-2">
2016-11-26 15:17:52 +00:00
<Table period={this.state.period} endpoint="countries" title="Countries" headers={["#", "Country", "Count", "%"]} labelCell={formatCountryLabel} />
2016-11-24 15:47:33 +00:00
</div>
<div class="col-2">
<Table period={this.state.period} endpoint="browsers" title="Browsers" headers={["#", "Browser", "Count", "%"]} onAuthError={this.props.onLogout} />
2016-11-24 15:47:33 +00:00
</div>
2016-11-24 15:29:11 +00:00
</div>
2016-11-25 12:16:42 +00:00
</div>
</div>
)}
2016-11-24 15:29:11 +00:00
}
export default Dashboard