mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 18:14:17 +00:00
add navigation resolver config
This commit is contained in:
@@ -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 {
|
||||||
|
@@ -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: ""}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
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