◐ Shell
clean mode source ↗

feat(router): Add ability to create `UrlTree` from any `ActivatedRouteSnapshot` by atscott · Pull Request #45877 · angular/angular

@atscott atscott changed the title feat(router): Add ability to create UrlTree from any `ActivatedRout… feat(router): Add ability to create UrlTree from any ActivatedRouteSnapshot

May 4, 2022
…eSnapshot`

This exposes a new function from the router public API that allows
developers to create a `UrlTree` from _any_ `ActivatedRouteSnapshot`.
The current Router APIs only support creating a `UrlTree` from an
`ActivatedRoute` which is both active _and_ materially appears in the
`UrlTree` (it cannot be an empty path named outlet). This is because the
implementation of the current way of creating a `UrlTree` attempts to
look up the `UrlSegment` of the `ActivatedRoute` in the currently active
`UrlTree` of the router. When this doesn't work, the `UrlTree` creation
fails.

Note that this API does not replace the current one. That would actually be a
breaking change but should be done at some point in the future (v15). That is,
`router.navigate` should call this new function. At that point, we can
remove `_lastPathIndex`, `_urlSegment`, and `_correctedPathIndex` from
the `ActivatedRoute`, along with all of the logic associated with
determining what those should be. In addition, this would unblock a fix
for angular#26081 because the `applyRedirects` and `recognize` operations
could be combined into one.  Overall, this would simplify logic in the router
and reduce code size. It also exposes core routing capabilities as a helper function
which were previously private API, which is a necessary step towards angular#42953.

As a stress test for this new function, it _was_ swapped in as the
default for `UrlTree` creation in angular#45859 and tested internally. The
results indicate that this function behaves correctly.

resolves angular#42191 (Tested directly)
resolves angular#38276 (The test with a guard covers this case)
resolves angular#22763 (Tested directly)

@atscott atscott marked this pull request as ready for review

May 18, 2022 16:20

AndrewKushnir

@atscott

AndrewKushnir

@atscott

AndrewKushnir

AndrewKushnir

jessicajaniuk

@atscott