1- import { Injectable } from '@angular/core' ;
1+ import { Inject , Injectable , PLATFORM_ID } from '@angular/core' ;
22import { ActivatedRoute , ActivatedRouteSnapshot , Resolve , RouterStateSnapshot } from '@angular/router' ;
3- import { combineLatest as observableCombineLatest , Observable } from 'rxjs' ;
3+ import { combineLatest as observableCombineLatest , Observable , of } from 'rxjs' ;
44import { MenuID } from './shared/menu/menu-id.model' ;
55import { MenuState } from './shared/menu/menu-state.model' ;
66import { MenuItemType } from './shared/menu/menu-item-type.model' ;
@@ -52,11 +52,12 @@ import { environment } from '../environments/environment';
5252import { SectionDataService } from './core/layout/section-data.service' ;
5353import { Section } from './core/layout/models/section.model' ;
5454import { NOTIFICATIONS_RECITER_SUGGESTION_PATH } from './admin/admin-notifications/admin-notifications-routing-paths' ;
55+ import { isPlatformBrowser } from '@angular/common' ;
5556import { ConfigurationDataService } from './core/data/configuration-data.service' ;
5657import { ConfigurationProperty } from './core/shared/configuration-property.model' ;
5758
5859/**
59- * Creates all of the app's menus
60+ * Creates all the app's menus
6061 */
6162@Injectable ( {
6263 providedIn : 'root'
@@ -66,6 +67,7 @@ export class MenuResolver implements Resolve<boolean> {
6667 private activatedRouteLastChild : ActivatedRoute ;
6768
6869 constructor (
70+ @Inject ( PLATFORM_ID ) public platformId : any ,
6971 protected route : ActivatedRoute ,
7072 protected menuService : MenuService ,
7173 protected authorizationService : AuthorizationDataService ,
@@ -80,6 +82,9 @@ export class MenuResolver implements Resolve<boolean> {
8082 * Initialize all menus
8183 */
8284 resolve ( route : ActivatedRouteSnapshot , state : RouterStateSnapshot ) : Observable < boolean > {
85+ if ( ! isPlatformBrowser ( this . platformId ) ) {
86+ return of ( true ) ;
87+ }
8388 return observableCombineLatest ( [
8489 this . createPublicMenu$ ( ) ,
8590 this . createAdminMenu$ ( ) ,
@@ -318,7 +323,7 @@ export class MenuResolver implements Resolve<boolean> {
318323 id : 'new_item' ,
319324 parentID : 'new' ,
320325 active : false ,
321- visible : isSiteAdmin ,
326+ visible : isSiteAdmin || isCommunityAdmin || isCollectionAdmin ,
322327 model : {
323328 type : MenuItemType . ONCLICK ,
324329 text : 'menu.section.new_item' ,
@@ -451,12 +456,24 @@ export class MenuResolver implements Resolve<boolean> {
451456 // icon: 'cogs',
452457 // index: 9
453458 // },
454-
459+ /* Admin Search */
460+ {
461+ id : 'admin_search' ,
462+ active : false ,
463+ visible : isSiteAdmin || isCollectionAdmin || isCommunityAdmin ,
464+ model : {
465+ type : MenuItemType . LINK ,
466+ text : 'menu.section.admin_search' ,
467+ link : '/admin/search'
468+ } as LinkMenuItemModel ,
469+ index : 5 ,
470+ icon : 'search' ,
471+ } ,
455472 /* Processes */
456473 {
457474 id : 'processes' ,
458475 active : false ,
459- visible : isSiteAdmin ,
476+ visible : isSiteAdmin || isCommunityAdmin || isCollectionAdmin ,
460477 model : {
461478 type : MenuItemType . LINK ,
462479 text : 'menu.section.processes' ,
@@ -532,8 +549,14 @@ export class MenuResolver implements Resolve<boolean> {
532549 ] ;
533550 menuList . forEach ( ( menuSection ) => this . menuService . addSection ( MenuID . ADMIN , menuSection ) ) ;
534551
535- this . authorizationService . isAuthorized ( FeatureID . AdministratorOf ) . pipe (
536- filter ( ( authorized : boolean ) => authorized ) ,
552+ observableCombineLatest ( [
553+ this . authorizationService . isAuthorized ( FeatureID . AdministratorOf ) ,
554+ this . authorizationService . isAuthorized ( FeatureID . IsCommunityAdmin ) ,
555+ this . authorizationService . isAuthorized ( FeatureID . IsCollectionAdmin ) ,
556+ ] ) . pipe (
557+ filter ( ( [ isAdmin , isCommunityAdmin , isCollectionAdmin ] ) =>
558+ isAdmin || isCollectionAdmin || isCommunityAdmin
559+ ) ,
537560 take ( 1 ) ,
538561 switchMap ( ( ) => this . scriptDataService . scriptWithNameExistsAndCanExecute ( METADATA_EXPORT_SCRIPT_NAME ) ) ,
539562 filter ( ( metadataExportScriptExists : boolean ) => metadataExportScriptExists ) ,
@@ -659,8 +682,14 @@ export class MenuResolver implements Resolve<boolean> {
659682 const menuList = [ ] ;
660683 menuList . forEach ( ( menuSection ) => this . menuService . addSection ( MenuID . ADMIN , menuSection ) ) ;
661684
662- this . authorizationService . isAuthorized ( FeatureID . AdministratorOf ) . pipe (
663- filter ( ( authorized : boolean ) => authorized ) ,
685+ observableCombineLatest ( [
686+ this . authorizationService . isAuthorized ( FeatureID . AdministratorOf ) ,
687+ this . authorizationService . isAuthorized ( FeatureID . IsCommunityAdmin ) ,
688+ this . authorizationService . isAuthorized ( FeatureID . IsCollectionAdmin ) ,
689+ ] ) . pipe (
690+ filter ( ( [ isAdmin , isCommunityAdmin , isCollectionAdmin ] ) =>
691+ isAdmin || isCollectionAdmin || isCommunityAdmin
692+ ) ,
664693 take ( 1 ) ,
665694 switchMap ( ( ) => this . scriptDataService . scriptWithNameExistsAndCanExecute ( METADATA_IMPORT_SCRIPT_NAME ) ) ,
666695 filter ( ( metadataImportScriptExists : boolean ) => metadataImportScriptExists ) ,
@@ -761,19 +790,6 @@ export class MenuResolver implements Resolve<boolean> {
761790 link : '/admin/notifications/' + NOTIFICATIONS_RECITER_SUGGESTION_PATH
762791 } as LinkMenuItemModel ,
763792 } ,
764- /* Admin Search */
765- {
766- id : 'admin_search' ,
767- active : false ,
768- visible : authorized ,
769- model : {
770- type : MenuItemType . LINK ,
771- text : 'menu.section.admin_search' ,
772- link : '/admin/search'
773- } as LinkMenuItemModel ,
774- icon : 'search' ,
775- index : 5
776- } ,
777793 /* Registries */
778794 {
779795 id : 'registries' ,
0 commit comments