From 4d09a756f9063c89efffd9c7b931db429d604504 Mon Sep 17 00:00:00 2001 From: web-padawan Date: Thu, 28 Mar 2024 15:28:38 +0200 Subject: [PATCH] fix: close select overlay when clicking already selected item --- 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 8841f2bd8b..0c531ef786 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);