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 {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 {LoadedRouterConfig, Route, Routes} from './config';
|
||||
|
@ -274,12 +274,11 @@ class ApplyRedirects {
|
|||
segments: UrlSegment[]): Observable<UrlSegmentGroup> {
|
||||
if (route.path === '**') {
|
||||
if (route.loadChildren) {
|
||||
return defer(
|
||||
() => this.configLoader.load(ngModule.injector, route)
|
||||
.pipe(map((cfg: LoadedRouterConfig) => {
|
||||
route._loadedConfig = cfg;
|
||||
return new UrlSegmentGroup(segments, {});
|
||||
})));
|
||||
return this.configLoader.load(ngModule.injector, route)
|
||||
.pipe(map((cfg: LoadedRouterConfig) => {
|
||||
route._loadedConfig = cfg;
|
||||
return new UrlSegmentGroup(segments, {});
|
||||
}));
|
||||
}
|
||||
|
||||
return of(new UrlSegmentGroup(segments, {}));
|
||||
|
|
|
@ -4090,7 +4090,7 @@ describe('Integration', () => {
|
|||
return of(delayMs).pipe(delay(delayMs), mapTo(true));
|
||||
}
|
||||
|
||||
@NgModule()
|
||||
@NgModule({imports: [RouterModule.forChild([{path: '', component: BlankCmp}])]})
|
||||
class LoadedModule {
|
||||
}
|
||||
|
||||
|
@ -4119,6 +4119,15 @@ describe('Integration', () => {
|
|||
return false;
|
||||
}
|
||||
},
|
||||
{
|
||||
provide: 'returnFalseAndNavigate',
|
||||
useFactory: (router: Router) => () => {
|
||||
log.push('returnFalseAndNavigate');
|
||||
router.navigateByUrl('/redirected');
|
||||
return false;
|
||||
},
|
||||
deps: [Router]
|
||||
},
|
||||
{
|
||||
provide: 'returnUrlTree',
|
||||
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(
|
||||
[Router, NgModuleFactoryLoader],
|
||||
(router: Router, loader: SpyNgModuleFactoryLoader) => {
|
||||
|
|
Loading…
Reference in New Issue