patternfly / patternfly/react-data-view
DataViewFilters: MenuToggle for filter category selector has no accessible name
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- TypeScript
- Sterne
- 4
- Forks
- 21
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Description
The DataViewFilters component renders a MenuToggle as the filter category selector (e.g., to switch between "Name" and "Label" filters). This button has no accessible name, causing a critical button-name axe violation (WCAG 4.1.2).
Root cause
activeAttributeMenuis initialized as''(line 46)- It's only populated via
useEffectafter the first render (lines 63–65) - The
MenuTogglehas noaria-labelprop (lines 80–88)
On the initial render, the button has no text content, no aria-label, no aria-labelledby, and no title — making it completely invisible to screen readers.
// Line 46 — empty initial state
const [activeAttributeMenu, setActiveAttributeMenu] = useState<string>('');
// Lines 80-88 — no aria-label, children is '' on first render
const attributeToggle = (
<MenuToggle
ref={attributeToggleRef}
onClick={() => setIsAttributeMenuOpen(!isAttributeMenuOpen)}
isExpanded={isAttributeMenuOpen}
icon={toggleIcon}
>
{activeAttributeMenu}
</MenuToggle>
);
Suggested fix
Two changes:
-
Initialize
activeAttributeMenufrom the first child'stitleprop synchronously instead of viauseEffect, so it's never empty:const initialTitle = useMemo(() => filterItems[0]?.title ?? '', []); const [activeAttributeMenu, setActiveAttributeMenu] = useState<string>(initialTitle); -
Add a fallback
aria-labelon theMenuToggle:<MenuToggle aria-label="Filter by" ... >
How to reproduce
Render DataViewFilters with 2+ filter children and run axe-core:
<DataViewFilters>
<DataViewTextFilter filterId="name" title="Name" />
<DataViewTextFilter filterId="label" title="Label" />
</DataViewFilters>
axe reports:
critical button-name: Buttons must have discernible text
Target: .pf-m-filter-group > div:nth-child(1) > .pf-v6-c-menu-toggle
Environment
-
@patternfly/react-data-view: 6.5.0 -
Detected by: axe-core 4.11 via
@axe-core/playwright
Related
- #21 (DataView accessibility meta-issue)
Jira Issue: PF-4416
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne in packages/module/src/DataViewFilters/DataViewFilters.tsx und überprüfe den activeAttributeMenu-Zustand sowie den MenuToggle um die Zeilen 46 und 80–88. Rendere DataViewFilters mit den Filter-Kindern Name und Label aus dem Issue und führe anschließend axe-core aus. Erledigt ist die Aufgabe, wenn der Filterkategorie-Selektor beim initialen Rendern einen erkennbaren zugänglichen Namen hat und die kritische button-name-Verletzung verschwunden ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- react, typescript
- Bereich
- accessibility, frontend
- Issue-Typ
- Bug
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Aktivitätsstatus
- Ruhig
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 78/100