1- import { ActivatedRouteSnapshot , CanActivate , RouterStateSnapshot } from '@angular/router' ;
1+ import { ActivatedRouteSnapshot , CanActivate , Router , RouterStateSnapshot } from '@angular/router' ;
22import { Injectable } from '@angular/core' ;
33import { DSpaceObjectDataService } from '../core/data/dspace-object-data.service' ;
44import { hasNoValue , hasValue } from '../shared/empty.util' ;
55import { map , switchMap } from 'rxjs/operators' ;
6- import { getFirstSucceededRemoteData , getFirstSucceededRemoteDataPayload } from '../core/shared/operators' ;
6+ import { getFirstCompletedRemoteData , getFirstSucceededRemoteData , } from '../core/shared/operators' ;
77import { TranslateService } from '@ngx-translate/core' ;
88import { Observable , of as observableOf } from 'rxjs' ;
99import { BrowseDefinitionDataService } from '../core/browse/browse-definition-data.service' ;
1010import { BrowseDefinition } from '../core/shared/browse-definition.model' ;
11+ import { RemoteData } from '../core/data/remote-data' ;
12+ import { PAGE_NOT_FOUND_PATH } from '../app-routing-paths' ;
1113
1214@Injectable ( )
1315/**
@@ -17,35 +19,45 @@ export class BrowseByGuard implements CanActivate {
1719
1820 constructor ( protected dsoService : DSpaceObjectDataService ,
1921 protected translate : TranslateService ,
20- protected browseDefinitionService : BrowseDefinitionDataService ) {
22+ protected browseDefinitionService : BrowseDefinitionDataService ,
23+ protected router : Router ,
24+ ) {
2125 }
2226
23- canActivate ( route : ActivatedRouteSnapshot , state : RouterStateSnapshot ) {
27+ canActivate ( route : ActivatedRouteSnapshot , state : RouterStateSnapshot ) : Observable < boolean > {
2428 const title = route . data . title ;
2529 const id = route . params . id || route . queryParams . id || route . data . id ;
26- let browseDefinition$ : Observable < BrowseDefinition > ;
30+ let browseDefinition$ : Observable < BrowseDefinition | undefined > ;
2731 if ( hasNoValue ( route . data . browseDefinition ) && hasValue ( id ) ) {
28- browseDefinition$ = this . browseDefinitionService . findById ( id ) . pipe ( getFirstSucceededRemoteDataPayload ( ) ) ;
32+ browseDefinition$ = this . browseDefinitionService . findById ( id ) . pipe (
33+ getFirstCompletedRemoteData ( ) ,
34+ map ( ( browseDefinitionRD : RemoteData < BrowseDefinition > ) => browseDefinitionRD . payload ) ,
35+ ) ;
2936 } else {
3037 browseDefinition$ = observableOf ( route . data . browseDefinition ) ;
3138 }
3239 const scope = route . queryParams . scope ;
3340 const value = route . queryParams . value ;
3441 const metadataTranslated = this . translate . instant ( 'browse.metadata.' + id ) ;
3542 return browseDefinition$ . pipe (
36- switchMap ( ( browseDefinition ) => {
37- if ( hasValue ( scope ) ) {
38- const dsoAndMetadata$ = this . dsoService . findById ( scope ) . pipe ( getFirstSucceededRemoteData ( ) ) ;
39- return dsoAndMetadata$ . pipe (
40- map ( ( dsoRD ) => {
41- const name = dsoRD . payload . name ;
42- route . data = this . createData ( title , id , browseDefinition , name , metadataTranslated , value , route ) ;
43- return true ;
44- } )
45- ) ;
43+ switchMap ( ( browseDefinition : BrowseDefinition | undefined ) => {
44+ if ( hasValue ( browseDefinition ) ) {
45+ if ( hasValue ( scope ) ) {
46+ const dsoAndMetadata$ = this . dsoService . findById ( scope ) . pipe ( getFirstSucceededRemoteData ( ) ) ;
47+ return dsoAndMetadata$ . pipe (
48+ map ( ( dsoRD ) => {
49+ const name = dsoRD . payload . name ;
50+ route . data = this . createData ( title , id , browseDefinition , name , metadataTranslated , value , route ) ;
51+ return true ;
52+ } )
53+ ) ;
54+ } else {
55+ route . data = this . createData ( title , id , browseDefinition , '' , metadataTranslated , value , route ) ;
56+ return observableOf ( true ) ;
57+ }
4658 } else {
47- route . data = this . createData ( title , id , browseDefinition , '' , metadataTranslated , value , route ) ;
48- return observableOf ( true ) ;
59+ void this . router . navigate ( [ PAGE_NOT_FOUND_PATH ] ) ;
60+ return observableOf ( false ) ;
4961 }
5062 } )
5163 ) ;
0 commit comments