mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-08 10:34:15 +00:00
add navigation resolver config
This commit is contained in:
@@ -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 {
|
||||
|
@@ -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: ""}
|
||||
}
|
||||
}
|
||||
|
27
src/app/core/breadcrumbs/navigation-breadcrumb.service.ts
Normal file
27
src/app/core/breadcrumbs/navigation-breadcrumb.service.ts
Normal 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)]);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user