@auth0/quantum-product 1.6.5 → 1.6.6

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.
@@ -1,2 +1,3 @@
1
+ export * from './pager';
1
2
  export { Pagination } from './pagination';
2
3
  export { paginationClasses } from './pagination-classes';
@@ -0,0 +1,2 @@
1
+ export { Pager } from './pager';
2
+ export { pagerClasses } from './pager-classes';
@@ -0,0 +1,10 @@
1
+ import { generateUtilityClass, generateUtilityClasses } from '../../styles/classes';
2
+ export var pagerComponentName = 'QuantumPager';
3
+ export function getPagerUtilityClass(slot) {
4
+ return generateUtilityClass(pagerComponentName, slot);
5
+ }
6
+ export var pagerClasses = generateUtilityClasses(pagerComponentName, [
7
+ 'root',
8
+ 'previousPageButton',
9
+ 'nextPageButton',
10
+ ]);
@@ -0,0 +1,40 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ import * as React from 'react';
24
+ import { IconButton } from '../../icon-button';
25
+ import { StackLayout } from '../../stack-layout';
26
+ import { useMergedClasses } from '../../styles/classes';
27
+ import { getPagerUtilityClass, pagerClasses } from './pager-classes';
28
+ import { clsx } from '../../utils';
29
+ import { ChevronLeftIcon, ChevronRightIcon } from '../../icon';
30
+ export var Pager = React.forwardRef(function (props, ref) {
31
+ var page = props.page, propClasses = props.classes, className = props.className, disabled = props.disabled, nextDisabled = props.nextDisabled, _a = props.nextIconButtonProps, nextIconButtonProps = _a === void 0 ? {} : _a, onPageChange = props.onPageChange, previousDisabled = props.previousDisabled, _b = props.previousIconButtonProps, previousIconButtonProps = _b === void 0 ? {} : _b, _c = props.size, size = _c === void 0 ? 'medium' : _c, _d = props.sx, sx = _d === void 0 ? {} : _d, totalPages = props.totalPages, rootProps = __rest(props, ["page", "classes", "className", "disabled", "nextDisabled", "nextIconButtonProps", "onPageChange", "previousDisabled", "previousIconButtonProps", "size", "sx", "totalPages"]);
32
+ var classes = useMergedClasses(pagerClasses, getPagerUtilityClass, propClasses);
33
+ var isPrevDisabled = disabled || previousDisabled || page <= 1;
34
+ var isNextDisabled = disabled || nextDisabled || (totalPages != null && page >= totalPages);
35
+ return (React.createElement(StackLayout, __assign({ ref: ref, gutter: 1, className: clsx(classes.root, className), sx: __assign({ justifyContent: 'flex-end' }, sx) }, rootProps),
36
+ React.createElement(IconButton, __assign({ variant: "outlined", size: size, className: classes.previousPageButton, onClick: function () { return onPageChange && onPageChange(page - 1); }, disabled: isPrevDisabled, "aria-label": "Previous page" }, nextIconButtonProps),
37
+ React.createElement(ChevronLeftIcon, null)),
38
+ React.createElement(IconButton, __assign({ variant: "outlined", size: size, className: classes.nextPageButton, onClick: function () { return onPageChange && onPageChange(page + 1); }, disabled: isNextDisabled, "aria-label": "Next page" }, previousIconButtonProps),
39
+ React.createElement(ChevronRightIcon, null))));
40
+ });
@@ -0,0 +1,47 @@
1
+ import * as React from 'react';
2
+ import { Pager } from '..';
3
+ import { fireEvent, render, runBaseTests } from '../../test-utils';
4
+ runBaseTests(Pager, { page: 1 });
5
+ test('disables previous and next page if disabled is true', function () {
6
+ var getByLabelText = render(React.createElement(Pager, { page: 2, disabled: true })).getByLabelText;
7
+ var previousPageButton = getByLabelText('Previous page');
8
+ var nextPageButton = getByLabelText('Next page');
9
+ expect(previousPageButton.disabled).toBe(true);
10
+ expect(nextPageButton.disabled).toBe(true);
11
+ });
12
+ test('disables previous page on first page', function () {
13
+ var getByLabelText = render(React.createElement(Pager, { page: 1 })).getByLabelText;
14
+ var previousPageButton = getByLabelText('Previous page');
15
+ expect(previousPageButton.disabled).toBe(true);
16
+ });
17
+ test('disables previous page if previousDisabled is true', function () {
18
+ var getByLabelText = render(React.createElement(Pager, { page: 2, previousDisabled: true })).getByLabelText;
19
+ var previousPageButton = getByLabelText('Previous page');
20
+ expect(previousPageButton.disabled).toBe(true);
21
+ });
22
+ test('disables next page if nextDisabled is true', function () {
23
+ var getByLabelText = render(React.createElement(Pager, { page: 2, nextDisabled: true })).getByLabelText;
24
+ var nextPageButton = getByLabelText('Next page');
25
+ expect(nextPageButton.disabled).toBe(true);
26
+ });
27
+ test('disables next page if page is equal to totalPages', function () {
28
+ var getByLabelText = render(React.createElement(Pager, { page: 2, totalPages: 2 })).getByLabelText;
29
+ var nextPageButton = getByLabelText('Next page');
30
+ expect(nextPageButton.disabled).toBe(true);
31
+ });
32
+ test('goes previous page if previous page is clicked', function () {
33
+ var currentPage = 2;
34
+ var pageChangeHandler = jest.fn();
35
+ var getByLabelText = render(React.createElement(Pager, { page: currentPage, onPageChange: pageChangeHandler })).getByLabelText;
36
+ var previousPageButton = getByLabelText('Previous page');
37
+ fireEvent.click(previousPageButton);
38
+ expect(pageChangeHandler).toBeCalledWith(currentPage - 1);
39
+ });
40
+ test('goes next page if next page is clicked', function () {
41
+ var currentPage = 2;
42
+ var pageChangeHandler = jest.fn();
43
+ var getByLabelText = render(React.createElement(Pager, { page: currentPage, onPageChange: pageChangeHandler })).getByLabelText;
44
+ var nextPageButton = getByLabelText('Next page');
45
+ fireEvent.click(nextPageButton);
46
+ expect(pageChangeHandler).toBeCalledWith(currentPage + 1);
47
+ });
@@ -7,6 +7,5 @@ export var paginationClasses = generateUtilityClasses(paginationComponentName, [
7
7
  'root',
8
8
  'pageSelect',
9
9
  'pageLabelText',
10
- 'previousPageButton',
11
- 'nextPageButton',
10
+ 'pager',
12
11
  ]);
@@ -21,8 +21,6 @@ var __rest = (this && this.__rest) || function (s, e) {
21
21
  return t;
22
22
  };
23
23
  import * as React from 'react';
24
- import { ChevronLeftIcon, ChevronRightIcon } from '../icon';
25
- import { IconButton } from '../icon-button';
26
24
  import { Select } from '../select';
27
25
  import { StackLayout, StackLayoutItem } from '../stack-layout';
28
26
  import { styled } from '../styled';
@@ -30,6 +28,7 @@ import { useMergedClasses } from '../styles/classes';
30
28
  import { Text } from '../text';
31
29
  import clsx from '../utils/clsx';
32
30
  import { paginationComponentName, paginationClasses, getPaginationUtilityClass, } from './pagination-classes';
31
+ import { Pager } from './pager';
33
32
  var Root = styled('fieldset', { name: paginationComponentName, slot: 'Root' })(function (_a) {
34
33
  var ownerState = _a.ownerState;
35
34
  return (__assign({ justifyContent: 'space-between', display: 'flex', alignItems: 'center', margin: 0, padding: 0, border: 'none' }, (ownerState.disabled && {
@@ -62,7 +61,7 @@ var changePageIfAppropriate = function (_a) {
62
61
  }
63
62
  };
64
63
  export var Pagination = React.forwardRef(function (props, ref) {
65
- var children = props.children, className = props.className, page = props.page, perPage = props.perPage, items = props.items, onPageChanged = props.onPageChanged, disabled = props.disabled, propClasses = props.classes, rootProps = __rest(props, ["children", "className", "page", "perPage", "items", "onPageChanged", "disabled", "classes"]);
64
+ var children = props.children, className = props.className, page = props.page, perPage = props.perPage, items = props.items, onPageChanged = props.onPageChanged, disabled = props.disabled, propClasses = props.classes, _a = props.PagerProps, PagerProps = _a === void 0 ? {} : _a, rootProps = __rest(props, ["children", "className", "page", "perPage", "items", "onPageChanged", "disabled", "classes", "PagerProps"]);
66
65
  var classes = useMergedClasses(paginationClasses, getPaginationUtilityClass, propClasses);
67
66
  var pages = pagesFromItems(items, perPage);
68
67
  var pageOptions = React.useMemo(function () {
@@ -79,8 +78,6 @@ export var Pagination = React.forwardRef(function (props, ref) {
79
78
  if (pages <= 1) {
80
79
  return null;
81
80
  }
82
- var inFirstPage = page === 1;
83
- var inLastPage = page === pages;
84
81
  return (React.createElement(Root, __assign({ ref: ref, ownerState: { disabled: disabled }, className: clsx(classes.root, className) }, rootProps), items > 0 && (React.createElement(React.Fragment, null,
85
82
  React.createElement(StackLayout, { gutter: 1 },
86
83
  React.createElement(StackLayoutItem, null,
@@ -99,11 +96,5 @@ export var Pagination = React.forwardRef(function (props, ref) {
99
96
  React.createElement(Text, { className: classes.pageLabelText, variant: "body2" },
100
97
  "of ",
101
98
  pages))),
102
- React.createElement(StackLayout, { gutter: 1 },
103
- React.createElement(StackLayoutItem, null,
104
- React.createElement(IconButton, { variant: "outlined", className: classes.previousPageButton, onClick: function () { return changePageIfAppropriate({ nextPage: page - 1, total: items, perPage: perPage, onPageChanged: onPageChanged }); }, disabled: inFirstPage, "aria-label": "Previous page" },
105
- React.createElement(ChevronLeftIcon, null))),
106
- React.createElement(StackLayoutItem, null,
107
- React.createElement(IconButton, { variant: "outlined", className: classes.nextPageButton, onClick: function () { return changePageIfAppropriate({ nextPage: page + 1, total: items, perPage: perPage, onPageChanged: onPageChanged }); }, disabled: inLastPage, "aria-label": "Next page" },
108
- React.createElement(ChevronRightIcon, null))))))));
99
+ React.createElement(Pager, __assign({ page: page, className: classes.pager, onPageChange: function (nextPage) { return changePageIfAppropriate({ nextPage: nextPage, total: items, perPage: perPage, onPageChanged: onPageChanged }); }, totalPages: pages, disabled: disabled }, PagerProps))))));
109
100
  });
@@ -0,0 +1,67 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import * as React from 'react';
13
+ import { faker } from '@faker-js/faker';
14
+ import { render } from '@testing-library/react';
15
+ import { ThemeProvider } from './theme';
16
+ var getClassName = function (componentName, className) { return "".concat(componentName, "-").concat(className); };
17
+ export var createDOMId = function (id) {
18
+ if (id === void 0) { id = faker.random.alphaNumeric(8); }
19
+ // queryselectors do not like ids that begin with numbers. This avoids that.
20
+ return "a0-".concat(id);
21
+ };
22
+ var Providers = function (_a) {
23
+ var children = _a.children;
24
+ return React.createElement(ThemeProvider, null, children);
25
+ };
26
+ var customRender = (function (ui, options) { return render(ui, __assign({ wrapper: Providers }, options)); });
27
+ function createClassNameGetter(componentName) {
28
+ return function (className) { return getClassName(componentName, className); };
29
+ }
30
+ // eslint-disable-next-line import/export
31
+ export * from '@testing-library/react';
32
+ // override render method
33
+ // eslint-disable-next-line import/export
34
+ export { customRender as render, faker, createClassNameGetter };
35
+ export function runBaseTests(Component, baseProps, _a) {
36
+ var _b = _a === void 0 ? {} : _a, _c = _b.overridable, overridable = _c === void 0 ? true : _c;
37
+ test('spreads additional props to the element', function () {
38
+ var testId = faker.random.alphaNumeric();
39
+ var getByTestId = customRender(React.createElement(Component, __assign({}, baseProps, { "data-testid": testId }))).getByTestId;
40
+ expect(function () { return getByTestId(testId); }).not.toThrow();
41
+ });
42
+ // test('className is passed to the root element', () => {
43
+ // const testId = faker.random.alphaNumeric();
44
+ // const { getByTestId } = customRender(<Component {...baseProps} data-testid={testId} />);
45
+ // expect(() => getByTestId(testId)).not.toThrow();
46
+ // });
47
+ test('ref is passed to the element', function () {
48
+ var testId = faker.random.alphaNumeric();
49
+ var ref = React.createRef();
50
+ var getByTestId = customRender(React.createElement(Component, __assign({}, baseProps, { ref: ref, "data-testid": testId }))).getByTestId;
51
+ var rootElement = getByTestId(testId);
52
+ expect(rootElement).toBe(ref.current);
53
+ });
54
+ if (overridable) {
55
+ // TODO: Refactor to suppoert `as` prop
56
+ // test.skip('A different html tag can be used', () => {
57
+ // const testId = faker.random.alphaNumeric();
58
+ // const newTag = 'header';
59
+ // const { getByTestId } = customRender(<Component {...baseProps} component={newTag} data-testid={testId} />);
60
+ // const rootElement = getByTestId(testId);
61
+ // expect(rootElement.tagName).toBe(newTag.toUpperCase());
62
+ // });
63
+ }
64
+ }
65
+ export function mock(values) {
66
+ return values;
67
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@auth0/quantum-product",
3
- "version": "1.6.5",
3
+ "version": "1.6.6",
4
4
  "sideEffects": false,
5
5
  "license": "Apache-2.0",
6
6
  "publishConfig": {
@@ -1,3 +1,4 @@
1
+ export * from './pager';
1
2
  export { Pagination } from './pagination';
2
3
  export type { IPaginationProps } from './pagination';
3
4
  export { paginationClasses } from './pagination-classes';
@@ -1,6 +1,21 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
17
  exports.paginationClasses = exports.Pagination = void 0;
18
+ __exportStar(require("./pager"), exports);
4
19
  var pagination_1 = require("./pagination");
5
20
  Object.defineProperty(exports, "Pagination", { enumerable: true, get: function () { return pagination_1.Pagination; } });
6
21
  var pagination_classes_1 = require("./pagination-classes");
@@ -0,0 +1,3 @@
1
+ export { Pager } from './pager';
2
+ export type { IPagerProps } from './pager';
3
+ export { pagerClasses } from './pager-classes';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pagerClasses = exports.Pager = void 0;
4
+ var pager_1 = require("./pager");
5
+ Object.defineProperty(exports, "Pager", { enumerable: true, get: function () { return pager_1.Pager; } });
6
+ var pager_classes_1 = require("./pager-classes");
7
+ Object.defineProperty(exports, "pagerClasses", { enumerable: true, get: function () { return pager_classes_1.pagerClasses; } });
@@ -0,0 +1,5 @@
1
+ export declare const pagerComponentName: "QuantumPager";
2
+ export declare function getPagerUtilityClass(slot: string): string;
3
+ export declare const pagerClasses: Record<"root" | "previousPageButton" | "nextPageButton", string>;
4
+ export declare type PagerClasses = typeof pagerClasses;
5
+ export declare type PagerClassKey = keyof PagerClasses;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pagerClasses = exports.getPagerUtilityClass = exports.pagerComponentName = void 0;
4
+ var classes_1 = require("../../styles/classes");
5
+ exports.pagerComponentName = 'QuantumPager';
6
+ function getPagerUtilityClass(slot) {
7
+ return (0, classes_1.generateUtilityClass)(exports.pagerComponentName, slot);
8
+ }
9
+ exports.getPagerUtilityClass = getPagerUtilityClass;
10
+ exports.pagerClasses = (0, classes_1.generateUtilityClasses)(exports.pagerComponentName, [
11
+ 'root',
12
+ 'previousPageButton',
13
+ 'nextPageButton',
14
+ ]);
@@ -0,0 +1,17 @@
1
+ import * as React from 'react';
2
+ import { IIconButtonProps } from '../../icon-button';
3
+ import { IStackLayoutProps } from '../../stack-layout';
4
+ import { PagerClasses } from './pager-classes';
5
+ export interface IPagerProps extends IStackLayoutProps {
6
+ page: number;
7
+ classes?: Partial<PagerClasses>;
8
+ disabled?: boolean;
9
+ nextDisabled?: boolean;
10
+ nextIconButtonProps?: IIconButtonProps;
11
+ onPageChange?(page: number): void;
12
+ previousDisabled?: boolean;
13
+ previousIconButtonProps?: IIconButtonProps;
14
+ size?: IIconButtonProps['size'];
15
+ totalPages?: number;
16
+ }
17
+ export declare const Pager: React.ForwardRefExoticComponent<IPagerProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __rest = (this && this.__rest) || function (s, e) {
37
+ var t = {};
38
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
39
+ t[p] = s[p];
40
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
41
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
42
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
43
+ t[p[i]] = s[p[i]];
44
+ }
45
+ return t;
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.Pager = void 0;
49
+ var React = __importStar(require("react"));
50
+ var icon_button_1 = require("../../icon-button");
51
+ var stack_layout_1 = require("../../stack-layout");
52
+ var classes_1 = require("../../styles/classes");
53
+ var pager_classes_1 = require("./pager-classes");
54
+ var utils_1 = require("../../utils");
55
+ var icon_1 = require("../../icon");
56
+ exports.Pager = React.forwardRef(function (props, ref) {
57
+ var page = props.page, propClasses = props.classes, className = props.className, disabled = props.disabled, nextDisabled = props.nextDisabled, _a = props.nextIconButtonProps, nextIconButtonProps = _a === void 0 ? {} : _a, onPageChange = props.onPageChange, previousDisabled = props.previousDisabled, _b = props.previousIconButtonProps, previousIconButtonProps = _b === void 0 ? {} : _b, _c = props.size, size = _c === void 0 ? 'medium' : _c, _d = props.sx, sx = _d === void 0 ? {} : _d, totalPages = props.totalPages, rootProps = __rest(props, ["page", "classes", "className", "disabled", "nextDisabled", "nextIconButtonProps", "onPageChange", "previousDisabled", "previousIconButtonProps", "size", "sx", "totalPages"]);
58
+ var classes = (0, classes_1.useMergedClasses)(pager_classes_1.pagerClasses, pager_classes_1.getPagerUtilityClass, propClasses);
59
+ var isPrevDisabled = disabled || previousDisabled || page <= 1;
60
+ var isNextDisabled = disabled || nextDisabled || (totalPages != null && page >= totalPages);
61
+ return (React.createElement(stack_layout_1.StackLayout, __assign({ ref: ref, gutter: 1, className: (0, utils_1.clsx)(classes.root, className), sx: __assign({ justifyContent: 'flex-end' }, sx) }, rootProps),
62
+ React.createElement(icon_button_1.IconButton, __assign({ variant: "outlined", size: size, className: classes.previousPageButton, onClick: function () { return onPageChange && onPageChange(page - 1); }, disabled: isPrevDisabled, "aria-label": "Previous page" }, nextIconButtonProps),
63
+ React.createElement(icon_1.ChevronLeftIcon, null)),
64
+ React.createElement(icon_button_1.IconButton, __assign({ variant: "outlined", size: size, className: classes.nextPageButton, onClick: function () { return onPageChange && onPageChange(page + 1); }, disabled: isNextDisabled, "aria-label": "Next page" }, previousIconButtonProps),
65
+ React.createElement(icon_1.ChevronRightIcon, null))));
66
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ var React = __importStar(require("react"));
27
+ var __1 = require("..");
28
+ var test_utils_1 = require("../../test-utils");
29
+ (0, test_utils_1.runBaseTests)(__1.Pager, { page: 1 });
30
+ test('disables previous and next page if disabled is true', function () {
31
+ var getByLabelText = (0, test_utils_1.render)(React.createElement(__1.Pager, { page: 2, disabled: true })).getByLabelText;
32
+ var previousPageButton = getByLabelText('Previous page');
33
+ var nextPageButton = getByLabelText('Next page');
34
+ expect(previousPageButton.disabled).toBe(true);
35
+ expect(nextPageButton.disabled).toBe(true);
36
+ });
37
+ test('disables previous page on first page', function () {
38
+ var getByLabelText = (0, test_utils_1.render)(React.createElement(__1.Pager, { page: 1 })).getByLabelText;
39
+ var previousPageButton = getByLabelText('Previous page');
40
+ expect(previousPageButton.disabled).toBe(true);
41
+ });
42
+ test('disables previous page if previousDisabled is true', function () {
43
+ var getByLabelText = (0, test_utils_1.render)(React.createElement(__1.Pager, { page: 2, previousDisabled: true })).getByLabelText;
44
+ var previousPageButton = getByLabelText('Previous page');
45
+ expect(previousPageButton.disabled).toBe(true);
46
+ });
47
+ test('disables next page if nextDisabled is true', function () {
48
+ var getByLabelText = (0, test_utils_1.render)(React.createElement(__1.Pager, { page: 2, nextDisabled: true })).getByLabelText;
49
+ var nextPageButton = getByLabelText('Next page');
50
+ expect(nextPageButton.disabled).toBe(true);
51
+ });
52
+ test('disables next page if page is equal to totalPages', function () {
53
+ var getByLabelText = (0, test_utils_1.render)(React.createElement(__1.Pager, { page: 2, totalPages: 2 })).getByLabelText;
54
+ var nextPageButton = getByLabelText('Next page');
55
+ expect(nextPageButton.disabled).toBe(true);
56
+ });
57
+ test('goes previous page if previous page is clicked', function () {
58
+ var currentPage = 2;
59
+ var pageChangeHandler = jest.fn();
60
+ var getByLabelText = (0, test_utils_1.render)(React.createElement(__1.Pager, { page: currentPage, onPageChange: pageChangeHandler })).getByLabelText;
61
+ var previousPageButton = getByLabelText('Previous page');
62
+ test_utils_1.fireEvent.click(previousPageButton);
63
+ expect(pageChangeHandler).toBeCalledWith(currentPage - 1);
64
+ });
65
+ test('goes next page if next page is clicked', function () {
66
+ var currentPage = 2;
67
+ var pageChangeHandler = jest.fn();
68
+ var getByLabelText = (0, test_utils_1.render)(React.createElement(__1.Pager, { page: currentPage, onPageChange: pageChangeHandler })).getByLabelText;
69
+ var nextPageButton = getByLabelText('Next page');
70
+ test_utils_1.fireEvent.click(nextPageButton);
71
+ expect(pageChangeHandler).toBeCalledWith(currentPage + 1);
72
+ });
@@ -1,5 +1,5 @@
1
1
  export declare const paginationComponentName: "QuantumPagination";
2
2
  export declare function getPaginationUtilityClass(slot: string): string;
3
- export declare const paginationClasses: Record<"root" | "pageSelect" | "pageLabelText" | "previousPageButton" | "nextPageButton", string>;
3
+ export declare const paginationClasses: Record<"root" | "pageSelect" | "pageLabelText" | "pager", string>;
4
4
  export declare type PaginationClasses = typeof paginationClasses;
5
5
  export declare type PaginationClassKey = keyof PaginationClasses;
@@ -11,6 +11,5 @@ exports.paginationClasses = (0, classes_1.generateUtilityClasses)(exports.pagina
11
11
  'root',
12
12
  'pageSelect',
13
13
  'pageLabelText',
14
- 'previousPageButton',
15
- 'nextPageButton',
14
+ 'pager',
16
15
  ]);
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { IStyledComponentProps } from '../styled';
3
3
  import { PaginationClasses } from './pagination-classes';
4
+ import { IPagerProps } from './pager';
4
5
  export declare type IPaginationProps = IStyledComponentProps<{
5
6
  props: {
6
7
  items: number;
@@ -8,6 +9,7 @@ export declare type IPaginationProps = IStyledComponentProps<{
8
9
  perPage: number;
9
10
  disabled?: boolean;
10
11
  onPageChanged(page: number): void;
12
+ PagerProps?: Partial<IPagerProps>;
11
13
  classes?: Partial<PaginationClasses>;
12
14
  };
13
15
  defaultComponent: 'fieldset';
@@ -18,5 +20,6 @@ export declare const Pagination: React.ForwardRefExoticComponent<{
18
20
  perPage: number;
19
21
  disabled?: boolean | undefined;
20
22
  onPageChanged(page: number): void;
21
- classes?: Partial<Record<"root" | "pageSelect" | "pageLabelText" | "previousPageButton" | "nextPageButton", string>> | undefined;
22
- } & Omit<React.DetailedHTMLProps<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>, "ref" | "disabled" | "page" | "classes" | "items" | "perPage" | "onPageChanged"> & import("../styled").IStyledCommonProps & React.RefAttributes<HTMLFieldSetElement>>;
23
+ PagerProps?: Partial<IPagerProps> | undefined;
24
+ classes?: Partial<Record<"root" | "pageSelect" | "pageLabelText" | "pager", string>> | undefined;
25
+ } & Omit<React.DetailedHTMLProps<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>, "ref" | "disabled" | "page" | "classes" | "items" | "perPage" | "onPageChanged" | "PagerProps"> & import("../styled").IStyledCommonProps & React.RefAttributes<HTMLFieldSetElement>>;
@@ -50,8 +50,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
50
50
  Object.defineProperty(exports, "__esModule", { value: true });
51
51
  exports.Pagination = void 0;
52
52
  var React = __importStar(require("react"));
53
- var icon_1 = require("../icon");
54
- var icon_button_1 = require("../icon-button");
55
53
  var select_1 = require("../select");
56
54
  var stack_layout_1 = require("../stack-layout");
57
55
  var styled_1 = require("../styled");
@@ -59,6 +57,7 @@ var classes_1 = require("../styles/classes");
59
57
  var text_1 = require("../text");
60
58
  var clsx_1 = __importDefault(require("../utils/clsx"));
61
59
  var pagination_classes_1 = require("./pagination-classes");
60
+ var pager_1 = require("./pager");
62
61
  var Root = (0, styled_1.styled)('fieldset', { name: pagination_classes_1.paginationComponentName, slot: 'Root' })(function (_a) {
63
62
  var ownerState = _a.ownerState;
64
63
  return (__assign({ justifyContent: 'space-between', display: 'flex', alignItems: 'center', margin: 0, padding: 0, border: 'none' }, (ownerState.disabled && {
@@ -91,7 +90,7 @@ var changePageIfAppropriate = function (_a) {
91
90
  }
92
91
  };
93
92
  exports.Pagination = React.forwardRef(function (props, ref) {
94
- var children = props.children, className = props.className, page = props.page, perPage = props.perPage, items = props.items, onPageChanged = props.onPageChanged, disabled = props.disabled, propClasses = props.classes, rootProps = __rest(props, ["children", "className", "page", "perPage", "items", "onPageChanged", "disabled", "classes"]);
93
+ var children = props.children, className = props.className, page = props.page, perPage = props.perPage, items = props.items, onPageChanged = props.onPageChanged, disabled = props.disabled, propClasses = props.classes, _a = props.PagerProps, PagerProps = _a === void 0 ? {} : _a, rootProps = __rest(props, ["children", "className", "page", "perPage", "items", "onPageChanged", "disabled", "classes", "PagerProps"]);
95
94
  var classes = (0, classes_1.useMergedClasses)(pagination_classes_1.paginationClasses, pagination_classes_1.getPaginationUtilityClass, propClasses);
96
95
  var pages = pagesFromItems(items, perPage);
97
96
  var pageOptions = React.useMemo(function () {
@@ -108,8 +107,6 @@ exports.Pagination = React.forwardRef(function (props, ref) {
108
107
  if (pages <= 1) {
109
108
  return null;
110
109
  }
111
- var inFirstPage = page === 1;
112
- var inLastPage = page === pages;
113
110
  return (React.createElement(Root, __assign({ ref: ref, ownerState: { disabled: disabled }, className: (0, clsx_1.default)(classes.root, className) }, rootProps), items > 0 && (React.createElement(React.Fragment, null,
114
111
  React.createElement(stack_layout_1.StackLayout, { gutter: 1 },
115
112
  React.createElement(stack_layout_1.StackLayoutItem, null,
@@ -128,11 +125,5 @@ exports.Pagination = React.forwardRef(function (props, ref) {
128
125
  React.createElement(text_1.Text, { className: classes.pageLabelText, variant: "body2" },
129
126
  "of ",
130
127
  pages))),
131
- React.createElement(stack_layout_1.StackLayout, { gutter: 1 },
132
- React.createElement(stack_layout_1.StackLayoutItem, null,
133
- React.createElement(icon_button_1.IconButton, { variant: "outlined", className: classes.previousPageButton, onClick: function () { return changePageIfAppropriate({ nextPage: page - 1, total: items, perPage: perPage, onPageChanged: onPageChanged }); }, disabled: inFirstPage, "aria-label": "Previous page" },
134
- React.createElement(icon_1.ChevronLeftIcon, null))),
135
- React.createElement(stack_layout_1.StackLayoutItem, null,
136
- React.createElement(icon_button_1.IconButton, { variant: "outlined", className: classes.nextPageButton, onClick: function () { return changePageIfAppropriate({ nextPage: page + 1, total: items, perPage: perPage, onPageChanged: onPageChanged }); }, disabled: inLastPage, "aria-label": "Next page" },
137
- React.createElement(icon_1.ChevronRightIcon, null))))))));
128
+ React.createElement(pager_1.Pager, __assign({ page: page, className: classes.pager, onPageChange: function (nextPage) { return changePageIfAppropriate({ nextPage: nextPage, total: items, perPage: perPage, onPageChanged: onPageChanged }); }, totalPages: pages, disabled: disabled }, PagerProps))))));
138
129
  });
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import { faker } from '@faker-js/faker';
3
+ import { render } from '@testing-library/react';
4
+ export declare const createDOMId: (id?: string) => string;
5
+ declare const customRender: typeof render;
6
+ declare function createClassNameGetter<ClassKey extends string>(componentName: string): (className: ClassKey) => string;
7
+ export * from '@testing-library/react';
8
+ export { customRender as render, faker, createClassNameGetter };
9
+ interface IBaseTestOptions {
10
+ /** Disables/Enables base test for overriding the element */
11
+ overridable?: boolean;
12
+ }
13
+ export declare function runBaseTests<PropsType, ElementType extends HTMLElement = HTMLElement>(Component: React.ComponentType<PropsType>, baseProps: PropsType, { overridable }?: IBaseTestOptions): void;
14
+ export declare function mock<Item = any>(values: Partial<Item>): Item;
package/test-utils.js ADDED
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
37
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.mock = exports.runBaseTests = exports.createClassNameGetter = exports.faker = exports.render = exports.createDOMId = void 0;
41
+ var React = __importStar(require("react"));
42
+ var faker_1 = require("@faker-js/faker");
43
+ Object.defineProperty(exports, "faker", { enumerable: true, get: function () { return faker_1.faker; } });
44
+ var react_1 = require("@testing-library/react");
45
+ var theme_1 = require("./theme");
46
+ var getClassName = function (componentName, className) { return "".concat(componentName, "-").concat(className); };
47
+ var createDOMId = function (id) {
48
+ if (id === void 0) { id = faker_1.faker.random.alphaNumeric(8); }
49
+ // queryselectors do not like ids that begin with numbers. This avoids that.
50
+ return "a0-".concat(id);
51
+ };
52
+ exports.createDOMId = createDOMId;
53
+ var Providers = function (_a) {
54
+ var children = _a.children;
55
+ return React.createElement(theme_1.ThemeProvider, null, children);
56
+ };
57
+ var customRender = (function (ui, options) { return (0, react_1.render)(ui, __assign({ wrapper: Providers }, options)); });
58
+ exports.render = customRender;
59
+ function createClassNameGetter(componentName) {
60
+ return function (className) { return getClassName(componentName, className); };
61
+ }
62
+ exports.createClassNameGetter = createClassNameGetter;
63
+ // eslint-disable-next-line import/export
64
+ __exportStar(require("@testing-library/react"), exports);
65
+ function runBaseTests(Component, baseProps, _a) {
66
+ var _b = _a === void 0 ? {} : _a, _c = _b.overridable, overridable = _c === void 0 ? true : _c;
67
+ test('spreads additional props to the element', function () {
68
+ var testId = faker_1.faker.random.alphaNumeric();
69
+ var getByTestId = customRender(React.createElement(Component, __assign({}, baseProps, { "data-testid": testId }))).getByTestId;
70
+ expect(function () { return getByTestId(testId); }).not.toThrow();
71
+ });
72
+ // test('className is passed to the root element', () => {
73
+ // const testId = faker.random.alphaNumeric();
74
+ // const { getByTestId } = customRender(<Component {...baseProps} data-testid={testId} />);
75
+ // expect(() => getByTestId(testId)).not.toThrow();
76
+ // });
77
+ test('ref is passed to the element', function () {
78
+ var testId = faker_1.faker.random.alphaNumeric();
79
+ var ref = React.createRef();
80
+ var getByTestId = customRender(React.createElement(Component, __assign({}, baseProps, { ref: ref, "data-testid": testId }))).getByTestId;
81
+ var rootElement = getByTestId(testId);
82
+ expect(rootElement).toBe(ref.current);
83
+ });
84
+ if (overridable) {
85
+ // TODO: Refactor to suppoert `as` prop
86
+ // test.skip('A different html tag can be used', () => {
87
+ // const testId = faker.random.alphaNumeric();
88
+ // const newTag = 'header';
89
+ // const { getByTestId } = customRender(<Component {...baseProps} component={newTag} data-testid={testId} />);
90
+ // const rootElement = getByTestId(testId);
91
+ // expect(rootElement.tagName).toBe(newTag.toUpperCase());
92
+ // });
93
+ }
94
+ }
95
+ exports.runBaseTests = runBaseTests;
96
+ function mock(values) {
97
+ return values;
98
+ }
99
+ exports.mock = mock;