From 036505744690347b9df8705a0bc15828837290ff Mon Sep 17 00:00:00 2001 From: Grzegorz Rozdzialik Date: Thu, 31 Jan 2019 18:03:27 +0100 Subject: [PATCH] Extract pagination elements renderers to pagination props (#1176) Pagination elements are now customizable without having to create a new Pagination component, that would mostly mimic the existing one in terms of functionality. --- README.md | 12 +++++ src/pagination.js | 126 ++++++++++++++++++++++++++++++---------------- 2 files changed, 94 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 4ffe83e..901c5e9 100644 --- a/README.md +++ b/README.md @@ -313,6 +313,18 @@ These are all of the available props (and their default values) for the main ` ({}), getResizerProps: () => ({}), + // Custom pagination rendering + renderPageJump: ({ onChange, value, onBlur, onKeyPress, inputType, pageJumpText }) => component, + renderCurrentPage: page => component, + renderTotalPagesCount: pages => component, + renderPageSizeOptions: ({ + pageSize, + pageSizeOptions, + rowsSelectorText, + onPageSizeChange, + rowsText, + }) => component + // Global Column Defaults // To override only some values, import { ReactTableDefaults } from 'react-table' // and construct your overrides (e.g. {...ReactTableDefaults.column, className: 'react-table-cell'}) diff --git a/src/pagination.js b/src/pagination.js index 714d887..6c1331d 100644 --- a/src/pagination.js +++ b/src/pagination.js @@ -8,8 +8,51 @@ const defaultButton = props => ( ) export default class ReactTablePagination extends Component { + static defaultProps = { + PreviousComponent: defaultButton, + NextComponent: defaultButton, + renderPageJump: ({ + onChange, value, onBlur, onKeyPress, inputType, pageJumpText, + }) => ( +
+ +
+ ), + renderCurrentPage: page => {page + 1}, + renderTotalPagesCount: pages => {pages || 1}, + renderPageSizeOptions: ({ + pageSize, + pageSizeOptions, + rowsSelectorText, + onPageSizeChange, + rowsText, + }) => ( + + + + ), + } + constructor (props) { - super() + super(props) this.getSafePage = this.getSafePage.bind(this) this.changePage = this.changePage.bind(this) @@ -49,6 +92,28 @@ export default class ReactTablePagination extends Component { this.changePage(page === '' ? this.props.page : page) } + getPageJumpProperties () { + return { + onKeyPress: e => { + if (e.which === 13 || e.keyCode === 13) { + this.applyPage() + } + }, + onBlur: this.applyPage, + value: this.state.page === '' ? '' : this.state.page + 1, + onChange: e => { + const val = e.target.value + const page = val - 1 + if (val === '') { + return this.setState({ page: val }) + } + this.setState({ page: this.getSafePage(page) }) + }, + inputType: this.state.page === '' ? 'text' : 'number', + pageJumpText: this.props.pageJumpText, + } + } + render () { const { // Computed @@ -63,8 +128,12 @@ export default class ReactTablePagination extends Component { canNext, onPageSizeChange, className, - PreviousComponent = defaultButton, - NextComponent = defaultButton, + PreviousComponent, + NextComponent, + renderPageJump, + renderCurrentPage, + renderTotalPagesCount, + renderPageSizeOptions, } = this.props return ( @@ -83,48 +152,17 @@ export default class ReactTablePagination extends Component {
{this.props.pageText}{' '} - {showPageJump ? ( -
- { - const val = e.target.value - const page = val - 1 - if (val === '') { - return this.setState({ page: val }) - } - this.setState({ page: this.getSafePage(page) }) - }} - value={this.state.page === '' ? '' : this.state.page + 1} - onBlur={this.applyPage} - onKeyPress={e => { - if (e.which === 13 || e.keyCode === 13) { - this.applyPage() - } - }} - /> -
- ) : ( - {page + 1} - )}{' '} - {this.props.ofText} {pages || 1} + {showPageJump ? renderPageJump(this.getPageJumpProperties()) : renderCurrentPage(page)}{' '} + {this.props.ofText} {renderTotalPagesCount(pages)}
- {showPageSizeOptions && ( - - - - )} + {showPageSizeOptions && + renderPageSizeOptions({ + pageSize, + rowsSelectorText: this.props.rowsSelectorText, + pageSizeOptions, + onPageSizeChange, + rowsText: this.props.rowsText, + })}