From bdb7782003288def3af9538d18a9cb85ffd21d1e Mon Sep 17 00:00:00 2001 From: web-padawan Date: Thu, 26 Sep 2024 14:51:38 +0300 Subject: [PATCH] fix: prevent opening select on click or keydown when disabled --- packages/select/src/vaadin-select-base-mixin.js | 6 +++++- packages/select/test/select.common.js | 11 ++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/select/src/vaadin-select-base-mixin.js b/packages/select/src/vaadin-select-base-mixin.js index b0a78f39b2..a6dee6107b 100644 --- a/packages/select/src/vaadin-select-base-mixin.js +++ b/packages/select/src/vaadin-select-base-mixin.js @@ -304,6 +304,10 @@ export const SelectBaseMixin = (superClass) => * @private */ _onClick(event) { + if (this.disabled) { + return; + } + // Prevent parent components such as `vaadin-grid` // from handling the click event after it bubbles. event.preventDefault(); @@ -324,7 +328,7 @@ export const SelectBaseMixin = (superClass) => * @override */ _onKeyDown(e) { - if (e.target === this.focusElement && !this.readonly && !this.opened) { + if (e.target === this.focusElement && !this.readonly && !this.disabled && !this.opened) { if (/^(Enter|SpaceBar|\s|ArrowDown|Down|ArrowUp|Up)$/u.test(e.key)) { e.preventDefault(); this.opened = true; diff --git a/packages/select/test/select.common.js b/packages/select/test/select.common.js index 23a8e440c5..0aab4cffd8 100644 --- a/packages/select/test/select.common.js +++ b/packages/select/test/select.common.js @@ -499,15 +499,24 @@ describe('vaadin-select', () => { }); describe('disabled', () => { - it('should disable the button and disable opening if select is disabled', async () => { + beforeEach(async () => { select.disabled = true; await nextUpdate(select); + }); + + it('should disable the value button element when disabled', () => { expect(valueButton.disabled).to.be.true; + }); + it('should not open on value button Enter when disabled', () => { enterKeyDown(valueButton); + expect(select.opened).to.be.false; expect(select._overlayElement.opened).to.be.false; + }); + it('should not open on value button click when disabled', () => { click(valueButton); + expect(select.opened).to.be.false; expect(select._overlayElement.opened).to.be.false; }); });