From e913c85bd86e993f150c6611e99678c82d63d7ff Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Wed, 6 Aug 2025 12:41:54 +0200 Subject: [PATCH 1/3] fix(dynamic-layout): replace OnInit implementation with environment change listener --- .../components/dynamic-layout.component.ts | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts index 6b9c945be3..86dfd00400 100644 --- a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts @@ -13,6 +13,7 @@ import { TreeNode } from '../utils/tree-utils'; import { DYNAMIC_LAYOUTS_TOKEN } from '../tokens/dynamic-layout.token'; import { EnvironmentService } from '../services'; import { NgComponentOutlet } from '@angular/common'; +import { filter, take } from 'rxjs'; @Component({ selector: 'abp-dynamic-layout', @@ -24,7 +25,7 @@ import { NgComponentOutlet } from '@angular/common'; providers: [SubscriptionService], imports: [NgComponentOutlet], }) -export class DynamicLayoutComponent implements OnInit { +export class DynamicLayoutComponent { layout?: Type; layoutKey?: eLayoutType; readonly layouts = inject(DYNAMIC_LAYOUTS_TOKEN); @@ -48,17 +49,7 @@ export class DynamicLayoutComponent implements OnInit { } this.checkLayoutOnNavigationEnd(); this.listenToLanguageChange(); - } - - ngOnInit(): void { - if (this.layout) { - return; - } - - const { oAuthConfig } = this.environment.getEnvironment(); - if (oAuthConfig.responseType === 'code') { - this.getLayout(); - } + this.listenToEnvironmentChange(); } private checkLayoutOnNavigationEnd() { @@ -120,4 +111,19 @@ export class DynamicLayoutComponent implements OnInit { private getComponent(key: string): ReplaceableComponents.ReplaceableComponent | undefined { return this.replaceableComponents.get(key); } + + private listenToEnvironmentChange() { + this.environment + .createOnUpdateStream(x => x.oAuthConfig) + .pipe( + take(1), + filter(config => config.responseType === 'code'), + ) + .subscribe(() => { + if (this.layout) { + return; + } + this.getLayout(); + }); + } } From 4d5da6e71ce45148676eaf49929c4b84ba1ca98a Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Wed, 6 Aug 2025 12:42:48 +0200 Subject: [PATCH 2/3] refactor(dynamic-layout): remove non-null assertion --- .../core/src/lib/components/dynamic-layout.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts index 86dfd00400..54431f7ed7 100644 --- a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts @@ -41,7 +41,7 @@ export class DynamicLayoutComponent { protected readonly environment = inject(EnvironmentService); constructor() { - const dynamicLayoutComponent = inject(DynamicLayoutComponent, { optional: true, skipSelf: true })!; + const dynamicLayoutComponent = inject(DynamicLayoutComponent, { optional: true, skipSelf: true }); if (dynamicLayoutComponent) { if (isDevMode()) console.warn('DynamicLayoutComponent must be used only in AppComponent.'); From d4fa5ff677cd94e4cbd2e0ab98540d727a99814f Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Wed, 6 Aug 2025 13:22:40 +0200 Subject: [PATCH 3/3] chore(dynamic-layout): remove unused import --- .../core/src/lib/components/dynamic-layout.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts index 54431f7ed7..0a42596d80 100644 --- a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts @@ -1,4 +1,4 @@ -import { Component, inject, isDevMode, OnInit, Type } from '@angular/core'; +import { Component, inject, isDevMode, Type } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { eLayoutType } from '../enums/common'; import { ABP } from '../models';