From 14af42e8cedb9a3a498754db4ab79d0ca9a43b08 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Tue, 20 Sep 2022 16:03:46 +0200 Subject: [PATCH] Combine redirect function --- .../next/client/components/redirect-client.ts | 15 --------------- packages/next/client/components/redirect.ts | 15 +++++++++++++++ .../app-dir/app/app/redirect/client-side/page.js | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) delete mode 100644 packages/next/client/components/redirect-client.ts diff --git a/packages/next/client/components/redirect-client.ts b/packages/next/client/components/redirect-client.ts deleted file mode 100644 index d47af16deff12..0000000000000 --- a/packages/next/client/components/redirect-client.ts +++ /dev/null @@ -1,15 +0,0 @@ -import React, { experimental_use as use } from 'react' -import { AppRouterContext } from '../../shared/lib/app-router-context' -import { createInfinitePromise } from './infinite-promise' - -export function redirect(url: string) { - const router = use(AppRouterContext) - setTimeout(() => { - // @ts-ignore startTransition exists - React.startTransition(() => { - router.replace(url, {}) - }) - }) - // setTimeout is used to start a new transition during render, this is an intentional hack around React. - use(createInfinitePromise()) -} diff --git a/packages/next/client/components/redirect.ts b/packages/next/client/components/redirect.ts index af126a333a93f..05b30d5a29f6b 100644 --- a/packages/next/client/components/redirect.ts +++ b/packages/next/client/components/redirect.ts @@ -1,6 +1,21 @@ +import React, { experimental_use as use } from 'react' +import { AppRouterContext } from '../../shared/lib/app-router-context' +import { createInfinitePromise } from './infinite-promise' + export const REDIRECT_ERROR_CODE = 'NEXT_REDIRECT' export function redirect(url: string) { + if (process.browser) { + const router = use(AppRouterContext) + setTimeout(() => { + // @ts-ignore startTransition exists + React.startTransition(() => { + router.replace(url, {}) + }) + }) + // setTimeout is used to start a new transition during render, this is an intentional hack around React. + use(createInfinitePromise()) + } // eslint-disable-next-line no-throw-literal throw { url, diff --git a/test/e2e/app-dir/app/app/redirect/client-side/page.js b/test/e2e/app-dir/app/app/redirect/client-side/page.js index bfcc674c991e1..1d11b4c62f302 100644 --- a/test/e2e/app-dir/app/app/redirect/client-side/page.js +++ b/test/e2e/app-dir/app/app/redirect/client-side/page.js @@ -1,6 +1,6 @@ 'client' -import { redirect } from 'next/dist/client/components/redirect-client' +import { redirect } from 'next/dist/client/components/redirect' import React from 'react' export default function Page() {