/** @format */ /** * External dependencies */ import { __, sprintf } from '@wordpress/i18n'; import { Component } from '@wordpress/element'; import { IconButton, SelectControl } from '@wordpress/components'; import classNames from 'classnames'; import PropTypes from 'prop-types'; import { isFinite, noop, uniqueId } from 'lodash'; /** * Internal dependencies */ import './style.scss'; const PER_PAGE_OPTIONS = [ 25, 50, 75, 100 ]; /** * Use `Pagination` to allow navigation between pages that represent a collection of items. * The component allows for selecting a new page and items per page options. */ class Pagination extends Component { constructor( props ) { super( props ); this.previousPage = this.previousPage.bind( this ); this.nextPage = this.nextPage.bind( this ); this.onPageValueChange = this.onPageValueChange.bind( this ); this.perPageChange = this.perPageChange.bind( this ); this.selectInputValue = this.selectInputValue.bind( this ); } previousPage( event ) { event.stopPropagation(); const { page, onPageChange } = this.props; if ( page - 1 < 1 ) { return; } onPageChange( page - 1 ); } nextPage( event ) { event.stopPropagation(); const { page, onPageChange } = this.props; if ( page + 1 > this.pageCount ) { return; } onPageChange( page + 1 ); } perPageChange( perPage ) { const { onPerPageChange, onPageChange, total, page } = this.props; onPerPageChange( parseInt( perPage ) ); const newMaxPage = Math.ceil( total / parseInt( perPage ) ); if ( page > newMaxPage ) { onPageChange( newMaxPage ); } } onPageValueChange( event ) { const { onPageChange } = this.props; const newPage = parseInt( event.target.value, 10 ); if ( isFinite( newPage ) && this.pageCount && this.pageCount >= newPage ) { onPageChange( newPage ); } } selectInputValue( event ) { event.target.select(); } renderPageArrows() { const { page } = this.props; if ( this.pageCount <= 1 ) { return null; } const previousLinkClass = classNames( 'woocommerce-pagination__link', { 'is-active': page > 1, } ); const nextLinkClass = classNames( 'woocommerce-pagination__link', { 'is-active': page < this.pageCount, } ); return (