diff --git a/npm/ng-packs/packages/core/project.json b/npm/ng-packs/packages/core/project.json
index 69bbb4f572..e3c7c58737 100644
--- a/npm/ng-packs/packages/core/project.json
+++ b/npm/ng-packs/packages/core/project.json
@@ -30,7 +30,7 @@
"executor": "@nx/vitest:test",
"outputs": ["{options.reportsDirectory}"],
"options": {
- "reportsDirectory": "../../coverage/packages/core"
+ "reportsDirectory": "{projectRoot}/../../coverage/packages/core"
}
}
}
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 8d6b5f3992..4e2f3d46b0 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,32 +1,29 @@
-import {
- Component,
- inject,
- input,
- isDevMode,
- Type,
-} from '@angular/core';
+import { Component, inject, input, isDevMode, Type } from '@angular/core';
+import { NgComponentOutlet } from '@angular/common';
import { ActivatedRoute, Router } from '@angular/router';
+import { startWith } from 'rxjs/operators';
+
import { eLayoutType } from '../enums/common';
import { ABP } from '../models';
import { ReplaceableComponents } from '../models/replaceable-components';
+
import { LocalizationService } from '../services/localization.service';
import { ReplaceableComponentsService } from '../services/replaceable-components.service';
import { RouterEvents } from '../services/router-events.service';
import { RoutesService } from '../services/routes.service';
import { SubscriptionService } from '../services/subscription.service';
+
import { RouteBasedCultureUrlService } from '../services/route-based-culture-url.service';
import { findRoute } from '../utils/route-utils';
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',
template: `
@if (isLayoutVisible) {
-
+
}
`,
providers: [SubscriptionService],
@@ -46,24 +43,25 @@ export class DynamicLayoutComponent {
protected readonly replaceableComponents = inject(ReplaceableComponentsService);
protected readonly subscription = inject(SubscriptionService);
protected readonly routerEvents = inject(RouterEvents);
- protected readonly environment = inject(EnvironmentService);
protected readonly routeCultureUrl = inject(RouteBasedCultureUrlService);
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.');
return;
}
- this.checkLayoutOnNavigationEnd();
+ this.listenToLayoutChanges();
this.listenToLanguageChange();
- this.listenToEnvironmentChange();
}
- private checkLayoutOnNavigationEnd() {
+ private listenToLayoutChanges() {
const navigationEnd$ = this.routerEvents.getNavigationEvents('End');
- this.subscription.addOne(navigationEnd$, () => this.getLayout());
+ this.subscription.addOne(navigationEnd$.pipe(startWith(null)), () => this.getLayout());
}
private getLayout() {
@@ -120,19 +118,4 @@ export class DynamicLayoutComponent {
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();
- });
- }
}
diff --git a/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts b/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts
index a6ae040597..e201390501 100644
--- a/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts
+++ b/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts
@@ -34,7 +34,10 @@ export class PermissionGuard implements IAbpGuard {
protected readonly configStateService = inject(ConfigStateService);
protected readonly routeCultureUrl = inject(RouteBasedCultureUrlService);
- canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {
+ canActivate(
+ route: ActivatedRouteSnapshot,
+ state: RouterStateSnapshot,
+ ): Observable {
let { requiredPolicy } = route.data || {};
if (!requiredPolicy) {
@@ -86,7 +89,10 @@ export const permissionGuard: CanActivateFn = (
let { requiredPolicy } = route.data || {};
if (!requiredPolicy) {
- const routeFound = findRoute(routesService, routeCultureUrl.getRoutePathForMatching(router, state.url));
+ const routeFound = findRoute(
+ routesService,
+ routeCultureUrl.getRoutePathForMatching(router, state.url),
+ );
requiredPolicy = routeFound?.requiredPolicy;
}
diff --git a/npm/ng-packs/packages/core/src/lib/strategies/projection.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/projection.strategy.ts
index bc7c9201fd..e893bb50b1 100644
--- a/npm/ng-packs/packages/core/src/lib/strategies/projection.strategy.ts
+++ b/npm/ng-packs/packages/core/src/lib/strategies/projection.strategy.ts
@@ -1,7 +1,7 @@
import {
ApplicationRef,
- ComponentFactoryResolver,
ComponentRef,
+ createComponent,
EmbeddedViewRef,
Injector,
TemplateRef,
@@ -31,14 +31,10 @@ export class ComponentProjectionStrategy> extends Projection
injectContent(injector: Injector) {
this.containerStrategy.prepare();
- const resolver = injector.get(ComponentFactoryResolver) as ComponentFactoryResolver;
- const factory = resolver.resolveComponentFactory>(this.content);
-
- const componentRef = this.containerStrategy.containerRef.createComponent(
- factory,
- this.containerStrategy.getIndex(),
+ const componentRef = this.containerStrategy.containerRef.createComponent(this.content, {
+ index: this.containerStrategy.getIndex(),
injector,
- );
+ });
this.contextStrategy.setContext(componentRef);
return componentRef as ComponentRefOrEmbeddedViewRef;
@@ -56,10 +52,10 @@ export class RootComponentProjectionStrategy> extends Projec
injectContent(injector: Injector) {
const appRef = injector.get(ApplicationRef);
- const resolver = injector.get(ComponentFactoryResolver) as ComponentFactoryResolver;
- const componentRef = resolver
- .resolveComponentFactory>(this.content)
- .create(injector);
+ const componentRef = createComponent(this.content, {
+ environmentInjector: appRef.injector,
+ elementInjector: injector,
+ });
this.contextStrategy.setContext(componentRef);
@@ -172,8 +168,9 @@ export const PROJECTION_STRATEGY = {
},
};
-type ComponentRefOrEmbeddedViewRef = T extends Type
- ? ComponentRef
- : T extends TemplateRef
- ? EmbeddedViewRef
- : never;
+type ComponentRefOrEmbeddedViewRef =
+ T extends Type
+ ? ComponentRef
+ : T extends TemplateRef
+ ? EmbeddedViewRef
+ : never;
diff --git a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts
index 8f077fa628..4d87de1aac 100644
--- a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts
+++ b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts
@@ -15,7 +15,7 @@ import {
import { APP_BASE_HREF } from '@angular/common';
import { ModuleWithProviders, NgModule } from '@angular/core';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
-import { provideRoutes } from '@angular/router';
+import { provideRouter } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { MockPermissionService } from './services/mock-permission.service';
import { MockRestService } from './services/mock-rest.service';
@@ -77,7 +77,7 @@ export class CoreTestingModule {
provide: SORT_COMPARE_FUNC,
useFactory: compareFuncFactory,
},
- provideRoutes(routes),
+ provideRouter(routes),
],
};
}