Skip to content

Commit 81b7a31

Browse files
authored
Supports specifying an alternative role for the menu items (PR #62)
1 parent 0bfb6fe commit 81b7a31

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

src/MenuItem.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ export default class MenuItem extends Component {
1818
onMouseLeave: PropTypes.func,
1919
onMouseMove: PropTypes.func,
2020
preventClose: PropTypes.bool,
21-
selected: PropTypes.bool
21+
selected: PropTypes.bool,
22+
role: PropTypes.string
2223
};
2324

2425
static defaultProps = {
@@ -32,7 +33,8 @@ export default class MenuItem extends Component {
3233
onMouseMove: () => null,
3334
onMouseLeave: () => null,
3435
preventClose: false,
35-
selected: false
36+
selected: false,
37+
role: 'menuitem'
3638
};
3739

3840
handleClick = (event) => {
@@ -61,7 +63,8 @@ export default class MenuItem extends Component {
6163
className,
6264
disabled,
6365
divider,
64-
selected
66+
selected,
67+
role
6568
} = this.props;
6669

6770
const menuItemClassNames = cx(
@@ -78,7 +81,7 @@ export default class MenuItem extends Component {
7881
return (
7982
<div
8083
{...attributes} className={menuItemClassNames}
81-
role='menuitem' tabIndex='-1' aria-disabled={disabled ? 'true' : 'false'}
84+
role={role} tabIndex='-1' aria-disabled={disabled ? 'true' : 'false'}
8285
aria-orientation={divider ? 'horizontal' : null}
8386
ref={(ref) => { this.ref = ref; }}
8487
onMouseMove={this.props.onMouseMove} onMouseLeave={this.props.onMouseLeave}

tests/MenuItem.test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,22 @@ describe('MenuItem tests', () => {
1818
expect(element).toHaveClass(className);
1919
expect(element).toHaveClass(attributes.className);
2020
});
21+
22+
test('exposes the menuitem role by default', () => {
23+
render(
24+
<MenuItem>Item</MenuItem>
25+
);
26+
27+
const element = screen.getByRole('menuitem');
28+
expect(element).toBeInTheDocument();
29+
});
30+
31+
test('makes it possible to change the default role', () => {
32+
render(
33+
<MenuItem role='menuitemcheckbox' attributes={{ 'aria-checked': 'true' }}>Item</MenuItem>
34+
);
35+
36+
const element = screen.getByRole('menuitemcheckbox');
37+
expect(element).toBeChecked();
38+
});
2139
});

0 commit comments

Comments
 (0)