From 05f1208d7628c1e8efe499b0109f66536eeebecb Mon Sep 17 00:00:00 2001 From: Odelon Jhey Pacalso Date: Wed, 9 Mar 2022 18:19:33 +0800 Subject: [PATCH 1/3] allow Redirect to use navigate options --- packages/router/src/links.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/router/src/links.tsx b/packages/router/src/links.tsx index 3132f2dac68b..d836624fd16f 100644 --- a/packages/router/src/links.tsx +++ b/packages/router/src/links.tsx @@ -1,6 +1,6 @@ import { forwardRef, useEffect } from 'react' -import { navigate } from './history' +import { navigate, NavigateOptions } from './history' import { useLocation } from './location' import { flattenSearchParams, matchPath } from './util' @@ -151,13 +151,14 @@ const NavLink = forwardRef< interface RedirectProps { /** The path to redirect to */ to: string + options?: NavigateOptions } /** * A declarative way to redirect to a route name */ -const Redirect = ({ to }: RedirectProps) => { - useEffect(() => navigate(to), [to]) +const Redirect = ({ to, options }: RedirectProps) => { + useEffect(() => navigate(to, options), [to, options]) return null } From eb135c6c5de2758068ccc942282b78b693068f37 Mon Sep 17 00:00:00 2001 From: Odelon Jhey Pacalso Date: Thu, 10 Mar 2022 16:44:15 +0800 Subject: [PATCH 2/3] router: add test for the Redirect options.replace prop --- packages/router/src/__tests__/router.test.tsx | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/router/src/__tests__/router.test.tsx b/packages/router/src/__tests__/router.test.tsx index f9d20079a826..c0f5e8ff1ae3 100644 --- a/packages/router/src/__tests__/router.test.tsx +++ b/packages/router/src/__tests__/router.test.tsx @@ -1191,6 +1191,31 @@ test('jump to new route, then go back', async () => { await waitFor(() => screen.getByText('Home Page')) }) +test('redirect replacing route', async () => { + const ListWithDefaultParamsPage = (props) => { + if (props['_limit']) { + return

List Page

+ } + return + } + const TestRouter = () => ( + + + + + ) + const screen = render() + + // starts on home page + await waitFor(() => screen.getByText('Home Page')) + + act(() => navigate(routes.list())) + await waitFor(() => screen.getByText('List Page')) + act(() => back()) + // without options.replace = true in Redirect, back would go to List Page + await waitFor(() => screen.getByText('Home Page')) +}) + describe('trailing slashes', () => { const TSNeverRouter = () => ( From ff2aabeb5a49fda0d50dfb3c76f0d51c6d2dda63 Mon Sep 17 00:00:00 2001 From: Odee Date: Thu, 10 Mar 2022 17:55:44 +0800 Subject: [PATCH 3/3] Update packages/router/src/__tests__/router.test.tsx Co-authored-by: Tobbe Lundberg --- packages/router/src/__tests__/router.test.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/router/src/__tests__/router.test.tsx b/packages/router/src/__tests__/router.test.tsx index c0f5e8ff1ae3..5a3470322949 100644 --- a/packages/router/src/__tests__/router.test.tsx +++ b/packages/router/src/__tests__/router.test.tsx @@ -1209,6 +1209,8 @@ test('redirect replacing route', async () => { // starts on home page await waitFor(() => screen.getByText('Home Page')) + // This will navigate to /list, which will then redirect to /list?_limit=10 + // which will render `

List Page

` act(() => navigate(routes.list())) await waitFor(() => screen.getByText('List Page')) act(() => back())