diff --git a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts index 0d9f82ea25..6ee751f9af 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts @@ -9,7 +9,7 @@ const routes: Routes = [ }, { path: 'account', - loadChildren: () => import('@abp/ng.account').then(m => m.AccountModule.forLazy()), + loadChildren: () => import('@abp/ng.account').then(m => m.accountRoutes), }, { path: 'identity', diff --git a/npm/ng-packs/packages/account/src/lib/account.routes.ts b/npm/ng-packs/packages/account/src/lib/account.routes.ts index 64789c969a..2d0f72b75e 100644 --- a/npm/ng-packs/packages/account/src/lib/account.routes.ts +++ b/npm/ng-packs/packages/account/src/lib/account.routes.ts @@ -2,7 +2,8 @@ import { authGuard, ReplaceableComponents, ReplaceableRouteContainerComponent, - RouterOutletComponent, + ReplaceableRouteContainerStandaloneComponent, + RouterOutletStandaloneComponent, } from '@abp/ng.core'; import { ForgotPasswordComponent } from './components/forgot-password/forgot-password.component'; @@ -13,20 +14,21 @@ import { ResetPasswordComponent } from './components/reset-password/reset-passwo import { eAccountComponents } from './enums/components'; import { authenticationFlowGuard } from './guards'; import { accountExtensionsResolver } from './resolvers'; +import { Routes } from '@angular/router'; import { provideAccount } from './account'; const canActivate = [authenticationFlowGuard]; -export const accountRoutes = [ +export const accountRoutes: Routes = [ { path: '', - component: RouterOutletComponent, + component: RouterOutletStandaloneComponent, providers: [...provideAccount()], children: [ { path: '', pathMatch: 'full', redirectTo: 'login' }, { path: 'login', - component: ReplaceableRouteContainerComponent, + component: ReplaceableRouteContainerStandaloneComponent, canActivate, data: { replaceableComponent: { @@ -38,7 +40,7 @@ export const accountRoutes = [ }, { path: 'register', - component: ReplaceableRouteContainerComponent, + component: ReplaceableRouteContainerStandaloneComponent, canActivate, data: { replaceableComponent: { @@ -50,7 +52,7 @@ export const accountRoutes = [ }, { path: 'forgot-password', - component: ReplaceableRouteContainerComponent, + component: ReplaceableRouteContainerStandaloneComponent, canActivate, data: { @@ -63,7 +65,7 @@ export const accountRoutes = [ }, { path: 'reset-password', - component: ReplaceableRouteContainerComponent, + component: ReplaceableRouteContainerStandaloneComponent, canActivate: [], data: { tenantBoxVisible: false, @@ -76,7 +78,7 @@ export const accountRoutes = [ }, { path: 'manage', - component: ReplaceableRouteContainerComponent, + component: ReplaceableRouteContainerStandaloneComponent, canActivate: [authGuard], resolve: [accountExtensionsResolver], data: { diff --git a/npm/ng-packs/packages/account/src/public-api.ts b/npm/ng-packs/packages/account/src/public-api.ts index f9df16ebc7..26b2139696 100644 --- a/npm/ng-packs/packages/account/src/public-api.ts +++ b/npm/ng-packs/packages/account/src/public-api.ts @@ -7,3 +7,5 @@ export * from './lib/services'; export * from './lib/tokens'; export * from './lib/utils'; export * from './lib/resolvers'; +export * from './lib/account.routes'; +export * from './lib/account'; diff --git a/npm/ng-packs/packages/core/src/lib/components/index.ts b/npm/ng-packs/packages/core/src/lib/components/index.ts index da3c72a69f..11aed8ffae 100644 --- a/npm/ng-packs/packages/core/src/lib/components/index.ts +++ b/npm/ng-packs/packages/core/src/lib/components/index.ts @@ -1,3 +1,4 @@ export * from './dynamic-layout.component'; export * from './replaceable-route-container.component'; export * from './router-outlet.component'; +export * from './replaceable-route-container-standalone.component'; diff --git a/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container-standalone.component.ts b/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container-standalone.component.ts new file mode 100644 index 0000000000..c0502ff542 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container-standalone.component.ts @@ -0,0 +1,47 @@ +import { Component, OnInit, Type } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { distinctUntilChanged } from 'rxjs/operators'; +import { ReplaceableComponents } from '../models/replaceable-components'; +import { ReplaceableComponentsService } from '../services/replaceable-components.service'; +import { SubscriptionService } from '../services/subscription.service'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'abp-replaceable-route-container', + template: ` + + `, + imports: [CommonModule], + providers: [SubscriptionService], +}) +export class ReplaceableRouteContainerStandaloneComponent implements OnInit { + defaultComponent!: Type; + + componentKey!: string; + + externalComponent?: Type; + + constructor( + private route: ActivatedRoute, + private replaceableComponents: ReplaceableComponentsService, + private subscription: SubscriptionService, + ) {} + + ngOnInit() { + this.defaultComponent = this.route.snapshot.data.replaceableComponent.defaultComponent; + this.componentKey = ( + this.route.snapshot.data.replaceableComponent as ReplaceableComponents.RouteData + ).key; + + const component$ = this.replaceableComponents + .get$(this.componentKey) + .pipe(distinctUntilChanged()); + + this.subscription.addOne( + component$, + (res = {} as ReplaceableComponents.ReplaceableComponent) => { + this.externalComponent = res.component; + }, + ); + } +} diff --git a/npm/ng-packs/packages/core/src/lib/components/router-outlet.component.ts b/npm/ng-packs/packages/core/src/lib/components/router-outlet.component.ts index 4dd1e586ee..9438622b6c 100644 --- a/npm/ng-packs/packages/core/src/lib/components/router-outlet.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/router-outlet.component.ts @@ -1,4 +1,5 @@ import { Component } from '@angular/core'; +import { RouterModule } from '@angular/router'; @Component({ standalone: false, @@ -6,3 +7,10 @@ import { Component } from '@angular/core'; template: ` `, }) export class RouterOutletComponent {} + +@Component({ + selector: 'abp-router-outlet', + template: ` `, + imports: [RouterModule], +}) +export class RouterOutletStandaloneComponent {}