add navigation resolver config

This commit is contained in:
FrancescoMolinaro
2023-12-13 18:13:00 +01:00
parent b494c9551e
commit 763311ed29
3 changed files with 72 additions and 26 deletions

View File

@@ -1,18 +1,18 @@
import {NgModule} from '@angular/core'; import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router'; import {RouterModule, Routes} from '@angular/router';
import {LdnServicesOverviewComponent} from './ldn-services-directory/ldn-services-directory.component'; import {LdnServicesOverviewComponent} from './ldn-services-directory/ldn-services-directory.component';
import {LdnServiceNewComponent} from './ldn-service-new/ldn-service-new.component'; import {LdnServiceNewComponent} from './ldn-service-new/ldn-service-new.component';
import {LdnServiceFormEditComponent} from './ldn-service-form-edit/ldn-service-form-edit.component'; import {LdnServiceFormEditComponent} from './ldn-service-form-edit/ldn-service-form-edit.component';
import {NavigationBreadcrumbResolver} from "../../core/breadcrumbs/navigation-breadcrumb.resolver"; import {NavigationBreadcrumbResolver} from "../../core/breadcrumbs/navigation-breadcrumb.resolver";
import {I18nBreadcrumbResolver} from "../../core/breadcrumbs/i18n-breadcrumb.resolver";
@NgModule({
imports: [ const moduleRoutes: Routes = [
RouterModule.forChild([
{ {
path: '', path: '',
pathMatch: 'full', pathMatch: 'full',
component: LdnServicesOverviewComponent, component: LdnServicesOverviewComponent,
resolve: {breadcrumb: NavigationBreadcrumbResolver}, resolve: {breadcrumb: I18nBreadcrumbResolver},
data: {title: 'ldn-registered-services.title', breadcrumbKey: 'ldn-registered-services.new'}, data: {title: 'ldn-registered-services.title', breadcrumbKey: 'ldn-registered-services.new'},
}, },
{ {
@@ -27,7 +27,17 @@ import {NavigationBreadcrumbResolver} from "../../core/breadcrumbs/navigation-br
component: LdnServiceFormEditComponent, component: LdnServiceFormEditComponent,
data: {title: 'ldn-edit-service.title', breadcrumbKey: 'ldn-edit-service'} data: {title: 'ldn-edit-service.title', breadcrumbKey: 'ldn-edit-service'}
}, },
]), ];
const relatedRoutes = moduleRoutes.map(route => {
return {...route, data: {...route.data, parentRoute: moduleRoutes[0]}}
})
@NgModule({
imports: [
RouterModule.forChild(moduleRoutes.map(route => {
return {...route, data: {...route.data, relatedRoutes }}
}))
] ]
}) })
export class AdminLdnServicesRoutingModule { export class AdminLdnServicesRoutingModule {

View File

@@ -1,8 +1,9 @@
import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model'; import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot, Routes} from '@angular/router';
import { hasNoValue } from '../../shared/empty.util'; import { hasNoValue } from '../../shared/empty.util';
import { currentPathFromSnapshot } from '../../shared/utils/route.utils'; import { currentPathFromSnapshot } from '../../shared/utils/route.utils';
import {NavigationBreadcrumbsService} from "./navigation-breadcrumb.service";
/** /**
* The class that resolves a BreadcrumbConfig object with an i18n key string for a route * The class that resolves a BreadcrumbConfig object with an i18n key string for a route
@@ -11,9 +12,13 @@ import { currentPathFromSnapshot } from '../../shared/utils/route.utils';
providedIn: 'root' providedIn: 'root'
}) })
export class NavigationBreadcrumbResolver implements Resolve<BreadcrumbConfig<string>> { export class NavigationBreadcrumbResolver implements Resolve<BreadcrumbConfig<string>> {
constructor() { constructor(protected breadcrumbService: NavigationBreadcrumbsService) {
} }
private getUniqueParentRoutes(routes: Routes) : Routes {
return [...new Set(routes.map(route => route.data.parentRoute))];
}
/** /**
* Method for resolving an I18n breadcrumb configuration object * Method for resolving an I18n breadcrumb configuration object
* @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot * @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot
@@ -21,7 +26,11 @@ export class NavigationBreadcrumbResolver implements Resolve<BreadcrumbConfig<st
* @returns BreadcrumbConfig object * @returns BreadcrumbConfig object
*/ */
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): BreadcrumbConfig<string> { resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): BreadcrumbConfig<string> {
console.log(route, state); const path = route.routeConfig.path;
return null const relatedRoutes = route.data.relatedRoutes.filter(relatedRoute => relatedRoute.path !== path);
const uniqueParentRoutes = this.getUniqueParentRoutes(route.data.relatedRoutes);
console.log(path, relatedRoutes, uniqueParentRoutes);
return {provider: this.breadcrumbService, key: "combinedBredcrumbKeys", url: ""}
} }
} }

View File

@@ -0,0 +1,27 @@
import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model';
import { BreadcrumbsProviderService } from './breadcrumbsProviderService';
import { Observable, of as observableOf } from 'rxjs';
import { Injectable } from '@angular/core';
/**
* The postfix for i18n breadcrumbs
*/
export const BREADCRUMB_MESSAGE_POSTFIX = '.breadcrumbs';
/**
* Service to calculate i18n breadcrumbs for a single part of the route
*/
@Injectable({
providedIn: 'root'
})
export class NavigationBreadcrumbsService implements BreadcrumbsProviderService<string> {
/**
* Method to calculate the breadcrumbs
* @param key The key used to resolve the breadcrumb
* @param url The url to use as a link for this breadcrumb
*/
getBreadcrumbs(key: string, url: string): Observable<Breadcrumb[]> {
return observableOf([new Breadcrumb(key + BREADCRUMB_MESSAGE_POSTFIX, url)]);
}
}