mirror of
https://github.com/gosticks/react-bootstrap-table2.git
synced 2025-10-16 11:55:39 +00:00
implement sizePerPageOptionRenderer
This commit is contained in:
parent
424dbea270
commit
a30a8fd96b
@ -111,6 +111,7 @@ class Pagination extends pageResolver(Component) {
|
|||||||
pageListRenderer,
|
pageListRenderer,
|
||||||
pageButtonRenderer,
|
pageButtonRenderer,
|
||||||
paginationTotalRenderer,
|
paginationTotalRenderer,
|
||||||
|
sizePerPageOptionRenderer,
|
||||||
sizePerPageList,
|
sizePerPageList,
|
||||||
currSizePerPage,
|
currSizePerPage,
|
||||||
hideSizePerPage,
|
hideSizePerPage,
|
||||||
@ -132,6 +133,7 @@ class Pagination extends pageResolver(Component) {
|
|||||||
<SizePerPageDropDown
|
<SizePerPageDropDown
|
||||||
currSizePerPage={ `${currSizePerPage}` }
|
currSizePerPage={ `${currSizePerPage}` }
|
||||||
options={ this.calculateSizePerPageStatus() }
|
options={ this.calculateSizePerPageStatus() }
|
||||||
|
optionRenderer={ sizePerPageOptionRenderer }
|
||||||
onSizePerPageChange={ this.handleChangeSizePerPage }
|
onSizePerPageChange={ this.handleChangeSizePerPage }
|
||||||
onClick={ this.toggleDropDown }
|
onClick={ this.toggleDropDown }
|
||||||
onBlur={ this.closeDropDown }
|
onBlur={ this.closeDropDown }
|
||||||
@ -181,6 +183,7 @@ Pagination.propTypes = {
|
|||||||
pageListRenderer: PropTypes.func,
|
pageListRenderer: PropTypes.func,
|
||||||
pageButtonRenderer: PropTypes.func,
|
pageButtonRenderer: PropTypes.func,
|
||||||
paginationTotalRenderer: PropTypes.func,
|
paginationTotalRenderer: PropTypes.func,
|
||||||
|
sizePerPageOptionRenderer: PropTypes.func,
|
||||||
firstPageText: PropTypes.string,
|
firstPageText: PropTypes.string,
|
||||||
prePageText: PropTypes.string,
|
prePageText: PropTypes.string,
|
||||||
nextPageText: PropTypes.string,
|
nextPageText: PropTypes.string,
|
||||||
@ -204,6 +207,7 @@ Pagination.defaultProps = {
|
|||||||
pageListRenderer: null,
|
pageListRenderer: null,
|
||||||
pageButtonRenderer: null,
|
pageButtonRenderer: null,
|
||||||
paginationTotalRenderer: Const.PAGINATION_TOTAL,
|
paginationTotalRenderer: Const.PAGINATION_TOTAL,
|
||||||
|
sizePerPageOptionRenderer: null,
|
||||||
firstPageText: Const.FIRST_PAGE_TEXT,
|
firstPageText: Const.FIRST_PAGE_TEXT,
|
||||||
prePageText: Const.PRE_PAGE_TEXT,
|
prePageText: Const.PRE_PAGE_TEXT,
|
||||||
nextPageText: Const.NEXT_PAGE_TEXT,
|
nextPageText: Const.NEXT_PAGE_TEXT,
|
||||||
|
|||||||
@ -16,6 +16,7 @@ const SizePerPageDropDown = (props) => {
|
|||||||
className,
|
className,
|
||||||
variation,
|
variation,
|
||||||
btnContextual,
|
btnContextual,
|
||||||
|
optionRenderer,
|
||||||
currSizePerPage,
|
currSizePerPage,
|
||||||
onSizePerPageChange
|
onSizePerPageChange
|
||||||
} = props;
|
} = props;
|
||||||
@ -61,14 +62,22 @@ const SizePerPageDropDown = (props) => {
|
|||||||
aria-labelledby="pageDropDown"
|
aria-labelledby="pageDropDown"
|
||||||
>
|
>
|
||||||
{
|
{
|
||||||
options.map(option => (
|
options.map((option) => {
|
||||||
<SizePerPageOption
|
if (optionRenderer) {
|
||||||
{ ...option }
|
return optionRenderer({
|
||||||
key={ option.text }
|
...option,
|
||||||
bootstrap4={ bootstrap4 }
|
onSizePerPageChange
|
||||||
onSizePerPageChange={ onSizePerPageChange }
|
});
|
||||||
/>
|
}
|
||||||
))
|
return (
|
||||||
|
<SizePerPageOption
|
||||||
|
{ ...option }
|
||||||
|
key={ option.text }
|
||||||
|
bootstrap4={ bootstrap4 }
|
||||||
|
onSizePerPageChange={ onSizePerPageChange }
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
</span>
|
</span>
|
||||||
@ -88,14 +97,16 @@ SizePerPageDropDown.propTypes = {
|
|||||||
hidden: PropTypes.bool,
|
hidden: PropTypes.bool,
|
||||||
btnContextual: PropTypes.string,
|
btnContextual: PropTypes.string,
|
||||||
variation: PropTypes.oneOf(['dropdown', 'dropup']),
|
variation: PropTypes.oneOf(['dropdown', 'dropup']),
|
||||||
className: PropTypes.string
|
className: PropTypes.string,
|
||||||
|
optionRenderer: PropTypes.func
|
||||||
};
|
};
|
||||||
SizePerPageDropDown.defaultProps = {
|
SizePerPageDropDown.defaultProps = {
|
||||||
open: false,
|
open: false,
|
||||||
hidden: false,
|
hidden: false,
|
||||||
btnContextual: 'btn-default btn-secondary',
|
btnContextual: 'btn-default btn-secondary',
|
||||||
variation: 'dropdown',
|
variation: 'dropdown',
|
||||||
className: ''
|
className: '',
|
||||||
|
optionRenderer: null
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -79,6 +79,7 @@ class StateProvider extends React.Component {
|
|||||||
pageListRenderer: options.pageListRenderer,
|
pageListRenderer: options.pageListRenderer,
|
||||||
pageButtonRenderer: options.pageButtonRenderer,
|
pageButtonRenderer: options.pageButtonRenderer,
|
||||||
paginationTotalRenderer: options.paginationTotalRenderer,
|
paginationTotalRenderer: options.paginationTotalRenderer,
|
||||||
|
sizePerPageOptionRenderer: options.sizePerPageOptionRenderer,
|
||||||
firstPageText: options.firstPageText || Const.FIRST_PAGE_TEXT,
|
firstPageText: options.firstPageText || Const.FIRST_PAGE_TEXT,
|
||||||
prePageText: options.prePageText || Const.PRE_PAGE_TEXT,
|
prePageText: options.prePageText || Const.PRE_PAGE_TEXT,
|
||||||
nextPageText: options.nextPageText || Const.NEXT_PAGE_TEXT,
|
nextPageText: options.nextPageText || Const.NEXT_PAGE_TEXT,
|
||||||
|
|||||||
@ -178,4 +178,23 @@ describe('SizePerPageDropDown', () => {
|
|||||||
expect(wrapper.hasClass(className)).toBeTruthy();
|
expect(wrapper.hasClass(className)).toBeTruthy();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('when optionRenderer prop is defined', () => {
|
||||||
|
const optionRenderer = jest.fn();
|
||||||
|
beforeEach(() => {
|
||||||
|
optionRenderer.mockReset();
|
||||||
|
wrapper = shallowWithContext(
|
||||||
|
<SizePerPageDropDown { ...props } optionRenderer={ optionRenderer } />,
|
||||||
|
{ bootstrap4: false }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not render SizePerPageOption', () => {
|
||||||
|
expect(wrapper.find(SizePerPageOption)).toHaveLength(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should call optionRenderer prop correctly', () => {
|
||||||
|
expect(optionRenderer).toHaveBeenCalledTimes(props.options.length);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user