Skip to content

Commit c6da04a

Browse files
authored
feat(next): strongly type getNextRequestI18n (#7157)
Fixes #7137
1 parent 809ae41 commit c6da04a

File tree

3 files changed

+28
-8
lines changed

3 files changed

+28
-8
lines changed

packages/next/src/utilities/getNextRequestI18n.ts

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import type { I18n } from '@payloadcms/translations'
1+
import type {
2+
ClientTranslationsObject,
3+
DefaultTranslationKeys,
4+
DefaultTranslationsObject,
5+
I18n,
6+
I18nClient,
7+
} from '@payloadcms/translations'
28
import type { SanitizedConfig } from 'payload'
39

410
import { initI18n } from '@payloadcms/translations'
@@ -11,9 +17,23 @@ import { getRequestLanguage } from './getRequestLanguage.js'
1117
*
1218
* It must be called on the server side, and within the lifecycle of a request since it relies on the request headers and cookies.
1319
*/
14-
export const getNextRequestI18n = async ({ config }: { config: SanitizedConfig }): Promise<I18n> =>
15-
initI18n({
20+
export const getNextRequestI18n = async <
21+
TAdditionalTranslations = {},
22+
TAdditionalClientTranslationKeys extends string = never,
23+
>({
24+
config,
25+
}: {
26+
config: SanitizedConfig
27+
}): Promise<
28+
[TAdditionalClientTranslationKeys] extends [never]
29+
? I18nClient
30+
: TAdditionalTranslations extends object
31+
? I18nClient<TAdditionalTranslations, TAdditionalClientTranslationKeys>
32+
: I18nClient<ClientTranslationsObject, TAdditionalClientTranslationKeys>
33+
> => {
34+
return (await initI18n({
1635
config: config.i18n,
1736
context: 'client',
1837
language: getRequestLanguage({ config, cookies: cookies(), headers: headers() }),
19-
})
38+
})) as any
39+
}

packages/next/src/views/NotFound/meta.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { I18n } from '@payloadcms/translations'
1+
import type { I18nClient } from '@payloadcms/translations'
22
import type { Metadata } from 'next'
33
import type { SanitizedConfig } from 'payload'
44

@@ -9,7 +9,7 @@ export const generateNotFoundMeta = async ({
99
i18n,
1010
}: {
1111
config: SanitizedConfig
12-
i18n: I18n
12+
i18n: I18nClient
1313
}): Promise<Metadata> =>
1414
meta({
1515
description: i18n.t('general:pageNotFound'),

packages/next/src/views/Root/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { I18n } from '@payloadcms/translations'
1+
import type { I18nClient } from '@payloadcms/translations'
22
import type { Metadata } from 'next'
33
import type { SanitizedConfig } from 'payload'
44

@@ -15,7 +15,7 @@ export { generatePageMetadata } from './meta.js'
1515

1616
export type GenerateViewMetadata = (args: {
1717
config: SanitizedConfig
18-
i18n: I18n
18+
i18n: I18nClient
1919
isEditing?: boolean
2020
params?: { [key: string]: string | string[] }
2121
}) => Promise<Metadata>

0 commit comments

Comments
 (0)