From 7fb3348e3f97737f445a7735c771cd2320d97b4b Mon Sep 17 00:00:00 2001 From: Nikolay Deshev Date: Fri, 5 Apr 2024 11:05:04 +0300 Subject: [PATCH] fix(ui5-multi-input): prevent double value state message on nMore open (#8638) * fix(ui5-multi-input): prevent double value state message on nMore open fixes: #8586 --- packages/main/src/MultiInput.ts | 4 ++++ packages/main/src/Tokenizer.ts | 4 ++++ packages/main/test/specs/MultiInput.spec.js | 15 +++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/packages/main/src/MultiInput.ts b/packages/main/src/MultiInput.ts index bb6d8d1c6fc1..befe702a1b4c 100644 --- a/packages/main/src/MultiInput.ts +++ b/packages/main/src/MultiInput.ts @@ -401,6 +401,10 @@ class MultiInput extends Input { return this; } + + get shouldDisplayOnlyValueStateMessage() { + return this.hasValueStateMessage && !this.readonly && !this.open && this.focused && !this.tokenizer._isOpen; + } } MultiInput.define(); diff --git a/packages/main/src/Tokenizer.ts b/packages/main/src/Tokenizer.ts index 46a2732d074d..c4ceac1ca7b9 100644 --- a/packages/main/src/Tokenizer.ts +++ b/packages/main/src/Tokenizer.ts @@ -173,6 +173,7 @@ class Tokenizer extends UI5Element { _itemNav: ItemNavigation; _scrollEnablement: ScrollEnablement; _expandedScrollWidth?: number; + _isOpen: boolean; _handleResize() { this._nMoreCount = this.overflownTokens.length; @@ -189,6 +190,7 @@ class Tokenizer extends UI5Element { }); this._scrollEnablement = new ScrollEnablement(this); + this._isOpen = false; } onBeforeRendering() { @@ -221,6 +223,7 @@ class Tokenizer extends UI5Element { async openMorePopover() { (await this.getPopover()).showAt(this.morePopoverOpener || this); + this._isOpen = true; } _getTokens() { @@ -617,6 +620,7 @@ class Tokenizer extends UI5Element { async closeMorePopover() { (await this.getPopover()).close(false, false, true); + this._isOpen = false; } get _nMoreText() { diff --git a/packages/main/test/specs/MultiInput.spec.js b/packages/main/test/specs/MultiInput.spec.js index 5636863908d5..19da2faaf353 100644 --- a/packages/main/test/specs/MultiInput.spec.js +++ b/packages/main/test/specs/MultiInput.spec.js @@ -662,6 +662,21 @@ describe("Keyboard handling", () => { assert.strictEqual(await mi.getProperty("valueState"), "None", "Value state is None"); }); + it("value state message popup should be closed when nMore popover is open", async () => { + const mi = await $("#multiInput-error"); + const inner = await mi.shadow$("input"); + const staticAreaItemClassName = await browser.getStaticAreaItemClassName("#multiInput-error"); + const popover = await browser.$(`.${staticAreaItemClassName}`).shadow$("ui5-popover"); + + await mi.scrollIntoView(); + + // populate new token + await inner.click(); + await inner.keys(["Control", "i"]); + + assert.strictEqual(await popover.getProperty("opened"), false, "Value state popup is closed"); + }); + it("should open popover on keyboard combination ctrl + i", async () => { const mi = await $("#truncated-token"); const rpoClassName = await getTokenizerPopoverId("truncated-token");