Skip to content

Commit a537961

Browse files
matthew-chirgwinasudoh
authored andcommitted
feat(ui-shell): add alternative behaviours (carbon-design-system#3990)
Add the option to remove onFocus/onBlur from SideNav
1 parent b0af775 commit a537961

File tree

3 files changed

+35
-7
lines changed

3 files changed

+35
-7
lines changed

packages/react/src/components/UIShell/SideNav.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const SideNav = React.forwardRef(function SideNav(props, ref) {
3030
isFixedNav,
3131
isRail,
3232
isPersistent,
33+
addFocusListeners,
3334
addMouseListeners,
3435
} = props;
3536

@@ -91,14 +92,16 @@ const SideNav = React.forwardRef(function SideNav(props, ref) {
9192
});
9293
}
9394

94-
const eventHanders = {
95-
onFocus: event => handleToggle(event, true),
96-
onBlur: event => handleToggle(event, false),
97-
};
95+
let eventHandlers = {};
96+
97+
if (addFocusListeners) {
98+
eventHandlers.onFocus = event => handleToggle(event, true);
99+
eventHandlers.onBlur = event => handleToggle(event, false);
100+
}
98101

99102
if (addMouseListeners) {
100-
eventHanders.onMouseEnter = () => handleToggle(true, true);
101-
eventHanders.onMouseLeave = () => handleToggle(false, false);
103+
eventHandlers.onMouseEnter = () => handleToggle(true, true);
104+
eventHandlers.onMouseLeave = () => handleToggle(false, false);
102105
}
103106

104107
return (
@@ -108,7 +111,7 @@ const SideNav = React.forwardRef(function SideNav(props, ref) {
108111
ref={ref}
109112
className={`${prefix}--side-nav__navigation ${className}`}
110113
{...accessibilityLabel}
111-
{...eventHanders}>
114+
{...eventHandlers}>
112115
{childrenToRender}
113116
</nav>
114117
</>
@@ -127,6 +130,7 @@ SideNav.defaultProps = {
127130
isChildOfHeader: true,
128131
isFixedNav: false,
129132
isPersistent: true,
133+
addFocusListeners: true,
130134
addMouseListeners: true,
131135
};
132136

@@ -189,6 +193,11 @@ SideNav.propTypes = {
189193
*/
190194
isPersistent: PropTypes.bool,
191195

196+
/**
197+
* Specify whether focus and blur listeners are added. They are by default.
198+
*/
199+
addFocusListeners: PropTypes.bool,
200+
192201
/**
193202
* Specify whether mouse entry/exit listeners are added. They are by default.
194203
*/

packages/react/src/components/UIShell/__tests__/SideNav-test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@ describe('SideNav', () => {
3636
expect(wrapper.find('nav').props().onMouseLeave).toBeDefined();
3737
});
3838

39+
it('if addFocusListeners is specified as false, no focus event listeners props are added', () => {
40+
wrapper = mount(<SideNav {...mockProps} />);
41+
wrapper.setProps({ addFocusListeners: false });
42+
expect(wrapper.find('nav').props().onFocus).not.toBeDefined();
43+
expect(wrapper.find('nav').props().onBlur).not.toBeDefined();
44+
expect(wrapper.find('nav').props().onMouseEnter).toBeDefined();
45+
expect(wrapper.find('nav').props().onMouseLeave).toBeDefined();
46+
});
47+
3948
it('if addMouseListeners is specified as false, no mouse listener props are added', () => {
4049
wrapper = mount(<SideNav {...mockProps} />);
4150
wrapper.setProps({ addMouseListeners: false });
@@ -44,4 +53,13 @@ describe('SideNav', () => {
4453
expect(wrapper.find('nav').props().onMouseEnter).not.toBeDefined();
4554
expect(wrapper.find('nav').props().onMouseLeave).not.toBeDefined();
4655
});
56+
57+
it('if both addFocusListeners and addMouseListeners are specified as false, no mouse or focus listener props are added', () => {
58+
wrapper = mount(<SideNav {...mockProps} />);
59+
wrapper.setProps({ addFocusListeners: false, addMouseListeners: false });
60+
expect(wrapper.find('nav').props().onFocus).not.toBeDefined();
61+
expect(wrapper.find('nav').props().onBlur).not.toBeDefined();
62+
expect(wrapper.find('nav').props().onMouseEnter).not.toBeDefined();
63+
expect(wrapper.find('nav').props().onMouseLeave).not.toBeDefined();
64+
});
4765
});

packages/react/src/components/UIShell/__tests__/__snapshots__/SideNav-test.js.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
exports[`SideNav should render 1`] = `
44
<ForwardRef(SideNav)
5+
addFocusListeners={true}
56
addMouseListeners={true}
67
aria-label="Navigation"
78
defaultExpanded={false}

0 commit comments

Comments
 (0)