Skip to content

Commit df2bc2b

Browse files
authored
Merge pull request #155 from cdeutsch/menuitem-role-none
On MenuItem, set the `role` to `none` if the role is `null` or `none`.
2 parents 0c80d9b + 4551ede commit df2bc2b

File tree

3 files changed

+41
-7
lines changed

3 files changed

+41
-7
lines changed

src/MenuItem.jsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ export class MenuItem extends React.Component {
150150
title: props.title,
151151
className,
152152
// set to menuitem by default
153-
role: 'menuitem',
153+
role: props.role || 'menuitem',
154154
'aria-disabled': props.disabled,
155155
};
156156

@@ -161,10 +161,13 @@ export class MenuItem extends React.Component {
161161
role: 'option',
162162
'aria-selected': props.isSelected,
163163
};
164-
} else if (props.role === null) {
164+
} else if (props.role === null || props.role === 'none') {
165165
// sometimes we want to specify role inside <li/> element
166166
// <li><a role='menuitem'>Link</a></li> would be a good example
167-
delete attrs.role;
167+
// in this case the role on <li/> should be "none" to
168+
// remove the implied listitem role.
169+
// https://www.w3.org/TR/wai-aria-practices-1.1/examples/menubar/menubar-1/menubar-1.html
170+
attrs.role = 'none';
168171
}
169172
// In case that onClick/onMouseLeave/onMouseEnter is passed down from owner
170173
const mouseEvent = {

tests/MenuItem.spec.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,25 @@ describe('MenuItem', () => {
117117
});
118118

119119
describe('overwrite default role', () => {
120-
it('should set empty role', () => {
120+
it('should set role to none if null', () => {
121121
const wrapper = shallow(<NakedMenuItem role={null}>test</NakedMenuItem>);
122122

123123
expect(wrapper.render()).toMatchSnapshot();
124124
});
125125

126-
it('should set specific role', () => {
126+
it('should set role to none if none', () => {
127+
const wrapper = shallow(<NakedMenuItem role="none">test</NakedMenuItem>);
128+
129+
expect(wrapper.render()).toMatchSnapshot();
130+
});
131+
132+
it('should set role to listitem', () => {
133+
const wrapper = shallow(<NakedMenuItem role="listitem">test</NakedMenuItem>);
134+
135+
expect(wrapper.render()).toMatchSnapshot();
136+
});
137+
138+
it('should set role to option', () => {
127139
const wrapper = shallow(<NakedMenuItem role="option">test</NakedMenuItem>);
128140

129141
expect(wrapper.render()).toMatchSnapshot();

tests/__snapshots__/MenuItem.spec.js.snap

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,33 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3-
exports[`MenuItem overwrite default role should set empty role 1`] = `
3+
exports[`MenuItem overwrite default role should set role to listitem 1`] = `
44
<li
55
class="undefined-item"
6+
role="listitem"
67
>
78
test
89
</li>
910
`;
1011

11-
exports[`MenuItem overwrite default role should set specific role 1`] = `
12+
exports[`MenuItem overwrite default role should set role to none if none 1`] = `
13+
<li
14+
class="undefined-item"
15+
role="none"
16+
>
17+
test
18+
</li>
19+
`;
20+
21+
exports[`MenuItem overwrite default role should set role to none if null 1`] = `
22+
<li
23+
class="undefined-item"
24+
role="none"
25+
>
26+
test
27+
</li>
28+
`;
29+
30+
exports[`MenuItem overwrite default role should set role to option 1`] = `
1231
<li
1332
class="undefined-item"
1433
role="option"

0 commit comments

Comments
 (0)