Skip to content

Commit 8956df8

Browse files
authored
fix: use preventDefault for handling MDL escape press (#10169)
1 parent 83d91c4 commit 8956df8

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

packages/master-detail-layout/src/vaadin-master-detail-layout.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,9 +291,9 @@ class MasterDetailLayout extends SlotStylesMixin(ResizeMixin(ElementMixin(Themab
291291

292292
/** @private */
293293
__onDetailKeydown(event) {
294-
if (event.key === 'Escape') {
294+
if (event.key === 'Escape' && !event.defaultPrevented) {
295295
// Prevent firing on parent layout when using nested layouts
296-
event.stopPropagation();
296+
event.preventDefault();
297297
this.dispatchEvent(new CustomEvent('detail-escape-press'));
298298
}
299299
}

packages/master-detail-layout/test/events.test.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,26 @@ describe('events', () => {
9595

9696
expect(spy).to.be.calledOnce;
9797
});
98+
99+
it('should call preventDefault on keydown event on pressing Escape', async () => {
100+
const spy = sinon.spy();
101+
layout.addEventListener('keydown', spy);
102+
103+
focusable.focus();
104+
await sendKeys({ press: 'Escape' });
105+
106+
expect(spy.firstCall.args[0].defaultPrevented).to.be.true;
107+
});
108+
109+
it('should not call stopPropagation on keydown event on pressing Escape', async () => {
110+
const spy = sinon.spy();
111+
document.addEventListener('keydown', spy, { once: true });
112+
113+
focusable.focus();
114+
await sendKeys({ press: 'Escape' });
115+
116+
expect(spy.calledOnce).to.be.true;
117+
});
98118
});
99119
});
100120

0 commit comments

Comments
 (0)