Skip to content

Commit b261c33

Browse files
committed
implement pageButtonRenderer
1 parent 7dbdc19 commit b261c33

File tree

5 files changed

+52
-11
lines changed

5 files changed

+52
-11
lines changed

packages/react-bootstrap-table2-paginator/src/page-button.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ class PageButton extends Component {
2020
page,
2121
title,
2222
active,
23-
disabled
23+
disabled,
24+
className
2425
} = this.props;
2526
const classes = cs({
2627
active,
2728
disabled,
2829
'page-item': true
29-
});
30+
}, className);
3031

3132
return (
3233
<li className={ classes } title={ title }>
@@ -41,6 +42,7 @@ PageButton.propTypes = {
4142
page: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
4243
active: PropTypes.bool.isRequired,
4344
disabled: PropTypes.bool.isRequired,
45+
className: PropTypes.string,
4446
title: PropTypes.string
4547
};
4648

packages/react-bootstrap-table2-paginator/src/pagination-list.js

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,21 @@ import PageButton from './page-button';
66
const PaginatonList = props => (
77
<ul className="pagination react-bootstrap-table-page-btns-ul">
88
{
9-
props.pages.map(pageProps => (
10-
<PageButton
11-
key={ pageProps.page }
12-
{ ...pageProps }
13-
onPageChange={ props.onPageChange }
14-
/>
15-
))
9+
props.pages.map((pageProps) => {
10+
if (props.pageButtonRenderer) {
11+
return props.pageButtonRenderer({
12+
...pageProps,
13+
onPageChange: props.onPageChange
14+
});
15+
}
16+
return (
17+
<PageButton
18+
key={ pageProps.page }
19+
{ ...pageProps }
20+
onPageChange={ props.onPageChange }
21+
/>
22+
);
23+
})
1624
}
1725
</ul>
1826
);
@@ -24,7 +32,12 @@ PaginatonList.propTypes = {
2432
disable: PropTypes.bool,
2533
title: PropTypes.string
2634
})).isRequired,
27-
onPageChange: PropTypes.func.isRequired
35+
onPageChange: PropTypes.func.isRequired,
36+
pageButtonRenderer: PropTypes.func
37+
};
38+
39+
PaginatonList.defaultProps = {
40+
pageButtonRenderer: null
2841
};
2942

3043
export default PaginatonList;

packages/react-bootstrap-table2-paginator/src/pagination.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ class Pagination extends pageResolver(Component) {
108108
const {
109109
showTotal,
110110
dataSize,
111+
pageButtonRenderer,
111112
paginationTotalRenderer,
112113
sizePerPageList,
113114
currSizePerPage,
@@ -148,7 +149,11 @@ class Pagination extends pageResolver(Component) {
148149
}
149150
</div>
150151
<div className={ pageListClass }>
151-
<PaginationList pages={ pages } onPageChange={ this.handleChangePage } />
152+
<PaginationList
153+
pages={ pages }
154+
pageButtonRenderer={ pageButtonRenderer }
155+
onPageChange={ this.handleChangePage }
156+
/>
152157
</div>
153158
</div>
154159
);
@@ -165,6 +170,7 @@ Pagination.propTypes = {
165170
pageStartIndex: PropTypes.number,
166171
paginationSize: PropTypes.number,
167172
showTotal: PropTypes.bool,
173+
pageButtonRenderer: PropTypes.func,
168174
paginationTotalRenderer: PropTypes.func,
169175
firstPageText: PropTypes.string,
170176
prePageText: PropTypes.string,
@@ -186,6 +192,7 @@ Pagination.defaultProps = {
186192
withFirstAndLast: Const.With_FIRST_AND_LAST,
187193
alwaysShowAllBtns: Const.SHOW_ALL_PAGE_BTNS,
188194
showTotal: Const.SHOW_TOTAL,
195+
pageButtonRenderer: null,
189196
paginationTotalRenderer: Const.PAGINATION_TOTAL,
190197
firstPageText: Const.FIRST_PAGE_TEXT,
191198
prePageText: Const.PRE_PAGE_TEXT,

packages/react-bootstrap-table2-paginator/src/state-context.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ class StateProvider extends React.Component {
7676
sizePerPageList: options.sizePerPageList || Const.SIZE_PER_PAGE_LIST,
7777
paginationSize: options.paginationSize || Const.PAGINATION_SIZE,
7878
showTotal: options.showTotal,
79+
pageButtonRenderer: options.pageButtonRenderer,
7980
paginationTotalRenderer: options.paginationTotalRenderer,
8081
firstPageText: options.firstPageText || Const.FIRST_PAGE_TEXT,
8182
prePageText: options.prePageText || Const.PRE_PAGE_TEXT,

packages/react-bootstrap-table2-paginator/test/pagination-list.test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,22 @@ describe('PaginationList', () => {
3939
expect(wrapper.find('ul.react-bootstrap-table-page-btns-ul').length).toBe(1);
4040
expect(wrapper.find(PageButton).length).toBe(pages.length);
4141
});
42+
43+
describe('when props.pageButtonRenderer is existing', () => {
44+
const pageButtonRenderer = jest.fn().mockReturnValue(null);
45+
beforeEach(() => {
46+
wrapper = shallow(
47+
<PaginationList
48+
pages={ pages }
49+
onPageChange={ onPageChange }
50+
pageButtonRenderer={ pageButtonRenderer }
51+
/>
52+
);
53+
});
54+
55+
it('should call props.pageButtonRenderer correctly', () => {
56+
expect(wrapper.length).toBe(1);
57+
expect(pageButtonRenderer).toHaveBeenCalledTimes(pages.length);
58+
});
59+
});
4260
});

0 commit comments

Comments
 (0)