From 34b64ca223a7a6ae06c1ce781b14d18dcfe1ce75 Mon Sep 17 00:00:00 2001 From: Peter Skelin Date: Thu, 12 Sep 2024 15:13:40 +0300 Subject: [PATCH 1/6] chore: call customElements.define synchronously --- packages/base/src/UI5Element.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/base/src/UI5Element.ts b/packages/base/src/UI5Element.ts index 472f227d6e82..dc4413fa8bdb 100644 --- a/packages/base/src/UI5Element.ts +++ b/packages/base/src/UI5Element.ts @@ -300,6 +300,10 @@ abstract class UI5Element extends HTMLElement { return; } + if (!ctor.asyncFinished) { + await ctor.definePromise; + } + renderImmediately(this); this._domRefReadyPromise._deferredResolve!(); this._fullyConnected = true; @@ -1215,14 +1219,16 @@ abstract class UI5Element extends HTMLElement { return Promise.resolve(); } + static asyncFinished: boolean; + static definePromise: Promise<[void, (typeof UI5Element)[], void]> | undefined; + /** * Registers a UI5 Web Component in the browser window object * @public */ static async define(): Promise { - await boot(); - - await Promise.all([ + this.definePromise = Promise.all([ + boot(), this.whenDependenciesDefined(), this.onDefine(), ]); @@ -1249,6 +1255,10 @@ abstract class UI5Element extends HTMLElement { registerTag(tag); customElements.define(tag, this as unknown as CustomElementConstructor); } + + await this.definePromise; + this.asyncFinished = true; + return this; } From cc01650bf656d529c1feebc9ab4bcff957ae1c6c Mon Sep 17 00:00:00 2001 From: Peter Skelin Date: Thu, 12 Sep 2024 15:36:06 +0300 Subject: [PATCH 2/6] chore: no need to await deps, test fix --- packages/base/src/UI5Element.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/packages/base/src/UI5Element.ts b/packages/base/src/UI5Element.ts index dc4413fa8bdb..67c75ae335eb 100644 --- a/packages/base/src/UI5Element.ts +++ b/packages/base/src/UI5Element.ts @@ -1203,12 +1203,6 @@ abstract class UI5Element extends HTMLElement { return uniqueDependenciesCache.get(this) || []; } - /** - * Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved - */ - static whenDependenciesDefined(): Promise> { - return Promise.all(this.getUniqueDependencies().map(dep => dep.define())); - } /** * Hook that will be called upon custom element definition @@ -1220,7 +1214,7 @@ abstract class UI5Element extends HTMLElement { } static asyncFinished: boolean; - static definePromise: Promise<[void, (typeof UI5Element)[], void]> | undefined; + static definePromise: Promise<[void, void]> | undefined; /** * Registers a UI5 Web Component in the browser window object @@ -1229,7 +1223,6 @@ abstract class UI5Element extends HTMLElement { static async define(): Promise { this.definePromise = Promise.all([ boot(), - this.whenDependenciesDefined(), this.onDefine(), ]); From 72c01ccd788e65bc123fa666dd559c7e1a832875 Mon Sep 17 00:00:00 2001 From: Peter Skelin Date: Thu, 12 Sep 2024 15:36:12 +0300 Subject: [PATCH 3/6] chore: test fix --- packages/compat/src/TableGroupRow.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compat/src/TableGroupRow.ts b/packages/compat/src/TableGroupRow.ts index e0d23918619d..c1a506c284d2 100644 --- a/packages/compat/src/TableGroupRow.ts +++ b/packages/compat/src/TableGroupRow.ts @@ -79,7 +79,7 @@ class TableGroupRow extends UI5Element implements ITableRow { } get ariaLabelText() { - return `${TableGroupRow.i18nBundle.getText(TABLE_GROUP_ROW_ARIA_LABEL)} ${this.innerText}. ${this.forcedAriaPosition}`; + return `${TableGroupRow.i18nBundle.getText(TABLE_GROUP_ROW_ARIA_LABEL)} ${this.textContent}. ${this.forcedAriaPosition}`; } visibleColCount(): number { From 01289e5fc244099bf6948c04083f89c22dba268c Mon Sep 17 00:00:00 2001 From: Peter Skelin Date: Thu, 12 Sep 2024 16:31:08 +0300 Subject: [PATCH 4/6] fix: calendar await super.define --- packages/main/src/Calendar.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/main/src/Calendar.ts b/packages/main/src/Calendar.ts index 61ccdfb78b80..2f2b107d5a44 100644 --- a/packages/main/src/Calendar.ts +++ b/packages/main/src/Calendar.ts @@ -322,7 +322,10 @@ class Calendar extends CalendarPart { } static async onDefine() { - Calendar.i18nBundle = await getI18nBundle("@ui5/webcomponents"); + [Calendar.i18nBundle] = await Promise.all([ + getI18nBundle("@ui5/webcomponents"), + super.onDefine(), + ]); } /** From adf12cb7c395069f7c8fa23b519982a0b36e5a8c Mon Sep 17 00:00:00 2001 From: Peter Skelin Date: Thu, 12 Sep 2024 16:35:05 +0300 Subject: [PATCH 5/6] chore: lint --- packages/base/src/UI5Element.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/base/src/UI5Element.ts b/packages/base/src/UI5Element.ts index 67c75ae335eb..bd619c75402c 100644 --- a/packages/base/src/UI5Element.ts +++ b/packages/base/src/UI5Element.ts @@ -1203,7 +1203,6 @@ abstract class UI5Element extends HTMLElement { return uniqueDependenciesCache.get(this) || []; } - /** * Hook that will be called upon custom element definition * From bea68b1d1276f1bbfb90a3a9ff53d01ca29d4766 Mon Sep 17 00:00:00 2001 From: Peter Skelin Date: Tue, 17 Sep 2024 12:02:54 +0300 Subject: [PATCH 6/6] chore: simplify boot event --- packages/base/src/Boot.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/base/src/Boot.ts b/packages/base/src/Boot.ts index 43577582dea3..a316f741be78 100644 --- a/packages/base/src/Boot.ts +++ b/packages/base/src/Boot.ts @@ -70,7 +70,7 @@ const boot = async (): Promise => { resolve(); booted = true; - await eventProvider.fireEventAsync("boot"); + eventProvider.fireEvent("boot"); }; bootPromise = new Promise(bootExecutor as (resolve: PromiseResolve) => void);