/** * * GlobalPagination * */ import React from 'react'; import { map } from 'lodash'; import PropTypes from 'prop-types'; import styles from './styles.scss'; /* eslint-disable jsx-a11y/anchor-is-valid */ class GlobalPagination extends React.Component { getLastPageNumber = () => Math.ceil(this.props.count / this.props.params._limit) || 1; handleDotsClick = (e) => e.preventDefault(); handlePreviousPageClick = (e) => { e.preventDefault(); if (!this.isFirstPage()) { const target = { name: 'params._page', value: this.props.params._page - 1, }; this.props.onChangeParams({ target }); } } handleNextPageClick = (e) => { e.preventDefault(); if (!this.isLastPage()) { const target = { name: 'params._page', value: this.props.params._page + 1, }; this.props.onChangeParams({ target }); } } handleFirstPageClick = (e) => { e.preventDefault(); const target = { name: 'params._page', value: 1, }; this.props.onChangeParams({ target }); } handleLastPageClick = (e) => { e.preventDefault(); const target = { name: 'params._page', value: this.getLastPageNumber(), }; this.props.onChangeParams({ target }); } isFirstPage = () => this.props.params._page === 1; isLastPage = () => this.props.params._page === this.getLastPageNumber(); needAfterLinksDots = () => this.props.params._page < this.getLastPageNumber() - 1; needPreviousLinksDots = () => this.props.params._page > 3; renderLinks = () => { // Init variables const linksOptions = []; // Add active page link linksOptions.push({ value: this.props.params._page, isActive: true, handleClick: e => e.preventDefault(), }); // Add previous page link if (!this.isFirstPage()) { linksOptions.unshift({ value: this.props.params._page - 1, isActive: false, handleClick: this.handlePreviousPageClick, }); } // Add next page link if (!this.isLastPage() && this.props.count > this.props.params._limit) { linksOptions.push({ value: this.props.params._page + 1, isActive: false, handleClick: this.handleNextPageClick, }); } if (this.needPreviousLinksDots()) { linksOptions.unshift({ value: 1, isActive: false, handleClick: this.handleFirstPageClick, }); } if (this.needAfterLinksDots()) { linksOptions.push({ value: this.getLastPageNumber(), isActive: false, handleClick: this.handleLastPageClick, }); } // Generate links return ( map(linksOptions, (linksOption, key) => (