-
Notifications
You must be signed in to change notification settings - Fork 917
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: navigate callback running after patch #2736
fix: navigate callback running after patch #2736
Conversation
@@ -407,7 +407,7 @@ export default class LiveSocket { | |||
DOM.findPhxSticky(document).forEach(el => newMainEl.appendChild(el)) | |||
this.outgoingMainEl.replaceWith(newMainEl) | |||
this.outgoingMainEl = null | |||
callback && requestAnimationFrame(callback) | |||
callback && requestAnimationFrame(() => callback(linkRef)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
alternate approach...would it be possible to not call commitPendingLink on line 405 until later in the callback? Possible problems with that would be all the lines above (406-409) get run even if another navigation event is currently taking place, but not sure of a good example of what that would look like.
this.registerNewLocation(window.location) | ||
this.replaceMain(href, flash, (linkRef) => { | ||
if(linkRef == this.linkRef) { | ||
Browser.pushState(linkState, {type: "redirect", id: this.main.id, scroll: scroll}, href) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need to worry about possibly losing this scroll position if we don't run this?
This looks great! Can you undo your priv build changes? We don't accept PRs artifacts for security reasons. Thanks! |
e0194d4
to
86e38c2
Compare
86e38c2
to
32cf1a8
Compare
Done! |
you're my hero! ❤️❤️❤️🐥🔥 |
Fixes issue #2615
Previous behavior
If you navigate from one live view to another, and that liveview immediately does a patch redirect, the navigate will override the patch because it runs its browser history pushes in a browser animation frame that runs on the next repaint.
What changed
This change simply checks if the linkRef has changed by the time the animation frame runs, and if it has, we don't need to run the browser updates. We still call the "onDone" from the withPageLoading wrapper to make sure the events get fired successfully.
Image shows that it directs from second page directly to home with the query param set
Test script