refactor(router): Remove `defer` as it's not needed anymore (#38781)
This change contains the test from #38780 and also removes `defer` from the `apply_redirects` logic because the change that introduced `concatMap` instead of `map`...`concatAll` makes `defer` unnecessary. PR Close #38781
This commit is contained in:
parent
3406ec15a4
commit
281865bbcf
|
@ -7,7 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {Injector, NgModuleRef} from '@angular/core';
|
import {Injector, NgModuleRef} from '@angular/core';
|
||||||
import {defer, EmptyError, from, Observable, Observer, of} from 'rxjs';
|
import {EmptyError, from, Observable, Observer, of} from 'rxjs';
|
||||||
import {catchError, combineAll, concatMap, first, map, mergeMap, tap} from 'rxjs/operators';
|
import {catchError, combineAll, concatMap, first, map, mergeMap, tap} from 'rxjs/operators';
|
||||||
|
|
||||||
import {LoadedRouterConfig, Route, Routes} from './config';
|
import {LoadedRouterConfig, Route, Routes} from './config';
|
||||||
|
@ -274,12 +274,11 @@ class ApplyRedirects {
|
||||||
segments: UrlSegment[]): Observable<UrlSegmentGroup> {
|
segments: UrlSegment[]): Observable<UrlSegmentGroup> {
|
||||||
if (route.path === '**') {
|
if (route.path === '**') {
|
||||||
if (route.loadChildren) {
|
if (route.loadChildren) {
|
||||||
return defer(
|
return this.configLoader.load(ngModule.injector, route)
|
||||||
() => this.configLoader.load(ngModule.injector, route)
|
.pipe(map((cfg: LoadedRouterConfig) => {
|
||||||
.pipe(map((cfg: LoadedRouterConfig) => {
|
route._loadedConfig = cfg;
|
||||||
route._loadedConfig = cfg;
|
return new UrlSegmentGroup(segments, {});
|
||||||
return new UrlSegmentGroup(segments, {});
|
}));
|
||||||
})));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return of(new UrlSegmentGroup(segments, {}));
|
return of(new UrlSegmentGroup(segments, {}));
|
||||||
|
|
|
@ -4090,7 +4090,7 @@ describe('Integration', () => {
|
||||||
return of(delayMs).pipe(delay(delayMs), mapTo(true));
|
return of(delayMs).pipe(delay(delayMs), mapTo(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@NgModule()
|
@NgModule({imports: [RouterModule.forChild([{path: '', component: BlankCmp}])]})
|
||||||
class LoadedModule {
|
class LoadedModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4119,6 +4119,15 @@ describe('Integration', () => {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
provide: 'returnFalseAndNavigate',
|
||||||
|
useFactory: (router: Router) => () => {
|
||||||
|
log.push('returnFalseAndNavigate');
|
||||||
|
router.navigateByUrl('/redirected');
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
deps: [Router]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
provide: 'returnUrlTree',
|
provide: 'returnUrlTree',
|
||||||
useFactory: (router: Router) => () => {
|
useFactory: (router: Router) => () => {
|
||||||
|
@ -4132,7 +4141,23 @@ describe('Integration', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should wait for higher priority guards to be resolved',
|
it('should only execute canLoad guards of routes being activated', fakeAsync(() => {
|
||||||
|
const router = TestBed.inject(Router);
|
||||||
|
|
||||||
|
router.resetConfig([
|
||||||
|
{path: 'lazy', canLoad: ['guard1'], loadChildren: () => of(LoadedModule)},
|
||||||
|
{path: 'redirected', component: SimpleCmp},
|
||||||
|
// canLoad should not run for this route because 'lazy' activates first
|
||||||
|
{path: '', canLoad: ['returnFalseAndNavigate'], loadChildren: () => of(LoadedModule)},
|
||||||
|
]);
|
||||||
|
|
||||||
|
router.navigateByUrl('/lazy');
|
||||||
|
tick(5);
|
||||||
|
expect(log.length).toEqual(1);
|
||||||
|
expect(log).toEqual(['guard1']);
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should execute canLoad guards',
|
||||||
fakeAsync(inject(
|
fakeAsync(inject(
|
||||||
[Router, NgModuleFactoryLoader],
|
[Router, NgModuleFactoryLoader],
|
||||||
(router: Router, loader: SpyNgModuleFactoryLoader) => {
|
(router: Router, loader: SpyNgModuleFactoryLoader) => {
|
||||||
|
|
Loading…
Reference in New Issue