diff --git a/src/app/shared/menu/providers/helper-providers/dso.menu.spec.ts b/src/app/shared/menu/providers/helper-providers/dso.menu.spec.ts index 5d214da5f0..63ed018248 100644 --- a/src/app/shared/menu/providers/helper-providers/dso.menu.spec.ts +++ b/src/app/shared/menu/providers/helper-providers/dso.menu.spec.ts @@ -83,7 +83,7 @@ describe('DSpaceObjectPageMenuProvider', () => { }); }); - it('return undefined when no DSO is present on the current route', (done) => { + it('return the first parent DSO when no DSO is present on the current route', (done) => { const route = { data: {}, parent: { @@ -96,7 +96,7 @@ describe('DSpaceObjectPageMenuProvider', () => { } as any; provider.getRouteContext(route, undefined).subscribe((dso) => { - expect(dso).toBeUndefined(); + expect(dso).toEqual(item); done(); }); }); diff --git a/src/app/shared/menu/providers/helper-providers/dso.menu.ts b/src/app/shared/menu/providers/helper-providers/dso.menu.ts index 4736e65f41..2cd32a7a7e 100644 --- a/src/app/shared/menu/providers/helper-providers/dso.menu.ts +++ b/src/app/shared/menu/providers/helper-providers/dso.menu.ts @@ -8,9 +8,9 @@ import { ActivatedRouteSnapshot, RouterStateSnapshot, } from '@angular/router'; import { Observable, of } from 'rxjs'; import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; +import { hasNoValue, hasValue } from '../../../empty.util'; import { AbstractRouteContextMenuProvider } from './route-context.menu'; import { RemoteData } from '../../../../core/data/remote-data'; -import { hasValue } from '../../../empty.util'; /** * Helper provider for DSpace object page based menus @@ -21,7 +21,13 @@ export abstract class DSpaceObjectPageMenuProvider extends AbstractRouteContextM * Retrieve the dso from the current route data */ public getRouteContext(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { - const dsoRD: RemoteData = route.data.dso; + let dsoRD: RemoteData = route.data.dso; + // Check if one of the parent routes has a DSO + while (hasValue(route.parent) && hasNoValue(dsoRD)) { + route = route.parent; + dsoRD = route.data.dso; + } + if (hasValue(dsoRD) && dsoRD.hasSucceeded && hasValue(dsoRD.payload)) { return of(dsoRD.payload); } else { diff --git a/src/app/shared/menu/providers/statistics.menu.ts b/src/app/shared/menu/providers/statistics.menu.ts index 356f2f53d2..7bc1083e03 100644 --- a/src/app/shared/menu/providers/statistics.menu.ts +++ b/src/app/shared/menu/providers/statistics.menu.ts @@ -7,16 +7,13 @@ */ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, RouterStateSnapshot, } from '@angular/router'; import { Observable, of, } from 'rxjs'; -import { hasNoValue, hasValue } from '../../empty.util'; +import { hasValue } from '../../empty.util'; import { MenuItemType } from '../menu-item-type.model'; import { PartialMenuSection } from '../menu-provider.model'; -import { AbstractRouteContextMenuProvider } from './helper-providers/route-context.menu'; import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { RemoteData } from '../../../core/data/remote-data'; import { getDSORoute } from '../../../app-routing-paths'; - +import { DSpaceObjectPageMenuProvider } from './helper-providers/dso.menu'; /** * Menu provider to create the statistics menu section depending on the page it is on @@ -24,22 +21,7 @@ import { getDSORoute } from '../../../app-routing-paths'; * In all other cases the menu section will contain a link to the repository wide statistics */ @Injectable() -export class StatisticsMenuProvider extends AbstractRouteContextMenuProvider { - - public getRouteContext(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { - let dsoRD: RemoteData = route.data.dso; - // Check if one of the parent routes has a DSO - while (hasValue(route.parent) && hasNoValue(dsoRD)) { - route = route.parent; - dsoRD = route.data.dso; - } - - if (hasValue(dsoRD) && dsoRD.hasSucceeded && hasValue(dsoRD.payload)) { - return of(dsoRD.payload); - } else { - return of(undefined); - } - } +export class StatisticsMenuProvider extends DSpaceObjectPageMenuProvider { public getSectionsForContext(dso: DSpaceObject): Observable { @@ -66,4 +48,8 @@ export class StatisticsMenuProvider extends AbstractRouteContextMenuProvider