@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
@@ -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
- userEvent.click(labelElement);
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
- userEvent.click(labelElement);
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
- userEvent.selectOptions(screen.getByLabelText('Some label'), 'Mr');
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');
@@ -91,7 +91,9 @@ describe('Label', () => {
91
91
  expect(asFragment()).toMatchSnapshot();
92
92
  });
93
93
 
94
- test('editable label', () => {
94
+ test('editable label', async () => {
95
+ const user = userEvent.setup();
96
+
95
97
  const { asFragment } = render(
96
98
  <Label onClose={jest.fn()} onEditCancel={jest.fn()} onEditComplete={jest.fn()} isEditable>
97
99
  Something
@@ -103,7 +105,7 @@ describe('Label', () => {
103
105
  expect(button).toBeInTheDocument();
104
106
  expect(asFragment()).toMatchSnapshot();
105
107
 
106
- userEvent.click(button);
108
+ await user.click(button);
107
109
  expect(screen.queryByRole('button', { name: 'Something' })).toBeNull();
108
110
  expect(asFragment()).toMatchSnapshot();
109
111
  });
@@ -34,7 +34,9 @@ describe('LabelGroup', () => {
34
34
  expect(asFragment()).toMatchSnapshot();
35
35
  });
36
36
 
37
- test('label group expanded', () => {
37
+ test('label group expanded', async () => {
38
+ const user = userEvent.setup();
39
+
38
40
  render(
39
41
  <LabelGroup>
40
42
  <Label>1</Label>
@@ -47,7 +49,7 @@ describe('LabelGroup', () => {
47
49
 
48
50
  expect(showMoreButton.textContent).toBe('1 more');
49
51
 
50
- userEvent.click(showMoreButton);
52
+ await user.click(showMoreButton);
51
53
  expect(showMoreButton.textContent).toBe('Show Less');
52
54
  });
53
55
 
@@ -11,30 +11,33 @@ describe('LoginForm', () => {
11
11
  expect(asFragment()).toMatchSnapshot();
12
12
  });
13
13
 
14
- test('should call onChangeUsername callback', () => {
14
+ test('should call onChangeUsername callback', async () => {
15
15
  const mockFn = jest.fn();
16
+ const user = userEvent.setup();
16
17
 
17
18
  render(<LoginForm onChangeUsername={mockFn} rememberMeLabel="Remember me" />);
18
19
 
19
- userEvent.type(screen.getByText('Username'), 'updatedUserName');
20
+ await user.type(screen.getByText('Username'), 'updatedUserName');
20
21
  expect(mockFn).toHaveBeenCalled();
21
22
  });
22
23
 
23
- test('should call onChangePassword callback', () => {
24
+ test('should call onChangePassword callback', async () => {
24
25
  const mockFn = jest.fn();
26
+ const user = userEvent.setup();
25
27
 
26
28
  render(<LoginForm onChangePassword={mockFn} rememberMeLabel="Remember me" />);
27
29
 
28
- userEvent.type(screen.getByText('Password'), 'updatedPassword');
30
+ await user.type(screen.getByText('Password'), 'updatedPassword');
29
31
  expect(mockFn).toHaveBeenCalled();
30
32
  });
31
33
 
32
- test('should call onChangeRememberMe callback', () => {
34
+ test('should call onChangeRememberMe callback', async () => {
33
35
  const mockFn = jest.fn();
36
+ const user = userEvent.setup();
34
37
 
35
38
  render(<LoginForm onChangeRememberMe={mockFn} rememberMeLabel="Remember me" />);
36
39
 
37
- userEvent.click(screen.getByLabelText('Remember me'));
40
+ await user.click(screen.getByLabelText('Remember me'));
38
41
  expect(mockFn).toHaveBeenCalled();
39
42
  });
40
43
 
@@ -172,7 +172,7 @@ export class MenuToggleBase extends React.Component<MenuToggleProps> {
172
172
  }
173
173
  }
174
174
 
175
- export const MenuToggle = React.forwardRef<MenuToggleElement, MenuToggleProps>((props, ref) => (
175
+ export const MenuToggle = React.forwardRef((props: MenuToggleProps, ref: React.Ref<MenuToggleElement>) => (
176
176
  <MenuToggleBase innerRef={ref} {...props} />
177
177
  ));
178
178
 
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import * as ReactDOM from 'react-dom';
3
- import { canUseDOM, KEY_CODES, PickOptional } from '../../helpers';
3
+ import { canUseDOM, KeyTypes, PickOptional } from '../../helpers';
4
4
  import { css } from '@patternfly/react-styles';
5
5
  import styles from '@patternfly/react-styles/css/components/Backdrop/backdrop';
6
6
  import { ModalContent } from './ModalContent';
@@ -120,7 +120,7 @@ export class Modal extends React.Component<ModalProps, ModalState> {
120
120
 
121
121
  handleEscKeyClick = (event: KeyboardEvent): void => {
122
122
  const { onEscapePress } = this.props;
123
- if (event.keyCode === KEY_CODES.ESCAPE_KEY && this.props.isOpen) {
123
+ if (event.key === KeyTypes.Escape && this.props.isOpen) {
124
124
  onEscapePress ? onEscapePress(event) : this.props.onClose();
125
125
  }
126
126
  };
@@ -7,6 +7,7 @@ import { css } from '../../../../../react-styles/dist/js';
7
7
  import styles from '@patternfly/react-styles/css/components/Backdrop/backdrop';
8
8
 
9
9
  import { Modal } from '../Modal';
10
+ import { KeyTypes } from '../../../helpers';
10
11
 
11
12
  jest.spyOn(document, 'createElement');
12
13
  jest.spyOn(document.body, 'addEventListener');
@@ -24,10 +25,12 @@ describe('Modal', () => {
24
25
  expect(document.createElement).toHaveBeenCalledWith('div');
25
26
  });
26
27
 
27
- test('modal closes with escape', () => {
28
+ test('modal closes with escape', async () => {
29
+ const user = userEvent.setup();
30
+
28
31
  render(<Modal {...props} isOpen appendTo={document.body} />);
29
32
 
30
- userEvent.type(screen.getByText(props.title), '{esc}');
33
+ await user.type(screen.getByText(props.title), `{${KeyTypes.Escape}}`);
31
34
  expect(props.onClose).toHaveBeenCalled();
32
35
  });
33
36
 
@@ -6,12 +6,13 @@ import userEvent from '@testing-library/user-event';
6
6
  import { ModalBoxCloseButton } from '../ModalBoxCloseButton';
7
7
 
8
8
  describe('ModalBoxCloseButton', () => {
9
- test('onClose called when clicked', () => {
9
+ test('onClose called when clicked', async () => {
10
10
  const onClose = jest.fn();
11
+ const user = userEvent.setup();
11
12
 
12
13
  render(<ModalBoxCloseButton className="test-box-close-button-class" onClose={onClose} />);
13
14
 
14
- userEvent.click(screen.getByRole('button'));
15
+ await user.click(screen.getByRole('button'));
15
16
  expect(onClose).toHaveBeenCalledTimes(1);
16
17
  });
17
18
  });
@@ -56,7 +56,9 @@ describe('Nav', () => {
56
56
  expect(asFragment()).toMatchSnapshot();
57
57
  });
58
58
 
59
- test('Default Nav List - Trigger item active update', () => {
59
+ test('Default Nav List - Trigger item active update', async () => {
60
+ const user = userEvent.setup();
61
+
60
62
  const { asFragment } = renderNav(
61
63
  <Nav>
62
64
  <NavList>
@@ -69,7 +71,7 @@ describe('Nav', () => {
69
71
  </Nav>
70
72
  );
71
73
 
72
- userEvent.click(screen.getByText('Link 2'));
74
+ await user.click(screen.getByText('Link 2'));
73
75
  expect(asFragment()).toMatchSnapshot();
74
76
  });
75
77
 
@@ -90,8 +92,9 @@ describe('Nav', () => {
90
92
  expect(asFragment()).toMatchSnapshot();
91
93
  });
92
94
 
93
- test('Expandable Nav verify onExpand', () => {
95
+ test('Expandable Nav verify onExpand', async () => {
94
96
  const onExpand = jest.fn();
97
+ const user = userEvent.setup();
95
98
 
96
99
  renderNav(
97
100
  <Nav>
@@ -107,12 +110,13 @@ describe('Nav', () => {
107
110
  </Nav>
108
111
  );
109
112
 
110
- userEvent.click(screen.getByRole('button'));
113
+ await user.click(screen.getByRole('button'));
111
114
  expect(onExpand).toHaveBeenCalled();
112
115
  });
113
116
 
114
- test('Expandable Nav List - Trigger toggle', () => {
117
+ test('Expandable Nav List - Trigger toggle', async () => {
115
118
  window.location.hash = '#link2';
119
+ const user = userEvent.setup();
116
120
 
117
121
  const { asFragment } = renderNav(
118
122
  <Nav>
@@ -128,7 +132,7 @@ describe('Nav', () => {
128
132
  </Nav>
129
133
  );
130
134
 
131
- userEvent.click(screen.getByText('Section 1'));
135
+ await user.click(screen.getByText('Section 1'));
132
136
  expect(asFragment()).toMatchSnapshot();
133
137
  });
134
138
 
@@ -5,7 +5,7 @@ import MinusIcon from '@patternfly/react-icons/dist/esm/icons/minus-icon';
5
5
  import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
6
6
  import { InputGroup } from '../InputGroup';
7
7
  import { Button, ButtonProps } from '../Button';
8
- import { KEY_CODES, ValidatedOptions } from '../../helpers';
8
+ import { KeyTypes, ValidatedOptions } from '../../helpers';
9
9
  import { TextInput } from '../TextInput';
10
10
 
11
11
  export interface NumberInputProps extends React.HTMLProps<HTMLDivElement> {
@@ -56,11 +56,11 @@ export interface NumberInputProps extends React.HTMLProps<HTMLDivElement> {
56
56
  type DefaultKeyDownHandlerArgs = Pick<NumberInputProps, 'inputName' | 'onMinus' | 'onPlus'>;
57
57
 
58
58
  const defaultKeyDownHandler = (args: DefaultKeyDownHandlerArgs) => (event: React.KeyboardEvent<HTMLInputElement>) => {
59
- if (KEY_CODES.ARROW_UP === event.keyCode && args.onPlus) {
59
+ if (KeyTypes.ArrowUp === event.key && args.onPlus) {
60
60
  event.preventDefault();
61
61
  args.onPlus(null, args.inputName);
62
62
  }
63
- if (KEY_CODES.ARROW_DOWN === event.keyCode && args.onMinus) {
63
+ if (KeyTypes.ArrowDown === event.key && args.onMinus) {
64
64
  event.preventDefault();
65
65
  args.onMinus(null, args.inputName);
66
66
  }
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { render, screen } from '@testing-library/react';
2
+ import { fireEvent, render, screen } from '@testing-library/react';
3
3
  import { NumberInput } from '../NumberInput';
4
4
  import userEvent from '@testing-library/user-event';
5
5
 
@@ -101,71 +101,96 @@ describe('numberInput', () => {
101
101
  expect(onChangeMock).not.toHaveBeenCalled();
102
102
  });
103
103
 
104
- test('calls onChange callback when input changes', () => {
104
+ test('calls onChange callback when input changes', async () => {
105
105
  const onChangeMock = jest.fn();
106
+ const user = userEvent.setup();
107
+
106
108
  render(<NumberInput onChange={onChangeMock}>55</NumberInput>);
107
109
 
108
110
  const input = screen.getByRole('spinbutton');
109
- userEvent.type(input, '55');
111
+ await user.type(input, '55');
110
112
 
111
113
  expect(onChangeMock).toHaveBeenCalledTimes(2);
112
114
  });
113
115
 
114
- test('does not call onBlur callback when input does not lose focus', () => {
116
+ test('does not call onBlur callback when input does not lose focus', async () => {
115
117
  const onBlurMock = jest.fn();
118
+ const user = userEvent.setup();
116
119
 
117
120
  render(<NumberInput onBlur={onBlurMock}>5</NumberInput>);
118
121
 
119
122
  const input = screen.getByRole('spinbutton');
120
- userEvent.click(input);
123
+ await user.click(input);
121
124
 
122
125
  expect(onBlurMock).not.toHaveBeenCalled();
123
126
  });
124
127
 
125
- test('calls onBlur callback when input loses focus', () => {
128
+ test('calls onBlur callback when input loses focus', async () => {
126
129
  const onBlurMock = jest.fn();
130
+ const user = userEvent.setup();
127
131
 
128
132
  render(<NumberInput onBlur={onBlurMock}>5</NumberInput>);
129
133
 
130
134
  const input = screen.getByRole('spinbutton');
131
- userEvent.click(input);
132
- userEvent.click(document.body);
135
+ await user.click(input);
136
+ await user.click(document.body);
133
137
 
134
138
  expect(onBlurMock).toHaveBeenCalledTimes(1);
135
139
  });
136
140
 
137
- test('removes leading zeros from a positive whole number', () => {
141
+ test('removes leading zeros from a positive whole number', async () => {
142
+ const user = userEvent.setup();
143
+
138
144
  render(<NumberInput value={10} onChange={() => {}} />);
139
145
 
140
146
  const input = screen.getByRole('spinbutton');
141
- userEvent.type(input, '{arrowleft}{arrowleft}0');
147
+
148
+ await user.click(input);
149
+
150
+ // fireEvent is used here due to an issue with the current version of userEvent where userEvent.type/.keyboard does
151
+ // not appear to cause the '0' to be properly added to the input's display value
152
+ fireEvent.change(input, { target: { value: '010' } });
142
153
  expect(input).toHaveDisplayValue('010');
143
154
 
144
- userEvent.click(document.body);
155
+ await user.click(document.body);
145
156
 
146
157
  expect(input).toHaveDisplayValue('10');
147
158
  });
148
159
 
149
- test('removes leading zeros from a negative whole number', () => {
160
+ test('removes leading zeros from a negative whole number', async () => {
161
+ const user = userEvent.setup();
162
+
150
163
  render(<NumberInput value={-18} onChange={() => {}} />);
151
164
 
152
165
  const input = screen.getByRole('spinbutton');
153
- userEvent.type(input, '{arrowleft}{arrowleft}0');
166
+
167
+ await user.click(input);
168
+
169
+ // fireEvent is used here due to an issue with the current version of userEvent where userEvent.type/.keyboard does
170
+ // not appear to cause the '0' to be properly added to the input's display value
171
+ fireEvent.change(input, { target: { value: '-018' } });
154
172
  expect(input).toHaveDisplayValue('-018');
155
173
 
156
- userEvent.click(document.body);
174
+ await user.click(document.body);
157
175
 
158
176
  expect(input).toHaveDisplayValue('-18');
159
177
  });
160
178
 
161
- test('removes leading zeros from a decimal number', () => {
179
+ test('removes leading zeros from a decimal number', async () => {
180
+ const user = userEvent.setup();
181
+
162
182
  render(<NumberInput value={47.01} onChange={() => {}} />);
163
183
 
164
184
  const input = screen.getByRole('spinbutton');
165
- userEvent.type(input, '{arrowleft}{arrowleft}{arrowleft}{arrowleft}{arrowleft}0');
185
+
186
+ await user.click(input);
187
+
188
+ // fireEvent is used here due to an issue with the current version of userEvent where userEvent.type/.keyboard does
189
+ // not appear to cause the '0' to be properly added to the input's display value
190
+ fireEvent.change(input, { target: { value: '047.01' } });
166
191
  expect(input).toHaveDisplayValue('047.01');
167
192
 
168
- userEvent.click(document.body);
193
+ await user.click(document.body);
169
194
 
170
195
  expect(input).toHaveDisplayValue('47.01');
171
196
  });
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { css } from '@patternfly/react-styles';
3
- import { KEY_CODES } from '../../helpers/constants';
3
+ import { KeyTypes } from '../../helpers/constants';
4
4
  import styles from '@patternfly/react-styles/css/components/OptionsMenu/options-menu';
5
5
  import { DropdownContext } from '../Dropdown';
6
6
 
@@ -96,10 +96,9 @@ export const OptionsMenuToggleWithText: React.FunctionComponent<OptionsMenuToggl
96
96
  };
97
97
 
98
98
  const onEscPress = (event: KeyboardEvent) => {
99
- const keyCode = event.keyCode || event.which;
100
99
  if (
101
100
  isOpen &&
102
- (keyCode === KEY_CODES.ESCAPE_KEY || event.key === 'Tab') &&
101
+ (event.key === KeyTypes.Escape || event.key === 'Tab') &&
103
102
  parentRef &&
104
103
  parentRef.current &&
105
104
  parentRef.current.contains(event.target as Node)
@@ -8,7 +8,7 @@ import AngleDoubleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-d
8
8
  import { Button, ButtonVariant } from '../Button';
9
9
  import { OnSetPage } from './Pagination';
10
10
  import { pluralize, PickOptional } from '../../helpers';
11
- import { KEY_CODES } from '../../helpers/constants';
11
+ import { KeyTypes } from '../../helpers/constants';
12
12
 
13
13
  export interface NavigationProps extends React.HTMLProps<HTMLElement> {
14
14
  /** Additional classes for the container */
@@ -113,7 +113,7 @@ export class Navigation extends React.Component<NavigationProps, NavigationState
113
113
  lastPage: number,
114
114
  onPageInput: (event: React.SyntheticEvent<HTMLButtonElement>, page: number) => void
115
115
  ): void {
116
- if (event.keyCode === KEY_CODES.ENTER) {
116
+ if (event.key === KeyTypes.Enter) {
117
117
  const inputPage = Navigation.parseInteger(this.state.userInputPage, lastPage) as number;
118
118
  onPageInput(event, Number.isNaN(inputPage) ? (page as number) : inputPage);
119
119
  this.handleNewPage(event, Number.isNaN(inputPage) ? (page as number) : inputPage);