Skip to content

Commit

Permalink
fix(pagination): remove default value of maxPages. Fixes #761
Browse files Browse the repository at this point in the history
  • Loading branch information
maxiloc committed Jan 6, 2016
1 parent 0f2de3c commit 607fe9a
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 9 deletions.
50 changes: 50 additions & 0 deletions src/widgets/pagination/__tests__/pagination-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -136,3 +136,53 @@ describe('pagination()', () => {
};
}
});

describe('pagination MaxPage', () => {
jsdom({useEach: true});

let ReactDOM;
let container;
let widget;
let results;
let cssClasses;
let paginationOptions;

beforeEach(() => {
ReactDOM = {render: sinon.spy()};
pagination.__Rewire__('ReactDOM', ReactDOM);
pagination.__Rewire__('autoHideContainerHOC', sinon.stub().returns(Pagination));

container = document.createElement('div');
cssClasses = {
root: 'root',
item: 'item',
link: 'link',
page: 'page',
previous: 'previous',
next: 'next',
first: 'first',
last: 'last',
active: 'active',
disabled: 'disabled'
};
results = {hits: [{first: 'hit', second: 'hit'}], nbHits: 300, hitsPerPage: 10, nbPages: 30};
paginationOptions = {container, scrollTo: false, cssClasses};
});

it('does to have any default', () => {
widget = pagination(paginationOptions);
expect(widget.getMaxPage(results)).toEqual(30);
});

it('does reduce the number of page if lower than nbPages', () => {
paginationOptions.maxPages = 20;
widget = pagination(paginationOptions);
expect(widget.getMaxPage(results)).toEqual(20);
});

it('does not reduce the number of page if greater than nbPages', () => {
paginationOptions.maxPages = 40;
widget = pagination(paginationOptions);
expect(widget.getMaxPage(results)).toEqual(30);
});
});
20 changes: 11 additions & 9 deletions src/widgets/pagination/pagination.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ let defaultLabels = {
* @param {string} [options.labels.next] Label for the Next link
* @param {string} [options.labels.first] Label for the First link
* @param {string} [options.labels.last] Label for the Last link
* @param {number} [options.maxPages=20] The max number of pages to browse
* @param {number} [options.maxPages] The max number of pages to browse
* @param {number} [options.padding=3] The number of pages to display on each side of the current page
* @param {string|DOMElement|boolean} [options.scrollTo='body'] Where to scroll after a click, set to `false` to disable
* @param {boolean} [options.showFirstLast=true] Define if the First and Last links should be displayed
Expand All @@ -46,7 +46,7 @@ pagination({
container,
[ cssClasses.{root,item,page,previous,next,first,last,active,disabled}={} ],
[ labels.{previous,next,first,last} ],
[ maxPages=20 ],
[ maxPages ],
[ padding=3 ],
[ showFirstLast=true ],
[ autoHideContainer=true ],
Expand All @@ -56,7 +56,7 @@ function pagination({
container,
cssClasses: userCssClasses = {},
labels = {},
maxPages = 20,
maxPages,
padding = 3,
showFirstLast = true,
autoHideContainer = true,
Expand Down Expand Up @@ -88,9 +88,15 @@ function pagination({
helper.search();
},

getMaxPage: function(results) {
if (maxPages !== undefined) {
return Math.min(maxPages, results.nbPages);
}
return results.nbPages;
},

render: function({results, helper, createURL, state}) {
let currentPage = results.page;
let nbPages = results.nbPages;
let nbHits = results.nbHits;
let hasNoResults = nbHits === 0;
let cssClasses = {
Expand All @@ -106,18 +112,14 @@ function pagination({
disabled: cx(bem('item', 'disabled'), userCssClasses.disabled)
};

if (maxPages !== undefined) {
nbPages = Math.min(maxPages, results.nbPages);
}

ReactDOM.render(
<Pagination
createURL={(page) => createURL(state.setPage(page))}
cssClasses={cssClasses}
currentPage={currentPage}
labels={labels}
nbHits={nbHits}
nbPages={nbPages}
nbPages={this.getMaxPage(results)}
padding={padding}
setCurrentPage={this.setCurrentPage.bind(this, helper)}
shouldAutoHideContainer={hasNoResults}
Expand Down

0 comments on commit 607fe9a

Please sign in to comment.