From bff3e7464a6edee87954442f9df1862af62adf52 Mon Sep 17 00:00:00 2001 From: Nayden Naydenov Date: Mon, 23 Jun 2025 17:42:50 +0300 Subject: [PATCH 1/6] fix(framework): correct focus on elements --- packages/base/src/UI5Element.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/base/src/UI5Element.ts b/packages/base/src/UI5Element.ts index 80f13fd01c4f..fb0cf962e46e 100644 --- a/packages/base/src/UI5Element.ts +++ b/packages/base/src/UI5Element.ts @@ -959,6 +959,10 @@ abstract class UI5Element extends HTMLElement { async focus(focusOptions?: FocusOptions): Promise { await this._waitForDomRef(); + if (!this.isConnected) { + return; + } + const focusDomRef = this.getFocusDomRef(); if (focusDomRef === this) { HTMLElement.prototype.focus.call(this, focusOptions); From 6e78b2eb09e096929a8d5e82ffc975fbc317c67c Mon Sep 17 00:00:00 2001 From: Nayden Naydenov Date: Mon, 23 Jun 2025 17:57:05 +0300 Subject: [PATCH 2/6] chore: visibility check --- packages/base/src/util/isElementHidden.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/base/src/util/isElementHidden.ts b/packages/base/src/util/isElementHidden.ts index 1cf339b7db71..fa6add027fc3 100644 --- a/packages/base/src/util/isElementHidden.ts +++ b/packages/base/src/util/isElementHidden.ts @@ -3,7 +3,11 @@ const isElementHidden = (el: HTMLElement) => { return false; } - return (el.offsetWidth <= 0 && el.offsetHeight <= 0) || (window.getComputedStyle(el).visibility === "hidden"); + const computedStyle = window.getComputedStyle(el); + + return (el.offsetWidth <= 0 && el.offsetHeight <= 0) + || (computedStyle.visibility === "hidden") + || (computedStyle.display === "none"); }; export default isElementHidden; From c5f641f8f50f1d6a5df3c06c40611469e01587fc Mon Sep 17 00:00:00 2001 From: Nayden Naydenov Date: Mon, 23 Jun 2025 18:07:32 +0300 Subject: [PATCH 3/6] chore: restore --- packages/base/src/util/isElementHidden.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/base/src/util/isElementHidden.ts b/packages/base/src/util/isElementHidden.ts index fa6add027fc3..1cf339b7db71 100644 --- a/packages/base/src/util/isElementHidden.ts +++ b/packages/base/src/util/isElementHidden.ts @@ -3,11 +3,7 @@ const isElementHidden = (el: HTMLElement) => { return false; } - const computedStyle = window.getComputedStyle(el); - - return (el.offsetWidth <= 0 && el.offsetHeight <= 0) - || (computedStyle.visibility === "hidden") - || (computedStyle.display === "none"); + return (el.offsetWidth <= 0 && el.offsetHeight <= 0) || (window.getComputedStyle(el).visibility === "hidden"); }; export default isElementHidden; From 7c07dd6d27776f82038b798c9dce670f2b15b04d Mon Sep 17 00:00:00 2001 From: Nayden Naydenov Date: Tue, 24 Jun 2025 10:55:16 +0300 Subject: [PATCH 4/6] chore: fix --- packages/base/src/UI5Element.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/base/src/UI5Element.ts b/packages/base/src/UI5Element.ts index fb0cf962e46e..e91f0da0cb3d 100644 --- a/packages/base/src/UI5Element.ts +++ b/packages/base/src/UI5Element.ts @@ -328,14 +328,14 @@ abstract class UI5Element extends HTMLElement { await this._processChildren(); } - if (!this._inDOM) { // Component removed from DOM while _processChildren was running - return; - } - if (!ctor.asyncFinished) { await ctor.definePromise; } + if (!this._inDOM) { // Component removed from DOM while _processChildren was running + return; + } + renderImmediately(this); this._domRefReadyPromise._deferredResolve!(); this._fullyConnected = true; From 429a6113b215e2c76cea0e7ea93dae781419269a Mon Sep 17 00:00:00 2001 From: Nayden Naydenov Date: Tue, 24 Jun 2025 11:29:02 +0300 Subject: [PATCH 5/6] chore: test --- packages/main/cypress/specs/Input.cy.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/main/cypress/specs/Input.cy.tsx b/packages/main/cypress/specs/Input.cy.tsx index 6b71a5c136eb..aa2a40605489 100644 --- a/packages/main/cypress/specs/Input.cy.tsx +++ b/packages/main/cypress/specs/Input.cy.tsx @@ -920,8 +920,8 @@ describe("Change event behavior when selecting the same suggestion item", () => }); it("should not close the dialog when item is selected", () => { - cy.mount( - + cy.mount( + @@ -934,10 +934,6 @@ describe("Change event behavior when selecting the same suggestion item", () => cy.get("@dialog") .ui5DialogOpened(); - cy.get("[ui5-input]") - .as("input") - .realClick(); - cy.get("@input") .should("be.focused"); From f14deb2784e1fb20d4c0710cbd613ba8a4b7b2e5 Mon Sep 17 00:00:00 2001 From: Nayden Naydenov Date: Wed, 25 Jun 2025 10:18:11 +0300 Subject: [PATCH 6/6] chore: restore focus function --- packages/base/src/UI5Element.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/base/src/UI5Element.ts b/packages/base/src/UI5Element.ts index e91f0da0cb3d..e1aea45f6642 100644 --- a/packages/base/src/UI5Element.ts +++ b/packages/base/src/UI5Element.ts @@ -959,10 +959,6 @@ abstract class UI5Element extends HTMLElement { async focus(focusOptions?: FocusOptions): Promise { await this._waitForDomRef(); - if (!this.isConnected) { - return; - } - const focusDomRef = this.getFocusDomRef(); if (focusDomRef === this) { HTMLElement.prototype.focus.call(this, focusOptions);