-
Notifications
You must be signed in to change notification settings - Fork 432
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
Reload page if failed form changes tracked content #759
Conversation
When a form submission fails with a client error, the response from the form replaces the current page content. In Turbo 7.1.x, whenever this replacement would affect resources marked with `data-turbo-track="reload"`, a reload of the page is triggered instead. In 7.2.0, we do not perform this reload. Instead, the form's response is discarded. This difference can affect situations like expired sessions, where the previous behaviour of reloading the page would cause a new session to be established. If we instead allow the response to be discarded, actions can fail silently. This commit changes the behaviour to reload the current page when `reload` is called outside of a current visit, in order to match the behaviour of 7.1, and to not discard the response from the form submission.
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.
Thanks @kevinmcconnell.
It looks like this changed in #601. This updated the browser adapter to depend on its own location
(assigned during visit proposal) instead of window.location
when reloading the page. The thing is, we won't have a visit if we're rendering in response to a failed form submission. Falling back to window.location
seems reasonable to restore the previous behavior.
Ideally we'd use window.location
always in the context of reloading and page invalidation. The intent is that it behave exactly like the browser's native "reload". It operates on the current location, not the intended one.
@packagethief thanks for the review! 🙏
Yes, I totally agree. I think it's worth shipping this small fix first to match the previous behaviour. But we can also look into removing the |
Definitely. |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [@hotwired/turbo](https://turbo.hotwired.dev) ([source](https://togithub.com/hotwired/turbo)) | [`7.2.0` -> `7.2.4`](https://renovatebot.com/diffs/npm/@hotwired%2fturbo/7.2.0/7.2.4) | [![age](https://badges.renovateapi.com/packages/npm/@hotwired%2fturbo/7.2.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/@hotwired%2fturbo/7.2.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/@hotwired%2fturbo/7.2.4/compatibility-slim/7.2.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/@hotwired%2fturbo/7.2.4/confidence-slim/7.2.0)](https://docs.renovatebot.com/merge-confidence/) | | [lit](https://lit.dev/) ([source](https://togithub.com/lit/lit)) | [`2.3.1` -> `2.4.0`](https://renovatebot.com/diffs/npm/lit/2.3.1/2.4.0) | [![age](https://badges.renovateapi.com/packages/npm/lit/2.4.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/lit/2.4.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/lit/2.4.0/compatibility-slim/2.3.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/lit/2.4.0/confidence-slim/2.3.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>hotwired/turbo</summary> ### [`v7.2.4`](https://togithub.com/hotwired/turbo/releases/tag/v7.2.4) [Compare Source](https://togithub.com/hotwired/turbo/compare/v7.2.3...v7.2.4) #### What's Changed - Update history during same-page Visits by [@​seanpdoyle](https://togithub.com/seanpdoyle) in [https://github.com/hotwired/turbo/pull/763](https://togithub.com/hotwired/turbo/pull/763) - Check last rendered location for same-page visits by [@​kevinmcconnell](https://togithub.com/kevinmcconnell) in [https://github.com/hotwired/turbo/pull/772](https://togithub.com/hotwired/turbo/pull/772) **Full Changelog**: hotwired/turbo@v7.2.2...v7.2.4 ### [`v7.2.3`](https://togithub.com/hotwired/turbo/compare/v7.2.2...v7.2.3) [Compare Source](https://togithub.com/hotwired/turbo/compare/v7.2.2...v7.2.3) ### [`v7.2.2`](https://togithub.com/hotwired/turbo/releases/tag/v7.2.2) [Compare Source](https://togithub.com/hotwired/turbo/compare/v7.2.1...v7.2.2) #### What's Changed - Fix double `before-fetch-request` dispatch during reload by [@​seanpdoyle](https://togithub.com/seanpdoyle) in [https://github.com/hotwired/turbo/pull/740](https://togithub.com/hotwired/turbo/pull/740) - Ignore UJS `<a>` clicks and `<form>` submissions by [@​seanpdoyle](https://togithub.com/seanpdoyle) in [https://github.com/hotwired/turbo/pull/744](https://togithub.com/hotwired/turbo/pull/744) - Cache PageSnapshot with original HTML from the frame's page by [@​manuelpuyol](https://togithub.com/manuelpuyol) in [https://github.com/hotwired/turbo/pull/746](https://togithub.com/hotwired/turbo/pull/746) - Fix data-turbo-action was not respected on requestSubmit() event from javascript by [@​seanpdoyle](https://togithub.com/seanpdoyle) in [https://github.com/hotwired/turbo/pull/749](https://togithub.com/hotwired/turbo/pull/749) - Reload page if failed form changes tracked content by [@​kevinmcconnell](https://togithub.com/kevinmcconnell) in [https://github.com/hotwired/turbo/pull/759](https://togithub.com/hotwired/turbo/pull/759) (Note: 7.2.1 got pushed to npm as a copy of 7.2.0 as a mistake, hence the extra jump in the tiny version). **Full Changelog**: hotwired/turbo@v7.2.0...v7.2.2 ### [`v7.2.1`](https://togithub.com/hotwired/turbo/compare/v7.2.0...v7.2.1) [Compare Source](https://togithub.com/hotwired/turbo/compare/v7.2.0...v7.2.1) </details> <details> <summary>lit/lit</summary> ### [`v2.4.0`](https://togithub.com/lit/lit/blob/HEAD/packages/lit/CHANGELOG.md#​240) [Compare Source](https://togithub.com/lit/lit/compare/[email protected]) ##### Minor Changes - [#​3318](https://togithub.com/lit/lit/pull/3318) [`21313077`](https://togithub.com/lit/lit/commit/21313077669c19b3d631a50825b8a01dae1dd0d4) - Adds an `isServer` variable export to `lit` and `lit-html/is-server.js` which will be `true` in Node and `false` in the browser. This can be used when authoring components to change behavior based on whether or not the component is executing in an SSR context. ##### Patch Changes - [#​3320](https://togithub.com/lit/lit/pull/3320) [`305852d4`](https://togithub.com/lit/lit/commit/305852d4a4f51174301720985de98fdbf8674648) - The `lit` package now specifies and "types" export condition allowing TypeScript `moduleResolution` to be `nodenext`. - Updated dependencies \[[`21313077`](https://togithub.com/lit/lit/commit/21313077669c19b3d631a50825b8a01dae1dd0d4)]: - [email protected] </details> --- ### Configuration 📅 **Schedule**: Branch creation - "before 6am on monday" in timezone Australia/Sydney, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/google/osv.dev). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC45LjEiLCJ1cGRhdGVkSW5WZXIiOiIzNC45LjEifQ==--> Co-authored-by: Rex P <[email protected]>
When a form submission fails with a client error, the response from the form replaces the current page content. In Turbo 7.1, whenever this replacement would affect resources marked with
data-turbo-track="reload"
, a reload of the page is triggered instead.In 7.2.0, we do not perform this reload. Instead, the form's response is discarded. This happens because the content replacement does not occur during a visit, and so we have no new location to reload.
This difference can affect situations like expired sessions, where reloading the page would cause a new session to be established. If we instead allow the response to be discarded, actions can fail silently.
This commit changes the behaviour to reload the current page when
reload
is called outside of a current visit, in order to match the behaviour of 7.1, and to not discard the response from the form submission.