@dhis2-ui/pagination 8.0.2 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/__fixtures__/index.js +14 -2
- package/build/cjs/__tests__/get-item-range.test.js +88 -0
- package/build/cjs/__tests__/page-controls.test.js +7 -9
- package/build/cjs/__tests__/page-summary.test.js +32 -50
- package/build/cjs/__tests__/pagination.test.js +48 -32
- package/build/cjs/get-default-page-summary-text.js +44 -0
- package/build/cjs/get-item-range.js +47 -0
- package/build/cjs/locales/en/translations.json +4 -2
- package/build/cjs/page-controls.js +4 -4
- package/build/cjs/page-summary.js +9 -38
- package/build/cjs/pagination.js +52 -31
- package/build/cjs/pagination.stories.js +25 -11
- package/build/es/__fixtures__/index.js +10 -0
- package/build/es/__tests__/get-item-range.test.js +80 -0
- package/build/es/__tests__/page-controls.test.js +7 -4
- package/build/es/__tests__/page-summary.test.js +33 -46
- package/build/es/__tests__/pagination.test.js +48 -32
- package/build/es/get-default-page-summary-text.js +33 -0
- package/build/es/get-item-range.js +38 -0
- package/build/es/locales/en/translations.json +4 -2
- package/build/es/page-controls.js +4 -4
- package/build/es/page-summary.js +10 -36
- package/build/es/pagination.js +33 -15
- package/build/es/pagination.stories.js +21 -10
- package/package.json +5 -5
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.atLastPage = exports.atTenthPage = exports.atFirstPage = void 0;
|
|
6
|
+
exports.noTotalAtLastPage = exports.noTotal = exports.atLastPage = exports.atTenthPage = exports.atFirstPage = void 0;
|
|
7
7
|
const atFirstPage = {
|
|
8
8
|
page: 1,
|
|
9
9
|
pageCount: 21,
|
|
@@ -24,4 +24,16 @@ const atLastPage = {
|
|
|
24
24
|
total: 1035,
|
|
25
25
|
pageSize: 50
|
|
26
26
|
};
|
|
27
|
-
exports.atLastPage = atLastPage;
|
|
27
|
+
exports.atLastPage = atLastPage;
|
|
28
|
+
const noTotal = {
|
|
29
|
+
page: 2,
|
|
30
|
+
pageSize: 50,
|
|
31
|
+
isLastPage: false
|
|
32
|
+
};
|
|
33
|
+
exports.noTotal = noTotal;
|
|
34
|
+
const noTotalAtLastPage = {
|
|
35
|
+
page: 4,
|
|
36
|
+
pageSize: 50,
|
|
37
|
+
isLastPage: true
|
|
38
|
+
};
|
|
39
|
+
exports.noTotalAtLastPage = noTotalAtLastPage;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var mockPagers = _interopRequireWildcard(require("../__fixtures__/index.js"));
|
|
4
|
+
|
|
5
|
+
var _getItemRange = require("../get-item-range.js");
|
|
6
|
+
|
|
7
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
8
|
+
|
|
9
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
10
|
+
|
|
11
|
+
describe('getItemRange', () => {
|
|
12
|
+
it('calculates the firstItem and lastItem correctly', () => {
|
|
13
|
+
const {
|
|
14
|
+
page,
|
|
15
|
+
pageSize,
|
|
16
|
+
total
|
|
17
|
+
} = mockPagers.atTenthPage;
|
|
18
|
+
const {
|
|
19
|
+
firstItem,
|
|
20
|
+
lastItem
|
|
21
|
+
} = (0, _getItemRange.getItemRange)({
|
|
22
|
+
page,
|
|
23
|
+
pageSize,
|
|
24
|
+
total
|
|
25
|
+
});
|
|
26
|
+
expect(firstItem).toEqual(451);
|
|
27
|
+
expect(lastItem).toEqual(500);
|
|
28
|
+
});
|
|
29
|
+
it('returns 0 for firstItem and lastItem if the total is 0', () => {
|
|
30
|
+
const {
|
|
31
|
+
firstItem,
|
|
32
|
+
lastItem
|
|
33
|
+
} = (0, _getItemRange.getItemRange)({
|
|
34
|
+
page: 1,
|
|
35
|
+
pageSize: 50,
|
|
36
|
+
total: 0
|
|
37
|
+
});
|
|
38
|
+
expect(firstItem).toEqual(0);
|
|
39
|
+
expect(lastItem).toEqual(0);
|
|
40
|
+
});
|
|
41
|
+
it('uses the total count as lastItem when the last page is reached', () => {
|
|
42
|
+
const {
|
|
43
|
+
page,
|
|
44
|
+
pageSize,
|
|
45
|
+
total
|
|
46
|
+
} = mockPagers.atLastPage;
|
|
47
|
+
const {
|
|
48
|
+
lastItem
|
|
49
|
+
} = (0, _getItemRange.getItemRange)({
|
|
50
|
+
page,
|
|
51
|
+
pageSize,
|
|
52
|
+
total
|
|
53
|
+
});
|
|
54
|
+
expect(lastItem).toEqual(total);
|
|
55
|
+
});
|
|
56
|
+
it('handles pagers without totals', () => {
|
|
57
|
+
const {
|
|
58
|
+
firstItem,
|
|
59
|
+
lastItem
|
|
60
|
+
} = (0, _getItemRange.getItemRange)({
|
|
61
|
+
page: 3,
|
|
62
|
+
pageSize: 50
|
|
63
|
+
});
|
|
64
|
+
expect(firstItem).toEqual(101);
|
|
65
|
+
expect(lastItem).toEqual(150);
|
|
66
|
+
});
|
|
67
|
+
it('bases the lastItem on the pageLength for pagers without total when the last page is reached', () => {
|
|
68
|
+
const {
|
|
69
|
+
lastItem
|
|
70
|
+
} = (0, _getItemRange.getItemRange)({
|
|
71
|
+
page: 3,
|
|
72
|
+
pageSize: 50,
|
|
73
|
+
pageLength: 21,
|
|
74
|
+
isLastPage: true
|
|
75
|
+
});
|
|
76
|
+
expect(lastItem).toEqual(121);
|
|
77
|
+
});
|
|
78
|
+
it('sets lastItem to NaN when on the last page and there is no total or pageLength', () => {
|
|
79
|
+
const {
|
|
80
|
+
lastItem
|
|
81
|
+
} = (0, _getItemRange.getItemRange)({
|
|
82
|
+
page: 3,
|
|
83
|
+
pageSize: 50,
|
|
84
|
+
isLastPage: true
|
|
85
|
+
});
|
|
86
|
+
expect(lastItem).toEqual(NaN);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
@@ -4,14 +4,8 @@ var _enzyme = require("enzyme");
|
|
|
4
4
|
|
|
5
5
|
var _react = _interopRequireDefault(require("react"));
|
|
6
6
|
|
|
7
|
-
var mockPagers = _interopRequireWildcard(require("../__fixtures__/index.js"));
|
|
8
|
-
|
|
9
7
|
var _pageControls = require("../page-controls.js");
|
|
10
8
|
|
|
11
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
12
|
-
|
|
13
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
14
|
-
|
|
15
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
10
|
|
|
17
11
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
@@ -23,7 +17,7 @@ describe('<PageControls />', () => {
|
|
|
23
17
|
onClick: mockOnClick,
|
|
24
18
|
nextPageText: 'Next',
|
|
25
19
|
previousPageText: 'Previous',
|
|
26
|
-
|
|
20
|
+
page: 10
|
|
27
21
|
};
|
|
28
22
|
beforeEach(() => {
|
|
29
23
|
mockOnClick.mockClear();
|
|
@@ -37,12 +31,16 @@ describe('<PageControls />', () => {
|
|
|
37
31
|
expect(wrapper.find('.button-next').getElement().props.disabled).toEqual(false);
|
|
38
32
|
});
|
|
39
33
|
it('disables the previous page button on the first page', () => {
|
|
40
|
-
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageControls.PageControls, _extends({}, props,
|
|
34
|
+
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageControls.PageControls, _extends({}, props, {
|
|
35
|
+
page: 1
|
|
36
|
+
})));
|
|
41
37
|
expect(wrapper.find('.button-previous').getElement().props.disabled).toEqual(true);
|
|
42
38
|
expect(wrapper.find('.button-next').getElement().props.disabled).toEqual(false);
|
|
43
39
|
});
|
|
44
40
|
it('disables the next page button on the last page', () => {
|
|
45
|
-
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageControls.PageControls, _extends({}, props,
|
|
41
|
+
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageControls.PageControls, _extends({}, props, {
|
|
42
|
+
isLastPage: true
|
|
43
|
+
})));
|
|
46
44
|
expect(wrapper.find('.button-previous').getElement().props.disabled).toEqual(false);
|
|
47
45
|
expect(wrapper.find('.button-next').getElement().props.disabled).toEqual(true);
|
|
48
46
|
});
|
|
@@ -4,16 +4,10 @@ var _enzyme = require("enzyme");
|
|
|
4
4
|
|
|
5
5
|
var _react = _interopRequireDefault(require("react"));
|
|
6
6
|
|
|
7
|
-
var mockPagers = _interopRequireWildcard(require("../__fixtures__/index.js"));
|
|
8
|
-
|
|
9
7
|
var _pageSummary = require("../page-summary.js");
|
|
10
8
|
|
|
11
9
|
var _pagination = require("../pagination.js");
|
|
12
10
|
|
|
13
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
14
|
-
|
|
15
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
16
|
-
|
|
17
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
12
|
|
|
19
13
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
@@ -24,55 +18,43 @@ describe('<PageSummary />', () => {
|
|
|
24
18
|
pageSummaryText: _pagination.Pagination.defaultProps.pageSummaryText
|
|
25
19
|
};
|
|
26
20
|
it('renders without errors', () => {
|
|
27
|
-
(0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageSummary.PageSummary, _extends({}, props,
|
|
21
|
+
(0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageSummary.PageSummary, _extends({}, props, {
|
|
22
|
+
firstItem: 51,
|
|
23
|
+
lastItem: 100,
|
|
24
|
+
page: 2,
|
|
25
|
+
pageCount: 5,
|
|
26
|
+
total: 224
|
|
27
|
+
})));
|
|
28
28
|
});
|
|
29
|
-
it('
|
|
30
|
-
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageSummary.PageSummary, _extends({}, props,
|
|
31
|
-
|
|
29
|
+
it('renders the correct message when both total and lastItem are provided', () => {
|
|
30
|
+
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageSummary.PageSummary, _extends({}, props, {
|
|
31
|
+
firstItem: 51,
|
|
32
|
+
lastItem: 100,
|
|
33
|
+
page: 2,
|
|
34
|
+
pageCount: 5,
|
|
35
|
+
total: 224
|
|
36
|
+
})));
|
|
37
|
+
const expectedString = 'Page 2 of 5, items 51-100 of 224';
|
|
32
38
|
expect(wrapper.find('span').text()).toEqual(expectedString);
|
|
33
39
|
});
|
|
34
|
-
it('
|
|
35
|
-
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageSummary.PageSummary, _extends({}, props,
|
|
36
|
-
|
|
40
|
+
it('renders the correct message when only lastItem is provided', () => {
|
|
41
|
+
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageSummary.PageSummary, _extends({}, props, {
|
|
42
|
+
firstItem: 51,
|
|
43
|
+
lastItem: 100,
|
|
44
|
+
page: 2,
|
|
45
|
+
pageCount: 5
|
|
46
|
+
})));
|
|
47
|
+
const expectedString = 'Page 2, items 51-100';
|
|
37
48
|
expect(wrapper.find('span').text()).toEqual(expectedString);
|
|
38
49
|
});
|
|
39
|
-
it('
|
|
40
|
-
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageSummary.PageSummary, _extends({}, props,
|
|
41
|
-
|
|
50
|
+
it('renders the correct message when total is missing and lastItem is not a number', () => {
|
|
51
|
+
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageSummary.PageSummary, _extends({}, props, {
|
|
52
|
+
firstItem: 51,
|
|
53
|
+
lastItem: NaN,
|
|
54
|
+
page: 2,
|
|
55
|
+
pageCount: 5
|
|
56
|
+
})));
|
|
57
|
+
const expectedString = 'Page 2';
|
|
42
58
|
expect(wrapper.find('span').text()).toEqual(expectedString);
|
|
43
59
|
});
|
|
44
|
-
describe('getItemRange', () => {
|
|
45
|
-
it('calculates the firstItem and lastItem correctly', () => {
|
|
46
|
-
const {
|
|
47
|
-
page,
|
|
48
|
-
pageSize,
|
|
49
|
-
total
|
|
50
|
-
} = mockPagers.atTenthPage;
|
|
51
|
-
const {
|
|
52
|
-
firstItem,
|
|
53
|
-
lastItem
|
|
54
|
-
} = (0, _pageSummary.getItemRange)(page, pageSize, total);
|
|
55
|
-
expect(firstItem).toEqual(451);
|
|
56
|
-
expect(lastItem).toEqual(500);
|
|
57
|
-
});
|
|
58
|
-
it('returns 0 for firstItem and lastItem if the total is 0', () => {
|
|
59
|
-
const {
|
|
60
|
-
firstItem,
|
|
61
|
-
lastItem
|
|
62
|
-
} = (0, _pageSummary.getItemRange)(1, 50, 0);
|
|
63
|
-
expect(firstItem).toEqual(0);
|
|
64
|
-
expect(lastItem).toEqual(0);
|
|
65
|
-
});
|
|
66
|
-
it('uses the total count as lastItem when the last page is reached', () => {
|
|
67
|
-
const {
|
|
68
|
-
page,
|
|
69
|
-
pageSize,
|
|
70
|
-
total
|
|
71
|
-
} = mockPagers.atLastPage;
|
|
72
|
-
const {
|
|
73
|
-
lastItem
|
|
74
|
-
} = (0, _pageSummary.getItemRange)(page, pageSize, total);
|
|
75
|
-
expect(lastItem).toEqual(total);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
60
|
});
|
|
@@ -21,38 +21,54 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
21
21
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
22
22
|
|
|
23
23
|
describe('<Pagination />', () => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
(
|
|
24
|
+
describe('Pagination with total and totalPages', () => {
|
|
25
|
+
const props = { ...mockPagers.atTenthPage,
|
|
26
|
+
onPageChange: () => {},
|
|
27
|
+
onPageSizeChange: () => {}
|
|
28
|
+
};
|
|
29
|
+
it('renders without errors', () => {
|
|
30
|
+
(0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pagination.Pagination, props));
|
|
31
|
+
});
|
|
32
|
+
it('renders a PageSelect and PageSizeSelect by default', () => {
|
|
33
|
+
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pagination.Pagination, props));
|
|
34
|
+
expect(wrapper.find(_pageSelect.PageSelect).length).toEqual(1);
|
|
35
|
+
expect(wrapper.find(_pageSizeSelect.PageSizeSelect).length).toEqual(1);
|
|
36
|
+
});
|
|
37
|
+
it('renders without a PageSelect when hidePageSelect is true', () => {
|
|
38
|
+
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pagination.Pagination, _extends({}, props, {
|
|
39
|
+
hidePageSelect: true
|
|
40
|
+
})));
|
|
41
|
+
expect(wrapper.find(_pageSelect.PageSelect).length).toEqual(0);
|
|
42
|
+
expect(wrapper.find(_pageSizeSelect.PageSizeSelect).length).toEqual(1);
|
|
43
|
+
});
|
|
44
|
+
it('renders without a PageSizeSelect when hidePageSizeSelect is true', () => {
|
|
45
|
+
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pagination.Pagination, _extends({}, props, {
|
|
46
|
+
hidePageSizeSelect: true
|
|
47
|
+
})));
|
|
48
|
+
expect(wrapper.find(_pageSelect.PageSelect).length).toEqual(1);
|
|
49
|
+
expect(wrapper.find(_pageSizeSelect.PageSizeSelect).length).toEqual(0);
|
|
50
|
+
});
|
|
51
|
+
it('renders without PageSelect and PageSizeSelect when both are true', () => {
|
|
52
|
+
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pagination.Pagination, _extends({}, props, {
|
|
53
|
+
hidePageSelect: true,
|
|
54
|
+
hidePageSizeSelect: true
|
|
55
|
+
})));
|
|
56
|
+
expect(wrapper.find(_pageSelect.PageSelect).length).toEqual(0);
|
|
57
|
+
expect(wrapper.find(_pageSizeSelect.PageSizeSelect).length).toEqual(0);
|
|
58
|
+
});
|
|
30
59
|
});
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pagination.Pagination, _extends({}, props, {
|
|
45
|
-
hidePageSizeSelect: true
|
|
46
|
-
})));
|
|
47
|
-
expect(wrapper.find(_pageSelect.PageSelect).length).toEqual(1);
|
|
48
|
-
expect(wrapper.find(_pageSizeSelect.PageSizeSelect).length).toEqual(0);
|
|
49
|
-
});
|
|
50
|
-
it('renders without PageSelect and PageSizeSelect when both are true', () => {
|
|
51
|
-
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pagination.Pagination, _extends({}, props, {
|
|
52
|
-
hidePageSelect: true,
|
|
53
|
-
hidePageSizeSelect: true
|
|
54
|
-
})));
|
|
55
|
-
expect(wrapper.find(_pageSelect.PageSelect).length).toEqual(0);
|
|
56
|
-
expect(wrapper.find(_pageSizeSelect.PageSizeSelect).length).toEqual(0);
|
|
60
|
+
describe('Pagination without total and totalPages', () => {
|
|
61
|
+
const props = { ...mockPagers.noTotal,
|
|
62
|
+
onPageChange: () => {},
|
|
63
|
+
onPageSizeChange: () => {}
|
|
64
|
+
};
|
|
65
|
+
it('renders without errors', () => {
|
|
66
|
+
(0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pagination.Pagination, props));
|
|
67
|
+
});
|
|
68
|
+
it('renders with a PageSizeSelect but without a PageSelect', () => {
|
|
69
|
+
const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pagination.Pagination, props));
|
|
70
|
+
expect(wrapper.find(_pageSizeSelect.PageSizeSelect).length).toEqual(1);
|
|
71
|
+
expect(wrapper.find(_pageSelect.PageSelect).length).toEqual(0);
|
|
72
|
+
});
|
|
57
73
|
});
|
|
58
74
|
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getDefaultPageSummaryText = void 0;
|
|
7
|
+
|
|
8
|
+
var _index = _interopRequireDefault(require("./locales/index.js"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
const isValidNumber = input => typeof input === 'number' && !isNaN(input);
|
|
13
|
+
|
|
14
|
+
const getDefaultPageSummaryText = ({
|
|
15
|
+
firstItem,
|
|
16
|
+
lastItem,
|
|
17
|
+
page,
|
|
18
|
+
pageCount,
|
|
19
|
+
total
|
|
20
|
+
}) => {
|
|
21
|
+
if (isValidNumber(total) && isValidNumber(lastItem)) {
|
|
22
|
+
return _index.default.t('Page {{page}} of {{pageCount}}, items {{firstItem}}-{{lastItem}} of {{total}}', {
|
|
23
|
+
page,
|
|
24
|
+
pageCount,
|
|
25
|
+
firstItem,
|
|
26
|
+
lastItem,
|
|
27
|
+
total
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (isValidNumber(lastItem)) {
|
|
32
|
+
return _index.default.t('Page {{page}}, items {{firstItem}}-{{lastItem}}', {
|
|
33
|
+
page,
|
|
34
|
+
firstItem,
|
|
35
|
+
lastItem
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return _index.default.t('Page {{page}}', {
|
|
40
|
+
page
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
exports.getDefaultPageSummaryText = getDefaultPageSummaryText;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getItemRange = void 0;
|
|
7
|
+
|
|
8
|
+
const getItemRange = ({
|
|
9
|
+
isLastPage,
|
|
10
|
+
page,
|
|
11
|
+
pageLength,
|
|
12
|
+
pageSize,
|
|
13
|
+
total
|
|
14
|
+
}) => {
|
|
15
|
+
// page is 1-based
|
|
16
|
+
let firstItem = (page - 1) * pageSize + 1;
|
|
17
|
+
let lastItem = firstItem + pageSize - 1;
|
|
18
|
+
|
|
19
|
+
if (typeof total === 'number') {
|
|
20
|
+
if (total === 0) {
|
|
21
|
+
/*
|
|
22
|
+
* if no items are found, the pager total is 0
|
|
23
|
+
* and the first and last item should be be 0 too
|
|
24
|
+
*/
|
|
25
|
+
firstItem = 0;
|
|
26
|
+
lastItem = 0;
|
|
27
|
+
} else if (lastItem > total) {
|
|
28
|
+
lastItem = total;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (typeof pageLength === 'number') {
|
|
33
|
+
lastItem = firstItem + pageLength - 1;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (isLastPage && isNaN(total) && isNaN(pageLength)) {
|
|
37
|
+
// impossible to accurately determine the last item
|
|
38
|
+
lastItem = NaN;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
firstItem,
|
|
43
|
+
lastItem
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
exports.getItemRange = getItemRange;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
+
"Page {{page}} of {{pageCount}}, items {{firstItem}}-{{lastItem}} of {{total}}": "Page {{page}} of {{pageCount}}, items {{firstItem}}-{{lastItem}} of {{total}}",
|
|
3
|
+
"Page {{page}}, items {{firstItem}}-{{lastItem}}": "Page {{page}}, items {{firstItem}}-{{lastItem}}",
|
|
4
|
+
"Page {{page}}": "Page {{page}}",
|
|
2
5
|
"Next": "Next",
|
|
3
6
|
"Page": "Page",
|
|
4
7
|
"Items per page": "Items per page",
|
|
5
|
-
"Page {{page}} of {{pageCount}}, items {{firstItem}}-{{lastItem}} of {{total}}": "Page {{page}} of {{pageCount}}, items {{firstItem}}-{{lastItem}} of {{total}}",
|
|
6
8
|
"Previous": "Previous",
|
|
7
|
-
"
|
|
9
|
+
"You are at page {{page}} showing items {{firstItem}}-{{lastItem}}, but there are {{pageCount}} pages and {{total}} items": "You are at page {{page}} showing items {{firstItem}}-{{lastItem}}, but there are {{pageCount}} pages and {{total}} items"
|
|
8
10
|
}
|
|
@@ -30,10 +30,10 @@ const translate = (prop, interpolationObject) => {
|
|
|
30
30
|
|
|
31
31
|
const PageControls = ({
|
|
32
32
|
dataTest,
|
|
33
|
+
isLastPage,
|
|
33
34
|
onClick,
|
|
34
35
|
nextPageText,
|
|
35
36
|
page,
|
|
36
|
-
pageCount,
|
|
37
37
|
previousPageText
|
|
38
38
|
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
39
39
|
"data-test": `${dataTest}-pagecontrols`,
|
|
@@ -49,7 +49,7 @@ const PageControls = ({
|
|
|
49
49
|
secondary: true,
|
|
50
50
|
className: "button-next",
|
|
51
51
|
small: true,
|
|
52
|
-
disabled:
|
|
52
|
+
disabled: !!isLastPage,
|
|
53
53
|
onClick: () => onClick(page + 1),
|
|
54
54
|
dataTest: `${dataTest}-page-next`
|
|
55
55
|
}, translate(nextPageText), /*#__PURE__*/_react.default.createElement(_uiIcons.IconChevronRight16, null)), /*#__PURE__*/_react.default.createElement(_style.default, {
|
|
@@ -62,7 +62,7 @@ PageControls.propTypes = {
|
|
|
62
62
|
dataTest: _propTypes.default.string.isRequired,
|
|
63
63
|
nextPageText: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func]).isRequired,
|
|
64
64
|
page: _propTypes.default.number.isRequired,
|
|
65
|
-
pageCount: _propTypes.default.number.isRequired,
|
|
66
65
|
previousPageText: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func]).isRequired,
|
|
67
|
-
onClick: _propTypes.default.func.isRequired
|
|
66
|
+
onClick: _propTypes.default.func.isRequired,
|
|
67
|
+
isLastPage: _propTypes.default.bool
|
|
68
68
|
};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.PageSummary = void 0;
|
|
7
7
|
|
|
8
8
|
var _style = _interopRequireDefault(require("styled-jsx/style"));
|
|
9
9
|
|
|
@@ -15,7 +15,6 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
15
15
|
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
17
|
|
|
18
|
-
// TODO: i18n translate
|
|
19
18
|
const translate = (prop, interpolationObject) => {
|
|
20
19
|
if (typeof prop === 'function') {
|
|
21
20
|
return prop(interpolationObject);
|
|
@@ -24,49 +23,20 @@ const translate = (prop, interpolationObject) => {
|
|
|
24
23
|
return prop;
|
|
25
24
|
};
|
|
26
25
|
|
|
27
|
-
const getItemRange = (page, pageSize, total) => {
|
|
28
|
-
let firstItem, lastItem;
|
|
29
|
-
|
|
30
|
-
if (total === 0) {
|
|
31
|
-
// if no items are found, the pager total is 0
|
|
32
|
-
// and we want to force the first and last item to be 0 too
|
|
33
|
-
firstItem = 0;
|
|
34
|
-
lastItem = 0;
|
|
35
|
-
} else {
|
|
36
|
-
// page is 1-based
|
|
37
|
-
firstItem = (page - 1) * pageSize + 1;
|
|
38
|
-
lastItem = firstItem + pageSize - 1;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (lastItem > total) {
|
|
42
|
-
lastItem = total;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return {
|
|
46
|
-
firstItem,
|
|
47
|
-
lastItem
|
|
48
|
-
};
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
exports.getItemRange = getItemRange;
|
|
52
|
-
|
|
53
26
|
const PageSummary = ({
|
|
54
27
|
dataTest,
|
|
28
|
+
firstItem,
|
|
29
|
+
lastItem,
|
|
55
30
|
page,
|
|
56
31
|
pageCount,
|
|
57
|
-
pageSize,
|
|
58
32
|
pageSummaryText,
|
|
59
33
|
total
|
|
60
34
|
}) => {
|
|
61
|
-
const {
|
|
62
|
-
firstItem,
|
|
63
|
-
lastItem
|
|
64
|
-
} = getItemRange(page, pageSize, total);
|
|
65
35
|
const summary = translate(pageSummaryText, {
|
|
66
|
-
page,
|
|
67
|
-
pageCount,
|
|
68
36
|
firstItem,
|
|
69
37
|
lastItem,
|
|
38
|
+
page,
|
|
39
|
+
pageCount,
|
|
70
40
|
total
|
|
71
41
|
});
|
|
72
42
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -84,8 +54,9 @@ exports.PageSummary = PageSummary;
|
|
|
84
54
|
PageSummary.propTypes = {
|
|
85
55
|
dataTest: _propTypes.default.string.isRequired,
|
|
86
56
|
page: _propTypes.default.number.isRequired,
|
|
87
|
-
pageCount: _propTypes.default.number.isRequired,
|
|
88
|
-
pageSize: _propTypes.default.number.isRequired,
|
|
89
57
|
pageSummaryText: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func]).isRequired,
|
|
90
|
-
|
|
58
|
+
firstItem: _propTypes.default.number,
|
|
59
|
+
lastItem: _propTypes.default.number,
|
|
60
|
+
pageCount: _propTypes.default.number,
|
|
61
|
+
total: _propTypes.default.number
|
|
91
62
|
};
|