diff --git a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.html b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.html index 2321da0204..c14344e5d5 100644 --- a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.html +++ b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.html @@ -1,7 +1,9 @@
-
+
+ +
@@ -17,6 +19,8 @@
+ +
diff --git a/src/app/browse-by/browse-by-routing.module.ts b/src/app/browse-by/browse-by-routing.module.ts index 72d78f13fd..e4ed19b0a3 100644 --- a/src/app/browse-by/browse-by-routing.module.ts +++ b/src/app/browse-by/browse-by-routing.module.ts @@ -4,13 +4,17 @@ import { BrowseByGuard } from './browse-by-guard'; import { BrowseByDSOBreadcrumbResolver } from './browse-by-dso-breadcrumb.resolver'; import { BrowseByI18nBreadcrumbResolver } from './browse-by-i18n-breadcrumb.resolver'; import { ThemedBrowseBySwitcherComponent } from './browse-by-switcher/themed-browse-by-switcher.component'; +import { DSOEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver'; @NgModule({ imports: [ RouterModule.forChild([ { path: '', - resolve: { breadcrumb: BrowseByDSOBreadcrumbResolver }, + resolve: { + breadcrumb: BrowseByDSOBreadcrumbResolver, + menu: DSOEditMenuResolver + }, children: [ { path: ':id', diff --git a/src/app/shared/dso-page/dso-edit-menu.resolver.spec.ts b/src/app/shared/dso-page/dso-edit-menu.resolver.spec.ts index ac4c4dae17..1ae91ddb2b 100644 --- a/src/app/shared/dso-page/dso-edit-menu.resolver.spec.ts +++ b/src/app/shared/dso-page/dso-edit-menu.resolver.spec.ts @@ -126,7 +126,7 @@ describe('DSOEditMenuResolver', () => { }); describe('resolve', () => { - it('should create all menus when a dso is found', (done) => { + it('should create all menus when a dso is found based on the route id param', (done) => { spyOn(resolver, 'getDsoMenus').and.returnValue( [observableOf(dummySections1), observableOf(dummySections2)] ); @@ -140,6 +140,41 @@ describe('DSOEditMenuResolver', () => { ] } ); + expect(dSpaceObjectDataService.findById).toHaveBeenCalledWith('test-uuid', true, false); + expect(resolver.getDsoMenus).toHaveBeenCalled(); + done(); + }); + }); + it('should create all menus when a dso is found based on the route scope query param when no id param is present', (done) => { + spyOn(resolver, 'getDsoMenus').and.returnValue( + [observableOf(dummySections1), observableOf(dummySections2)] + ); + const routeWithScope = { + data: { + menu: { + 'statistics': [{ + id: 'statistics-dummy-1', + active: false, + visible: true, + model: null + }] + } + }, + params: {}, + queryParams: {scope: 'test-scope-uuid'}, + }; + + resolver.resolve(routeWithScope as any, null).subscribe(resolved => { + expect(resolved).toEqual( + { + ...route.data.menu, + [MenuID.DSO_EDIT]: [ + ...dummySections1.map((menu) => Object.assign(menu, {id: menu.id + '-test-scope-uuid'})), + ...dummySections2.map((menu) => Object.assign(menu, {id: menu.id + '-test-scope-uuid'})) + ] + } + ); + expect(dSpaceObjectDataService.findById).toHaveBeenCalledWith('test-scope-uuid', true, false); expect(resolver.getDsoMenus).toHaveBeenCalled(); done(); }); @@ -182,7 +217,7 @@ describe('DSOEditMenuResolver', () => { expect(menuList[0].visible).toEqual(true); expect(menuList[0].model.type).toEqual(MenuItemType.LINK); expect((menuList[0].model as LinkMenuItemModel).text).toEqual('item.page.edit'); - expect((menuList[0].model as LinkMenuItemModel).link).toEqual('test-url/edit/metadata'); + expect((menuList[0].model as LinkMenuItemModel).link).toEqual('/items/test-uuid/edit/metadata'); expect(menuList[0].icon).toEqual('pencil-alt'); done(); }); diff --git a/src/app/shared/dso-page/dso-edit-menu.resolver.ts b/src/app/shared/dso-page/dso-edit-menu.resolver.ts index 2bf1aa08b5..25c4f3fdeb 100644 --- a/src/app/shared/dso-page/dso-edit-menu.resolver.ts +++ b/src/app/shared/dso-page/dso-edit-menu.resolver.ts @@ -14,8 +14,9 @@ import { map, switchMap } from 'rxjs/operators'; import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service'; import { URLCombiner } from '../../core/url-combiner/url-combiner'; import { DsoVersioningModalService } from './dso-versioning-modal-service/dso-versioning-modal.service'; -import { hasValue } from '../empty.util'; +import { hasNoValue, hasValue } from '../empty.util'; import { MenuSection } from '../menu/menu.reducer'; +import { getDSORoute } from '../../app-routing-paths'; /** * Creates the menus for the dspace object pages @@ -38,8 +39,11 @@ export class DSOEditMenuResolver implements Resolve<{ [key: string]: MenuSection * Initialise all dspace object related menus */ resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<{ [key: string]: MenuSection[] }> { - const uuid = route.params.id; - return this.dSpaceObjectDataService.findById(uuid, true, false).pipe( + let id = route.params.id; + if (hasNoValue(id) && hasValue(route.queryParams.scope)) { + id = route.queryParams.scope; + } + return this.dSpaceObjectDataService.findById(id, true, false).pipe( getFirstCompletedRemoteData(), switchMap((dsoRD) => { if (dsoRD.hasSucceeded) { @@ -88,7 +92,7 @@ export class DSOEditMenuResolver implements Resolve<{ [key: string]: MenuSection model: { type: MenuItemType.LINK, text: this.getDsoType(dso) + '.page.edit', - link: new URLCombiner(state.url, 'edit', 'metadata').toString() + link: new URLCombiner(getDSORoute(dso), 'edit', 'metadata').toString() } as LinkMenuItemModel, icon: 'pencil-alt', index: 1