@@ -17,8 +17,8 @@ import {fromPromise} from 'rxjs/observable/fromPromise';
17
17
import { of } from 'rxjs/observable/of' ;
18
18
import { concatMap } from 'rxjs/operator/concatMap' ;
19
19
import { every } from 'rxjs/operator/every' ;
20
+ import { first } from 'rxjs/operator/first' ;
20
21
import { map } from 'rxjs/operator/map' ;
21
- import { mergeAll } from 'rxjs/operator/mergeAll' ;
22
22
import { mergeMap } from 'rxjs/operator/mergeMap' ;
23
23
import { reduce } from 'rxjs/operator/reduce' ;
24
24
@@ -783,7 +783,7 @@ export class PreActivation {
783
783
checkGuards ( ) : Observable < boolean > {
784
784
if ( this . checks . length === 0 ) return of ( true ) ;
785
785
const checks$ = from ( this . checks ) ;
786
- const runningChecks$ = map . call ( checks$ , ( s : any ) => {
786
+ const runningChecks$ = mergeMap . call ( checks$ , ( s : any ) => {
787
787
if ( s instanceof CanActivate ) {
788
788
return andObservables (
789
789
from ( [ this . runCanActivateChild ( s . path ) , this . runCanActivate ( s . route ) ] ) ) ;
@@ -795,8 +795,7 @@ export class PreActivation {
795
795
throw new Error ( 'Cannot be reached' ) ;
796
796
}
797
797
} ) ;
798
- const mergedChecks$ = mergeAll . call ( runningChecks$ ) ;
799
- return every . call ( mergedChecks$ , ( result : any ) => result === true ) ;
798
+ return every . call ( runningChecks$ , ( result : any ) => result === true ) ;
800
799
}
801
800
802
801
resolveData ( ) : Observable < any > {
@@ -898,11 +897,13 @@ export class PreActivation {
898
897
if ( ! canActivate || canActivate . length === 0 ) return of ( true ) ;
899
898
const obs = map . call ( from ( canActivate ) , ( c : any ) => {
900
899
const guard = this . getToken ( c , future ) ;
900
+ let observable : Observable < boolean > ;
901
901
if ( guard . canActivate ) {
902
- return wrapIntoObservable ( guard . canActivate ( future , this . future ) ) ;
902
+ observable = wrapIntoObservable ( guard . canActivate ( future , this . future ) ) ;
903
903
} else {
904
- return wrapIntoObservable ( guard ( future , this . future ) ) ;
904
+ observable = wrapIntoObservable ( guard ( future , this . future ) ) ;
905
905
}
906
+ return first . call ( observable ) ;
906
907
} ) ;
907
908
return andObservables ( obs ) ;
908
909
}
@@ -918,11 +919,13 @@ export class PreActivation {
918
919
return andObservables ( map . call ( from ( canActivateChildGuards ) , ( d : any ) => {
919
920
const obs = map . call ( from ( d . guards ) , ( c : any ) => {
920
921
const guard = this . getToken ( c , c . node ) ;
922
+ let observable : Observable < boolean > ;
921
923
if ( guard . canActivateChild ) {
922
- return wrapIntoObservable ( guard . canActivateChild ( future , this . future ) ) ;
924
+ observable = wrapIntoObservable ( guard . canActivateChild ( future , this . future ) ) ;
923
925
} else {
924
- return wrapIntoObservable ( guard ( future , this . future ) ) ;
926
+ observable = wrapIntoObservable ( guard ( future , this . future ) ) ;
925
927
}
928
+ return first . call ( observable ) ;
926
929
} ) ;
927
930
return andObservables ( obs ) ;
928
931
} ) ) ;
@@ -938,16 +941,17 @@ export class PreActivation {
938
941
private runCanDeactivate ( component : Object , curr : ActivatedRouteSnapshot ) : Observable < boolean > {
939
942
const canDeactivate = curr && curr . _routeConfig ? curr . _routeConfig . canDeactivate : null ;
940
943
if ( ! canDeactivate || canDeactivate . length === 0 ) return of ( true ) ;
941
- const canDeactivate$ = map . call ( from ( canDeactivate ) , ( c : any ) => {
944
+ const canDeactivate$ = mergeMap . call ( from ( canDeactivate ) , ( c : any ) => {
942
945
const guard = this . getToken ( c , curr ) ;
946
+ let observable : Observable < boolean > ;
943
947
if ( guard . canDeactivate ) {
944
- return wrapIntoObservable ( guard . canDeactivate ( component , curr , this . curr ) ) ;
948
+ observable = wrapIntoObservable ( guard . canDeactivate ( component , curr , this . curr ) ) ;
945
949
} else {
946
- return wrapIntoObservable ( guard ( component , curr , this . curr ) ) ;
950
+ observable = wrapIntoObservable ( guard ( component , curr , this . curr ) ) ;
947
951
}
952
+ return first . call ( observable ) ;
948
953
} ) ;
949
- const merged$ = mergeAll . call ( canDeactivate$ ) ;
950
- return every . call ( merged$ , ( result : any ) => result === true ) ;
954
+ return every . call ( canDeactivate$ , ( result : any ) => result === true ) ;
951
955
}
952
956
953
957
private runResolve ( future : ActivatedRouteSnapshot ) : Observable < any > {
0 commit comments