Skip to content

Commit 9165eb1

Browse files
committed
Remove announcement for empty in SelectPanel. It get handled in useAnnouncements
1 parent 2ba3db5 commit 9165eb1

File tree

3 files changed

+10
-9
lines changed

3 files changed

+10
-9
lines changed

packages/react/src/FilteredActionList/FilteredActionListWithModernActionList.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type React from 'react'
1+
import React from 'react'
22
import {useCallback, useEffect, useRef, useState} from 'react'
33
import styled from 'styled-components'
44
import Box from '../Box'
@@ -252,8 +252,8 @@ export function FilteredActionList({
252252
</ActionListContainerContext.Provider>
253253
)
254254
}
255-
256-
useAnnouncements(items, listRef, inputRef, enableAnnouncements)
255+
const emptyMessage = React.isValidElement(message) ? message.props?.title : undefined
256+
useAnnouncements(items, listRef, inputRef, emptyMessage, enableAnnouncements)
257257
return (
258258
<Box
259259
display="flex"

packages/react/src/FilteredActionList/useAnnouncements.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {useCallback, useEffect, useRef} from 'react'
66
import type {FilteredActionListProps} from './FilteredActionListEntry'
77

88
// we add a delay so that it does not interrupt default screen reader announcement and queues after it
9-
const delayMs = 500
9+
const delayMs = 1000
1010

1111
const useFirstRender = () => {
1212
const firstRender = useRef(true)
@@ -20,15 +20,17 @@ export const useAnnouncements = (
2020
items: FilteredActionListProps['items'],
2121
listContainerRef: React.RefObject<HTMLUListElement>,
2222
inputRef: React.RefObject<HTMLInputElement>,
23+
emptyMessage: string | undefined = undefined,
2324
enabled: boolean = true,
2425
) => {
2526
const liveRegion = document.querySelector('live-region')
2627

2728
// Notify user of the number of items available
2829
const selectedItems = items.filter(item => item.selected).length
29-
const announcementText = items.length
30-
? `${items.length} item${items.length > 1 ? 's' : ''} available, ${selectedItems} selected.`
31-
: 'No matching items.'
30+
const announcementText =
31+
items.length > 0
32+
? `${items.length} item${items.length > 1 ? 's' : ''} available, ${selectedItems} selected.`
33+
: emptyMessage || 'No matching items.'
3234

3335
const announce = useCallback(
3436
(...args: Parameters<typeof liveRegionAnnounce>): ReturnType<typeof liveRegionAnnounce> | undefined => {

packages/react/src/SelectPanel/SelectPanel.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ async function announceText(text: string, delayMs = SHORT_DELAY_MS) {
4141
const liveRegion = document.querySelector('live-region')
4242

4343
liveRegion?.clear() // clear previous announcements
44-
4544
await announce(text, {
4645
delayMs,
4746
from: liveRegion ? liveRegion : undefined, // announce will create a liveRegion if it doesn't find one
@@ -350,7 +349,7 @@ function Panel({
350349
if (open) {
351350
if (items.length === 0 && !(isLoading || loading)) {
352351
// we need to wait for the listContainerElement to disappear before announcing no items, otherwise it will be interrupted
353-
if (!listContainerElement || !usingModernActionList) {
352+
if (!listContainerElement && !usingModernActionList) {
354353
announceNoItems(message?.title)
355354
} else {
356355
setNeedsNoItemsAnnouncement(true)

0 commit comments

Comments
 (0)