A React component that provides pagination

pagination-component

React component for pagination.

Installation

npm install pagination-component --save

or

yarn add pagination-component

Demo

To build and run the demo:

  • Clone this repository:
git clone https://github.com/dibenso/pagination-component.git
  • Install dependencies:
npm install

or

yarn install
  • Start demo server:
npm start

Then check http://localhost:3000

Usage

The component accepts 5 required props:

  • currentPage (type: int)
    Indicates the current page of pagination. It is zero based, so the first page is indicated by 0.

  • pageCount (type: int)
    Indicates how many pages to paginate through. For example if the current page is 0 and pageCount is 50. The result of the pagination will show:
    first 1 2 3 4 5 6 7 8 9 10 ... next last
    Clicking the "last" link will callback with 49 (page 50) in the onPageClick prop.

  • pageLinkClassName (type: string | object)
    If this prop is a string, then the prop indicates the className of the css to use for all links in pagination. Example style:

.pageLink {
  margin: 2px;
  display: inline-block;
  padding: 2px;
  -webkit-border-radius: 20px;
  -moz-border-radius: 20px;
  border-radius: 20px;
}

Then import this css into js:

import styles from './styles.css';

Then pass styles.pageLink in for this prop to use these styles.
If this prop is a object, then the prop indicates the style to use. This is useful for CSS in JS libraries like glamor. Example using glamor:

import { css } from 'glamor';

const pageLink = css({
  margin: '2px',
  display: 'inline-block',
  padding: '2px',
  WebkitBorderRadius: '20px',
  MozBorderRadius: '20px',
  borderRadius: '20px'
})

Then pass the pageLink object in for this prop.

  • currentLinkClassName (type: string | object)
    This works the same way as pageLinkClassName except its styling is for the page link for the current page. Use this prop to make a visual difference between the current page link and the others. Example style:
.currentLink {
  background-color: #0074c2;
  color: #FFFFFF;
}

.currentLink a:link { color: #FFFFFF; }
.currentLink a:visited { color: #FFFFFF; }
.currentLink a:active { color: #FFFFFF; }

Pass this prop to the component in the same was as pageLinkClassName.

  • onPageClick (type: function)
    This is called everytime a page link is clicked. This callback accepts the page that was clicked. Remember, the page is zero based. So when a user clicks on a page link that is displayed as 15, the value passed to this callback will be 14. Here's how one might use this prop with the history API and perhaps react-router:
function handlePageClick(page) {
  console.log(`Link to page ${page} was clicked.`);
  history.push(`/?page=${page}`);
}

Full example (using glamor for styles):

import React from 'react'
import {render} from 'react-dom'
import Pagination from 'pagination-component';
import { css } from 'glamor';

const pageLink = css({
  margin: '2px',
  display: 'inline-block',
  padding: '2px',
  WebkitBorderRadius: '20px',
  MozBorderRadius: '20px',
  borderRadius: '20px'
})

const currentLink = css({
  backgroundColor: '#0074c2',
  display: 'inline-block',
  color: '#FFFFFF',
  'a:link': { color: '#FFFFFF' },
  'a:visited': { color: '#FFFFFF' },
  'a:active': { color: '#FFFFFF' }
})

let Example = React.createClass({
  render() {
    return <div>
      <h1>react-paginator Demo</h1>
      <Pagination currentPage={0}
                 pageCount={50}
                 pageLinkClassName={pageLink}
                 currentLinkClassName={currentLink}
                 onPageClick={i => {
                  console.log(`Link to page ${i} was clicked.`);
                 }} />
    </div>
  }
})

render(<Example />, document.querySelector('#root'))

Tests

To run the tests:

  • Install dependencies from package.json
npm install

or

yarn install
  • Then:
yarn test

GitHub