Revert "fix(router): adjust UrlTree redirect to replace URL if in eager update (#31168)" (#31344)

This reverts commit 15e397816f.

Reason: it broke an internal g3 app.

PR Close #31344
This commit is contained in:
Alex Rickabaugh 2019-06-28 11:19:59 -07:00
parent f57e77eeb4
commit 0de5d79bf6
2 changed files with 10 additions and 67 deletions

View File

@ -739,26 +739,10 @@ export class Router {
const navCancel =
new NavigationCancel(t.id, this.serializeUrl(t.extractedUrl), e.message);
eventsSubject.next(navCancel);
t.resolve(false);
// When redirecting, we need to delay resolving the navigation promise and push
// it to the redirect navigation
if (!redirecting) {
t.resolve(false);
} else {
// setTimeout is required so this navigation finishes with the return EMPTY
// below. If it isn't allowed to finish processing, there can be multiple
// navigations to the same URL.
setTimeout(() => {
const mergedTree = this.urlHandlingStrategy.merge(e.url, this.rawUrlTree);
const extras = {
skipLocationChange: t.extras.skipLocationChange,
replaceUrl: this.urlUpdateStrategy === 'eager'
};
return this.scheduleNavigation(
mergedTree, 'imperative', null, extras,
{resolve: t.resolve, reject: t.reject, promise: t.promise});
}, 0);
if (redirecting) {
this.navigateByUrl(e.url);
}
/* All other errors should reset to the router's internal URL reference to the
@ -1072,8 +1056,7 @@ export class Router {
private scheduleNavigation(
rawUrl: UrlTree, source: NavigationTrigger, restoredState: RestoredState|null,
extras: NavigationExtras,
priorPromise?: {resolve: any, reject: any, promise: Promise<boolean>}): Promise<boolean> {
extras: NavigationExtras): Promise<boolean> {
const lastNavigation = this.getTransition();
// If the user triggers a navigation imperatively (e.g., by using navigateByUrl),
// and that navigation results in 'replaceState' that leads to the same URL,
@ -1098,20 +1081,13 @@ export class Router {
return Promise.resolve(true); // return value is not used
}
let resolve: any;
let reject: any;
let promise: Promise<boolean>;
if (priorPromise) {
resolve = priorPromise.resolve;
reject = priorPromise.reject;
promise = priorPromise.promise;
let resolve: any = null;
let reject: any = null;
} else {
promise = new Promise<boolean>((res, rej) => {
resolve = res;
reject = rej;
});
}
const promise = new Promise<boolean>((res, rej) => {
resolve = res;
reject = rej;
});
const id = ++this.navigationId;
this.setTransition({

View File

@ -2464,39 +2464,6 @@ describe('Integration', () => {
[NavigationEnd, '/'],
]);
})));
it('replaces URL when URL is updated eagerly so back button can still work',
fakeAsync(inject([Router, Location], (router: Router, location: SpyLocation) => {
router.urlUpdateStrategy = 'eager';
router.resetConfig([
{path: '', component: SimpleCmp},
{path: 'one', component: RouteCmp, canActivate: ['returnUrlTree']},
{path: 'redirected', component: SimpleCmp}
]);
const fixture = createRoot(router, RootCmp);
router.navigateByUrl('/one');
tick();
expect(location.path()).toEqual('/redirected');
expect(location.urlChanges).toEqual(['replace: /', '/one', 'replace: /redirected']);
})));
it('should resolve navigateByUrl promise after redirect finishes',
fakeAsync(inject([Router, Location], (router: Router, location: SpyLocation) => {
let resolvedPath = '';
router.urlUpdateStrategy = 'eager';
router.resetConfig([
{path: '', component: SimpleCmp},
{path: 'one', component: RouteCmp, canActivate: ['returnUrlTree']},
{path: 'redirected', component: SimpleCmp}
]);
const fixture = createRoot(router, RootCmp);
router.navigateByUrl('/one').then(v => { resolvedPath = location.path(); });
tick();
expect(resolvedPath).toBe('/redirected');
})));
});
describe('runGuardsAndResolvers', () => {