Skip to content

Commit 53e036c

Browse files
authored
fix(a11y): Global search not announcing results properly (#40023)
1 parent 92a44ee commit 53e036c

File tree

9 files changed

+15
-18
lines changed

9 files changed

+15
-18
lines changed

apps/meteor/client/navbar/NavBarSearch/NavBarSearch.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Box, Icon, TextInput } from '@rocket.chat/fuselage';
1+
import { Box, Icon, IconButton, TextInput } from '@rocket.chat/fuselage';
22
import { useEffectEvent, useMergedRefs } from '@rocket.chat/fuselage-hooks';
33
import { useCallback, useEffect, useRef } from 'react';
44
import { useFocusManager, useOverlayTrigger } from 'react-aria';
@@ -74,7 +74,7 @@ const NavBarSearch = () => {
7474

7575
return (
7676
<FormProvider {...methods}>
77-
<Box width='100%' maxWidth='x622' role='search' mi={8} position='relative'>
77+
<Box width='100%' maxWidth='x622' role='search' aria-label={t('Search_rooms')} mi={8} position='relative'>
7878
<TextInput
7979
{...rest}
8080
{...triggerProps}
@@ -85,8 +85,15 @@ const NavBarSearch = () => {
8585
placeholder={placeholder}
8686
ref={mergedRefs}
8787
role='combobox'
88+
aria-autocomplete='list'
8889
small
89-
addon={<Icon name={isDirty ? 'cross' : 'magnifier'} size='x20' onClick={handleClearText} />}
90+
addon={
91+
isDirty ? (
92+
<IconButton mini icon='cross' aria-label={t('Clear')} onClick={handleClearText} />
93+
) : (
94+
<Icon name='magnifier' size='x16' aria-label={t('Search')} />
95+
)
96+
}
9097
/>
9198
{state.isOpen && <NavBarSearchListBox state={state} overlayProps={overlayProps} />}
9299
</Box>

apps/meteor/client/navbar/NavBarSearch/NavBarSearchListbox.tsx

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import NavBarSearchNoResults from './NavBarSearchNoResults';
1111
import NavBarSearchRow from './NavBarSearchRow';
1212
import { useSearchItems } from './hooks/useSearchItems';
1313
import { useListboxNavigation } from './hooks/useSearchNavigation';
14+
import ResultsLiveRegion from '../../components/ResultsLiveRegion';
1415

1516
type NavBarSearchListBoxProps = {
1617
state: OverlayTriggerState;
@@ -49,22 +50,18 @@ const NavBarSearchListBox = ({ state, overlayProps }: NavBarSearchListBoxProps)
4950
display='flex'
5051
width='100%'
5152
flexDirection='column'
52-
aria-live='polite'
53-
aria-atomic='true'
54-
aria-busy={isLoading}
5553
>
54+
<ResultsLiveRegion shouldAnnounce={!isLoading} itemCount={items.length} />
5655
<CustomScrollbars>
57-
<div {...overlayProps} role='listbox' aria-label={t('Channels')} tabIndex={-1} onKeyDown={handleKeyDown}>
56+
<div {...overlayProps} role='listbox' aria-label={t('Channels')} aria-busy={isLoading} tabIndex={-1} onKeyDown={handleKeyDown}>
5857
{items.length === 0 && !isLoading && <NavBarSearchNoResults />}
5958
{items.length > 0 && (
60-
<Box color='titles-labels' fontScale='c1' fontWeight='bold' pi={12} mbe={4}>
59+
<Box color='titles-labels' fontScale='c1' fontWeight='bold' pi={12} mbe={4} role='presentation' aria-hidden>
6160
{filterText ? t('Results') : t('Recent')}
6261
</Box>
6362
)}
6463
{items.map((item) => (
65-
<div key={item._id}>
66-
<NavBarSearchRow room={item} onClick={handleSelect} />
67-
</div>
64+
<NavBarSearchRow key={item._id} room={item} onClick={handleSelect} />
6865
))}
6966
</div>
7067
</CustomScrollbars>

packages/i18n/src/locales/en.i18n.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3664,7 +3664,6 @@
36643664
"Navigation": "Navigation",
36653665
"Navigation_History": "Navigation History",
36663666
"Navigation_bar": "Navigation bar",
3667-
"Navigation_bar_description": "Introducing the navigation bar — a higher-level navigation designed to help users quickly find what they need. With its compact design and intuitive organization, this streamlined sidebar optimizes screen space while providing easy access to essential software features and sections.",
36683667
"Never": "Never",
36693668
"New": "New",
36703669
"New_Application": "New Application",

packages/i18n/src/locales/hi-IN.i18n.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3075,7 +3075,6 @@
30753075
"Navigation": "मार्गदर्शन",
30763076
"Navigation_History": "नेविगेशन इतिहास",
30773077
"Navigation_bar": "नेविगेशन पट्टी",
3078-
"Navigation_bar_description": "नेविगेशन बार का परिचय - एक उच्च-स्तरीय नेविगेशन जो उपयोगकर्ताओं को उनकी आवश्यकता के अनुसार शीघ्रता से ढूंढने में मदद करने के लिए डिज़ाइन किया गया है। अपने कॉम्पैक्ट डिज़ाइन और सहज संगठन के साथ, यह सुव्यवस्थित साइडबार आवश्यक सॉफ़्टवेयर सुविधाओं और अनुभागों तक आसान पहुँच प्रदान करते हुए स्क्रीन स्थान को अनुकूलित करता है।",
30793078
"Never": "कभी नहीं",
30803079
"New": "नया",
30813080
"New_Application": "नए आवेदन",

packages/i18n/src/locales/nb.i18n.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3645,7 +3645,6 @@
36453645
"Navigation": "Navigasjon",
36463646
"Navigation_History": "Navigasjonshistorikk",
36473647
"Navigation_bar": "Navigasjonslinje",
3648-
"Navigation_bar_description": "Vi introduserer navigasjonslinjen – en navigasjon på høyere nivå designet for å hjelpe brukere raskt å finne det de trenger. Med sin kompakte design og intuitive organisering, optimaliserer denne strømlinjeformede sidelinjen skjermplass samtidig som den gir enkel tilgang til viktige programvarefunksjoner og -seksjoner.",
36493648
"Never": "Aldri",
36503649
"New": "Ny",
36513650
"New_Application": "Ny applikasjon",

packages/i18n/src/locales/nn.i18n.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3407,7 +3407,6 @@
34073407
"Navigation": "Navigasjon",
34083408
"Navigation_History": "Navigasjonshistorikk",
34093409
"Navigation_bar": "Navigasjonslinje",
3410-
"Navigation_bar_description": "Vi introduserer navigasjonslinjen – en navigasjon på høyere nivå designet for å hjelpe brukere raskt å finne det de trenger. Med sin kompakte design og intuitive organisering, optimaliserer denne strømlinjeformede sidelinjen skjermplass samtidig som den gir enkel tilgang til viktige programvarefunksjoner og -seksjoner.",
34113410
"Never": "Aldri",
34123411
"New": "Ny",
34133412
"New_Application": "Ny applikasjon",

packages/i18n/src/locales/pt-BR.i18n.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3455,7 +3455,6 @@
34553455
"Navigation": "Navegação",
34563456
"Navigation_History": "Histórico de navegação",
34573457
"Navigation_bar": "Barra de navegação",
3458-
"Navigation_bar_description": "Apresentando a barra de navegação - uma navegação de nível superior projetada para ajudar os usuários a encontrar rapidamente o que precisam. Com seu design compacto e organização intuitiva, essa barra lateral simplificada otimiza o espaço da tela e fornece acesso fácil a recursos e seções essenciais do software.",
34593458
"Never": "Nunca",
34603459
"New": "Novo",
34613460
"New_Application": "Novo aplicativo",

packages/i18n/src/locales/sv.i18n.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3470,7 +3470,6 @@
34703470
"Navigation": "Navigering",
34713471
"Navigation_History": "Navigeringshistorik",
34723472
"Navigation_bar": "Navigeringsfält",
3473-
"Navigation_bar_description": "Vi presenterar navigeringsfältet - en navigering på högre nivå som är utformad för att hjälpa användare att snabbt hitta det de behöver. Med sin kompakta design och intuitiva organisation optimerar detta strömlinjeformade sidofält skärmutrymmet samtidigt som det ger enkel åtkomst till viktiga programfunktioner och avsnitt.",
34743473
"Never": "Aldrig",
34753474
"New": "Nytt",
34763475
"New_Application": "Ny applikation",

packages/i18n/src/locales/zh.i18n.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3642,7 +3642,6 @@
36423642
"Navigation": "导航",
36433643
"Navigation_History": "浏览历史记录",
36443644
"Navigation_bar": "导航栏",
3645-
"Navigation_bar_description": "导航栏为更高层级的导航,旨在帮助用户快速找到所需内容。其紧凑设计与直观组织可优化屏幕空间,同时便捷访问关键功能与区域。",
36463645
"Never": "从不",
36473646
"New": "",
36483647
"New_Application": "新应用",

0 commit comments

Comments
 (0)