2018-07-20 11:32:48 +02:00
|
|
|
|
|
|
|
import React from 'react'
|
|
|
|
import {connect} from 'react-redux'
|
|
|
|
|
|
|
|
import {Link} from 'react-router'
|
|
|
|
|
|
|
|
|
2018-07-21 11:05:08 +02:00
|
|
|
|
2018-07-20 11:32:48 +02:00
|
|
|
const PageLink = function(props) {
|
|
|
|
const linkPage = parseInt(props.page);
|
|
|
|
|
|
|
|
let pr = props.pageReceived;
|
|
|
|
let pf = props.pageFiltered;
|
|
|
|
let pn = props.pageNotExported;
|
|
|
|
|
|
|
|
// This here can be surely more elegant.
|
|
|
|
switch(props.anchor) {
|
|
|
|
case "routes-received":
|
|
|
|
pr = linkPage;
|
|
|
|
break;
|
|
|
|
case "routes-filtered":
|
|
|
|
pf = linkPage;
|
|
|
|
break;
|
|
|
|
case "routes-not-exported":
|
|
|
|
pn = linkPage;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
const search = `?pr=${pr}&pf=${pf}&pn=${pn}`;
|
|
|
|
const hash = `#${props.anchor}`;
|
|
|
|
const linkTo = {
|
2018-07-21 11:05:08 +02:00
|
|
|
pathname: props.routing.pathname,
|
2018-07-20 11:32:48 +02:00
|
|
|
hash: hash,
|
2018-07-21 11:05:08 +02:00
|
|
|
search: search,
|
2018-07-20 11:32:48 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<Link to={linkTo}>{linkPage + 1}</Link>
|
|
|
|
);
|
2018-07-21 11:05:08 +02:00
|
|
|
}
|
2018-07-20 11:32:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
class RoutesPaginatorView extends React.Component {
|
|
|
|
|
|
|
|
render() {
|
|
|
|
if (this.props.totalPages <= 1) {
|
|
|
|
return null; // Nothing to paginate
|
|
|
|
}
|
|
|
|
|
2018-07-21 11:05:08 +02:00
|
|
|
|
2018-07-20 11:32:48 +02:00
|
|
|
const pageLinks = Array.from(Array(this.props.totalPages), (_, i) => {
|
|
|
|
return (
|
|
|
|
<li key={i}>
|
2018-07-21 11:05:08 +02:00
|
|
|
<PageLink page={i}
|
|
|
|
routing={this.props.routing}
|
|
|
|
anchor={this.props.anchor}
|
|
|
|
pageReceived={this.props.pageReceived}
|
|
|
|
pageFiltered={this.props.pageFiltered}
|
|
|
|
pageNotExported={this.props.pageNotExported} />
|
2018-07-20 11:32:48 +02:00
|
|
|
</li>
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
<nav aria-label="Routes Pagination">
|
|
|
|
<ul className="pagination">
|
|
|
|
<li>
|
|
|
|
<a href="#" aria-label="Previous">
|
|
|
|
<span aria-hidden="true">«</span>
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
{pageLinks}
|
|
|
|
<li>
|
|
|
|
<a href="#" aria-label="Next">
|
|
|
|
<span aria-hidden="true">»</span>
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-07-21 11:05:08 +02:00
|
|
|
|
|
|
|
export const RoutesPaginator = connect(
|
2018-07-20 11:32:48 +02:00
|
|
|
(state) => ({
|
|
|
|
pageReceived: state.routes.receivedPage,
|
|
|
|
pageFiltered: state.routes.filteredPage,
|
|
|
|
pageNotExported: state.routes.notExportedPage,
|
|
|
|
|
|
|
|
routing: state.routing.locationBeforeTransitions
|
|
|
|
})
|
|
|
|
)(RoutesPaginatorView);
|
|
|
|
|
|
|
|
|
|
|
|
export class RoutesPaginationInfo extends React.Component {
|
|
|
|
render() {
|
|
|
|
const totalResults = this.props.totalResults;
|
|
|
|
const perPage = this.props.pageSize;
|
|
|
|
const start = this.props.page * perPage + 1;
|
|
|
|
const end = Math.min(start + perPage - 1, totalResults);
|
|
|
|
if (this.props.totalPages == 1) {
|
|
|
|
let routes = "route";
|
|
|
|
if (totalResults > 1) {
|
|
|
|
routes = "routes";
|
|
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div className="routes-pagination-info pull-right">
|
|
|
|
Showing <b>all</b> of <b>{totalResults}</b> {routes}
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
return (
|
|
|
|
<div className="routes-pagination-info pull-right">
|
|
|
|
Showing <b>{start} - {end}</b> of <b>{totalResults}</b> total routes
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|