import React from 'react' import PropTypes from 'prop-types' import { translate } from 'react-i18next' import LimitSelector from './LimitSelector' import PageSelector from './PageSelector' import { ButtonGroup, Pagination, PaginationItem, PaginationLink } from 'reactstrap' export class Pager extends React.Component { static propTypes = { t: PropTypes.func.isRequired, pagerAction: PropTypes.func.isRequired, currentPage: PropTypes.number.isRequired, numPages: PropTypes.number.isRequired, limitByPage: PropTypes.number.isRequired, hideLimitSelector: PropTypes.bool }; static limits = [10, 25, 50, 100, 200]; onClickPrevPage = () => { if (this.props.currentPage > 1) { this.props.pagerAction({ currentPage: this.props.currentPage - 1 }) } }; onClickNextPage = () => { if (this.props.currentPage < this.props.numPages) { this.props.pagerAction({ currentPage: this.props.currentPage + 1 }) } }; getPaginationTemplate = (maxLength = 7) => { const { numPages, currentPage } = this.props let res = {} if (numPages === 0) return res //always show first, last and current page res[1] = 1 res[numPages] = 1 res[currentPage] = 1 if (currentPage <= maxLength - 3) { //show all from 1 to 5 for (let i = 2; i < maxLength - 1; i++) { if (i < numPages) res[i] = 1 } } else if (currentPage >= numPages - maxLength + 4) { //show last five pages for (let i = numPages - maxLength + 3; i < numPages; i++) { res[i] = 1 } } else { //just show neighbours of current page let shift = Math.floor((maxLength - 5) / 2) for (let i = currentPage - shift; i <= currentPage + shift; i++) { res[i] = 1 } } //and show ellipsis if (numPages > 1) { if (!res[2]) res[2] = 0 if (!res[numPages - 1]) res[numPages - 1] = 0 } return res }; render () { const pages = this.getPaginationTemplate() // const prevDisabledClass = // this.props.currentPage > 1 ? '' : ' table-pager__page--disabled' // const nextDisabledClass = // this.props.currentPage < this.props.numPages // ? '' // : ' table-pager__page--disabled' return (
{Object.keys(pages).map((index) => { return ( ) })} {!this.props.hideLimitSelector && (
Show {Pager.limits.map((val) => { return ( ) })}
)}
) } } export default translate(['tabsContent'], { wait: true })(Pager)