Skip to content

Commit 058b14f

Browse files
fix(Button): updated rendering of aria-disabled attribute (#11478)
* fix(Button): updated rendering of aria-disabled attribute * Updated other component snapshots * Addressed Austin feedback * Updated test name to use styles object
1 parent 914b81f commit 058b14f

File tree

49 files changed

+44
-304
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+44
-304
lines changed

packages/react-code-editor/src/components/CodeEditor/__test__/__snapshots__/CodeEditor.test.tsx.snap

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ exports[`Matches snapshot with control buttons enabled 1`] = `
2323
style="display: contents;"
2424
>
2525
<button
26-
aria-disabled="false"
2726
aria-label="Copy code to clipboard"
2827
class="pf-v6-c-button pf-m-plain"
2928
data-ouia-component-id="OUIA-Generated-Button-plain-1"
@@ -54,7 +53,6 @@ exports[`Matches snapshot with control buttons enabled 1`] = `
5453
style="display: contents;"
5554
>
5655
<button
57-
aria-disabled="false"
5856
aria-label="Upload code"
5957
class="pf-v6-c-button pf-m-plain"
6058
data-ouia-component-id="OUIA-Generated-Button-plain-2"
@@ -85,7 +83,6 @@ exports[`Matches snapshot with control buttons enabled 1`] = `
8583
style="display: contents;"
8684
>
8785
<button
88-
aria-disabled="false"
8986
aria-label="Download code"
9087
class="pf-v6-c-button pf-m-plain"
9188
data-ouia-component-id="OUIA-Generated-Button-plain-3"

packages/react-code-editor/src/components/CodeEditor/__test__/__snapshots__/CodeEditorControl.test.tsx.snap

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ exports[`Matches snapshot 1`] = `
66
style="display: contents;"
77
>
88
<button
9-
aria-disabled="false"
109
class="pf-v6-c-button pf-m-plain"
1110
data-ouia-component-id="OUIA-Generated-Button-plain-1"
1211
data-ouia-component-type="PF6/Button"

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ exports[`AboutModalBoxCloseButton Test 1`] = `
66
class="pf-v6-c-about-modal-box__close"
77
>
88
<button
9-
aria-disabled="false"
109
aria-label="Close Dialog"
1110
class="pf-v6-c-button pf-m-plain"
1211
data-ouia-component-id="OUIA-Generated-Button-plain-1"
@@ -42,7 +41,6 @@ exports[`AboutModalBoxCloseButton Test close button aria label 1`] = `
4241
class="pf-v6-c-about-modal-box__close"
4342
>
4443
<button
45-
aria-disabled="false"
4644
aria-label="Klose Daylok"
4745
class="pf-v6-c-button pf-m-plain"
4846
data-ouia-component-id="OUIA-Generated-Button-plain-3"
@@ -78,7 +76,6 @@ exports[`AboutModalBoxCloseButton Test onclose 1`] = `
7876
class="pf-v6-c-about-modal-box__close"
7977
>
8078
<button
81-
aria-disabled="false"
8279
aria-label="Close Dialog"
8380
class="pf-v6-c-button pf-m-plain"
8481
data-ouia-component-id="OUIA-Generated-Button-plain-2"

packages/react-core/src/components/Alert/__tests__/Generated/__snapshots__/AlertActionCloseButton.test.tsx.snap

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
exports[`AlertActionCloseButton should match snapshot 1`] = `
44
<DocumentFragment>
55
<button
6-
aria-disabled="false"
76
aria-label="Close some label alert: test title"
87
class="pf-v6-c-button pf-m-plain"
98
data-ouia-component-id="OUIA-Generated-Button-plain-1"

packages/react-core/src/components/Alert/__tests__/Generated/__snapshots__/AlertActionLink.test.tsx.snap

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
exports[`AlertActionLink should match snapshot (auto-generated) 1`] = `
44
<DocumentFragment>
55
<button
6-
aria-disabled="false"
76
class="pf-v6-c-button pf-m-link pf-m-inline ''"
87
data-ouia-component-id="OUIA-Generated-Button-link-1"
98
data-ouia-component-type="PF6/Button"

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,12 +164,14 @@ const ButtonBase: React.FunctionComponent<ButtonProps> = ({
164164
</span>
165165
);
166166
const _children = children && <span className={css('pf-v6-c-button__text')}>{children}</span>;
167+
// We only want to render the aria-disabled attribute when true, similar to the disabled attribute natively.
168+
const shouldRenderAriaDisabled = isAriaDisabled || (!isButtonElement && isDisabled);
167169

168170
return (
169171
<Component
170172
{...props}
171173
{...(isAriaDisabled ? preventedEvents : null)}
172-
aria-disabled={isAriaDisabled || (!isButtonElement && isDisabled)}
174+
{...(shouldRenderAriaDisabled && { 'aria-disabled': true })}
173175
aria-label={ariaLabel}
174176
className={css(
175177
styles.button,

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

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import React from 'react';
2-
32
import { render, screen } from '@testing-library/react';
4-
53
import { Button, ButtonState, ButtonVariant } from '../Button';
4+
import styles from '@patternfly/react-styles/css/components/Button/button';
65

76
Object.values(ButtonVariant).forEach((variant) => {
87
if (variant !== 'primary') {
@@ -65,11 +64,6 @@ test('Does not render with class pf-m-disabled by default when isDisabled = true
6564
expect(screen.getByRole('button')).not.toHaveClass('pf-m-disabled');
6665
});
6766

68-
test('aria-disabled is set to false when isDisabled = true', () => {
69-
render(<Button isDisabled>Disabled Button</Button>);
70-
expect(screen.getByRole('button')).toHaveAttribute('aria-disabled', 'false');
71-
});
72-
7367
test('Renders with class pf-m-disabled when isDisabled = true and component is not a button', () => {
7468
render(
7569
<Button isDisabled component="a">
@@ -79,9 +73,28 @@ test('Renders with class pf-m-disabled when isDisabled = true and component is n
7973
expect(screen.getByText('Disabled Anchor Button').parentElement).toHaveClass('pf-m-disabled');
8074
});
8175

82-
test('Renders with class pf-m-aria-disabled when isAriaDisabled = true', () => {
76+
test(`aria-disabled and class ${styles.modifiers.ariaDisabled} are not rendered when isAriaDisabled is not passed by default`, () => {
77+
render(<Button>Button</Button>);
78+
79+
const button = screen.getByRole('button');
80+
expect(button).not.toHaveAttribute('aria-disabled');
81+
expect(button).not.toHaveClass(styles.modifiers.ariaDisabled);
82+
});
83+
84+
test(`aria-disabled and class ${styles.modifiers.ariaDisabled} are not rendered when isDisabled is true, but isAriaDisabled is not passed`, () => {
85+
render(<Button isDisabled>Disabled Button</Button>);
86+
87+
const button = screen.getByRole('button');
88+
expect(button).not.toHaveAttribute('aria-disabled');
89+
expect(button).not.toHaveClass(styles.modifiers.ariaDisabled);
90+
});
91+
92+
test(`Renders with class ${styles.modifiers.ariaDisabled} and aria-disabled attribute when isAriaDisabled = true`, () => {
8393
render(<Button isAriaDisabled>Disabled yet focusable button</Button>);
84-
expect(screen.getByRole('button')).toHaveClass('pf-m-aria-disabled');
94+
const button = screen.getByRole('button');
95+
96+
expect(button).toHaveAttribute('aria-disabled', 'true');
97+
expect(button).toHaveClass(styles.modifiers.ariaDisabled);
8598
});
8699

87100
test('Does not disable button when isDisabled = true and component = a', () => {

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
exports[`Renders basic button 1`] = `
44
<DocumentFragment>
55
<button
6-
aria-disabled="false"
76
aria-label="basic button"
87
class="pf-v6-c-button pf-m-primary"
9-
data-ouia-component-id="OUIA-Generated-Button-primary-30"
8+
data-ouia-component-id="OUIA-Generated-Button-primary-31"
109
data-ouia-component-type="PF6/Button"
1110
data-ouia-safe="true"
1211
type="button"

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ exports[`CardHeader onExpand adds the toggle button 1`] = `
2121
class="pf-v6-c-card__header-toggle"
2222
>
2323
<button
24-
aria-disabled="false"
2524
class="pf-v6-c-button pf-m-plain"
2625
data-ouia-component-id="OUIA-Generated-Button-plain-1"
2726
data-ouia-component-type="PF6/Button"

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ exports[`Matches snapshot 1`] = `
2828
onTooltipHidden clicker
2929
</a>
3030
<button
31-
aria-disabled="false"
3231
aria-label="Copyable input"
3332
aria-labelledby="button-id text-id"
3433
class="pf-v6-c-button pf-m-control"

0 commit comments

Comments
 (0)