From 43ed9269c9c0abd230ea8b813c335ce6029b1782 Mon Sep 17 00:00:00 2001 From: MadanKumarGovindaswamy <132886427+MadanKumarGovindaswamy@users.noreply.github.com> Date: Fri, 1 Dec 2023 00:24:13 +0530 Subject: [PATCH] [terra-form-select] Combobox A11Y Audit Issues (#3976) Co-authored-by: Pravinkumar K S Co-authored-by: PK106552 <127083404+PK106552@users.noreply.github.com> --- packages/terra-core-docs/CHANGELOG.md | 2 ++ .../form-select/example/combobox/Combobox.jsx | 20 ++++++++++++------- .../form-select/example/combobox/Invalid.jsx | 1 - packages/terra-form-select/CHANGELOG.md | 2 ++ .../terra-form-select/src/combobox/Frame.jsx | 17 +++++++++++----- .../terra-form-select/src/search/Frame.jsx | 1 + .../jest/__snapshots__/Frame.test.jsx.snap | 6 ++---- 7 files changed, 32 insertions(+), 17 deletions(-) diff --git a/packages/terra-core-docs/CHANGELOG.md b/packages/terra-core-docs/CHANGELOG.md index 66b40e38426..e14be502e35 100644 --- a/packages/terra-core-docs/CHANGELOG.md +++ b/packages/terra-core-docs/CHANGELOG.md @@ -9,6 +9,8 @@ * Added * Added visual label and associated with input field using 'for' and 'id'. + * Added 'ariaLabel' attribute for `terra-form-select` examples. + ## 1.51.0 - (November 16, 2023) * Changed diff --git a/packages/terra-core-docs/src/terra-dev-site/doc/form-select/example/combobox/Combobox.jsx b/packages/terra-core-docs/src/terra-dev-site/doc/form-select/example/combobox/Combobox.jsx index cdfc5901d19..a60659846a0 100644 --- a/packages/terra-core-docs/src/terra-dev-site/doc/form-select/example/combobox/Combobox.jsx +++ b/packages/terra-core-docs/src/terra-dev-site/doc/form-select/example/combobox/Combobox.jsx @@ -1,18 +1,24 @@ import React from 'react'; import Combobox from 'terra-form-select/lib/Combobox'; +import Field from 'terra-form-field'; import classNames from 'classnames/bind'; import styles from '../FormSelectDocCommon.module.scss'; const cx = classNames.bind(styles); const ComboboxExample = () => ( - - - - - - - + + + + + + + + + ); export default ComboboxExample; diff --git a/packages/terra-core-docs/src/terra-dev-site/doc/form-select/example/combobox/Invalid.jsx b/packages/terra-core-docs/src/terra-dev-site/doc/form-select/example/combobox/Invalid.jsx index 77234008ad5..d9acdb21369 100644 --- a/packages/terra-core-docs/src/terra-dev-site/doc/form-select/example/combobox/Invalid.jsx +++ b/packages/terra-core-docs/src/terra-dev-site/doc/form-select/example/combobox/Invalid.jsx @@ -14,5 +14,4 @@ const InvalidExample = () => ( ); - export default InvalidExample; diff --git a/packages/terra-form-select/CHANGELOG.md b/packages/terra-form-select/CHANGELOG.md index bae502901a1..6dc51fb2abc 100644 --- a/packages/terra-form-select/CHANGELOG.md +++ b/packages/terra-form-select/CHANGELOG.md @@ -8,6 +8,8 @@ ## 6.51.0 - (November 21, 2023) * Added + * Added 'aria-invalid' attribute for `terra-form-select-combobox`. + * Updated auto assign placeholder text to `aria-label` in `terra-form-select-combobox` and `terra-form-search-select`. * Added 'aria-invalid' attribute for `terra-form-select-combobox` ## 6.50.0 - (November 13, 2023) diff --git a/packages/terra-form-select/src/combobox/Frame.jsx b/packages/terra-form-select/src/combobox/Frame.jsx index fd5dcf5ff4a..c2347eef392 100644 --- a/packages/terra-form-select/src/combobox/Frame.jsx +++ b/packages/terra-form-select/src/combobox/Frame.jsx @@ -143,6 +143,7 @@ const defaultProps = { totalOptions: undefined, value: undefined, inputId: undefined, + ariaLabel: undefined, allowClear: false, }; @@ -414,7 +415,7 @@ class Frame extends React.Component { getDisplay(ariaDescribedBy, id) { const { hasSearchChanged, searchValue } = this.state; const { - disabled, display, placeholder, required, inputId, + disabled, display, placeholder, required, inputId, isInvalid, } = this.props; const inputAttrs = { @@ -429,7 +430,9 @@ class Frame extends React.Component { 'aria-describedby': ariaDescribedBy, 'aria-disabled': disabled, 'aria-owns': this.state.isOpen ? id : undefined, + 'aria-controls': this.state.isOpen ? id : undefined, 'aria-expanded': !disabled && this.state.isOpen, + 'aria-invalid': isInvalid, type: 'text', className: cx('search-input'), required, @@ -537,18 +540,22 @@ class Frame extends React.Component { * Falls back to the string 'Search' if no label is provided */ ariaLabel() { - const { ariaLabel, disabled, intl } = this.props; + const { + ariaLabel, + disabled, + placeholder, + intl, + } = this.props; - const defaultAriaLabel = intl.formatMessage({ id: 'Terra.form.select.ariaLabel' }); const dimmed = intl.formatMessage({ id: 'Terra.form.select.dimmed' }); // VO on iOS doesn't do a good job of announcing disabled stated. Here we append the phrase that // VO associates with disabled form controls. if ('ontouchstart' in window && disabled) { - return ariaLabel === undefined ? `${defaultAriaLabel} ${dimmed}` : `${ariaLabel} ${dimmed}`; + return ariaLabel === undefined ? `${placeholder}, ${dimmed}` : `${ariaLabel}, ${placeholder}, ${dimmed}`; } - return ariaLabel === undefined ? defaultAriaLabel : ariaLabel; + return ariaLabel === undefined ? placeholder : `${ariaLabel}, ${placeholder}`; } /** diff --git a/packages/terra-form-select/src/search/Frame.jsx b/packages/terra-form-select/src/search/Frame.jsx index c9a75b20098..5cec9dd26bd 100644 --- a/packages/terra-form-select/src/search/Frame.jsx +++ b/packages/terra-form-select/src/search/Frame.jsx @@ -419,6 +419,7 @@ class Frame extends React.Component { 'aria-describedby': ariaDescribedBy, 'aria-disabled': disabled, 'aria-owns': this.state.isOpen ? id : undefined, + 'aria-controls': this.state.isOpen ? id : undefined, 'aria-expanded': !disabled && this.state.isOpen, type: 'text', className: cx('search-input', { 'is-hidden': FrameUtil.shouldHideSearch(this.props, this.state) }), diff --git a/packages/terra-form-select/tests/jest/__snapshots__/Frame.test.jsx.snap b/packages/terra-form-select/tests/jest/__snapshots__/Frame.test.jsx.snap index d14c3cab979..01dc9783ca7 100644 --- a/packages/terra-form-select/tests/jest/__snapshots__/Frame.test.jsx.snap +++ b/packages/terra-form-select/tests/jest/__snapshots__/Frame.test.jsx.snap @@ -14,9 +14,7 @@ exports[`Frame correctly applies the theme context className for combobox varian > - Terra.form.select.ariaLabel - + /> @@ -33,7 +31,7 @@ exports[`Frame correctly applies the theme context className for combobox varian aria-describedby="terra-select-screen-reader-description-7" aria-disabled="false" aria-expanded="false" - aria-label="Terra.form.select.ariaLabel" + aria-invalid="false" aria-required="false" class="search-input" role="combobox"