From b2715501b04931925632478390203ce9e46bbdc5 Mon Sep 17 00:00:00 2001 From: Yury Bondarenko Date: Mon, 25 Nov 2024 16:49:12 +0100 Subject: [PATCH 1/3] Update tests to match --- .../shared/menu/providers/access-control.menu.spec.ts | 7 ++++--- .../shared/menu/providers/admin-search.menu.spec.ts | 2 +- src/app/shared/menu/providers/browse.menu.spec.ts | 7 ++++--- .../shared/menu/providers/community-list.menu.spec.ts | 2 +- src/app/shared/menu/providers/curation.menu.spec.ts | 2 +- src/app/shared/menu/providers/edit.menu.spec.ts | 7 ++++--- src/app/shared/menu/providers/export.menu.spec.ts | 10 ++++------ src/app/shared/menu/providers/health.menu.spec.ts | 2 +- src/app/shared/menu/providers/import.menu.spec.ts | 8 ++++---- src/app/shared/menu/providers/new.menu.spec.ts | 7 ++++--- src/app/shared/menu/providers/processes.menu.spec.ts | 2 +- src/app/shared/menu/providers/registries.menu.spec.ts | 7 ++++--- .../menu/providers/system-wide-alert.menu.spec.ts | 2 +- src/app/shared/menu/providers/workflow.menu.spec.ts | 2 +- 14 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/app/shared/menu/providers/access-control.menu.spec.ts b/src/app/shared/menu/providers/access-control.menu.spec.ts index d9284a75c4..878025065b 100644 --- a/src/app/shared/menu/providers/access-control.menu.spec.ts +++ b/src/app/shared/menu/providers/access-control.menu.spec.ts @@ -8,7 +8,7 @@ import { TestBed } from '@angular/core/testing'; import { MenuItemType } from '../menu-item-type.model'; -import { MenuSubSection, MenuTopSection } from './expandable-menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { AuthorizationDataServiceStub } from '../../testing/authorization-service.stub'; import { of as observableOf } from 'rxjs'; import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; @@ -17,7 +17,8 @@ import { AccessControlMenuProvider } from './access-control.menu'; import { ScriptDataService } from '../../../core/data/processes/script-data.service'; import { ScriptServiceStub } from '../../testing/script-service.stub'; -const expectedTopSection: MenuTopSection = { +const expectedTopSection: PartialMenuSection = { + visible: true, model: { type: MenuItemType.TEXT, text: 'menu.section.access_control', @@ -25,7 +26,7 @@ const expectedTopSection: MenuTopSection = { icon: 'key' }; -const expectedSubSections: MenuSubSection[] = [ +const expectedSubSections: PartialMenuSection[] = [ { visible: true, model: { diff --git a/src/app/shared/menu/providers/admin-search.menu.spec.ts b/src/app/shared/menu/providers/admin-search.menu.spec.ts index 0471215578..6862419408 100644 --- a/src/app/shared/menu/providers/admin-search.menu.spec.ts +++ b/src/app/shared/menu/providers/admin-search.menu.spec.ts @@ -7,7 +7,7 @@ */ import { TestBed } from '@angular/core/testing'; -import { PartialMenuSection } from '../menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { MenuItemType } from '../menu-item-type.model'; import { AdminSearchMenuProvider } from './admin-search.menu'; import { AuthorizationDataServiceStub } from '../../testing/authorization-service.stub'; diff --git a/src/app/shared/menu/providers/browse.menu.spec.ts b/src/app/shared/menu/providers/browse.menu.spec.ts index 20ac0f92be..1715645b4d 100644 --- a/src/app/shared/menu/providers/browse.menu.spec.ts +++ b/src/app/shared/menu/providers/browse.menu.spec.ts @@ -9,7 +9,7 @@ import { TestBed } from '@angular/core/testing'; import { BrowseMenuProvider } from './browse.menu'; import { MenuItemType } from '../menu-item-type.model'; -import { MenuSubSection, MenuTopSection } from './expandable-menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { BrowseService } from '../../../core/browse/browse.service'; import { BrowseServiceStub } from '../../testing/browse-service.stub'; import { ObjectCacheService } from '../../../core/cache/object-cache.service'; @@ -18,7 +18,8 @@ import { BrowseDefinition } from '../../../core/shared/browse-definition.model'; import { createSuccessfulRemoteDataObject$ } from '../../remote-data.utils'; import { createPaginatedList } from '../../testing/utils.test'; -const expectedTopSection: MenuTopSection = { +const expectedTopSection: PartialMenuSection = { + visible: true, model: { type: MenuItemType.TEXT, text: 'menu.section.browse_global', @@ -26,7 +27,7 @@ const expectedTopSection: MenuTopSection = { icon: 'globe', }; -const expectedSubSections: MenuSubSection[] = [ +const expectedSubSections: PartialMenuSection[] = [ { visible: true, model: { diff --git a/src/app/shared/menu/providers/community-list.menu.spec.ts b/src/app/shared/menu/providers/community-list.menu.spec.ts index b0e037d228..16d6af4e45 100644 --- a/src/app/shared/menu/providers/community-list.menu.spec.ts +++ b/src/app/shared/menu/providers/community-list.menu.spec.ts @@ -8,7 +8,7 @@ import { TestBed } from '@angular/core/testing'; import { CommunityListMenuProvider } from './community-list.menu'; -import { PartialMenuSection } from '../menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { MenuItemType } from '../menu-item-type.model'; const expectedSections: PartialMenuSection[] = [ diff --git a/src/app/shared/menu/providers/curation.menu.spec.ts b/src/app/shared/menu/providers/curation.menu.spec.ts index 5225091f75..7cfe9ef8e7 100644 --- a/src/app/shared/menu/providers/curation.menu.spec.ts +++ b/src/app/shared/menu/providers/curation.menu.spec.ts @@ -7,7 +7,7 @@ */ import { TestBed } from '@angular/core/testing'; -import { PartialMenuSection } from '../menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { MenuItemType } from '../menu-item-type.model'; import { AuthorizationDataServiceStub } from '../../testing/authorization-service.stub'; import { of as observableOf } from 'rxjs'; diff --git a/src/app/shared/menu/providers/edit.menu.spec.ts b/src/app/shared/menu/providers/edit.menu.spec.ts index b3204cc818..f47010d734 100644 --- a/src/app/shared/menu/providers/edit.menu.spec.ts +++ b/src/app/shared/menu/providers/edit.menu.spec.ts @@ -8,14 +8,15 @@ import { TestBed } from '@angular/core/testing'; import { MenuItemType } from '../menu-item-type.model'; -import { MenuSubSection, MenuTopSection } from './expandable-menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { AuthorizationDataServiceStub } from '../../testing/authorization-service.stub'; import { of as observableOf } from 'rxjs'; import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; import { EditMenuProvider } from './edit.menu'; -const expectedTopSection: MenuTopSection = { +const expectedTopSection: PartialMenuSection = { + visible: true, model: { type: MenuItemType.TEXT, text: 'menu.section.edit' @@ -23,7 +24,7 @@ const expectedTopSection: MenuTopSection = { icon: 'pencil', }; -const expectedSubSections: MenuSubSection[] = [ +const expectedSubSections: PartialMenuSection[] = [ { visible: true, model: { diff --git a/src/app/shared/menu/providers/export.menu.spec.ts b/src/app/shared/menu/providers/export.menu.spec.ts index 662622b594..72dfbe8167 100644 --- a/src/app/shared/menu/providers/export.menu.spec.ts +++ b/src/app/shared/menu/providers/export.menu.spec.ts @@ -8,7 +8,7 @@ import { TestBed } from '@angular/core/testing'; import { MenuItemType } from '../menu-item-type.model'; -import { MenuSubSection, MenuTopSection } from './expandable-menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { AuthorizationDataServiceStub } from '../../testing/authorization-service.stub'; import { of as observableOf } from 'rxjs'; import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; @@ -16,16 +16,16 @@ import { ScriptDataService } from '../../../core/data/processes/script-data.serv import { ScriptServiceStub } from '../../testing/script-service.stub'; import { ExportMenuProvider } from './export.menu'; -const expectedTopSection: MenuTopSection = { +const expectedTopSection: PartialMenuSection = { + visible: true, model: { type: MenuItemType.TEXT, text: 'menu.section.export', }, icon: 'file-export', - shouldPersistOnRouteChange: true, }; -const expectedSubSections: MenuSubSection[] = [ +const expectedSubSections: PartialMenuSection[] = [ { visible: true, model: { @@ -33,7 +33,6 @@ const expectedSubSections: MenuSubSection[] = [ text: 'menu.section.export_metadata', function: jasmine.any(Function) as any, }, - shouldPersistOnRouteChange: true, }, { visible: true, @@ -42,7 +41,6 @@ const expectedSubSections: MenuSubSection[] = [ text: 'menu.section.export_batch', function: jasmine.any(Function) as any, }, - shouldPersistOnRouteChange: true, } ]; diff --git a/src/app/shared/menu/providers/health.menu.spec.ts b/src/app/shared/menu/providers/health.menu.spec.ts index 6e10e3cc5f..ee0a649c10 100644 --- a/src/app/shared/menu/providers/health.menu.spec.ts +++ b/src/app/shared/menu/providers/health.menu.spec.ts @@ -7,7 +7,7 @@ */ import { TestBed } from '@angular/core/testing'; -import { PartialMenuSection } from '../menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { MenuItemType } from '../menu-item-type.model'; import { AuthorizationDataServiceStub } from '../../testing/authorization-service.stub'; import { of as observableOf } from 'rxjs'; diff --git a/src/app/shared/menu/providers/import.menu.spec.ts b/src/app/shared/menu/providers/import.menu.spec.ts index 08223f31d7..71e6a89325 100644 --- a/src/app/shared/menu/providers/import.menu.spec.ts +++ b/src/app/shared/menu/providers/import.menu.spec.ts @@ -8,7 +8,7 @@ import { TestBed } from '@angular/core/testing'; import { MenuItemType } from '../menu-item-type.model'; -import { MenuSubSection, MenuTopSection } from './expandable-menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { AuthorizationDataServiceStub } from '../../testing/authorization-service.stub'; import { of as observableOf } from 'rxjs'; import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; @@ -16,16 +16,16 @@ import { ImportMenuProvider } from './import.menu'; import { ScriptDataService } from '../../../core/data/processes/script-data.service'; import { ScriptServiceStub } from '../../testing/script-service.stub'; -const expectedTopSection: MenuTopSection = { +const expectedTopSection: PartialMenuSection = { + visible: true, model: { type: MenuItemType.TEXT, text: 'menu.section.import', }, icon: 'file-import', - shouldPersistOnRouteChange: true, }; -const expectedSubSections: MenuSubSection[] = [ +const expectedSubSections: PartialMenuSection[] = [ { visible: true, model: { diff --git a/src/app/shared/menu/providers/new.menu.spec.ts b/src/app/shared/menu/providers/new.menu.spec.ts index 6376b5e2d3..f98362ea8e 100644 --- a/src/app/shared/menu/providers/new.menu.spec.ts +++ b/src/app/shared/menu/providers/new.menu.spec.ts @@ -8,14 +8,15 @@ import { TestBed } from '@angular/core/testing'; import { MenuItemType } from '../menu-item-type.model'; -import { MenuSubSection, MenuTopSection } from './expandable-menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { NewMenuProvider } from './new.menu'; import { AuthorizationDataServiceStub } from '../../testing/authorization-service.stub'; import { of as observableOf } from 'rxjs'; import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; -const expectedTopSection: MenuTopSection = { +const expectedTopSection: PartialMenuSection = { + visible: true, model: { type: MenuItemType.TEXT, text: 'menu.section.new' @@ -23,7 +24,7 @@ const expectedTopSection: MenuTopSection = { icon: 'plus', }; -const expectedSubSections: MenuSubSection[] = [ +const expectedSubSections: PartialMenuSection[] = [ { visible: true, model: { diff --git a/src/app/shared/menu/providers/processes.menu.spec.ts b/src/app/shared/menu/providers/processes.menu.spec.ts index 78ff544a58..cef2f695eb 100644 --- a/src/app/shared/menu/providers/processes.menu.spec.ts +++ b/src/app/shared/menu/providers/processes.menu.spec.ts @@ -7,7 +7,7 @@ */ import { TestBed } from '@angular/core/testing'; -import { PartialMenuSection } from '../menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { MenuItemType } from '../menu-item-type.model'; import { AuthorizationDataServiceStub } from '../../testing/authorization-service.stub'; import { of as observableOf } from 'rxjs'; diff --git a/src/app/shared/menu/providers/registries.menu.spec.ts b/src/app/shared/menu/providers/registries.menu.spec.ts index b1aa981f7f..ef8f468039 100644 --- a/src/app/shared/menu/providers/registries.menu.spec.ts +++ b/src/app/shared/menu/providers/registries.menu.spec.ts @@ -8,7 +8,7 @@ import { TestBed } from '@angular/core/testing'; import { MenuItemType } from '../menu-item-type.model'; -import { MenuSubSection, MenuTopSection } from './expandable-menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { AuthorizationDataServiceStub } from '../../testing/authorization-service.stub'; import { of as observableOf } from 'rxjs'; import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; @@ -16,7 +16,8 @@ import { ScriptDataService } from '../../../core/data/processes/script-data.serv import { ScriptServiceStub } from '../../testing/script-service.stub'; import { RegistriesMenuProvider } from './registries.menu'; -const expectedTopSection: MenuTopSection = { +const expectedTopSection: PartialMenuSection = { + visible: true, model: { type: MenuItemType.TEXT, text: 'menu.section.registries', @@ -24,7 +25,7 @@ const expectedTopSection: MenuTopSection = { icon: 'list', }; -const expectedSubSections: MenuSubSection[] = [ +const expectedSubSections: PartialMenuSection[] = [ { visible: true, model: { diff --git a/src/app/shared/menu/providers/system-wide-alert.menu.spec.ts b/src/app/shared/menu/providers/system-wide-alert.menu.spec.ts index df5e126814..1cda898373 100644 --- a/src/app/shared/menu/providers/system-wide-alert.menu.spec.ts +++ b/src/app/shared/menu/providers/system-wide-alert.menu.spec.ts @@ -7,7 +7,7 @@ */ import { TestBed } from '@angular/core/testing'; -import { PartialMenuSection } from '../menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { MenuItemType } from '../menu-item-type.model'; import { AuthorizationDataServiceStub } from '../../testing/authorization-service.stub'; import { of as observableOf } from 'rxjs'; diff --git a/src/app/shared/menu/providers/workflow.menu.spec.ts b/src/app/shared/menu/providers/workflow.menu.spec.ts index 2886d0dbf3..5ed2af9d18 100644 --- a/src/app/shared/menu/providers/workflow.menu.spec.ts +++ b/src/app/shared/menu/providers/workflow.menu.spec.ts @@ -7,7 +7,7 @@ */ import { TestBed } from '@angular/core/testing'; -import { PartialMenuSection } from '../menu-provider'; +import { PartialMenuSection } from '../menu-provider.model'; import { MenuItemType } from '../menu-item-type.model'; import { AuthorizationDataServiceStub } from '../../testing/authorization-service.stub'; import { of as observableOf } from 'rxjs'; From 44d2450543efab8a220ee477e3a7bb0d1487f0e8 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 29 Nov 2024 15:15:51 +0100 Subject: [PATCH 2/3] 121550: Fixed dso edit menu crashing when dso isn't resolved yet --- src/app/shared/menu/providers/dso-option.menu.ts | 5 ----- src/app/shared/menu/providers/helper-providers/dso.menu.ts | 4 ++++ 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/app/shared/menu/providers/dso-option.menu.ts b/src/app/shared/menu/providers/dso-option.menu.ts index 3313f7ebca..0fba0e19ef 100644 --- a/src/app/shared/menu/providers/dso-option.menu.ts +++ b/src/app/shared/menu/providers/dso-option.menu.ts @@ -12,7 +12,6 @@ import { MenuItemType } from '../menu-item-type.model'; import { PartialMenuSection } from '../menu-provider.model'; import { DSpaceObjectPageMenuProvider } from './helper-providers/dso.menu'; import { DSpaceObject } from 'src/app/core/shared/dspace-object.model'; -import { hasValue } from '../../empty.util'; /** * Menu provider to create the parent wrapper menu of the various DSO page menu sections @@ -23,10 +22,6 @@ export class DsoOptionMenu extends DSpaceObjectPageMenuProvider { alwaysRenderExpandable = true; - protected isApplicable(dso: DSpaceObject): boolean { - return hasValue(dso); - } - getSectionsForContext(dso: DSpaceObject): Observable { return of([ { 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 9b2d8642fa..4736e65f41 100644 --- a/src/app/shared/menu/providers/helper-providers/dso.menu.ts +++ b/src/app/shared/menu/providers/helper-providers/dso.menu.ts @@ -40,4 +40,8 @@ export abstract class DSpaceObjectPageMenuProvider extends AbstractRouteContextM return dso.type.toString().toLowerCase(); } } + + protected isApplicable(dso: DSpaceObject): boolean { + return hasValue(dso); + } } From d85d5fbd71bcf02c3a536e7fcab63e3873eb5c5a Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 13 Dec 2024 12:25:39 +0100 Subject: [PATCH 3/3] 121550: Use IDs on the routes in order to assign AbstractRouteContextMenuProviders --- src/app/app.menus.ts | 32 ++++++++++++++----- .../collection-page-routing.module.ts | 4 +++ .../community-page-routing.module.ts | 4 +++ src/app/item-page/item-page-routing.module.ts | 7 ++++ src/app/shared/menu/menu-provider.model.ts | 7 ++-- src/app/shared/menu/menu-provider.service.ts | 5 +-- src/app/shared/menu/menu-route.model.ts | 9 ++++++ src/app/shared/menu/menu.structure.ts | 3 +- 8 files changed, 57 insertions(+), 14 deletions(-) create mode 100644 src/app/shared/menu/menu-route.model.ts diff --git a/src/app/app.menus.ts b/src/app/app.menus.ts index 7679db4c42..e530cfd55d 100644 --- a/src/app/app.menus.ts +++ b/src/app/app.menus.ts @@ -27,10 +27,8 @@ import { RegistriesMenuProvider } from './shared/menu/providers/registries.menu' import { StatisticsMenuProvider } from './shared/menu/providers/statistics.menu'; import { SystemWideAlertMenuProvider } from './shared/menu/providers/system-wide-alert.menu'; import { WorkflowMenuProvider } from './shared/menu/providers/workflow.menu'; -import { COMMUNITY_MODULE_PATH } from './community-page/community-page-routing-paths'; -import { COLLECTION_MODULE_PATH } from './collection-page/collection-page-routing-paths'; -import { ENTITY_MODULE_PATH, ITEM_MODULE_PATH } from './item-page/item-page-routing-paths'; import { DsoOptionMenu } from './shared/menu/providers/dso-option.menu'; +import { MenuRoute } from './shared/menu/menu-route.model'; export const MENUS = buildMenuStructure({ [MenuID.PUBLIC]: [ @@ -54,11 +52,29 @@ export const MENUS = buildMenuStructure({ ], [MenuID.DSO_EDIT]: [ DsoOptionMenu.withSubs([ - SubscribeMenuProvider.onRoute(COMMUNITY_MODULE_PATH, COLLECTION_MODULE_PATH), - DSpaceObjectEditMenuProvider.onRoute(COMMUNITY_MODULE_PATH, COLLECTION_MODULE_PATH, ITEM_MODULE_PATH, ENTITY_MODULE_PATH), - VersioningMenuProvider.onRoute(ITEM_MODULE_PATH, ENTITY_MODULE_PATH), - OrcidMenuProvider.onRoute(ITEM_MODULE_PATH, ENTITY_MODULE_PATH), - ClaimMenuProvider.onRoute(ITEM_MODULE_PATH, ENTITY_MODULE_PATH, COLLECTION_MODULE_PATH), + SubscribeMenuProvider.onRoute( + MenuRoute.SIMPLE_COMMUNITY_PAGE, + MenuRoute.SIMPLE_COLLECTION_PAGE, + ), + DSpaceObjectEditMenuProvider.onRoute( + MenuRoute.SIMPLE_COMMUNITY_PAGE, + MenuRoute.SIMPLE_COLLECTION_PAGE, + MenuRoute.SIMPLE_ITEM_PAGE, + MenuRoute.FULL_ITEM_PAGE, + ), + VersioningMenuProvider.onRoute( + MenuRoute.SIMPLE_ITEM_PAGE, + MenuRoute.FULL_ITEM_PAGE, + ), + OrcidMenuProvider.onRoute( + MenuRoute.SIMPLE_ITEM_PAGE, + MenuRoute.FULL_ITEM_PAGE, + ), + ClaimMenuProvider.onRoute( + MenuRoute.SIMPLE_ITEM_PAGE, + MenuRoute.FULL_ITEM_PAGE, + MenuRoute.SIMPLE_COLLECTION_PAGE, + ), ]), ], }); diff --git a/src/app/collection-page/collection-page-routing.module.ts b/src/app/collection-page/collection-page-routing.module.ts index 7930c1ae6f..51d70ac8f1 100644 --- a/src/app/collection-page/collection-page-routing.module.ts +++ b/src/app/collection-page/collection-page-routing.module.ts @@ -19,6 +19,7 @@ import { DeleteCollectionPageComponent } from './delete-collection-page/delete-c import { ItemTemplatePageResolver } from './edit-item-template-page/item-template-page.resolver'; import { ThemedEditItemTemplatePageComponent } from './edit-item-template-page/themed-edit-item-template-page.component'; import { ThemedCollectionPageComponent } from './themed-collection-page.component'; +import { MenuRoute } from '../shared/menu/menu-route.model'; @NgModule({ imports: [ @@ -62,6 +63,9 @@ import { ThemedCollectionPageComponent } from './themed-collection-page.componen path: '', component: ThemedCollectionPageComponent, pathMatch: 'full', + data: { + menuRoute: MenuRoute.SIMPLE_COLLECTION_PAGE, + }, } ], }, diff --git a/src/app/community-page/community-page-routing.module.ts b/src/app/community-page/community-page-routing.module.ts index 006493c02c..e05314ce54 100644 --- a/src/app/community-page/community-page-routing.module.ts +++ b/src/app/community-page/community-page-routing.module.ts @@ -15,6 +15,7 @@ import { CreateCommunityPageComponent } from './create-community-page/create-com import { CreateCommunityPageGuard } from './create-community-page/create-community-page.guard'; import { DeleteCommunityPageComponent } from './delete-community-page/delete-community-page.component'; import { ThemedCommunityPageComponent } from './themed-community-page.component'; +import { MenuRoute } from '../shared/menu/menu-route.model'; @NgModule({ imports: [ @@ -48,6 +49,9 @@ import { ThemedCommunityPageComponent } from './themed-community-page.component' path: '', component: ThemedCommunityPageComponent, pathMatch: 'full', + data: { + menuRoute: MenuRoute.SIMPLE_COMMUNITY_PAGE, + }, } ], }, diff --git a/src/app/item-page/item-page-routing.module.ts b/src/app/item-page/item-page-routing.module.ts index 1c93dab744..2b11c42381 100644 --- a/src/app/item-page/item-page-routing.module.ts +++ b/src/app/item-page/item-page-routing.module.ts @@ -18,6 +18,7 @@ import { OrcidPageGuard } from './orcid-page/orcid-page.guard'; import { ThemedItemPageComponent } from './simple/themed-item-page.component'; import { VersionPageComponent } from './version-page/version-page/version-page.component'; import { VersionResolver } from './version-page/version.resolver'; +import { MenuRoute } from '../shared/menu/menu-route.model'; @NgModule({ imports: [ @@ -34,10 +35,16 @@ import { VersionResolver } from './version-page/version.resolver'; path: '', component: ThemedItemPageComponent, pathMatch: 'full', + data: { + menuRoute: MenuRoute.SIMPLE_ITEM_PAGE, + }, }, { path: 'full', component: ThemedFullItemPageComponent, + data: { + menuRoute: MenuRoute.FULL_ITEM_PAGE, + }, }, { path: ITEM_EDIT_PATH, diff --git a/src/app/shared/menu/menu-provider.model.ts b/src/app/shared/menu/menu-provider.model.ts index 247963f172..8a517934b9 100644 --- a/src/app/shared/menu/menu-provider.model.ts +++ b/src/app/shared/menu/menu-provider.model.ts @@ -11,6 +11,7 @@ import { Observable, } from 'rxjs'; import { MenuID } from './menu-id.model'; import { MenuItemModels } from './menu-section.model'; import { Type } from '@angular/core'; +import { MenuRoute } from './menu-route.model'; /** * Partial menu section @@ -52,7 +53,7 @@ export interface MenuProvider { */ export class MenuProviderTypeWithOptions { providerType: Type; - paths?: string[]; + paths?: MenuRoute[]; childProviderTypes?: (Type | MenuProviderTypeWithOptions)[]; } @@ -90,7 +91,7 @@ export abstract class AbstractMenuProvider implements MenuProvider { * This will be automatically set based on the paths added based on the paths provided through the 'onRoute' static * method in the app.menus.ts file */ - activePaths?: string[]; + activePaths?: MenuRoute[]; /** * The ID of the parent provider of this provider. @@ -110,7 +111,7 @@ export abstract class AbstractMenuProvider implements MenuProvider { * Static method to be called from the app.menus.ts file to define paths on which this provider should the active * @param paths - The paths on which the sections of this provider should be active */ - public static onRoute(...paths: string[]): MenuProviderTypeWithOptions { + public static onRoute(...paths: MenuRoute[]): MenuProviderTypeWithOptions { if (!AbstractMenuProvider.isPrototypeOf(this)) { throw new Error( 'onRoute should only be called from concrete subclasses of AbstractMenuProvider' diff --git a/src/app/shared/menu/menu-provider.service.ts b/src/app/shared/menu/menu-provider.service.ts index 9b5d5e73a5..c0f34be481 100644 --- a/src/app/shared/menu/menu-provider.service.ts +++ b/src/app/shared/menu/menu-provider.service.ts @@ -16,6 +16,7 @@ import { AbstractMenuProvider, PartialMenuSection } from './menu-provider.model' import { MenuState } from './menu-state.model'; import { MenuService } from './menu.service'; import { MENU_PROVIDER } from './menu.structure'; +import { MenuRoute } from './menu-route.model'; /** * Service that is responsible for adding and removing the menu sections created by the providers, both for @@ -126,8 +127,8 @@ export class MenuProviderService { .filter(provider => { let shouldUpdate = false; if (!provider.shouldPersistOnRouteChange && isNotEmpty(provider.activePaths)) { - provider.activePaths.forEach((path) => { - if (state.url.includes(path)) { + provider.activePaths.forEach((path: MenuRoute) => { + if (route.data.menuRoute === path) { shouldUpdate = true; } }); diff --git a/src/app/shared/menu/menu-route.model.ts b/src/app/shared/menu/menu-route.model.ts new file mode 100644 index 0000000000..db0fe03169 --- /dev/null +++ b/src/app/shared/menu/menu-route.model.ts @@ -0,0 +1,9 @@ +/** + * The menu route IDs that can be used for route resolvers + */ +export enum MenuRoute { + SIMPLE_COMMUNITY_PAGE = 'simple-community-page', + SIMPLE_COLLECTION_PAGE = 'simple-collection-page', + SIMPLE_ITEM_PAGE = 'simple-item-page', + FULL_ITEM_PAGE = 'full-item-page', +} diff --git a/src/app/shared/menu/menu.structure.ts b/src/app/shared/menu/menu.structure.ts index 581fff6c9a..81103ce182 100644 --- a/src/app/shared/menu/menu.structure.ts +++ b/src/app/shared/menu/menu.structure.ts @@ -10,6 +10,7 @@ import { MenuID } from './menu-id.model'; import { AbstractMenuProvider, MenuProviderTypeWithOptions } from './menu-provider.model'; import { MenuProviderService } from './menu-provider.service'; import { hasValue, isNotEmpty } from '../empty.util'; +import { MenuRoute } from './menu-route.model'; export const MENU_PROVIDER = new InjectionToken('MENU_PROVIDER'); @@ -75,7 +76,7 @@ function processProviderType(providers: Provider[], menuID: string, providerType * @param hasSubProviders - Whether this provider has sub providers * @param paths - The paths this provider should be active on if relevant */ -function addProviderToList(providers: Provider[], providerType: Type, menuID: string, index: number, parentID?: string, hasSubProviders?: boolean, paths?: string[]) { +function addProviderToList(providers: Provider[], providerType: Type, menuID: string, index: number, parentID?: string, hasSubProviders?: boolean, paths?: MenuRoute[]) { const resolvedProvider = { provide: MENU_PROVIDER, multi: true,