Skip to content

Commit

Permalink
fix(pagination): disable buttons if not results (#2643)
Browse files Browse the repository at this point in the history
* fix(pagination): if the results contains no hits, disable the buttons
* fix(pagination): add tests for disabled behaviour
* chore: add story to test #2014
* fix(pagination): display the current if no results
We're still on page 1 after all.

fix #2014
  • Loading branch information
bobylito authored Dec 29, 2017
1 parent e73ff13 commit 9017b72
Show file tree
Hide file tree
Showing 5 changed files with 115 additions and 16 deletions.
34 changes: 23 additions & 11 deletions dev/app/builtin/stories/pagination.stories.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,27 @@ import { wrapWithHits } from '../../utils/wrap-with-hits.js';
const stories = storiesOf('Pagination');

export default () => {
stories.add(
'default',
wrapWithHits(container => {
window.search.addWidget(
instantsearch.widgets.pagination({
container,
maxPages: 20,
})
);
})
);
stories
.add(
'default',
wrapWithHits(container => {
window.search.addWidget(
instantsearch.widgets.pagination({
container,
maxPages: 20,
})
);
})
)
.add(
'without autoHideContainer',
wrapWithHits(container => {
window.search.addWidget(
instantsearch.widgets.pagination({
container,
autoHideContainer: false,
})
);
})
);
};
10 changes: 5 additions & 5 deletions src/components/Pagination/Pagination.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export class RawPagination extends React.Component {
cssClasses={cssClasses}
handleClick={this.handleClick}
isDisabled={isDisabled}
key={label + pageNumber}
key={label + pageNumber + ariaLabel}
label={label}
pageNumber={pageNumber}
url={url}
Expand All @@ -56,7 +56,7 @@ export class RawPagination extends React.Component {
return this.pageLink({
ariaLabel: 'Previous',
additionalClassName: this.props.cssClasses.previous,
isDisabled: pager.isFirstPage(),
isDisabled: this.props.nbHits === 0 || pager.isFirstPage(),
label: this.props.labels.previous,
pageNumber: pager.currentPage - 1,
createURL,
Expand All @@ -67,7 +67,7 @@ export class RawPagination extends React.Component {
return this.pageLink({
ariaLabel: 'Next',
additionalClassName: this.props.cssClasses.next,
isDisabled: pager.isLastPage(),
isDisabled: this.props.nbHits === 0 || pager.isLastPage(),
label: this.props.labels.next,
pageNumber: pager.currentPage + 1,
createURL,
Expand All @@ -78,7 +78,7 @@ export class RawPagination extends React.Component {
return this.pageLink({
ariaLabel: 'First',
additionalClassName: this.props.cssClasses.first,
isDisabled: pager.isFirstPage(),
isDisabled: this.props.nbHits === 0 || pager.isFirstPage(),
label: this.props.labels.first,
pageNumber: 0,
createURL,
Expand All @@ -89,7 +89,7 @@ export class RawPagination extends React.Component {
return this.pageLink({
ariaLabel: 'Last',
additionalClassName: this.props.cssClasses.last,
isDisabled: pager.isLastPage(),
isDisabled: this.props.nbHits === 0 || pager.isLastPage(),
label: this.props.labels.last,
pageNumber: pager.total - 1,
createURL,
Expand Down
2 changes: 2 additions & 0 deletions src/components/Pagination/Paginator.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ class Paginator {
pages() {
const { total, currentPage, padding } = this;

if (total === 0) return [0];

const totalDisplayedPages = this.nbPagesDisplayed(padding, total);
if (totalDisplayedPages === total) return range(0, total);

Expand Down
15 changes: 15 additions & 0 deletions src/components/Pagination/__tests__/Pagination-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,19 @@ describe('Pagination', () => {
);
expect(preventDefault.calledOnce).toBe(true, 'preventDefault called once');
});

it('should have all buttons disabled if there are no results', () => {
const tree = renderer
.create(
<Pagination
{...defaultProps}
showFirstLast
currentPage={0}
nbHits={0}
nbPages={0}
/>
)
.toJSON();
expect(tree).toMatchSnapshot();
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,76 @@ exports[`Pagination should display the first/last link 1`] = `
</ul>
`;

exports[`Pagination should have all buttons disabled if there are no results 1`] = `
<ul
className="root"
>
<li
className="item first disabled"
>
<span
className=""
dangerouslySetInnerHTML={
Object {
"__html": "",
}
}
/>
</li>
<li
className="item previous disabled"
>
<span
className=""
dangerouslySetInnerHTML={
Object {
"__html": "",
}
}
/>
</li>
<li
className="item page active"
>
<a
aria-label={1}
className=""
dangerouslySetInnerHTML={
Object {
"__html": 1,
}
}
href="[0]"
onClick={[Function]}
/>
</li>
<li
className="item next disabled"
>
<span
className=""
dangerouslySetInnerHTML={
Object {
"__html": "",
}
}
/>
</li>
<li
className="item last disabled"
>
<span
className=""
dangerouslySetInnerHTML={
Object {
"__html": "",
}
}
/>
</li>
</ul>
`;

exports[`Pagination should render five elements 1`] = `
<ul
className="root"
Expand Down

0 comments on commit 9017b72

Please sign in to comment.