mirror of
https://github.com/ansible/awx.git
synced 2026-05-18 06:47:41 -02:30
Merge pull request #7614 from vjanssens/5626-add-item-count
Add pagination/item count to DataListToolbar Reviewed-by: https://github.com/apps/softwarefactory-project-zuul
This commit is contained in:
@@ -20,6 +20,7 @@ import { SearchColumns, SortColumns, QSConfig } from '../../types';
|
|||||||
class DataListToolbar extends React.Component {
|
class DataListToolbar extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
const {
|
const {
|
||||||
|
itemCount,
|
||||||
clearAllFilters,
|
clearAllFilters,
|
||||||
searchColumns,
|
searchColumns,
|
||||||
sortColumns,
|
sortColumns,
|
||||||
@@ -36,6 +37,7 @@ class DataListToolbar extends React.Component {
|
|||||||
additionalControls,
|
additionalControls,
|
||||||
i18n,
|
i18n,
|
||||||
qsConfig,
|
qsConfig,
|
||||||
|
pagination,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
const showExpandCollapse = onCompact && onExpand;
|
const showExpandCollapse = onCompact && onExpand;
|
||||||
@@ -90,6 +92,9 @@ class DataListToolbar extends React.Component {
|
|||||||
<ToolbarItem key={control.key}>{control}</ToolbarItem>
|
<ToolbarItem key={control.key}>{control}</ToolbarItem>
|
||||||
))}
|
))}
|
||||||
</ToolbarGroup>
|
</ToolbarGroup>
|
||||||
|
{pagination && itemCount > 0 && (
|
||||||
|
<ToolbarItem variant="pagination">{pagination}</ToolbarItem>
|
||||||
|
)}
|
||||||
</ToolbarContent>
|
</ToolbarContent>
|
||||||
</Toolbar>
|
</Toolbar>
|
||||||
);
|
);
|
||||||
@@ -97,6 +102,7 @@ class DataListToolbar extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
DataListToolbar.propTypes = {
|
DataListToolbar.propTypes = {
|
||||||
|
itemCount: PropTypes.number,
|
||||||
clearAllFilters: PropTypes.func,
|
clearAllFilters: PropTypes.func,
|
||||||
qsConfig: QSConfig.isRequired,
|
qsConfig: QSConfig.isRequired,
|
||||||
searchColumns: SearchColumns.isRequired,
|
searchColumns: SearchColumns.isRequired,
|
||||||
@@ -114,6 +120,7 @@ DataListToolbar.propTypes = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
DataListToolbar.defaultProps = {
|
DataListToolbar.defaultProps = {
|
||||||
|
itemCount: 0,
|
||||||
clearAllFilters: null,
|
clearAllFilters: null,
|
||||||
showSelectAll: false,
|
showSelectAll: false,
|
||||||
isAllSelected: false,
|
isAllSelected: false,
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ class ListHeader extends React.Component {
|
|||||||
renderToolbar,
|
renderToolbar,
|
||||||
qsConfig,
|
qsConfig,
|
||||||
location,
|
location,
|
||||||
|
pagination,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
const params = parseQueryString(qsConfig, location.search);
|
const params = parseQueryString(qsConfig, location.search);
|
||||||
const isEmpty = itemCount === 0 && Object.keys(params).length === 0;
|
const isEmpty = itemCount === 0 && Object.keys(params).length === 0;
|
||||||
@@ -118,6 +119,7 @@ class ListHeader extends React.Component {
|
|||||||
) : (
|
) : (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
{renderToolbar({
|
{renderToolbar({
|
||||||
|
itemCount,
|
||||||
searchColumns,
|
searchColumns,
|
||||||
sortColumns,
|
sortColumns,
|
||||||
onSearch: this.handleSearch,
|
onSearch: this.handleSearch,
|
||||||
@@ -126,6 +128,7 @@ class ListHeader extends React.Component {
|
|||||||
onRemove: this.handleRemove,
|
onRemove: this.handleRemove,
|
||||||
clearAllFilters: this.handleRemoveAll,
|
clearAllFilters: this.handleRemoveAll,
|
||||||
qsConfig,
|
qsConfig,
|
||||||
|
pagination,
|
||||||
})}
|
})}
|
||||||
</Fragment>
|
</Fragment>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -121,6 +121,28 @@ class PaginatedDataList extends React.Component {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ToolbarPagination = (
|
||||||
|
<Pagination
|
||||||
|
isCompact
|
||||||
|
dropDirection="down"
|
||||||
|
itemCount={itemCount}
|
||||||
|
page={queryParams.page || 1}
|
||||||
|
perPage={queryParams.page_size}
|
||||||
|
perPageOptions={
|
||||||
|
showPageSizeOptions
|
||||||
|
? [
|
||||||
|
{ title: '5', value: 5 },
|
||||||
|
{ title: '10', value: 10 },
|
||||||
|
{ title: '20', value: 20 },
|
||||||
|
{ title: '50', value: 50 },
|
||||||
|
]
|
||||||
|
: []
|
||||||
|
}
|
||||||
|
onSetPage={this.handleSetPage}
|
||||||
|
onPerPageSelect={this.handleSetPageSize}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<ListHeader
|
<ListHeader
|
||||||
@@ -130,6 +152,7 @@ class PaginatedDataList extends React.Component {
|
|||||||
searchColumns={searchColumns}
|
searchColumns={searchColumns}
|
||||||
sortColumns={sortColumns}
|
sortColumns={sortColumns}
|
||||||
qsConfig={qsConfig}
|
qsConfig={qsConfig}
|
||||||
|
pagination={ToolbarPagination}
|
||||||
/>
|
/>
|
||||||
{Content}
|
{Content}
|
||||||
{items.length ? (
|
{items.length ? (
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ describe('<PaginatedDataList />', () => {
|
|||||||
{ context: { router: { history } } }
|
{ context: { router: { history } } }
|
||||||
);
|
);
|
||||||
|
|
||||||
const pagination = wrapper.find('Pagination');
|
const pagination = wrapper.find('Pagination').at(1);
|
||||||
pagination.prop('onSetPage')(null, 2);
|
pagination.prop('onSetPage')(null, 2);
|
||||||
expect(history.location.search).toEqual('?item.page=2');
|
expect(history.location.search).toEqual('?item.page=2');
|
||||||
wrapper.update();
|
wrapper.update();
|
||||||
@@ -82,7 +82,7 @@ describe('<PaginatedDataList />', () => {
|
|||||||
{ context: { router: { history } } }
|
{ context: { router: { history } } }
|
||||||
);
|
);
|
||||||
|
|
||||||
const pagination = wrapper.find('Pagination');
|
const pagination = wrapper.find('Pagination').at(1);
|
||||||
pagination.prop('onPerPageSelect')(null, 25, 2);
|
pagination.prop('onPerPageSelect')(null, 25, 2);
|
||||||
expect(history.location.search).toEqual('?item.page=2&item.page_size=25');
|
expect(history.location.search).toEqual('?item.page=2&item.page_size=25');
|
||||||
wrapper.update();
|
wrapper.update();
|
||||||
|
|||||||
Reference in New Issue
Block a user