From 447b5892e439c5623f82f827ad99e12c0069b52a Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Thu, 9 Mar 2023 16:46:13 -0500 Subject: [PATCH 1/5] Remove _isFetchActionRedirect (Remix back-compat) --- packages/router/router.ts | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/packages/router/router.ts b/packages/router/router.ts index ca7163d13b..62e51544a2 100644 --- a/packages/router/router.ts +++ b/packages/router/router.ts @@ -1787,7 +1787,6 @@ export function createRouter(init: RouterInit): Router { return startRedirectNavigation(state, actionResult, { submission, - isFetchActionRedirect: true, }); } } @@ -2087,26 +2086,18 @@ export function createRouter(init: RouterInit): Router { { submission, replace, - isFetchActionRedirect, }: { submission?: Submission; replace?: boolean; - isFetchActionRedirect?: boolean; } = {} ) { if (redirect.revalidate) { isRevalidationRequired = true; } - let redirectLocation = createLocation( - state.location, - redirect.location, - // TODO: This can be removed once we get rid of useTransition in Remix v2 - { - _isRedirect: true, - ...(isFetchActionRedirect ? { _isFetchActionRedirect: true } : {}), - } - ); + let redirectLocation = createLocation(state.location, redirect.location, { + _isRedirect: true, + }); invariant( redirectLocation, "Expected a location on the redirect navigation" From 2a5ffb3c0d9c8b0f34dc03ff35c5d98186b57584 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Fri, 17 Mar 2023 13:57:10 -0400 Subject: [PATCH 2/5] Change approach for removing isFetchActionRedirect --- packages/router/router.ts | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/packages/router/router.ts b/packages/router/router.ts index 62e51544a2..9b1bdf2717 100644 --- a/packages/router/router.ts +++ b/packages/router/router.ts @@ -1786,7 +1786,7 @@ export function createRouter(init: RouterInit): Router { updateState({ fetchers: new Map(state.fetchers) }); return startRedirectNavigation(state, actionResult, { - submission, + fetcherSubmission: submission, }); } } @@ -2085,9 +2085,11 @@ export function createRouter(init: RouterInit): Router { redirect: RedirectResult, { submission, + fetcherSubmission, replace, }: { submission?: Submission; + fetcherSubmission?: Submission; replace?: boolean; } = {} ) { @@ -2126,12 +2128,21 @@ export function createRouter(init: RouterInit): Router { // Use the incoming submission if provided, fallback on the active one in // state.navigation - let activeSubmission = - submission || getSubmissionFromNavigation(state.navigation); + let { formMethod, formAction, formEncType } = state.navigation; + if ( + !submission && + !fetcherSubmission && + formMethod && + formAction && + formEncType + ) { + submission = getSubmissionFromNavigation(state.navigation); + } // If this was a 307/308 submission we want to preserve the HTTP method and // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the // redirected location + let activeSubmission = submission || fetcherSubmission; if ( redirectPreserveMethodStatusCodes.has(redirect.status) && activeSubmission && @@ -2145,23 +2156,17 @@ export function createRouter(init: RouterInit): Router { // Preserve this flag across redirects preventScrollReset: pendingPreventScrollReset, }); - } else if (isFetchActionRedirect) { - // For a fetch action redirect, we kick off a new loading navigation - // without the fetcher submission, but we send it along for shouldRevalidate - await startNavigation(redirectHistoryAction, redirectLocation, { - overrideNavigation: getLoadingNavigation(redirectLocation), - fetcherSubmission: activeSubmission, - // Preserve this flag across redirects - preventScrollReset: pendingPreventScrollReset, - }); } else { - // If we have a submission, we will preserve it through the redirect navigation + // If we have a navigation submission, we will preserve it through the + // redirect navigation let overrideNavigation = getLoadingNavigation( redirectLocation, - activeSubmission + submission ); await startNavigation(redirectHistoryAction, redirectLocation, { overrideNavigation, + // Send fetcher submissions through for shouldRevalidate + fetcherSubmission, // Preserve this flag across redirects preventScrollReset: pendingPreventScrollReset, }); From cb15d8c37dd544e52ea8c19ba5415792102a6842 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Thu, 9 Mar 2023 16:46:26 -0500 Subject: [PATCH 3/5] Remove _hasFetcherDoneAnything (Remix back-compat) --- packages/router/__tests__/router-test.ts | 3 --- packages/router/router.ts | 7 ------- 2 files changed, 10 deletions(-) diff --git a/packages/router/__tests__/router-test.ts b/packages/router/__tests__/router-test.ts index 51fe38a0ff..615640944f 100644 --- a/packages/router/__tests__/router-test.ts +++ b/packages/router/__tests__/router-test.ts @@ -8750,7 +8750,6 @@ describe("a router", () => { formEncType: undefined, formData: undefined, data: undefined, - " _hasFetcherDoneAnything ": true, }); await dfd.resolve("DATA"); @@ -8760,7 +8759,6 @@ describe("a router", () => { formEncType: undefined, formData: undefined, data: "DATA", - " _hasFetcherDoneAnything ": true, }); expect(router._internalFetchControllers.size).toBe(0); @@ -9289,7 +9287,6 @@ describe("a router", () => { formAction: undefined, formEncType: undefined, formData: undefined, - " _hasFetcherDoneAnything ": true, }); expect(t.router.state.historyAction).toBe("PUSH"); expect(t.router.state.location.pathname).toBe("/bar"); diff --git a/packages/router/router.ts b/packages/router/router.ts index 9b1bdf2717..134e41d337 100644 --- a/packages/router/router.ts +++ b/packages/router/router.ts @@ -526,7 +526,6 @@ type FetcherStates = { formData: undefined; json: undefined; data: TData | undefined; - " _hasFetcherDoneAnything "?: boolean; }; Loading: { state: "loading"; @@ -537,7 +536,6 @@ type FetcherStates = { formData: Submission["formData"] | undefined; json: Submission["json"] | undefined; data: TData | undefined; - " _hasFetcherDoneAnything "?: boolean; }; Submitting: { state: "submitting"; @@ -548,7 +546,6 @@ type FetcherStates = { formData: Submission["formData"]; json: Submission["json"]; data: TData | undefined; - " _hasFetcherDoneAnything "?: boolean; }; }; @@ -4445,7 +4442,6 @@ function getLoadingFetcher( json: submission.json, text: submission.text, data, - " _hasFetcherDoneAnything ": true, }; return fetcher; } else { @@ -4458,7 +4454,6 @@ function getLoadingFetcher( json: undefined, text: undefined, data, - " _hasFetcherDoneAnything ": true, }; return fetcher; } @@ -4477,7 +4472,6 @@ function getSubmittingFetcher( json: submission.json, text: submission.text, data: existingFetcher ? existingFetcher.data : undefined, - " _hasFetcherDoneAnything ": true, }; return fetcher; } @@ -4492,7 +4486,6 @@ function getDoneFetcher(data: Fetcher["data"]): FetcherStates["Idle"] { json: undefined, text: undefined, data, - " _hasFetcherDoneAnything ": true, }; return fetcher; } From 828d8319310a29e1f2dd6787a218138bfce4aa05 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Tue, 7 Mar 2023 15:56:25 -0500 Subject: [PATCH 4/5] Drop bundle --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3333cdb849..3d16d2dd58 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ }, "filesize": { "packages/router/dist/router.umd.min.js": { - "none": "47.2 kB" + "none": "47.0 kB" }, "packages/react-router/dist/react-router.production.min.js": { "none": "13.8 kB" From f728258d73d40ea3e171a0836e67e37260adc75d Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Thu, 16 Mar 2023 10:32:57 -0400 Subject: [PATCH 5/5] Add changeset --- .changeset/remix-v2-prep.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/remix-v2-prep.md diff --git a/.changeset/remix-v2-prep.md b/.changeset/remix-v2-prep.md new file mode 100644 index 0000000000..ae2d111a54 --- /dev/null +++ b/.changeset/remix-v2-prep.md @@ -0,0 +1,5 @@ +--- +"@remix-run/router": patch +--- + +Removed internal API only required for the Remix v1 back-compat layer and no longer needed in Remix v2. (`_isFetchActionRedirect`, `_hasFetcherDoneAnything`).