Update the unstable_dataStrategy API to allow for more advanced implementations (#11943)
Rename unstable_HandlerResult to unstable_DataStrategyResult
The return signature has changed from a parallel array of unstable_DataStrategyResult[] (parallel to matches) to a key/value object of routeId => unstable_DataStrategyResult
This allows you to more easily decide to opt-into or out-of revalidating data that may not have been revalidated by default (via match.shouldLoad)
⚠️ This is a breaking change if you've currently adopted unstable_dataStrategy
Added a new fetcherKey parameter to unstable_dataStrategy to allow differentiation from navigational and fetcher calls
You should now return/throw a result from your handlerOverride instead of returning a DataStrategyResult
If you are aggregating the results of match.resolve() into a final results object you should not need to think about the DataStrategyResult type
If you are manually filling your results object from within your handlerOverride, then you will need to assign a DataStrategyResult as the value so React Router knows if it's a successful execution or an error.
Preserve view transition through redirects (#11925)
Fix blocker usage when blocker.proceed is called quickly/synchronously (#11930)
Preserve pending view transitions through a router revalidation call (#11917)
1.19.1
Patch Changes
Fog of War: Update unstable_patchRoutesOnMiss logic so that we call the method when we match routes with dynamic param or splat segments in case there exists a higher-scoring static route that we've not yet discovered. (#11883)
We also now leverage an internal FIFO queue of previous paths we've already called unstable_patchRouteOnMiss against so that we don't re-call on subsequent navigations to the same path
Rename unstable_patchRoutesOnMiss to unstable_patchRoutesOnNavigation to match new behavior (#11888)
1.19.0
Minor Changes
Add a new replace(url, init?) alternative to redirect(url, init?) that performs a history.replaceState instead of a history.pushState on client-side navigation redirects (#11811)
Add a new unstable_data() API for usage with Remix Single Fetch (#11836)
This API is not intended for direct usage in React Router SPA applications
It is primarily intended for usage with createStaticHandler.query() to allow loaders/actions to return arbitrary data + status/headers without forcing the serialization of data into a Response instance
This allows for more advanced serialization tactics via unstable_dataStrategy such as serializing via turbo-stream in Remix Single Fetch
⚠️ This removes the status field from HandlerResult
If you need to return a specific status from unstable_dataStrategy you should instead do so via unstable_data()
Patch Changes
Fix internal cleanup of interrupted fetchers to avoid invalid revalidations on navigations (#11839)
When a fetcher.load is interrupted by an action submission, we track it internally and force revalidation once the action completes
We previously only cleared out this internal tracking info on a successful navigation submission
Therefore, if the fetcher.load was interrupted by a fetcher.submit, then we wouldn't remove it from this internal tracking info on successful load (incorrectly)
And then on the next navigation it's presence in the internal tracking would automatically trigger execution of the fetcher.load again, ignoring any shouldRevalidate logic
This fix cleans up the internal tracking so it applies to both navigation submission and fetcher submissions
Fix initial hydration behavior when using future.v7_partialHydration along with unstable_patchRoutesOnMiss (#11838)
During initial hydration, router.state.matches will now include any partial matches so that we can render ancestor HydrateFallback components
You can trigger a rebase of this PR by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps @remix-run/router from 1.16.1 to 1.19.2.
Changelog
Sourced from
@remix-run/router
's changelog.... (truncated)
Commits
eeb86ab
chore: Update version for release (#11968)7cbe349
chore: Update version for release (pre) (#11955)6483515
Merge branch 'release-next' into v605612a3
unstable_dataStrategy refactor for better single fetch support (#11943)766f07d
Preserve view transitions through navigation redirects (#11925)5651176
fix: Wait for restore url navigation to complete before proceeding (#11930)ae99a1c
Preserve pending view transitions through a router revalidation call (#11917)2c6726b
Add unit test for Remix GH issue 8298 (#11916)04d09c3
chore: Update version for release (#11895)f806fa4
chore: Update version for release (pre) (#11889)You can trigger a rebase of this PR by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show