GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | |||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | |||||||||||||||||||||||||||||
GeezerVison is showing github.com — feat(router): Cascading route support by matthewerwin · Pull Request #16416 · angular/angular Conversation
|
|
Thanks for your pull request. It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). 📝 Please visit https://cla.developers.google.com/ to sign. Once you've signed, please reply here (e.g.
|
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I signed it! (CLA) |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
CLAs look good, thanks! |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
FYI ci/circleci is failing the LINT on the commit message but that is for someone else's commit that's already on angular/4.0.x (INVALID COMMIT MSG: "release: cut the 4.0.1 release"). |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@vicb do you have any commentary on this since you've been involved quite a bit in the router? on a separate note while I was in there I noticed that exceptions were used during the normal paths of execution vs architecting to return a complex object or using an observable/promise reject/error. I'm up for tackling that re-factoring if you guys are on board once this request is merged. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Super excited for this as I am converting a legacy application and initially thought this was how Guards worked so I am currently in a bind. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@the-destro if you get a chance can you pull this into your project and verify it works as you expect for your particular use-case? If not, I'd like to catch any specific conditions you're addressing while this pull request is pending merge. Here is what you run to get this pre-merged package running: npm uninstall @angular/router --save That will run this build to test then anytime you run "npm install" after it will just revert to the main branch or you can re-run uninstall and install without specifying the separate registry. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@matthewerwin upon quick inspection it looks like it works exactly as I need! To give further context to my route setup: http://stackoverflow.com/questions/43919064/finely-specify-routes-in-angular-2 |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
As I understood from the description, this can be used insted of #14515 right? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Is there an ETA on when this can be merged/released? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@vicb what's the word? Anything I can do to get this merged in more quickly? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Thanks for this PR and this is a great feature. Sorry for the delay on getting back to you.
I've added a couple comments. There's also been changes requiring a rebase in order to merge this. Please go ahead and address these, then we can get this merged.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
0cc8cc4 to
0bcd592
Compare
|
@jasonaden I squashed the commits and rebased against 4.0.x for this pull request. I also fixed the errors (The 4.0.x branch on angular errors on ./build.sh due to some things that appeared to be refactored/fixed in 4.1.x). I figured everyone would prefer 4.0.x builds without issues when pulling that branch. Separately I've also created pull requests for 4.2.x and 4.3.x and all of them use the purely rxjs style flow instead of the recursive function call that was in the initial review. That should make comparisons between the existing guard code and the cascading flow guard code very easy to identify. I cleaned up everything you mentioned in the Code Review & with the change to maintain the recognize( ) signature that also reduced the total changes in the pull request. :-) |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
You probably saw the note in one of the other PRs, but take a look at the new comment about mergeMapTo and a piece of code that should fix it.
Then let's get this rebased against master branch and the PR should also be against master as that's where all merging happens (we create the 4.x versions by cherry picking the appropriate commits from master).
Hopefully you could do that today as I would like to go over this PR with someone else tomorrow and see if we can get you a final review.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
@jasonaden I'll make it happen today. Will issue the new PR against master and test out if the suggested change works. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
0bcd592 to
47715d3
Compare
|
@CaerusKaru thanks for the update -- this PR has been lingering forever and not sure why. We made all the changes originally requested by the angular team and the interior of the router hasn't changed much other than a minor refactor in all the time since the PR was initially entered. Let me know how we can support getting this moved forward so I don't have to maintain separate binaries for our platforms. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@kara @IgorMinar happy new year! What steps do we need to take to get this on track for review? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@atscott I noticed to pull approve not request 22 days ago...any ETA? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
This would be super useful if you are creating a new version of a feature and you want to keep it on the same route but have it protected by a feature flag guard. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@josh18 exactly. Now if they would just finish the review and merge it already 🤦♂️ |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
In addition to the comments on the code, the default behavior for routing should remain the same. That is, if the first matched navigation fails (i.e. because of a guard returning false), then the navigation is cancelled. The cascading/fallback approach should be protected by some configuration (like in the router config).
As an example, applications could very well rely on the fact that if you are in one place in the application and you attempt to navigate to somewhere that is prevented by a guard, the navigation is cancelled. Instead, this PR could cause the navigation to fall back to the ** route that displays something like 'page not found'. While this may be desirable behavior for some/many/most people, changing the default behavior would be undesirable to others.
Edit: Maybe a better example is a guard which prevents you from leaving a page because you have unsaved changes. You would want this navigation to continue to be cancelled and definitely not want this navigation to fall back to the ** route.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@atscott thank you for the thorough review. I will have a chance to go through in detail over the next few days and respond to each comment or resolve as suggested. As to your last separate remark on backwards compatibility that’s easily done with a flag and is actually a reason why recognize.ts was modified...if it returns a single result (which then fails) then behavior should be identical to the original code but I will double check it. Related to the choice of two dimensional array that is a matter of per iteration and cumulative selection of routes. The design is to pipe all matching routes via the observable to allow fall-through evaluation in navigate. So likely that will need to remain the same but I will look at it very thoroughly & beef up some test cases as needed to trial other techniques if necessary. Look forward to making this as robust as necessary so if you have extra test cases or other things to assist I’m happy to wrap into a secondary branch to verify before folding them in here Thanks a million! Will turn around on my side as quickly as I can. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@atscott the PR review modifications are in & I also did a force push b/c CircleCI required it. I am however seeing a failure in the AIO router examples project on an E2E test scenario here. I'll be able to look at it tomorrow but in the meantime if you can review and verify that the feedback you gave on the PR was interpreted accurately that would be greatly appreciated! If you happen to see what's going on with that E2E test lmk...I'm just too tired to see it clearly at the moment. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Again, thank you so much for taking the feedback and iterating on the approach here. I think we're much closer now to an implementation that we can easily explain and defend. On those lines, thinking about what it would take to get this submitted:
cascade is true: https://angular.io/guide/router#guardsIf it returns false, the navigation process stops and the user stays put.
cascade to be true. There needs to be a config which controls this and the default should be cascade === false so we don't break existing router setups.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
@atscott thanks for the fast turnaround time on the review. I added the code to make cascading choice via config and default to I also added some documentation per your request & updated the router API to include the enable/disable of the cascade feature via the ExtraOptions available on the router config. Please advise if I missed anything. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
global presubmit passed, meaning the default config (i.e. the current router behavior) is fully backwards compatible. I believe the lint failure is unrelated. A rebase should resolve it. Would you mind investigating the other two failures and squashing the commits into one? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@atscott I went ahead and rebased and squashed to a single commit. The lint failure was due to an earlier rebase when lint failures were present in The other failures you refer to are also happening on |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@matthewerwin Looks like you just need to update the bundle size limits in this file. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I am generally not a fan of multiple syntaxes to achieve the same result. It may be confusing to users who expect different behavior for different options. I can see how cascade: 'cascade' looks silly, so maybe the options should be only boolean true and 'legacy', without false and 'cascade'.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Repeating a property name is common in HTML. I don't think this harms anything here and is in alignment with the other field settings. In the event the behavior is switched to default cascading in a future version it would also be odd not to support false -- if it's going to be more restrictive then makes sense to limit to just T/F though I'm not sure how the current setup does any harm as its converted by setupRouter/setupTestRouter before it hits any conditional router code.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Hi @matthewerwin, first of all thanks for your contribution and apologies for us not being more responsive here.
It sucks that this PR has been stuck in PR "review purgatory" for this long. I see that Joost is looking at it now which is somewhat good. But I also see that this PR changes the router API in a non-trivial way so we’ll need to sit down and think through the implications of this change. There is no design attached to this change, so doing the design retroactively kind of sucks for all of us. I can’t make promises about this landing, but we can spend a bit of time trying to understand what is driving this change and if the change is aligned with where we’d like to go.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
@IgorMinar thanks for taking the time to post. @JoostK and @atscott both provided some great feedback these past weeks which has all been incorporated. I understand what you're staying about non-trival new behavior. Take a look at the latest comparisons though and you will see that this is restricted to the presence of a cascade property on the router config. The changes to router.ts were also pared back substantially to reduce the surface area as well. A last note about this is that actually the number of line changes is a bit deceiving. The guard block was all moved into a concatMap, the recognize.ts logic was moved into a loop, and a couple others like this result in the diff showing a lot of changes but much of that is essentially whitespace changes |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Just a few style suggestions. FYI, @matthewerwin, #35566 on the router doc is hopefully close to landing. Thanks for updating the doc too!
Edit:
Reviewed-for: global-docs-approvers
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Added cascading routes capability to the router, added new test cases. Previous behavior resulted in dead routes (e.g. direct navigation to a route with canActivate=>false resulted in blank page). Additionally this feature improvement provides conditional routing based on params and other information that could be used to dynamically enable/disable a route while ensuring the user always falls through to a valid route. This PR passes all latest tests and should be backwards compatible.
|
@atscott and @IgorMinar - what are we going to do about this PR? It is now very stale and old. Perhaps it is not something we will ever integrate? Or perhaps it can be updated and merged? Either way it can't get into 12.0.x, so it would now be targeting 12.1.0 or later. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I’m happy to get it rebased in for latest. I feel like every time the internal team gets ready to merge it though there is some distraction. We are also very busy on our side to keep going through the process to prepare to merge only to have it fall off priority for v10, v11 or whatever Just need someone to champion it on the Angular team to help us make sure it goes all the way through to save us all a lot of time. Let me know who I can work with and we will get this rolled up this week. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
We recently landed the While the implementation we went with in the end differed from the approach taken here, the attention and feedback from this PR was a major factor in driving discussions and ultimately the solution to these use-cases. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
This issue has been automatically locked due to inactivity. Read more about our automatic conversation locking policy. This action has been performed automatically by a bot. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.