Merge pull request #33317 from overleaf/mj-menu-bar-role

[web] Fix aria roles for nested menu bar dropdowns

GitOrigin-RevId: 1c285c2ef8ed0c589bd6b0df6112c054c8662ca4
This commit is contained in:
Mathias Jakobsen
2026-05-01 08:07:09 +00:00
committed by Copybot
parent 823f11426b
commit 42f7bca37e
3 changed files with 8 additions and 3 deletions
+2 -2
View File
@@ -140,7 +140,7 @@ describe('editor', function () {
describe('file menu', function () { describe('file menu', function () {
it('can download project sources', function () { it('can download project sources', function () {
cy.findByRole('button', { name: 'File' }).click() cy.findByRole('button', { name: 'File' }).click()
cy.findByRole('link', { name: 'Download' }).click() cy.findByRole('menuitem', { name: 'Download' }).click()
cy.findByRole('menuitem', { name: 'Download as source (.zip)' }).click() cy.findByRole('menuitem', { name: 'Download as source (.zip)' }).click()
const zipName = projectName.replaceAll('-', '_') const zipName = projectName.replaceAll('-', '_')
cy.task('readFileInZip', { cy.task('readFileInZip', {
@@ -157,7 +157,7 @@ describe('editor', function () {
) )
cy.findByRole('button', { name: 'File' }).click() cy.findByRole('button', { name: 'File' }).click()
cy.findByRole('link', { name: 'Download' }).click() cy.findByRole('menuitem', { name: 'Download' }).click()
cy.findByRole('menuitem', { name: 'Download as PDF' }).click() cy.findByRole('menuitem', { name: 'Download as PDF' }).click()
const pdfName = projectName.replaceAll('-', '_') const pdfName = projectName.replaceAll('-', '_')
cy.task('readPdf', `cypress/downloads/${pdfName}.pdf`).should( cy.task('readPdf', `cypress/downloads/${pdfName}.pdf`).should(
@@ -91,6 +91,8 @@ const NestedDropdownToggle: FC<React.PropsWithChildren> = forwardRef<
'nested-dropdown-toggle', 'nested-dropdown-toggle',
'dropdown-item' 'dropdown-item'
)} )}
role="menuitem"
aria-haspopup
> >
{children} {children}
<MaterialIcon type="chevron_right" /> <MaterialIcon type="chevron_right" />
@@ -122,6 +124,8 @@ export const NestedMenuBarDropdown: FC<
show={active} show={active}
autoClose autoClose
onToggle={onToggle} onToggle={onToggle}
as="li"
role="none"
> >
<DropdownToggle <DropdownToggle
id={`${menuId}-${id}`} id={`${menuId}-${id}`}
@@ -1,4 +1,4 @@
import type { ElementType, ReactNode, PropsWithChildren } from 'react' import type { ElementType, ReactNode, PropsWithChildren, AriaRole } from 'react'
import type { ButtonProps } from '@/shared/components/types/button-props' import type { ButtonProps } from '@/shared/components/types/button-props'
import type { DropdownMenuProps as BS5DropdownMenuProps } from 'react-bootstrap' import type { DropdownMenuProps as BS5DropdownMenuProps } from 'react-bootstrap'
@@ -26,6 +26,7 @@ export type DropdownProps = {
drop?: 'up' | 'up-centered' | 'start' | 'end' | 'down' | 'down-centered' drop?: 'up' | 'up-centered' | 'start' | 'end' | 'down' | 'down-centered'
focusFirstItemOnShow?: false | true | 'keyboard' focusFirstItemOnShow?: false | true | 'keyboard'
onKeyDown?: (event: React.KeyboardEvent) => void onKeyDown?: (event: React.KeyboardEvent) => void
role?: AriaRole
} }
export type DropdownItemProps = PropsWithChildren<{ export type DropdownItemProps = PropsWithChildren<{