@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.
@@ -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
- ...mockPagers.atTenthPage
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, mockPagers.atFirstPage)));
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, mockPagers.atLastPage)));
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, mockPagers.atTenthPage)));
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('displays the correct information for a first page', () => {
30
- const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageSummary.PageSummary, _extends({}, props, mockPagers.atFirstPage)));
31
- const expectedString = 'Page 1 of 21, items 1-50 of 1035';
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('displays the correct information for a last page', () => {
35
- const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageSummary.PageSummary, _extends({}, props, mockPagers.atLastPage)));
36
- const expectedString = 'Page 21 of 21, items 1001-1035 of 1035';
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('displays the correct information for a page between first and last', () => {
40
- const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pageSummary.PageSummary, _extends({}, props, mockPagers.atTenthPage)));
41
- const expectedString = 'Page 10 of 21, items 451-500 of 1035';
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
- const props = { ...mockPagers.atTenthPage,
25
- onPageChange: () => {},
26
- onPageSizeChange: () => {}
27
- };
28
- it('renders without errors', () => {
29
- (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pagination.Pagination, props));
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
- it('renders a PageSelect and PageSizeSelect by default', () => {
32
- const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pagination.Pagination, props));
33
- expect(wrapper.find(_pageSelect.PageSelect).length).toEqual(1);
34
- expect(wrapper.find(_pageSizeSelect.PageSizeSelect).length).toEqual(1);
35
- });
36
- it('renders without a PageSelect when hidePageSelect is true', () => {
37
- const wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react.default.createElement(_pagination.Pagination, _extends({}, props, {
38
- hidePageSelect: true
39
- })));
40
- expect(wrapper.find(_pageSelect.PageSelect).length).toEqual(0);
41
- expect(wrapper.find(_pageSizeSelect.PageSizeSelect).length).toEqual(1);
42
- });
43
- it('renders without a PageSizeSelect when hidePageSizeSelect is true', () => {
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
- "Page nr {{page}} of {{pageCount}} pages, items {{firstItem}}-{{lastItem}}, NO TOTAL": "Page nr {{page}} of {{pageCount}} pages, items {{firstItem}}-{{lastItem}}, NO TOTAL"
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: page === pageCount,
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.getItemRange = exports.PageSummary = void 0;
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
- total: _propTypes.default.number.isRequired
58
+ firstItem: _propTypes.default.number,
59
+ lastItem: _propTypes.default.number,
60
+ pageCount: _propTypes.default.number,
61
+ total: _propTypes.default.number
91
62
  };