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 eb15ac9523..8f4cbbeb29 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 @@
-
diff --git a/src/app/browse-by/browse-by-routing.module.ts b/src/app/browse-by/browse-by-routing.module.ts
index 5788d3cc70..bb67dc65ae 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 035e398a63..82085ff86a 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
@@ -127,7 +127,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)]
);
@@ -141,6 +141,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();
});
@@ -183,7 +218,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 8c8d5a7142..ba695a002c 100644
--- a/src/app/shared/dso-page/dso-edit-menu.resolver.ts
+++ b/src/app/shared/dso-page/dso-edit-menu.resolver.ts
@@ -13,10 +13,11 @@ 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 { MenuID } from '../menu/menu-id.model';
import { MenuItemType } from '../menu/menu-item-type.model';
import { MenuSection } from '../menu/menu-section.model';
+import { getDSORoute } from '../../app-routing-paths';
/**
* Creates the menus for the dspace object pages
@@ -39,8 +40,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) {
@@ -89,7 +93,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