@patternfly/react-core 4.236.2 → 4.236.5

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.
Files changed (160) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/esm/components/AboutModal/AboutModal.js +2 -2
  3. package/dist/esm/components/AboutModal/AboutModal.js.map +1 -1
  4. package/dist/esm/components/Alert/Alert.d.ts +2 -0
  5. package/dist/esm/components/Alert/Alert.d.ts.map +1 -1
  6. package/dist/esm/components/Alert/Alert.js +2 -2
  7. package/dist/esm/components/Alert/Alert.js.map +1 -1
  8. package/dist/esm/components/AlertGroup/AlertGroupInline.d.ts.map +1 -1
  9. package/dist/esm/components/AlertGroup/AlertGroupInline.js +4 -1
  10. package/dist/esm/components/AlertGroup/AlertGroupInline.js.map +1 -1
  11. package/dist/esm/components/ContextSelector/ContextSelector.js +2 -2
  12. package/dist/esm/components/ContextSelector/ContextSelector.js.map +1 -1
  13. package/dist/esm/components/ContextSelector/ContextSelectorToggle.d.ts.map +1 -1
  14. package/dist/esm/components/ContextSelector/ContextSelectorToggle.js +5 -7
  15. package/dist/esm/components/ContextSelector/ContextSelectorToggle.js.map +1 -1
  16. package/dist/esm/components/Dropdown/Toggle.d.ts.map +1 -1
  17. package/dist/esm/components/Dropdown/Toggle.js +2 -3
  18. package/dist/esm/components/Dropdown/Toggle.js.map +1 -1
  19. package/dist/esm/components/MenuToggle/MenuToggle.js.map +1 -1
  20. package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
  21. package/dist/esm/components/Modal/Modal.js +2 -2
  22. package/dist/esm/components/Modal/Modal.js.map +1 -1
  23. package/dist/esm/components/NumberInput/NumberInput.d.ts.map +1 -1
  24. package/dist/esm/components/NumberInput/NumberInput.js +3 -3
  25. package/dist/esm/components/NumberInput/NumberInput.js.map +1 -1
  26. package/dist/esm/components/OptionsMenu/OptionsMenuToggleWithText.d.ts.map +1 -1
  27. package/dist/esm/components/OptionsMenu/OptionsMenuToggleWithText.js +2 -3
  28. package/dist/esm/components/OptionsMenu/OptionsMenuToggleWithText.js.map +1 -1
  29. package/dist/esm/components/Pagination/Navigation.js +2 -2
  30. package/dist/esm/components/Pagination/Navigation.js.map +1 -1
  31. package/dist/esm/components/SearchInput/AdvancedSearchMenu.d.ts.map +1 -1
  32. package/dist/esm/components/SearchInput/AdvancedSearchMenu.js +2 -3
  33. package/dist/esm/components/SearchInput/AdvancedSearchMenu.js.map +1 -1
  34. package/dist/esm/components/Tabs/OverflowTab.d.ts.map +1 -1
  35. package/dist/esm/components/Tabs/OverflowTab.js +1 -1
  36. package/dist/esm/components/Tabs/OverflowTab.js.map +1 -1
  37. package/dist/esm/components/Tabs/TabButton.d.ts.map +1 -1
  38. package/dist/esm/components/Tabs/TabButton.js +1 -1
  39. package/dist/esm/components/Tabs/TabButton.js.map +1 -1
  40. package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
  41. package/dist/esm/components/Tabs/Tabs.js +2 -2
  42. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  43. package/dist/esm/components/Tooltip/Tooltip.js +3 -3
  44. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  45. package/dist/esm/components/Wizard/Wizard.js +2 -2
  46. package/dist/esm/components/Wizard/Wizard.js.map +1 -1
  47. package/dist/js/components/AboutModal/AboutModal.js +1 -1
  48. package/dist/js/components/AboutModal/AboutModal.js.map +1 -1
  49. package/dist/js/components/Alert/Alert.d.ts +2 -0
  50. package/dist/js/components/Alert/Alert.d.ts.map +1 -1
  51. package/dist/js/components/Alert/Alert.js +2 -2
  52. package/dist/js/components/Alert/Alert.js.map +1 -1
  53. package/dist/js/components/AlertGroup/AlertGroupInline.d.ts.map +1 -1
  54. package/dist/js/components/AlertGroup/AlertGroupInline.js +4 -1
  55. package/dist/js/components/AlertGroup/AlertGroupInline.js.map +1 -1
  56. package/dist/js/components/ContextSelector/ContextSelector.js +1 -1
  57. package/dist/js/components/ContextSelector/ContextSelector.js.map +1 -1
  58. package/dist/js/components/ContextSelector/ContextSelectorToggle.d.ts.map +1 -1
  59. package/dist/js/components/ContextSelector/ContextSelectorToggle.js +4 -6
  60. package/dist/js/components/ContextSelector/ContextSelectorToggle.js.map +1 -1
  61. package/dist/js/components/Dropdown/Toggle.d.ts.map +1 -1
  62. package/dist/js/components/Dropdown/Toggle.js +1 -2
  63. package/dist/js/components/Dropdown/Toggle.js.map +1 -1
  64. package/dist/js/components/MenuToggle/MenuToggle.js.map +1 -1
  65. package/dist/js/components/Modal/Modal.d.ts.map +1 -1
  66. package/dist/js/components/Modal/Modal.js +1 -1
  67. package/dist/js/components/Modal/Modal.js.map +1 -1
  68. package/dist/js/components/NumberInput/NumberInput.d.ts.map +1 -1
  69. package/dist/js/components/NumberInput/NumberInput.js +2 -2
  70. package/dist/js/components/NumberInput/NumberInput.js.map +1 -1
  71. package/dist/js/components/OptionsMenu/OptionsMenuToggleWithText.d.ts.map +1 -1
  72. package/dist/js/components/OptionsMenu/OptionsMenuToggleWithText.js +1 -2
  73. package/dist/js/components/OptionsMenu/OptionsMenuToggleWithText.js.map +1 -1
  74. package/dist/js/components/Pagination/Navigation.js +1 -1
  75. package/dist/js/components/Pagination/Navigation.js.map +1 -1
  76. package/dist/js/components/SearchInput/AdvancedSearchMenu.d.ts.map +1 -1
  77. package/dist/js/components/SearchInput/AdvancedSearchMenu.js +1 -2
  78. package/dist/js/components/SearchInput/AdvancedSearchMenu.js.map +1 -1
  79. package/dist/js/components/Tabs/OverflowTab.d.ts.map +1 -1
  80. package/dist/js/components/Tabs/OverflowTab.js +1 -1
  81. package/dist/js/components/Tabs/OverflowTab.js.map +1 -1
  82. package/dist/js/components/Tabs/TabButton.d.ts.map +1 -1
  83. package/dist/js/components/Tabs/TabButton.js +1 -1
  84. package/dist/js/components/Tabs/TabButton.js.map +1 -1
  85. package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
  86. package/dist/js/components/Tabs/Tabs.js +2 -2
  87. package/dist/js/components/Tabs/Tabs.js.map +1 -1
  88. package/dist/js/components/Tooltip/Tooltip.js +2 -2
  89. package/dist/js/components/Tooltip/Tooltip.js.map +1 -1
  90. package/dist/js/components/Wizard/Wizard.js +1 -1
  91. package/dist/js/components/Wizard/Wizard.js.map +1 -1
  92. package/dist/umd/react-core.min.css +40 -39
  93. package/dist/umd/react-core.min.js +5 -5
  94. package/package.json +6 -6
  95. package/src/components/AboutModal/AboutModal.tsx +2 -2
  96. package/src/components/AboutModal/__tests__/AboutModal.test.tsx +5 -2
  97. package/src/components/Alert/Alert.tsx +4 -0
  98. package/src/components/Alert/__tests__/Alert.test.tsx +3 -2
  99. package/src/components/AlertGroup/AlertGroupInline.tsx +3 -2
  100. package/src/components/AlertGroup/__tests__/AlertGroup.test.tsx +6 -4
  101. package/src/components/Card/examples/CardLegacySelectable.tsx +1 -1
  102. package/src/components/Checkbox/__tests__/Checkbox.test.tsx +4 -2
  103. package/src/components/ChipGroup/__tests__/ChipGroup.test.tsx +4 -2
  104. package/src/components/ClipboardCopy/__tests__/ClipboardCopyButton.test.tsx +4 -2
  105. package/src/components/ClipboardCopy/__tests__/ClipboardCopyToggle.test.tsx +4 -2
  106. package/src/components/ContextSelector/ContextSelector.tsx +2 -2
  107. package/src/components/ContextSelector/ContextSelectorToggle.tsx +5 -9
  108. package/src/components/ContextSelector/__tests__/ContextSelector.test.tsx +4 -2
  109. package/src/components/ContextSelector/__tests__/ContextSelectorItem.test.tsx +3 -2
  110. package/src/components/ContextSelector/__tests__/ContextSelectorToggle.test.tsx +20 -10
  111. package/src/components/DataList/__tests__/DataList.test.tsx +3 -2
  112. package/src/components/DataList/__tests__/DataListCheck.test.tsx +3 -2
  113. package/src/components/Drawer/__tests__/Drawer.test.tsx +6 -3
  114. package/src/components/Dropdown/Toggle.tsx +2 -3
  115. package/src/components/Dropdown/__tests__/Dropdown.test.tsx +3 -2
  116. package/src/components/Dropdown/__tests__/DropdownToggle.test.tsx +6 -4
  117. package/src/components/Dropdown/__tests__/DropdownToggleAction.test.tsx +3 -2
  118. package/src/components/Dropdown/__tests__/DropdownToggleCheckbox.test.tsx +4 -2
  119. package/src/components/ExpandableSection/__tests__/ExpandableSection.test.tsx +3 -2
  120. package/src/components/Form/__tests__/FormGroup.test.tsx +6 -4
  121. package/src/components/FormSelect/__tests__/FormSelect.test.tsx +3 -3
  122. package/src/components/Label/__tests__/Label.test.tsx +4 -2
  123. package/src/components/LabelGroup/__tests__/LabelGroup.test.tsx +4 -2
  124. package/src/components/LoginPage/__tests__/LoginForm.test.tsx +9 -6
  125. package/src/components/MenuToggle/MenuToggle.tsx +1 -1
  126. package/src/components/Modal/Modal.tsx +2 -2
  127. package/src/components/Modal/__tests__/Modal.test.tsx +5 -2
  128. package/src/components/Modal/__tests__/ModalBoxCloseButton.test.tsx +3 -2
  129. package/src/components/Nav/__tests__/Nav.test.tsx +10 -6
  130. package/src/components/NumberInput/NumberInput.tsx +3 -3
  131. package/src/components/NumberInput/__tests__/NumberInput.test.tsx +42 -17
  132. package/src/components/OptionsMenu/OptionsMenuToggleWithText.tsx +2 -3
  133. package/src/components/Pagination/Navigation.tsx +2 -2
  134. package/src/components/Pagination/__tests__/Pagination.test.tsx +83 -44
  135. package/src/components/Radio/__tests__/Radio.test.tsx +4 -2
  136. package/src/components/SearchInput/AdvancedSearchMenu.tsx +2 -3
  137. package/src/components/SearchInput/__tests__/SearchInput.test.tsx +32 -34
  138. package/src/components/SearchInput/__tests__/__snapshots__/SearchInput.test.tsx.snap +4 -1
  139. package/src/components/Select/__tests__/Select.test.tsx +17 -9
  140. package/src/components/Select/__tests__/SelectToggle.test.tsx +14 -8
  141. package/src/components/SimpleList/__tests__/SimpleList.test.tsx +6 -4
  142. package/src/components/Switch/__tests__/Switch.test.tsx +4 -2
  143. package/src/components/Tabs/OverflowTab.tsx +1 -0
  144. package/src/components/Tabs/TabButton.tsx +6 -1
  145. package/src/components/Tabs/Tabs.tsx +2 -0
  146. package/src/components/Tabs/__tests__/OverflowTab.test.tsx +42 -23
  147. package/src/components/Tabs/__tests__/__snapshots__/OverflowTab.test.tsx.snap +1 -0
  148. package/src/components/Tabs/__tests__/__snapshots__/Tab.test.tsx.snap +1 -0
  149. package/src/components/Tabs/__tests__/__snapshots__/TabButton.test.tsx.snap +1 -0
  150. package/src/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +67 -0
  151. package/src/components/TextArea/__tests__/TextArea.test.tsx +4 -2
  152. package/src/components/TextInput/__tests__/TextInput.test.tsx +4 -2
  153. package/src/components/TextInputGroup/__tests__/TextInputGroupMain.test.tsx +13 -9
  154. package/src/components/TimePicker/__tests__/TimePicker.test.tsx +36 -26
  155. package/src/components/ToggleGroup/__tests__/ToggleGroup.test.tsx +4 -2
  156. package/src/components/Tooltip/Tooltip.tsx +3 -3
  157. package/src/components/Wizard/Wizard.tsx +2 -2
  158. package/src/components/Wizard/__tests__/Wizard.test.tsx +18 -14
  159. package/src/demos/PrimaryDetail.md +1 -1
  160. 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.2",
3
+ "version": "4.236.5",
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.2",
48
- "@patternfly/react-styles": "^4.86.2",
49
- "@patternfly/react-tokens": "^4.88.2",
47
+ "@patternfly/react-icons": "^4.87.5",
48
+ "@patternfly/react-styles": "^4.86.5",
49
+ "@patternfly/react-tokens": "^4.88.5",
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.211.0",
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": "de201ab6c9fa8d24e516025f984b0b86666f484d"
73
+ "gitHead": "910d0ce39921d2f89298f0fca3694ea6dc141b63"
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 { KEY_CODES } from '../../helpers/constants';
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.keyCode === KEY_CODES.ESCAPE_KEY && this.props.isOpen) {
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
- userEvent.type(screen.getByRole('dialog'), '{esc}');
24
+ await user.type(screen.getByRole('dialog'), `{${KeyTypes.Escape}}`);
22
25
  expect(props.onClose).toHaveBeenCalled();
23
26
  });
24
27
 
@@ -73,6 +73,8 @@ export interface AlertProps extends Omit<React.HTMLProps<HTMLDivElement>, 'actio
73
73
  isExpandable?: boolean;
74
74
  /** Adds accessible text to the alert Toggle */
75
75
  toggleAriaLabel?: string;
76
+ /** Uniquely identifies the alert */
77
+ id?: string;
76
78
  }
77
79
 
78
80
  export const Alert: React.FunctionComponent<AlertProps> = ({
@@ -100,6 +102,7 @@ export const Alert: React.FunctionComponent<AlertProps> = ({
100
102
  toggleAriaLabel = `${capitalize(variant)} alert details`,
101
103
  onMouseEnter = () => {},
102
104
  onMouseLeave = () => {},
105
+ id,
103
106
  ...props
104
107
  }: AlertProps) => {
105
108
  const ouiaProps = useOUIAProps(Alert.displayName, ouiaId, ouiaSafe, variant);
@@ -211,6 +214,7 @@ export const Alert: React.FunctionComponent<AlertProps> = ({
211
214
  })}
212
215
  onMouseEnter={myOnMouseEnter}
213
216
  onMouseLeave={myOnMouseLeave}
217
+ id={id}
214
218
  {...props}
215
219
  >
216
220
  {isExpandable && (
@@ -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
- userEvent.click(screen.getByLabelText('Close'));
69
+ await user.click(screen.getByLabelText('Close'));
69
70
  expect(onClose).toHaveBeenCalled();
70
71
  });
71
72
 
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
  import { css } from '@patternfly/react-styles';
3
3
  import styles from '@patternfly/react-styles/css/components/AlertGroup/alert-group';
4
4
  import { AlertGroupProps } from './AlertGroup';
5
+ import { AlertProps } from '../Alert';
5
6
 
6
7
  export const AlertGroupInline: React.FunctionComponent<AlertGroupProps> = ({
7
8
  className,
@@ -18,8 +19,8 @@ export const AlertGroupInline: React.FunctionComponent<AlertGroupProps> = ({
18
19
  className={css(styles.alertGroup, className, isToast ? styles.modifiers.toast : '')}
19
20
  {...rest}
20
21
  >
21
- {React.Children.toArray(children).map((Alert: React.ReactNode, index: number) => (
22
- <li key={index}>{Alert}</li>
22
+ {React.Children.toArray(children).map((alert, index) => (
23
+ <li key={(alert as React.ReactElement<AlertProps>).props?.id || index}>{alert}</li>
23
24
  ))}
24
25
  {overflowMessage && (
25
26
  <li>
@@ -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
- userEvent.click(overflowButton);
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
- userEvent.click(screen.getByLabelText('Close'));
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 ([13, 32].includes(event.keyCode)) {
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
- userEvent.click(screen.getByLabelText('check'));
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
- userEvent.click(moreText);
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
- userEvent.click(screen.getByRole('button'));
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
- userEvent.click(screen.getByRole('button'));
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 { KEY_CODES } from '../../helpers/constants';
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.charCode === KEY_CODES.ENTER) {
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 { KEY_CODES } from '../../helpers/constants';
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
- const keyCode = event.keyCode || event.which;
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.keyCode === KEY_CODES.TAB && !isOpen) || event.key !== KEY_CODES.ENTER) {
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.keyCode === KEY_CODES.ENTER || event.key === ' ') && !isOpen) {
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
- userEvent.click(screen.getByRole('button'));
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
- userEvent.click(screen.getByRole('button'));
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
- userEvent.click(screen.getByRole('button'));
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
- userEvent.type(screen.getByRole('button'), '{esc}');
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
- userEvent.type(screen.getByRole('button'), '{esc}');
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
- userEvent.type(screen.getByRole('button'), '{tab}');
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
- userEvent.type(screen.getByRole('button'), '{enter}');
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
- userEvent.click(selectableInput);
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
- userEvent.click(screen.getByRole('checkbox'));
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
- userEvent.tab();
160
- userEvent.keyboard('{arrowleft}');
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 { KEY_CODES } from '../../helpers/constants';
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
- (keyCode === KEY_CODES.ESCAPE_KEY || event.key === 'Tab') &&
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
- userEvent.click(screen.getByText('Link')); // "Link" is the text of the first item
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
- userEvent.click(screen.getByRole('button'));
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
- userEvent.click(screen.getByRole('button'));
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
- userEvent.click(screen.getByRole('button'));
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
- userEvent.click(screen.getByRole('checkbox'));
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
- userEvent.click(screen.getByRole('button'));
27
+ await user.click(screen.getByRole('button'));
27
28
  expect(mockfn.mock.calls).toHaveLength(1);
28
29
  });
29
30