/** * External dependencies */ import { __ } from '@wordpress/i18n'; import PropTypes from 'prop-types'; import classNames from 'classnames'; /** * Internal dependencies */ import Label from '../label'; import { getIndexes } from './utils.js'; import './style.scss'; const Pagination = ( { currentPage, displayFirstAndLastPages, displayNextAndPreviousArrows, pagesToDisplay, onPageChange, totalPages, } ) => { const { minIndex, maxIndex } = getIndexes( pagesToDisplay, currentPage, totalPages ); const pages = []; for ( let i = minIndex; i <= maxIndex; i++ ) { pages.push( i ); } const showFirstPage = displayFirstAndLastPages && Boolean( minIndex !== 1 ); const showLastPage = displayFirstAndLastPages && Boolean( maxIndex !== totalPages ); const showFirstPageEllipsis = displayFirstAndLastPages && Boolean( minIndex > 2 ); const showLastPageEllipsis = displayFirstAndLastPages && Boolean( maxIndex < totalPages - 1 ); const showPreviousArrow = displayNextAndPreviousArrows && Boolean( currentPage !== 1 ); const showNextArrow = displayNextAndPreviousArrows && Boolean( currentPage !== totalPages ); return (
); }; Pagination.propTypes = { /** * Number of the page currently being displayed. */ currentPage: PropTypes.number.isRequired, /** * Total number of pages. */ totalPages: PropTypes.number.isRequired, /** * Displays first and last pages if they are not in the current range of pages displayed. */ displayFirstAndLastPages: PropTypes.bool, /** * Displays arrows to navigate to the previous and next pages. */ displayNextAndPreviousArrows: PropTypes.bool, /** * Callback function called when the user triggers a page change. */ onPageChange: PropTypes.func, /** * Number of pages to display at the same time, including the active page * and the pages displayed before and after it. It doesn't include the first * and last pages. */ pagesToDisplay: PropTypes.number, }; Pagination.defaultProps = { displayFirstAndLastPages: true, displayNextAndPreviousArrows: true, pagesToDisplay: 3, }; export default Pagination;