From a7f23ac43f9b97ab5e97a8ee4aea72d4514965de Mon Sep 17 00:00:00 2001 From: Vaadin Bot Date: Thu, 28 Mar 2024 14:55:59 +0100 Subject: [PATCH] fix: close select overlay when clicking already selected item (#7288) (#7290) Co-authored-by: Serhii Kulykov --- packages/select/src/vaadin-select-base-mixin.js | 7 ++++--- packages/select/test/select.common.js | 12 ++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/select/src/vaadin-select-base-mixin.js b/packages/select/src/vaadin-select-base-mixin.js index ba1015bea2..acec115c9a 100644 --- a/packages/select/src/vaadin-select-base-mixin.js +++ b/packages/select/src/vaadin-select-base-mixin.js @@ -259,8 +259,10 @@ export const SelectBaseMixin = (superClass) => menuElement.addEventListener('keydown', (e) => this._onKeyDownInside(e), true); menuElement.addEventListener( 'click', - () => { - this.__dispatchChangePending = true; + (e) => { + const value = e.target.value; + this.__dispatchChangePending = value !== undefined && value !== this.value; + this.opened = false; }, true, ); @@ -523,7 +525,6 @@ export const SelectBaseMixin = (superClass) => this._selectedChanging = true; this.value = selected.value || ''; if (this.__dispatchChangePending) { - this.opened = false; this.__dispatchChange(); } delete this._selectedChanging; diff --git a/packages/select/test/select.common.js b/packages/select/test/select.common.js index 21e7f9cf32..f5aeb0b803 100644 --- a/packages/select/test/select.common.js +++ b/packages/select/test/select.common.js @@ -132,6 +132,18 @@ describe('vaadin-select', () => { expect(select._overlayElement.opened).to.be.false; }); + it('should close the overlay when clicking an already selected item', async () => { + click(select._items[1]); + await nextUpdate(select); + + select.opened = true; + await nextRender(); + + click(select._items[1]); + await nextUpdate(select); + expect(select._overlayElement.opened).to.be.false; + }); + it('should preserve the selected attribute when selecting the disabled item', async () => { menu.selected = 5; await nextUpdate(select);