Skip to content

Commit 7be0f9c

Browse files
fix(DatePicker): prevented textless helper text from rendering (patternfly#11713)
* fix(DatePicker): prevented textless helper text from rendering * Updated validator assertion
1 parent 97ad43e commit 7be0f9c

File tree

3 files changed

+46
-6
lines changed

3 files changed

+46
-6
lines changed

packages/react-core/src/components/DatePicker/DatePicker.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,9 @@ const DatePickerBase = (
161161
}, [value]);
162162

163163
const applyValidators = (date: Date) => {
164-
setErrorText(validators.map((validator) => validator(date)).join('\n') || '');
164+
const validatorResults = validators.map((validator) => validator(date));
165+
const validatorsToApply = validatorResults.filter((validator) => validator !== '');
166+
setErrorText(validatorsToApply.join('\n') || '');
165167
};
166168

167169
const onTextInput = (event: React.FormEvent<HTMLInputElement>, value: string) => {

packages/react-core/src/components/DatePicker/__tests__/DatePicker.test.tsx

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,57 @@ test('disabled date picker', () => {
1111
expect(asFragment()).toMatchSnapshot();
1212
});
1313

14-
test('Date picker with multiple validators does not show invalid icon on valid input', async () => {
14+
test('Does not render aria-invalid input when multiple validators return empty strings', async () => {
1515
const user = userEvent.setup();
1616

1717
const rangeValidator = (_date: Date) => '';
18+
const rangeValidatorB = (_date: Date) => '';
19+
render(<DatePicker value="2020-03-17" validators={[rangeValidator, rangeValidatorB]} />);
20+
21+
await user.click(screen.getByRole('textbox'));
22+
await user.click(document.body);
23+
expect(screen.getByRole('textbox')).not.toBeInvalid();
24+
});
1825

26+
test('Does not render helper text when multiple validators return empty strings', async () => {
27+
const user = userEvent.setup();
28+
29+
const rangeValidator = (_date: Date) => '';
1930
const rangeValidatorB = (_date: Date) => '';
31+
render(<DatePicker value="2020-03-17" validators={[rangeValidator, rangeValidatorB]} />);
2032

33+
await user.click(screen.getByRole('textbox'));
34+
await user.click(document.body);
35+
36+
expect(screen.queryByText(': error status;')).not.toBeInTheDocument();
37+
});
38+
39+
test('Renders helper text when at least 1 validator returns a string', async () => {
40+
const user = userEvent.setup();
41+
42+
const rangeValidator = (_date: Date) => 'Some error.';
43+
const rangeValidatorB = (_date: Date) => '';
2144
render(<DatePicker value="2020-03-17" validators={[rangeValidator, rangeValidatorB]} />);
2245

2346
await user.click(screen.getByRole('textbox'));
47+
await user.click(document.body);
48+
49+
expect(screen.getByText('Some error.')).toBeVisible();
50+
expect(screen.getByText(': error status;')).toBeInTheDocument();
51+
});
2452

53+
test('Renders helper text when more than 1 validator returns a string', async () => {
54+
const user = userEvent.setup();
55+
56+
const rangeValidator = (_date: Date) => 'Some error.';
57+
const rangeValidatorB = (_date: Date) => 'Another error.';
58+
render(<DatePicker value="2020-03-17" validators={[rangeValidator, rangeValidatorB]} />);
59+
60+
await user.click(screen.getByRole('textbox'));
2561
await user.click(document.body);
26-
expect(screen.getByRole('textbox')).not.toBeInvalid();
62+
63+
expect(screen.getByText('Some error. Another error.')).toBeVisible();
64+
expect(screen.getByText(': error status;')).toBeInTheDocument();
2765
});
2866

2967
test('Error state can be cleared from outside', async () => {

packages/react-core/src/components/DatePicker/__tests__/__snapshots__/DatePicker.test.tsx.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ exports[`With popover opened 1`] = `
2121
<input
2222
aria-invalid="false"
2323
aria-label="Date picker"
24-
data-ouia-component-id="OUIA-Generated-TextInputBase-4"
24+
data-ouia-component-id="OUIA-Generated-TextInputBase-7"
2525
data-ouia-component-type="PF6/TextInput"
2626
data-ouia-safe="true"
2727
placeholder="YYYY-MM-DD"
@@ -37,7 +37,7 @@ exports[`With popover opened 1`] = `
3737
aria-haspopup="dialog"
3838
aria-label="Toggle date picker"
3939
class="pf-v6-c-button pf-m-control"
40-
data-ouia-component-id="OUIA-Generated-Button-control-4"
40+
data-ouia-component-id="OUIA-Generated-Button-control-7"
4141
data-ouia-component-type="PF6/Button"
4242
data-ouia-safe="true"
4343
type="button"
@@ -185,7 +185,7 @@ exports[`With popover opened 1`] = `
185185
<input
186186
aria-invalid="false"
187187
aria-label="Select year"
188-
data-ouia-component-id="OUIA-Generated-TextInputBase-5"
188+
data-ouia-component-id="OUIA-Generated-TextInputBase-8"
189189
data-ouia-component-type="PF6/TextInput"
190190
data-ouia-safe="true"
191191
type="number"

0 commit comments

Comments
 (0)