From 424dbea27055d088daf115f03f95088e26fa157e Mon Sep 17 00:00:00 2001 From: AllenFang Date: Sat, 1 Dec 2018 18:03:04 +0800 Subject: [PATCH] implement pageListRenderer --- .../src/pagination.js | 24 +++++++++++++------ .../src/state-context.js | 1 + .../test/pagination.test.js | 18 ++++++++++++++ 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/packages/react-bootstrap-table2-paginator/src/pagination.js b/packages/react-bootstrap-table2-paginator/src/pagination.js index 7e0511a..e914f93 100644 --- a/packages/react-bootstrap-table2-paginator/src/pagination.js +++ b/packages/react-bootstrap-table2-paginator/src/pagination.js @@ -108,6 +108,7 @@ class Pagination extends pageResolver(Component) { const { showTotal, dataSize, + pageListRenderer, pageButtonRenderer, paginationTotalRenderer, sizePerPageList, @@ -148,13 +149,20 @@ class Pagination extends pageResolver(Component) { ) : null } -
- -
+ { + pageListRenderer ? pageListRenderer({ + pages, + onPageChange: this.handleChangePage + }) : ( +
+ +
+ ) + } ); } @@ -170,6 +178,7 @@ Pagination.propTypes = { pageStartIndex: PropTypes.number, paginationSize: PropTypes.number, showTotal: PropTypes.bool, + pageListRenderer: PropTypes.func, pageButtonRenderer: PropTypes.func, paginationTotalRenderer: PropTypes.func, firstPageText: PropTypes.string, @@ -192,6 +201,7 @@ Pagination.defaultProps = { withFirstAndLast: Const.With_FIRST_AND_LAST, alwaysShowAllBtns: Const.SHOW_ALL_PAGE_BTNS, showTotal: Const.SHOW_TOTAL, + pageListRenderer: null, pageButtonRenderer: null, paginationTotalRenderer: Const.PAGINATION_TOTAL, firstPageText: Const.FIRST_PAGE_TEXT, diff --git a/packages/react-bootstrap-table2-paginator/src/state-context.js b/packages/react-bootstrap-table2-paginator/src/state-context.js index de85eac..33a4b7b 100644 --- a/packages/react-bootstrap-table2-paginator/src/state-context.js +++ b/packages/react-bootstrap-table2-paginator/src/state-context.js @@ -76,6 +76,7 @@ class StateProvider extends React.Component { sizePerPageList: options.sizePerPageList || Const.SIZE_PER_PAGE_LIST, paginationSize: options.paginationSize || Const.PAGINATION_SIZE, showTotal: options.showTotal, + pageListRenderer: options.pageListRenderer, pageButtonRenderer: options.pageButtonRenderer, paginationTotalRenderer: options.paginationTotalRenderer, firstPageText: options.firstPageText || Const.FIRST_PAGE_TEXT, diff --git a/packages/react-bootstrap-table2-paginator/test/pagination.test.js b/packages/react-bootstrap-table2-paginator/test/pagination.test.js index a9e5d35..8c1f9f8 100644 --- a/packages/react-bootstrap-table2-paginator/test/pagination.test.js +++ b/packages/react-bootstrap-table2-paginator/test/pagination.test.js @@ -109,6 +109,24 @@ describe('Pagination', () => { }); }); + describe('when props.pageListRenderer is defined', () => { + const pageListRenderer = jest.fn().mockReturnValue(null); + beforeEach(() => { + pageListRenderer.mockClear(); + const props = createMockProps({ pageListRenderer }); + wrapper = shallow(); + instance = wrapper.instance(); + }); + + it('should not render PaginationList', () => { + expect(wrapper.find(PaginationList)).toHaveLength(0); + }); + + it('should call props.pageListRenderer correctly', () => { + expect(pageListRenderer).toHaveBeenCalledTimes(1); + }); + }); + describe('componentWillReceiveProps', () => { describe('when next props.currSizePerPage is diff than current one', () => { const nextProps = createMockProps({ currSizePerPage: 20 });