@@ -1152,6 +1152,7 @@ export function createRouter(init: RouterInit): Router {
1152
1152
location : Location ,
1153
1153
opts ?: {
1154
1154
submission ?: Submission ;
1155
+ fetcherSubmission ?: Submission ;
1155
1156
overrideNavigation ?: Navigation ;
1156
1157
pendingError ?: ErrorResponse ;
1157
1158
startUninterruptedRevalidation ?: boolean ;
@@ -1263,6 +1264,7 @@ export function createRouter(init: RouterInit): Router {
1263
1264
matches ,
1264
1265
loadingNavigation ,
1265
1266
opts && opts . submission ,
1267
+ opts && opts . fetcherSubmission ,
1266
1268
opts && opts . replace ,
1267
1269
pendingActionData ,
1268
1270
pendingError
@@ -1385,6 +1387,7 @@ export function createRouter(init: RouterInit): Router {
1385
1387
matches : AgnosticDataRouteMatch [ ] ,
1386
1388
overrideNavigation ?: Navigation ,
1387
1389
submission ?: Submission ,
1390
+ fetcherSubmission ?: Submission ,
1388
1391
replace ?: boolean ,
1389
1392
pendingActionData ?: RouteData ,
1390
1393
pendingError ?: RouteData
@@ -1406,19 +1409,20 @@ export function createRouter(init: RouterInit): Router {
1406
1409
1407
1410
// If this was a redirect from an action we don't have a "submission" but
1408
1411
// we have it on the loading navigation so use that if available
1409
- let activeSubmission = submission
1410
- ? submission
1411
- : loadingNavigation . formMethod &&
1412
- loadingNavigation . formAction &&
1413
- loadingNavigation . formData &&
1414
- loadingNavigation . formEncType
1415
- ? {
1416
- formMethod : loadingNavigation . formMethod ,
1417
- formAction : loadingNavigation . formAction ,
1418
- formData : loadingNavigation . formData ,
1419
- formEncType : loadingNavigation . formEncType ,
1420
- }
1421
- : undefined ;
1412
+ let activeSubmission =
1413
+ submission || fetcherSubmission
1414
+ ? submission || fetcherSubmission
1415
+ : loadingNavigation . formMethod &&
1416
+ loadingNavigation . formAction &&
1417
+ loadingNavigation . formData &&
1418
+ loadingNavigation . formEncType
1419
+ ? {
1420
+ formMethod : loadingNavigation . formMethod ,
1421
+ formAction : loadingNavigation . formAction ,
1422
+ formData : loadingNavigation . formData ,
1423
+ formEncType : loadingNavigation . formEncType ,
1424
+ }
1425
+ : undefined ;
1422
1426
1423
1427
let routesToUse = inFlightDataRoutes || dataRoutes ;
1424
1428
let [ matchesToLoad , revalidatingFetchers ] = getMatchesToLoad (
@@ -2053,6 +2057,22 @@ export function createRouter(init: RouterInit): Router {
2053
2057
// Preserve this flag across redirects
2054
2058
preventScrollReset : pendingPreventScrollReset ,
2055
2059
} ) ;
2060
+ } else if ( isFetchActionRedirect ) {
2061
+ // For a fetch action redirect, we kick off a new loading navigation
2062
+ // without the fetcher submission, but we send it along for shouldRevalidate
2063
+ await startNavigation ( redirectHistoryAction , redirectLocation , {
2064
+ overrideNavigation : {
2065
+ state : "loading" ,
2066
+ location : redirectLocation ,
2067
+ formMethod : undefined ,
2068
+ formAction : undefined ,
2069
+ formEncType : undefined ,
2070
+ formData : undefined ,
2071
+ } ,
2072
+ fetcherSubmission : submission ,
2073
+ // Preserve this flag across redirects
2074
+ preventScrollReset : pendingPreventScrollReset ,
2075
+ } ) ;
2056
2076
} else {
2057
2077
// Otherwise, we kick off a new loading navigation, preserving the
2058
2078
// submission info for the duration of this navigation
0 commit comments