@patternfly/react-core 4.236.3 → 4.236.4
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/CHANGELOG.md +8 -0
- package/dist/esm/components/AboutModal/AboutModal.js +2 -2
- package/dist/esm/components/AboutModal/AboutModal.js.map +1 -1
- package/dist/esm/components/ContextSelector/ContextSelector.js +2 -2
- package/dist/esm/components/ContextSelector/ContextSelector.js.map +1 -1
- package/dist/esm/components/ContextSelector/ContextSelectorToggle.d.ts.map +1 -1
- package/dist/esm/components/ContextSelector/ContextSelectorToggle.js +5 -7
- package/dist/esm/components/ContextSelector/ContextSelectorToggle.js.map +1 -1
- package/dist/esm/components/Dropdown/Toggle.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/Toggle.js +2 -3
- package/dist/esm/components/Dropdown/Toggle.js.map +1 -1
- package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
- package/dist/esm/components/Modal/Modal.js +2 -2
- package/dist/esm/components/Modal/Modal.js.map +1 -1
- package/dist/esm/components/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/esm/components/NumberInput/NumberInput.js +3 -3
- package/dist/esm/components/NumberInput/NumberInput.js.map +1 -1
- package/dist/esm/components/OptionsMenu/OptionsMenuToggleWithText.d.ts.map +1 -1
- package/dist/esm/components/OptionsMenu/OptionsMenuToggleWithText.js +2 -3
- package/dist/esm/components/OptionsMenu/OptionsMenuToggleWithText.js.map +1 -1
- package/dist/esm/components/Pagination/Navigation.js +2 -2
- package/dist/esm/components/Pagination/Navigation.js.map +1 -1
- package/dist/esm/components/SearchInput/AdvancedSearchMenu.d.ts.map +1 -1
- package/dist/esm/components/SearchInput/AdvancedSearchMenu.js +2 -3
- package/dist/esm/components/SearchInput/AdvancedSearchMenu.js.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.js +3 -3
- package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/components/Wizard/Wizard.js +2 -2
- package/dist/esm/components/Wizard/Wizard.js.map +1 -1
- package/dist/js/components/AboutModal/AboutModal.js +1 -1
- package/dist/js/components/AboutModal/AboutModal.js.map +1 -1
- package/dist/js/components/ContextSelector/ContextSelector.js +1 -1
- package/dist/js/components/ContextSelector/ContextSelector.js.map +1 -1
- package/dist/js/components/ContextSelector/ContextSelectorToggle.d.ts.map +1 -1
- package/dist/js/components/ContextSelector/ContextSelectorToggle.js +4 -6
- package/dist/js/components/ContextSelector/ContextSelectorToggle.js.map +1 -1
- package/dist/js/components/Dropdown/Toggle.d.ts.map +1 -1
- package/dist/js/components/Dropdown/Toggle.js +1 -2
- package/dist/js/components/Dropdown/Toggle.js.map +1 -1
- package/dist/js/components/Modal/Modal.d.ts.map +1 -1
- package/dist/js/components/Modal/Modal.js +1 -1
- package/dist/js/components/Modal/Modal.js.map +1 -1
- package/dist/js/components/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/js/components/NumberInput/NumberInput.js +2 -2
- package/dist/js/components/NumberInput/NumberInput.js.map +1 -1
- package/dist/js/components/OptionsMenu/OptionsMenuToggleWithText.d.ts.map +1 -1
- package/dist/js/components/OptionsMenu/OptionsMenuToggleWithText.js +1 -2
- package/dist/js/components/OptionsMenu/OptionsMenuToggleWithText.js.map +1 -1
- package/dist/js/components/Pagination/Navigation.js +1 -1
- package/dist/js/components/Pagination/Navigation.js.map +1 -1
- package/dist/js/components/SearchInput/AdvancedSearchMenu.d.ts.map +1 -1
- package/dist/js/components/SearchInput/AdvancedSearchMenu.js +1 -2
- package/dist/js/components/SearchInput/AdvancedSearchMenu.js.map +1 -1
- package/dist/js/components/Tooltip/Tooltip.js +2 -2
- package/dist/js/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/js/components/Wizard/Wizard.js +1 -1
- package/dist/js/components/Wizard/Wizard.js.map +1 -1
- package/dist/umd/react-core.min.css +156 -155
- package/dist/umd/react-core.min.js +5 -5
- package/package.json +6 -6
- package/src/components/AboutModal/AboutModal.tsx +2 -2
- package/src/components/AboutModal/__tests__/AboutModal.test.tsx +5 -2
- package/src/components/Alert/__tests__/Alert.test.tsx +3 -2
- package/src/components/AlertGroup/__tests__/AlertGroup.test.tsx +6 -4
- package/src/components/Card/examples/CardLegacySelectable.tsx +1 -1
- package/src/components/Checkbox/__tests__/Checkbox.test.tsx +4 -2
- package/src/components/ChipGroup/__tests__/ChipGroup.test.tsx +4 -2
- package/src/components/ClipboardCopy/__tests__/ClipboardCopyButton.test.tsx +4 -2
- package/src/components/ClipboardCopy/__tests__/ClipboardCopyToggle.test.tsx +4 -2
- package/src/components/ContextSelector/ContextSelector.tsx +2 -2
- package/src/components/ContextSelector/ContextSelectorToggle.tsx +5 -9
- package/src/components/ContextSelector/__tests__/ContextSelector.test.tsx +4 -2
- package/src/components/ContextSelector/__tests__/ContextSelectorItem.test.tsx +3 -2
- package/src/components/ContextSelector/__tests__/ContextSelectorToggle.test.tsx +20 -10
- package/src/components/DataList/__tests__/DataList.test.tsx +3 -2
- package/src/components/DataList/__tests__/DataListCheck.test.tsx +3 -2
- package/src/components/Drawer/__tests__/Drawer.test.tsx +6 -3
- package/src/components/Dropdown/Toggle.tsx +2 -3
- package/src/components/Dropdown/__tests__/Dropdown.test.tsx +3 -2
- package/src/components/Dropdown/__tests__/DropdownToggle.test.tsx +6 -4
- package/src/components/Dropdown/__tests__/DropdownToggleAction.test.tsx +3 -2
- package/src/components/Dropdown/__tests__/DropdownToggleCheckbox.test.tsx +4 -2
- package/src/components/ExpandableSection/__tests__/ExpandableSection.test.tsx +3 -2
- package/src/components/Form/__tests__/FormGroup.test.tsx +6 -4
- package/src/components/FormSelect/__tests__/FormSelect.test.tsx +3 -3
- package/src/components/Label/__tests__/Label.test.tsx +4 -2
- package/src/components/LabelGroup/__tests__/LabelGroup.test.tsx +4 -2
- package/src/components/LoginPage/__tests__/LoginForm.test.tsx +9 -6
- package/src/components/Modal/Modal.tsx +2 -2
- package/src/components/Modal/__tests__/Modal.test.tsx +5 -2
- package/src/components/Modal/__tests__/ModalBoxCloseButton.test.tsx +3 -2
- package/src/components/Nav/__tests__/Nav.test.tsx +10 -6
- package/src/components/NumberInput/NumberInput.tsx +3 -3
- package/src/components/NumberInput/__tests__/NumberInput.test.tsx +42 -17
- package/src/components/OptionsMenu/OptionsMenuToggleWithText.tsx +2 -3
- package/src/components/Pagination/Navigation.tsx +2 -2
- package/src/components/Pagination/__tests__/Pagination.test.tsx +83 -44
- package/src/components/Radio/__tests__/Radio.test.tsx +4 -2
- package/src/components/SearchInput/AdvancedSearchMenu.tsx +2 -3
- package/src/components/SearchInput/__tests__/SearchInput.test.tsx +32 -34
- package/src/components/SearchInput/__tests__/__snapshots__/SearchInput.test.tsx.snap +4 -1
- package/src/components/Select/__tests__/Select.test.tsx +17 -9
- package/src/components/Select/__tests__/SelectToggle.test.tsx +14 -8
- package/src/components/SimpleList/__tests__/SimpleList.test.tsx +6 -4
- package/src/components/Switch/__tests__/Switch.test.tsx +4 -2
- package/src/components/Tabs/__tests__/OverflowTab.test.tsx +42 -23
- package/src/components/TextArea/__tests__/TextArea.test.tsx +4 -2
- package/src/components/TextInput/__tests__/TextInput.test.tsx +4 -2
- package/src/components/TextInputGroup/__tests__/TextInputGroupMain.test.tsx +13 -9
- package/src/components/TimePicker/__tests__/TimePicker.test.tsx +36 -26
- package/src/components/ToggleGroup/__tests__/ToggleGroup.test.tsx +4 -2
- package/src/components/Tooltip/Tooltip.tsx +3 -3
- package/src/components/Wizard/Wizard.tsx +2 -2
- package/src/components/Wizard/__tests__/Wizard.test.tsx +18 -14
- package/src/demos/PrimaryDetail.md +1 -1
- package/src/next/components/Wizard/__tests__/Wizard.test.tsx +21 -15
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/react-core",
|
|
3
|
-
"version": "4.236.
|
|
3
|
+
"version": "4.236.4",
|
|
4
4
|
"description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
|
|
5
5
|
"main": "dist/js/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -44,16 +44,16 @@
|
|
|
44
44
|
"generate": "node scripts/copyStyles.js"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@patternfly/react-icons": "^4.87.
|
|
48
|
-
"@patternfly/react-styles": "^4.86.
|
|
49
|
-
"@patternfly/react-tokens": "^4.88.
|
|
47
|
+
"@patternfly/react-icons": "^4.87.4",
|
|
48
|
+
"@patternfly/react-styles": "^4.86.4",
|
|
49
|
+
"@patternfly/react-tokens": "^4.88.4",
|
|
50
50
|
"focus-trap": "6.9.2",
|
|
51
51
|
"react-dropzone": "9.0.0",
|
|
52
52
|
"tippy.js": "5.1.2",
|
|
53
53
|
"tslib": "^2.0.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@patternfly/patternfly": "4.
|
|
56
|
+
"@patternfly/patternfly": "4.212.1",
|
|
57
57
|
"@rollup/plugin-commonjs": "^21.0.0",
|
|
58
58
|
"@rollup/plugin-node-resolve": "^13.0.0",
|
|
59
59
|
"@rollup/plugin-replace": "^3.0.0",
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
"react": "^16.8.0 || ^17.0.0",
|
|
71
71
|
"react-dom": "^16.8.0 || ^17.0.0"
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "c1df72da34f893c6edb6d68d7bf2083bb2d7037c"
|
|
74
74
|
}
|
|
@@ -3,7 +3,7 @@ import * as ReactDOM from 'react-dom';
|
|
|
3
3
|
import { css } from '@patternfly/react-styles';
|
|
4
4
|
import styles from '@patternfly/react-styles/css/components/Backdrop/backdrop';
|
|
5
5
|
import { canUseDOM } from '../../helpers';
|
|
6
|
-
import {
|
|
6
|
+
import { KeyTypes } from '../../helpers/constants';
|
|
7
7
|
import { AboutModalContainer } from './AboutModalContainer';
|
|
8
8
|
import { PickOptional } from '../../helpers/typeUtils';
|
|
9
9
|
|
|
@@ -71,7 +71,7 @@ export class AboutModal extends React.Component<AboutModalProps, ModalState> {
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
handleEscKeyClick = (event: KeyboardEvent) => {
|
|
74
|
-
if (event.
|
|
74
|
+
if (event.key === KeyTypes.Escape && this.props.isOpen) {
|
|
75
75
|
this.props.onClose();
|
|
76
76
|
}
|
|
77
77
|
};
|
|
@@ -4,6 +4,7 @@ import { render, screen } from '@testing-library/react';
|
|
|
4
4
|
import userEvent from '@testing-library/user-event';
|
|
5
5
|
|
|
6
6
|
import { AboutModal, AboutModalProps } from '../AboutModal';
|
|
7
|
+
import { KeyTypes } from '../../../helpers';
|
|
7
8
|
|
|
8
9
|
const props: AboutModalProps = {
|
|
9
10
|
onClose: jest.fn(),
|
|
@@ -15,10 +16,12 @@ const props: AboutModalProps = {
|
|
|
15
16
|
};
|
|
16
17
|
|
|
17
18
|
describe('AboutModal', () => {
|
|
18
|
-
test('closes with escape', () => {
|
|
19
|
+
test('closes with escape', async () => {
|
|
20
|
+
const user = userEvent.setup();
|
|
21
|
+
|
|
19
22
|
render(<AboutModal {...props} isOpen />);
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
await user.type(screen.getByRole('dialog'), `{${KeyTypes.Escape}}`);
|
|
22
25
|
expect(props.onClose).toHaveBeenCalled();
|
|
23
26
|
});
|
|
24
27
|
|
|
@@ -52,8 +52,9 @@ describe('Alert', () => {
|
|
|
52
52
|
expect(asFragment()).toMatchSnapshot();
|
|
53
53
|
});
|
|
54
54
|
|
|
55
|
-
test('Action Close Button', () => {
|
|
55
|
+
test('Action Close Button', async () => {
|
|
56
56
|
const onClose = jest.fn();
|
|
57
|
+
const user = userEvent.setup();
|
|
57
58
|
|
|
58
59
|
render(
|
|
59
60
|
<Alert
|
|
@@ -65,7 +66,7 @@ describe('Alert', () => {
|
|
|
65
66
|
</Alert>
|
|
66
67
|
);
|
|
67
68
|
|
|
68
|
-
|
|
69
|
+
await user.click(screen.getByLabelText('Close'));
|
|
69
70
|
expect(onClose).toHaveBeenCalled();
|
|
70
71
|
});
|
|
71
72
|
|
|
@@ -23,9 +23,10 @@ describe('AlertGroup', () => {
|
|
|
23
23
|
expect(asFragment()).toBeTruthy();
|
|
24
24
|
});
|
|
25
25
|
|
|
26
|
-
test('Alert group overflow shows up', () => {
|
|
26
|
+
test('Alert group overflow shows up', async () => {
|
|
27
27
|
const overflowMessage = 'View 2 more alerts';
|
|
28
28
|
const onOverflowClick = jest.fn();
|
|
29
|
+
const user = userEvent.setup();
|
|
29
30
|
|
|
30
31
|
render(
|
|
31
32
|
<AlertGroup overflowMessage={overflowMessage} onOverflowClick={onOverflowClick}>
|
|
@@ -38,7 +39,7 @@ describe('AlertGroup', () => {
|
|
|
38
39
|
const overflowButton = screen.getByRole('button', { name: 'View 2 more alerts' });
|
|
39
40
|
expect(overflowButton).toBeInTheDocument();
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
await user.click(overflowButton);
|
|
42
43
|
expect(onOverflowClick).toHaveBeenCalled();
|
|
43
44
|
});
|
|
44
45
|
|
|
@@ -62,8 +63,9 @@ describe('AlertGroup', () => {
|
|
|
62
63
|
expect(screen.getByLabelText('group label')).toHaveClass('pf-m-toast');
|
|
63
64
|
});
|
|
64
65
|
|
|
65
|
-
test('alertgroup closes when alerts are closed', () => {
|
|
66
|
+
test('alertgroup closes when alerts are closed', async () => {
|
|
66
67
|
const onClose = jest.fn();
|
|
68
|
+
const user = userEvent.setup();
|
|
67
69
|
|
|
68
70
|
render(
|
|
69
71
|
<AlertGroup isToast appendTo={document.body}>
|
|
@@ -75,7 +77,7 @@ describe('AlertGroup', () => {
|
|
|
75
77
|
</AlertGroup>
|
|
76
78
|
);
|
|
77
79
|
|
|
78
|
-
|
|
80
|
+
await user.click(screen.getByLabelText('Close'));
|
|
79
81
|
expect(onClose).toHaveBeenCalled();
|
|
80
82
|
});
|
|
81
83
|
});
|
|
@@ -19,7 +19,7 @@ export const CardLegacySelectable: React.FunctionComponent = () => {
|
|
|
19
19
|
if (event.target !== event.currentTarget) {
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
|
-
if ([
|
|
22
|
+
if (['Enter', ' '].includes(event.key)) {
|
|
23
23
|
event.preventDefault();
|
|
24
24
|
const newSelected = event.currentTarget.id === selected ? null : event.currentTarget.id;
|
|
25
25
|
setSelected(newSelected);
|
|
@@ -67,11 +67,13 @@ describe('Checkbox', () => {
|
|
|
67
67
|
expect(screen.getByText('This is where custom content goes.')).toBeInTheDocument();
|
|
68
68
|
});
|
|
69
69
|
|
|
70
|
-
test('checkbox onChange handler called when component is clicked', () => {
|
|
70
|
+
test('checkbox onChange handler called when component is clicked', async () => {
|
|
71
71
|
const onChangeHandler = jest.fn();
|
|
72
|
+
const user = userEvent.setup();
|
|
73
|
+
|
|
72
74
|
render(<Checkbox id="check" onChange={onChangeHandler} aria-label="check" isChecked={false} />);
|
|
73
75
|
|
|
74
|
-
|
|
76
|
+
await user.click(screen.getByLabelText('check'));
|
|
75
77
|
expect(onChangeHandler).toHaveBeenCalled();
|
|
76
78
|
});
|
|
77
79
|
|
|
@@ -35,7 +35,9 @@ describe('ChipGroup', () => {
|
|
|
35
35
|
expect(asFragment()).toMatchSnapshot();
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
-
test('chip group expanded', () => {
|
|
38
|
+
test('chip group expanded', async () => {
|
|
39
|
+
const user = userEvent.setup();
|
|
40
|
+
|
|
39
41
|
render(
|
|
40
42
|
<ChipGroup>
|
|
41
43
|
<Chip>1</Chip>
|
|
@@ -48,7 +50,7 @@ describe('ChipGroup', () => {
|
|
|
48
50
|
const moreText = screen.getByText('1 more');
|
|
49
51
|
expect(moreText).toBeInTheDocument();
|
|
50
52
|
|
|
51
|
-
|
|
53
|
+
await user.click(moreText);
|
|
52
54
|
expect(screen.getByText('Show Less')).toBeInTheDocument();
|
|
53
55
|
});
|
|
54
56
|
|
|
@@ -22,14 +22,16 @@ test('copy button render', () => {
|
|
|
22
22
|
expect(asFragment()).toMatchSnapshot();
|
|
23
23
|
});
|
|
24
24
|
|
|
25
|
-
test('copy button onClick', () => {
|
|
25
|
+
test('copy button onClick', async () => {
|
|
26
26
|
const onclick = jest.fn();
|
|
27
|
+
const user = userEvent.setup();
|
|
28
|
+
|
|
27
29
|
render(
|
|
28
30
|
<ClipboardCopyButton {...props} onClick={onclick}>
|
|
29
31
|
Copy to Clipboard
|
|
30
32
|
</ClipboardCopyButton>
|
|
31
33
|
);
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
await user.click(screen.getByRole('button'));
|
|
34
36
|
expect(onclick).toHaveBeenCalled();
|
|
35
37
|
});
|
|
@@ -22,11 +22,13 @@ describe('ClipboardCopyToggle', () => {
|
|
|
22
22
|
expect(asFragment()).toMatchSnapshot();
|
|
23
23
|
});
|
|
24
24
|
|
|
25
|
-
test('toggle button onClick', () => {
|
|
25
|
+
test('toggle button onClick', async () => {
|
|
26
26
|
const onclick = jest.fn();
|
|
27
|
+
const user = userEvent.setup();
|
|
28
|
+
|
|
27
29
|
render(<ClipboardCopyToggle {...props} onClick={onclick} />);
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
await user.click(screen.getByRole('button'));
|
|
30
32
|
expect(onclick).toHaveBeenCalled();
|
|
31
33
|
});
|
|
32
34
|
|
|
@@ -8,7 +8,7 @@ import { ContextSelectorContext } from './contextSelectorConstants';
|
|
|
8
8
|
import { Button, ButtonVariant } from '../Button';
|
|
9
9
|
import { TextInput } from '../TextInput';
|
|
10
10
|
import { InputGroup } from '../InputGroup';
|
|
11
|
-
import {
|
|
11
|
+
import { KeyTypes } from '../../helpers/constants';
|
|
12
12
|
import { FocusTrap, getUniqueId } from '../../helpers';
|
|
13
13
|
import { ToggleMenuBaseProps } from '../../helpers/Popper/Popper';
|
|
14
14
|
import { Popper } from '../../helpers/Popper/Popper';
|
|
@@ -102,7 +102,7 @@ export class ContextSelector extends React.Component<ContextSelectorProps, { oui
|
|
|
102
102
|
popperRef: React.RefObject<HTMLDivElement> = React.createRef();
|
|
103
103
|
|
|
104
104
|
onEnterPressed = (event: any) => {
|
|
105
|
-
if (event.
|
|
105
|
+
if (event.key === KeyTypes.Enter) {
|
|
106
106
|
this.props.onSearchButtonClick();
|
|
107
107
|
}
|
|
108
108
|
};
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import CaretDownIcon from '@patternfly/react-icons/dist/esm/icons/caret-down-icon';
|
|
3
3
|
import styles from '@patternfly/react-styles/css/components/ContextSelector/context-selector';
|
|
4
4
|
import { css } from '@patternfly/react-styles';
|
|
5
|
-
import {
|
|
5
|
+
import { KeyTypes } from '../../helpers/constants';
|
|
6
6
|
import { PickOptional } from '../../helpers/typeUtils';
|
|
7
7
|
|
|
8
8
|
export interface ContextSelectorToggleProps {
|
|
@@ -67,8 +67,7 @@ export class ContextSelectorToggle extends React.Component<ContextSelectorToggle
|
|
|
67
67
|
|
|
68
68
|
onEscPress = (event: any) => {
|
|
69
69
|
const { isOpen, onToggle } = this.props;
|
|
70
|
-
|
|
71
|
-
if (isOpen && keyCode === KEY_CODES.ESCAPE_KEY) {
|
|
70
|
+
if (isOpen && event.key === KeyTypes.Escape) {
|
|
72
71
|
onToggle(null, false);
|
|
73
72
|
this.toggle.current.focus();
|
|
74
73
|
}
|
|
@@ -76,16 +75,13 @@ export class ContextSelectorToggle extends React.Component<ContextSelectorToggle
|
|
|
76
75
|
|
|
77
76
|
onKeyDown = (event: any) => {
|
|
78
77
|
const { isOpen, onToggle, onEnter } = this.props;
|
|
79
|
-
if ((event.
|
|
78
|
+
if ((event.key === KeyTypes.Tab && !isOpen) || event.key !== KeyTypes.Enter) {
|
|
80
79
|
return;
|
|
81
80
|
}
|
|
82
81
|
event.preventDefault();
|
|
83
|
-
if (
|
|
84
|
-
(event.keyCode === KEY_CODES.TAB || event.keyCode === KEY_CODES.ENTER || event.key !== KEY_CODES.SPACE) &&
|
|
85
|
-
isOpen
|
|
86
|
-
) {
|
|
82
|
+
if ((event.key === KeyTypes.Tab || event.key === KeyTypes.Enter || event.key !== KeyTypes.Space) && isOpen) {
|
|
87
83
|
onToggle(null, !isOpen);
|
|
88
|
-
} else if ((event.
|
|
84
|
+
} else if ((event.key === KeyTypes.Enter || event.key === ' ') && !isOpen) {
|
|
89
85
|
onToggle(null, !isOpen);
|
|
90
86
|
onEnter();
|
|
91
87
|
}
|
|
@@ -25,11 +25,13 @@ describe('ContextSelector', () => {
|
|
|
25
25
|
expect(asFragment()).toMatchSnapshot();
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
-
test('Verify onToggle is called ', () => {
|
|
28
|
+
test('Verify onToggle is called ', async () => {
|
|
29
29
|
const mockfn = jest.fn();
|
|
30
|
+
const user = userEvent.setup();
|
|
31
|
+
|
|
30
32
|
render(<ContextSelector onToggle={mockfn}>{items}</ContextSelector>);
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
await user.click(screen.getByRole('button'));
|
|
33
35
|
expect(mockfn.mock.calls).toHaveLength(1);
|
|
34
36
|
});
|
|
35
37
|
});
|
|
@@ -23,15 +23,16 @@ test('Renders ContextSelectorItem disabled and hovered', () => {
|
|
|
23
23
|
expect(asFragment()).toMatchSnapshot();
|
|
24
24
|
});
|
|
25
25
|
|
|
26
|
-
test('Verify onClick is called ', () => {
|
|
26
|
+
test('Verify onClick is called ', async () => {
|
|
27
27
|
const mockfn = jest.fn();
|
|
28
|
+
const user = userEvent.setup();
|
|
28
29
|
|
|
29
30
|
render(
|
|
30
31
|
<ContextSelectorItem onClick={mockfn} sendRef={jest.fn()} index={0}>
|
|
31
32
|
My Project
|
|
32
33
|
</ContextSelectorItem>
|
|
33
34
|
);
|
|
34
|
-
|
|
35
|
+
await user.click(screen.getByRole('button'));
|
|
35
36
|
|
|
36
37
|
expect(mockfn.mock.calls).toHaveLength(1);
|
|
37
38
|
});
|
|
@@ -4,6 +4,7 @@ import { render, screen } from '@testing-library/react';
|
|
|
4
4
|
import userEvent from '@testing-library/user-event';
|
|
5
5
|
|
|
6
6
|
import { ContextSelectorToggle } from '../ContextSelectorToggle';
|
|
7
|
+
import { KeyTypes } from '../../../helpers';
|
|
7
8
|
|
|
8
9
|
describe('ContextSelectorToggle', () => {
|
|
9
10
|
test('Renders ContextSelectorToggle', () => {
|
|
@@ -11,40 +12,49 @@ describe('ContextSelectorToggle', () => {
|
|
|
11
12
|
expect(asFragment()).toMatchSnapshot();
|
|
12
13
|
});
|
|
13
14
|
|
|
14
|
-
test('Verify onToggle is called ', () => {
|
|
15
|
+
test('Verify onToggle is called ', async () => {
|
|
15
16
|
const mockfnOnToggle = jest.fn();
|
|
17
|
+
const user = userEvent.setup();
|
|
16
18
|
|
|
17
19
|
render(<ContextSelectorToggle onToggle={mockfnOnToggle} id="toggle-id" />);
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
await user.click(screen.getByRole('button'));
|
|
20
22
|
expect(mockfnOnToggle).toHaveBeenCalledTimes(1);
|
|
21
23
|
});
|
|
22
24
|
|
|
23
|
-
test('Verify ESC press', () => {
|
|
25
|
+
test('Verify ESC press', async () => {
|
|
26
|
+
const user = userEvent.setup();
|
|
27
|
+
|
|
24
28
|
const { asFragment } = render(<ContextSelectorToggle isOpen id="toggle-id" />);
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
await user.type(screen.getByRole('button'), `{${KeyTypes.Escape}}`);
|
|
27
31
|
expect(asFragment()).toMatchSnapshot();
|
|
28
32
|
});
|
|
29
33
|
|
|
30
|
-
test('Verify ESC press with not isOpen', () => {
|
|
34
|
+
test('Verify ESC press with not isOpen', async () => {
|
|
35
|
+
const user = userEvent.setup();
|
|
36
|
+
|
|
31
37
|
const { asFragment } = render(<ContextSelectorToggle onToggle={jest.fn()} id="toggle-id" />);
|
|
32
38
|
|
|
33
|
-
|
|
39
|
+
await user.type(screen.getByRole('button'), `{${KeyTypes.Escape}}`);
|
|
34
40
|
expect(asFragment()).toMatchSnapshot();
|
|
35
41
|
});
|
|
36
42
|
|
|
37
|
-
test('Verify keydown tab ', () => {
|
|
43
|
+
test('Verify keydown tab ', async () => {
|
|
44
|
+
const user = userEvent.setup();
|
|
45
|
+
|
|
38
46
|
const { asFragment } = render(<ContextSelectorToggle isOpen id="toggle-id" />);
|
|
39
47
|
|
|
40
|
-
|
|
48
|
+
await user.type(screen.getByRole('button'), `{${KeyTypes.Tab}}`);
|
|
41
49
|
expect(asFragment()).toMatchSnapshot();
|
|
42
50
|
});
|
|
43
51
|
|
|
44
|
-
test('Verify keydown enter ', () => {
|
|
52
|
+
test('Verify keydown enter ', async () => {
|
|
53
|
+
const user = userEvent.setup();
|
|
54
|
+
|
|
45
55
|
const { asFragment } = render(<ContextSelectorToggle onToggle={jest.fn()} onEnter={jest.fn()} id="toggle-id" />);
|
|
46
56
|
|
|
47
|
-
|
|
57
|
+
await user.type(screen.getByRole('button'), `{${KeyTypes.Enter}}`);
|
|
48
58
|
expect(asFragment()).toMatchSnapshot();
|
|
49
59
|
});
|
|
50
60
|
});
|
|
@@ -80,8 +80,9 @@ describe('DataList', () => {
|
|
|
80
80
|
expect(selectableInput).not.toBeInTheDocument();
|
|
81
81
|
});
|
|
82
82
|
|
|
83
|
-
test('List calls selectableRow.onChange when the selectable input changes', () => {
|
|
83
|
+
test('List calls selectableRow.onChange when the selectable input changes', async () => {
|
|
84
84
|
const mock = jest.fn();
|
|
85
|
+
const user = userEvent.setup();
|
|
85
86
|
|
|
86
87
|
render(
|
|
87
88
|
<DataList aria-label="this is a simple list" selectableRow={{ onChange: mock }} selectedDataListItemId=''>
|
|
@@ -94,7 +95,7 @@ describe('DataList', () => {
|
|
|
94
95
|
);
|
|
95
96
|
|
|
96
97
|
const selectableInput = screen.getByRole('radio', { hidden: true });
|
|
97
|
-
|
|
98
|
+
await user.click(selectableInput);
|
|
98
99
|
|
|
99
100
|
expect(mock).toHaveBeenCalled();
|
|
100
101
|
});
|
|
@@ -3,8 +3,9 @@ import { render, screen } from '@testing-library/react';
|
|
|
3
3
|
import userEvent from '@testing-library/user-event';
|
|
4
4
|
import { DataListCheck } from '../DataListCheck';
|
|
5
5
|
|
|
6
|
-
it('does not throw a "A component is changing an uncontrolled input of type checkbox to be controlled" error when changed if using isChecked', () => {
|
|
6
|
+
it('does not throw a "A component is changing an uncontrolled input of type checkbox to be controlled" error when changed if using isChecked', async () => {
|
|
7
7
|
const consoleSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
|
|
8
|
+
const user = userEvent.setup();
|
|
8
9
|
|
|
9
10
|
const ControlledDataListCheck = () => {
|
|
10
11
|
const [checked, setChecked] = React.useState(false);
|
|
@@ -14,7 +15,7 @@ it('does not throw a "A component is changing an uncontrolled input of type chec
|
|
|
14
15
|
|
|
15
16
|
render(<ControlledDataListCheck />);
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
await user.click(screen.getByRole('checkbox'));
|
|
18
19
|
|
|
19
20
|
expect(consoleSpy).not.toHaveBeenCalled();
|
|
20
21
|
});
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
import React from 'react';
|
|
13
13
|
import { render, screen } from '@testing-library/react';
|
|
14
14
|
import userEvent from '@testing-library/user-event';
|
|
15
|
+
import { KeyTypes } from '../../../helpers';
|
|
15
16
|
|
|
16
17
|
Object.values([
|
|
17
18
|
{ isExpanded: true, isInline: false, isStatic: false },
|
|
@@ -126,7 +127,7 @@ test(`Drawer has resizable callback and id`, () => {
|
|
|
126
127
|
expect(asFragment()).toMatchSnapshot();
|
|
127
128
|
});
|
|
128
129
|
|
|
129
|
-
test('Resizeable DrawerPanelContent can be wrapped in a context without causing an error', () => {
|
|
130
|
+
test('Resizeable DrawerPanelContent can be wrapped in a context without causing an error', async () => {
|
|
130
131
|
const TestContext = React.createContext({});
|
|
131
132
|
|
|
132
133
|
const consoleError = jest.spyOn(console, 'error').mockImplementation();
|
|
@@ -148,6 +149,8 @@ test('Resizeable DrawerPanelContent can be wrapped in a context without causing
|
|
|
148
149
|
</TestContext.Provider>
|
|
149
150
|
);
|
|
150
151
|
|
|
152
|
+
const user = userEvent.setup();
|
|
153
|
+
|
|
151
154
|
render(
|
|
152
155
|
<Drawer isExpanded={true} position="left">
|
|
153
156
|
<DrawerContent panelContent={panelContent}>
|
|
@@ -156,8 +159,8 @@ test('Resizeable DrawerPanelContent can be wrapped in a context without causing
|
|
|
156
159
|
</Drawer>
|
|
157
160
|
);
|
|
158
161
|
|
|
159
|
-
|
|
160
|
-
|
|
162
|
+
await user.tab();
|
|
163
|
+
await user.keyboard(`{${KeyTypes.ArrowLeft}}`);
|
|
161
164
|
|
|
162
165
|
expect(consoleError).not.toHaveBeenCalled();
|
|
163
166
|
})
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import styles from '@patternfly/react-styles/css/components/Dropdown/dropdown';
|
|
3
3
|
import { DropdownContext } from './dropdownConstants';
|
|
4
4
|
import { css } from '@patternfly/react-styles';
|
|
5
|
-
import {
|
|
5
|
+
import { KeyTypes } from '../../helpers/constants';
|
|
6
6
|
import { PickOptional } from '../../helpers/typeUtils';
|
|
7
7
|
|
|
8
8
|
export interface ToggleProps {
|
|
@@ -95,13 +95,12 @@ export class Toggle extends React.Component<ToggleProps> {
|
|
|
95
95
|
|
|
96
96
|
onEscPress = (event: KeyboardEvent) => {
|
|
97
97
|
const { parentRef, getMenuRef } = this.props;
|
|
98
|
-
const keyCode = event.keyCode || event.which;
|
|
99
98
|
const menuRef = getMenuRef && getMenuRef();
|
|
100
99
|
const escFromToggle = parentRef && parentRef.current && parentRef.current.contains(event.target as Node);
|
|
101
100
|
const escFromWithinMenu = menuRef && menuRef.contains && menuRef.contains(event.target as Node);
|
|
102
101
|
if (
|
|
103
102
|
this.props.isOpen &&
|
|
104
|
-
(
|
|
103
|
+
(event.key === KeyTypes.Escape || event.key === 'Tab') &&
|
|
105
104
|
(escFromToggle || escFromWithinMenu)
|
|
106
105
|
) {
|
|
107
106
|
this.props.onToggle(false, event);
|
|
@@ -201,9 +201,10 @@ describe('KebabToggle', () => {
|
|
|
201
201
|
});
|
|
202
202
|
|
|
203
203
|
describe('API', () => {
|
|
204
|
-
test('click on item', () => {
|
|
204
|
+
test('click on item', async () => {
|
|
205
205
|
const mockToggle = jest.fn();
|
|
206
206
|
const mockSelect = jest.fn();
|
|
207
|
+
const user = userEvent.setup();
|
|
207
208
|
|
|
208
209
|
render(
|
|
209
210
|
<Dropdown
|
|
@@ -214,7 +215,7 @@ describe('API', () => {
|
|
|
214
215
|
/>
|
|
215
216
|
);
|
|
216
217
|
|
|
217
|
-
|
|
218
|
+
await user.click(screen.getByText('Link')); // "Link" is the text of the first item
|
|
218
219
|
expect(mockToggle.mock.calls).toHaveLength(0);
|
|
219
220
|
expect(mockSelect.mock.calls).toHaveLength(1);
|
|
220
221
|
});
|
|
@@ -8,8 +8,9 @@ import { DropdownContext } from '../dropdownConstants';
|
|
|
8
8
|
|
|
9
9
|
describe('DropdownToggle', () => {
|
|
10
10
|
describe('API', () => {
|
|
11
|
-
test('click on closed', () => {
|
|
11
|
+
test('click on closed', async () => {
|
|
12
12
|
const mockToggle = jest.fn();
|
|
13
|
+
const user = userEvent.setup();
|
|
13
14
|
|
|
14
15
|
render(
|
|
15
16
|
<DropdownToggle onToggle={mockToggle} parentRef={document.createElement('div')}>
|
|
@@ -17,12 +18,13 @@ describe('DropdownToggle', () => {
|
|
|
17
18
|
</DropdownToggle>
|
|
18
19
|
);
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
await user.click(screen.getByRole('button'));
|
|
21
22
|
expect(mockToggle.mock.calls[0][0]).toBe(true);
|
|
22
23
|
});
|
|
23
24
|
|
|
24
|
-
test('click on opened', () => {
|
|
25
|
+
test('click on opened', async () => {
|
|
25
26
|
const mockToggle = jest.fn();
|
|
27
|
+
const user = userEvent.setup();
|
|
26
28
|
|
|
27
29
|
render(
|
|
28
30
|
<DropdownToggle id="Dropdown Toggle" onToggle={mockToggle} isOpen parentRef={document.createElement('div')}>
|
|
@@ -30,7 +32,7 @@ describe('DropdownToggle', () => {
|
|
|
30
32
|
</DropdownToggle>
|
|
31
33
|
);
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
await user.click(screen.getByRole('button'));
|
|
34
36
|
expect(mockToggle.mock.calls[0][0]).toBe(false);
|
|
35
37
|
});
|
|
36
38
|
|
|
@@ -20,11 +20,12 @@ test('passing class', () => {
|
|
|
20
20
|
expect(asFragment()).toMatchSnapshot();
|
|
21
21
|
});
|
|
22
22
|
|
|
23
|
-
test('checkbox passes value and event to onClick handler', () => {
|
|
23
|
+
test('checkbox passes value and event to onClick handler', async () => {
|
|
24
24
|
const onClickMock = jest.fn();
|
|
25
|
+
const user = userEvent.setup();
|
|
25
26
|
|
|
26
27
|
render(<DropdownToggleAction id="action" aria-label="acton" onClick={onClickMock} />);
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
await user.click(screen.getByRole('button'));
|
|
29
30
|
expect(onClickMock).toHaveBeenCalled();
|
|
30
31
|
});
|
|
@@ -54,10 +54,12 @@ describe('DropdownToggleCheckbox', () => {
|
|
|
54
54
|
expect(asFragment()).toMatchSnapshot();
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
-
test('checkbox passes value and event to onChange handler', () => {
|
|
57
|
+
test('checkbox passes value and event to onChange handler', async () => {
|
|
58
|
+
const user = userEvent.setup();
|
|
59
|
+
|
|
58
60
|
render(<DropdownToggleCheckbox id="check" {...props} aria-label="check" />);
|
|
59
61
|
|
|
60
|
-
|
|
62
|
+
await user.click(screen.getByRole('checkbox'));
|
|
61
63
|
expect(props.onChange).toHaveBeenCalledWith(true, expect.any(Object));
|
|
62
64
|
});
|
|
63
65
|
});
|
|
@@ -18,12 +18,13 @@ test('Renders ExpandableSection expanded', () => {
|
|
|
18
18
|
expect(asFragment()).toMatchSnapshot();
|
|
19
19
|
});
|
|
20
20
|
|
|
21
|
-
test('ExpandableSection onToggle called', () => {
|
|
21
|
+
test('ExpandableSection onToggle called', async () => {
|
|
22
22
|
const mockfn = jest.fn();
|
|
23
|
+
const user = userEvent.setup();
|
|
23
24
|
|
|
24
25
|
render(<ExpandableSection onToggle={mockfn}> test </ExpandableSection>);
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
await user.click(screen.getByRole('button'));
|
|
27
28
|
expect(mockfn.mock.calls).toHaveLength(1);
|
|
28
29
|
});
|
|
29
30
|
|
|
@@ -216,7 +216,8 @@ describe('FormGroup', () => {
|
|
|
216
216
|
expect(screen.queryByRole('radiogroup')).not.toBeInTheDocument();
|
|
217
217
|
});
|
|
218
218
|
|
|
219
|
-
test('input should receive focus when clicking text label', () => {
|
|
219
|
+
test('input should receive focus when clicking text label', async () => {
|
|
220
|
+
const user = userEvent.setup();
|
|
220
221
|
render(
|
|
221
222
|
<FormGroup label="label" fieldId="native-label-element">
|
|
222
223
|
<input id="native-label-element" />
|
|
@@ -226,12 +227,13 @@ describe('FormGroup', () => {
|
|
|
226
227
|
const labelElement = screen.getByText('label');
|
|
227
228
|
const input = screen.getByRole('textbox');
|
|
228
229
|
|
|
229
|
-
|
|
230
|
+
await user.click(labelElement);
|
|
230
231
|
expect(input).toHaveFocus();
|
|
231
232
|
});
|
|
232
233
|
|
|
233
234
|
describe('With multiple inputs per group', () => {
|
|
234
|
-
test('inputs should not receive focus when clicking text label', () => {
|
|
235
|
+
test('inputs should not receive focus when clicking text label', async () => {
|
|
236
|
+
const user = userEvent.setup();
|
|
235
237
|
render(
|
|
236
238
|
<FormGroup label="label" fieldId="span-label-element" role="group">
|
|
237
239
|
<input id="span-label-element" />
|
|
@@ -242,7 +244,7 @@ describe('FormGroup', () => {
|
|
|
242
244
|
const labelElement = screen.getByText('label');
|
|
243
245
|
const inputs = screen.getAllByRole('textbox');
|
|
244
246
|
|
|
245
|
-
|
|
247
|
+
await user.click(labelElement);
|
|
246
248
|
inputs.forEach(input => {
|
|
247
249
|
expect(input).not.toHaveFocus();
|
|
248
250
|
});
|
|
@@ -174,16 +174,16 @@ describe('FormSelect', () => {
|
|
|
174
174
|
expect(screen.getByLabelText('required FormSelect')).toHaveAttribute('required');
|
|
175
175
|
});
|
|
176
176
|
|
|
177
|
-
test('FormSelect passes value and event to onChange handler', () => {
|
|
177
|
+
test('FormSelect passes value and event to onChange handler', async () => {
|
|
178
178
|
const myMock = jest.fn();
|
|
179
|
-
|
|
179
|
+
const user = userEvent.setup();
|
|
180
180
|
render(
|
|
181
181
|
<FormSelect onChange={myMock} aria-label="Some label">
|
|
182
182
|
<FormSelectOption key={1} value={props.options[1].value} label={props.options[1].label} />
|
|
183
183
|
</FormSelect>
|
|
184
184
|
);
|
|
185
185
|
|
|
186
|
-
|
|
186
|
+
await user.selectOptions(screen.getByLabelText('Some label'), 'Mr');
|
|
187
187
|
|
|
188
188
|
expect(myMock).toHaveBeenCalled();
|
|
189
189
|
expect(myMock.mock.calls[0][0]).toEqual('mr');
|