Skip to content

Commit db65cb7

Browse files
authored
fix: Fix types for passing a custom type to redirect (#714)
Fixes #709
1 parent 8cf7395 commit db65cb7

5 files changed

Lines changed: 45 additions & 13 deletions

File tree

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
version: 8.6.0
1717
- uses: actions/setup-node@v3
1818
with:
19-
node-version: 18.x
19+
node-version: 18.17.0
2020
cache: 'pnpm'
2121
- run: pnpm install
2222

packages/next-intl/src/navigation/react-client/clientRedirect.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import useLocale from '../../react-client/useLocale';
2-
import {LocalePrefix, ParametersExceptFirstTwo} from '../../shared/types';
2+
import {LocalePrefix, ParametersExceptFirst} from '../../shared/types';
33
import baseRedirect from '../shared/baseRedirect';
44

55
export default function clientRedirect(
66
params: {localePrefix?: LocalePrefix; pathname: string},
7-
...args: ParametersExceptFirstTwo<typeof baseRedirect>
7+
...args: ParametersExceptFirst<typeof baseRedirect>
88
) {
99
let locale;
1010
try {

packages/next-intl/src/navigation/react-server/serverRedirect.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import {getRequestLocale} from '../../server/react-server/RequestLocale';
2-
import {LocalePrefix, ParametersExceptFirstTwo} from '../../shared/types';
2+
import {LocalePrefix, ParametersExceptFirst} from '../../shared/types';
33
import baseRedirect from '../shared/baseRedirect';
44

55
export default function serverRedirect(
66
params: {pathname: string; localePrefix?: LocalePrefix},
7-
...args: ParametersExceptFirstTwo<typeof baseRedirect>
7+
...args: ParametersExceptFirst<typeof baseRedirect>
88
) {
99
const locale = getRequestLocale();
1010
return baseRedirect({...params, locale}, ...args);

packages/next-intl/test/navigation/createLocalizedPathnamesNavigation.test.tsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import {render, screen} from '@testing-library/react';
22
import {
33
usePathname as useNextPathname,
44
useParams,
5-
redirect as nextRedirect
5+
redirect as nextRedirect,
6+
RedirectType
67
} from 'next/navigation';
78
import React from 'react';
89
import {renderToString} from 'react-dom/server';
@@ -13,7 +14,15 @@ import BaseLink from '../../src/navigation/shared/BaseLink';
1314
import {Pathnames} from '../../src/navigation.react-client';
1415
import {getRequestLocale} from '../../src/server/react-server/RequestLocale';
1516

16-
vi.mock('next/navigation');
17+
vi.mock('next/navigation', async () => {
18+
const actual = await vi.importActual('next/navigation');
19+
return {
20+
...actual,
21+
usePathname: vi.fn(),
22+
useParams: vi.fn(),
23+
redirect: vi.fn()
24+
};
25+
});
1726
vi.mock('next-intl/config', () => ({
1827
default: async () =>
1928
((await vi.importActual('../../src/server')) as any).getRequestConfig({
@@ -305,6 +314,15 @@ describe.each([
305314
render(<Component href="/unknown" />);
306315
expect(nextRedirect).toHaveBeenLastCalledWith('/en/unknown');
307316
});
317+
318+
it('can supply a type', () => {
319+
function Test() {
320+
redirect('/', RedirectType.push);
321+
return null;
322+
}
323+
render(<Test />);
324+
expect(nextRedirect).toHaveBeenLastCalledWith('/en', 'push');
325+
});
308326
});
309327

310328
describe('getPathname', () => {

packages/next-intl/test/navigation/createSharedPathnamesNavigation.test.tsx

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import {render, screen} from '@testing-library/react';
22
import {
33
usePathname as useNextPathname,
44
useParams,
5-
redirect as nextRedirect
5+
redirect as nextRedirect,
6+
RedirectType
67
} from 'next/navigation';
78
import React from 'react';
89
import {renderToString} from 'react-dom/server';
@@ -12,11 +13,15 @@ import createSharedPathnamesNavigationServer from '../../src/navigation/react-se
1213
import BaseLink from '../../src/navigation/shared/BaseLink';
1314
import {getRequestLocale} from '../../src/server/react-server/RequestLocale';
1415

15-
vi.mock('next/navigation', () => ({
16-
useParams: vi.fn(() => ({locale: 'en'})),
17-
usePathname: vi.fn(() => '/'),
18-
redirect: vi.fn()
19-
}));
16+
vi.mock('next/navigation', async () => {
17+
const actual = await vi.importActual('next/navigation');
18+
return {
19+
...actual,
20+
useParams: vi.fn(() => ({locale: 'en'})),
21+
usePathname: vi.fn(() => '/'),
22+
redirect: vi.fn()
23+
};
24+
});
2025
vi.mock('next-intl/config', () => ({
2126
default: async () =>
2227
((await vi.importActual('../../src/server')) as any).getRequestConfig({
@@ -167,6 +172,15 @@ describe.each([
167172
'/en?foo=bar&bar=1&bar=2'
168173
);
169174
});
175+
176+
it('can supply a type', () => {
177+
function Test() {
178+
redirect('/', RedirectType.push);
179+
return null;
180+
}
181+
render(<Test />);
182+
expect(nextRedirect).toHaveBeenLastCalledWith('/en', 'push');
183+
});
170184
});
171185
});
172186

0 commit comments

Comments
 (0)