Skip to content

Commit b0d0790

Browse files
authored
fix: Popover should stop propagating Escape key event on closing (#3032)
1 parent afb1189 commit b0d0790

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

components/popover/__tests__/popover.browser-test.jsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,34 @@ describe('SLDSPopover', function () {
238238
const trigger = wrapper.find(defaultIds.trigger);
239239
trigger.simulate('click');
240240
});
241+
242+
it('stops event propagation after closing on ESC', function (done) {
243+
const mockEvent = {
244+
key: 'Esc',
245+
keyCode: 27,
246+
which: 27,
247+
stopPropagation: sinon.spy(),
248+
};
249+
wrapper = mount(
250+
<DemoComponent
251+
onOpen={() => {
252+
wrapper.update();
253+
const popover = wrapper.find(`#${defaultIds.popover}`);
254+
popover.simulate('keyDown', mockEvent);
255+
}}
256+
onKeyDown={() => {
257+
setTimeout(() => {
258+
expect(mockEvent.stopPropagation.callCount).to.equal(1);
259+
done();
260+
}, 0);
261+
}}
262+
/>,
263+
{ attachTo: mountNode }
264+
);
265+
266+
const trigger = wrapper.find(defaultIds.trigger);
267+
trigger.simulate('click');
268+
});
241269
});
242270
});
243271

utilities/keyboard-navigable-dialog.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import ReactDOM from 'react-dom';
2222

2323
// ### Event Helpers
2424
import KEYS from './key-code';
25+
import EventUtil from './event';
2526

2627
/* eslint-disable react/no-find-dom-node */
2728

@@ -33,6 +34,7 @@ const internalHandleClick = ({ trigger, eventTarget, handleClick }) => {
3334
};
3435

3536
const KeyboardNavigableDialog = ({
37+
event,
3638
isOpen,
3739
handleClick,
3840
keyCode,
@@ -44,6 +46,7 @@ const KeyboardNavigableDialog = ({
4446
case KEYS.ESCAPE:
4547
if (isOpen) {
4648
toggleOpen();
49+
EventUtil.trapEvent(event);
4750
}
4851
break;
4952
case KEYS.ENTER:

0 commit comments

Comments
 (0)