From 297c5ad438f45f11f1534b22f6f640cc31b9f8d3 Mon Sep 17 00:00:00 2001 From: AllenFang Date: Wed, 13 Dec 2017 21:47:29 +0800 Subject: [PATCH] fix pagination bug --- .../src/page-resolver.js | 3 +- .../src/page.js | 3 +- .../src/pagination.js | 3 +- .../test/page.test.js | 33 ++++++++++++------- .../test/pagination.test.js | 5 +-- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/packages/react-bootstrap-table2-paginator/src/page-resolver.js b/packages/react-bootstrap-table2-paginator/src/page-resolver.js index ef2e6d2..931595f 100644 --- a/packages/react-bootstrap-table2-paginator/src/page-resolver.js +++ b/packages/react-bootstrap-table2-paginator/src/page-resolver.js @@ -18,8 +18,7 @@ export default ExtendBase => return { totalPages, lastPage, dropdownOpen: false }; } - calculateTotalPage(sizePerPage = this.props.currSizePerPage) { - const { dataSize } = this.props; + calculateTotalPage(sizePerPage = this.props.currSizePerPage, dataSize = this.props.dataSize) { return Math.ceil(dataSize / sizePerPage); } diff --git a/packages/react-bootstrap-table2-paginator/src/page.js b/packages/react-bootstrap-table2-paginator/src/page.js index c18ede9..1ea54e5 100644 --- a/packages/react-bootstrap-table2-paginator/src/page.js +++ b/packages/react-bootstrap-table2-paginator/src/page.js @@ -1,11 +1,12 @@ export const getByCurrPage = store => (page, sizePerPage, pageStartIndex) => { + const dataSize = store.data.length; + if (!dataSize) return []; const getNormalizedPage = () => { const offset = Math.abs(1 - pageStartIndex); return page + offset; }; const end = (getNormalizedPage() * sizePerPage) - 1; const start = end - (sizePerPage - 1); - const dataSize = store.data.length; const result = []; for (let i = start; i <= end; i += 1) { diff --git a/packages/react-bootstrap-table2-paginator/src/pagination.js b/packages/react-bootstrap-table2-paginator/src/pagination.js index ee685c7..d103e4b 100644 --- a/packages/react-bootstrap-table2-paginator/src/pagination.js +++ b/packages/react-bootstrap-table2-paginator/src/pagination.js @@ -20,9 +20,8 @@ class Pagination extends pageResolver(Component) { componentWillReceiveProps(nextProps) { const { dataSize, currSizePerPage } = nextProps; - if (currSizePerPage !== this.props.currSizePerPage || dataSize !== this.props.dataSize) { - const totalPages = this.calculateTotalPage(currSizePerPage); + const totalPages = this.calculateTotalPage(currSizePerPage, dataSize); const lastPage = this.calculateLastPage(totalPages); this.setState({ totalPages, lastPage }); } diff --git a/packages/react-bootstrap-table2-paginator/test/page.test.js b/packages/react-bootstrap-table2-paginator/test/page.test.js index e8ccafa..f073c86 100644 --- a/packages/react-bootstrap-table2-paginator/test/page.test.js +++ b/packages/react-bootstrap-table2-paginator/test/page.test.js @@ -4,6 +4,18 @@ import { getByCurrPage } from '../src/page'; describe('Page Functions', () => { let data; let store; + const params = [ + // [page, sizePerPage, pageStartIndex] + [1, 10, 1], + [1, 25, 1], + [1, 30, 1], + [3, 30, 1], + [4, 30, 1], + [10, 10, 1], + [0, 10, 0], + [1, 10, 0], + [9, 10, 0] + ]; describe('getByCurrPage', () => { beforeEach(() => { @@ -16,23 +28,20 @@ describe('Page Functions', () => { }); it('should always return correct data', () => { - [ - // [page, sizePerPage, pageStartIndex] - [1, 10, 1], - [1, 25, 1], - [1, 30, 1], - [3, 30, 1], - [4, 30, 1], - [10, 10, 1], - [0, 10, 0], - [1, 10, 0], - [9, 10, 0] - ].forEach(([page, sizePerPage, pageStartIndex]) => { + params.forEach(([page, sizePerPage, pageStartIndex]) => { const rows = getByCurrPage(store)(page, sizePerPage, pageStartIndex); expect(rows).toBeDefined(); expect(Array.isArray(rows)).toBeTruthy(); expect(rows.every(row => !!row)).toBeTruthy(); }); }); + + it('should return empty array when store.data is empty', () => { + store.data = []; + params.forEach(([page, sizePerPage, pageStartIndex]) => { + const rows = getByCurrPage(store)(page, sizePerPage, pageStartIndex); + expect(rows).toHaveLength(0); + }); + }); }); }); diff --git a/packages/react-bootstrap-table2-paginator/test/pagination.test.js b/packages/react-bootstrap-table2-paginator/test/pagination.test.js index cf8e44d..a9e5d35 100644 --- a/packages/react-bootstrap-table2-paginator/test/pagination.test.js +++ b/packages/react-bootstrap-table2-paginator/test/pagination.test.js @@ -143,12 +143,13 @@ describe('Pagination', () => { it('should setting correct state.totalPages', () => { instance.componentWillReceiveProps(nextProps); expect(instance.state.totalPages).toEqual( - instance.calculateTotalPage(nextProps.currSizePerPage)); + instance.calculateTotalPage(nextProps.currSizePerPage, nextProps.dataSize)); }); it('should setting correct state.lastPage', () => { instance.componentWillReceiveProps(nextProps); - const totalPages = instance.calculateTotalPage(nextProps.currSizePerPage); + const totalPages = instance.calculateTotalPage( + nextProps.currSizePerPage, nextProps.dataSize); expect(instance.state.lastPage).toEqual( instance.calculateLastPage(totalPages)); });