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 {RouterModule} from '@angular/router';
import {RouterModule, Routes} from '@angular/router';
import {LdnServicesOverviewComponent} from './ldn-services-directory/ldn-services-directory.component';
import {LdnServiceNewComponent} from './ldn-service-new/ldn-service-new.component';
import {LdnServiceFormEditComponent} from './ldn-service-form-edit/ldn-service-form-edit.component';
import {NavigationBreadcrumbResolver} from "../../core/breadcrumbs/navigation-breadcrumb.resolver";
import {I18nBreadcrumbResolver} from "../../core/breadcrumbs/i18n-breadcrumb.resolver";
@NgModule({
imports: [
RouterModule.forChild([
const moduleRoutes: Routes = [
{
path: '',
pathMatch: 'full',
component: LdnServicesOverviewComponent,
resolve: {breadcrumb: NavigationBreadcrumbResolver},
resolve: {breadcrumb: I18nBreadcrumbResolver},
data: {title: 'ldn-registered-services.title', breadcrumbKey: 'ldn-registered-services.new'},
},
{
@@ -27,7 +27,17 @@ import {NavigationBreadcrumbResolver} from "../../core/breadcrumbs/navigation-br
component: LdnServiceFormEditComponent,
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 {

View File

@@ -1,8 +1,9 @@
import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model';
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 { 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
@@ -11,9 +12,13 @@ import { currentPathFromSnapshot } from '../../shared/utils/route.utils';
providedIn: 'root'
})
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
* @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot
@@ -21,7 +26,11 @@ export class NavigationBreadcrumbResolver implements Resolve<BreadcrumbConfig<st
* @returns BreadcrumbConfig object
*/
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): BreadcrumbConfig<string> {
console.log(route, state);
return null
const path = route.routeConfig.path;
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)]);
}
}