feat(next): strongly type getNextRequestI18n (#7157)

Fixes https://github.com/payloadcms/payload/issues/7137
This commit is contained in:
Alessio Gravili
2024-07-15 16:48:17 -04:00
committed by GitHub
parent 809ae41725
commit c6da04a061
3 changed files with 28 additions and 8 deletions

View File

@@ -1,4 +1,10 @@
import type { I18n } from '@payloadcms/translations'
import type {
ClientTranslationsObject,
DefaultTranslationKeys,
DefaultTranslationsObject,
I18n,
I18nClient,
} from '@payloadcms/translations'
import type { SanitizedConfig } from 'payload'
import { initI18n } from '@payloadcms/translations'
@@ -11,9 +17,23 @@ import { getRequestLanguage } from './getRequestLanguage.js'
*
* It must be called on the server side, and within the lifecycle of a request since it relies on the request headers and cookies.
*/
export const getNextRequestI18n = async ({ config }: { config: SanitizedConfig }): Promise<I18n> =>
initI18n({
export const getNextRequestI18n = async <
TAdditionalTranslations = {},
TAdditionalClientTranslationKeys extends string = never,
>({
config,
}: {
config: SanitizedConfig
}): Promise<
[TAdditionalClientTranslationKeys] extends [never]
? I18nClient
: TAdditionalTranslations extends object
? I18nClient<TAdditionalTranslations, TAdditionalClientTranslationKeys>
: I18nClient<ClientTranslationsObject, TAdditionalClientTranslationKeys>
> => {
return (await initI18n({
config: config.i18n,
context: 'client',
language: getRequestLanguage({ config, cookies: cookies(), headers: headers() }),
})
})) as any
}

View File

@@ -1,4 +1,4 @@
import type { I18n } from '@payloadcms/translations'
import type { I18nClient } from '@payloadcms/translations'
import type { Metadata } from 'next'
import type { SanitizedConfig } from 'payload'
@@ -9,7 +9,7 @@ export const generateNotFoundMeta = async ({
i18n,
}: {
config: SanitizedConfig
i18n: I18n
i18n: I18nClient
}): Promise<Metadata> =>
meta({
description: i18n.t('general:pageNotFound'),

View File

@@ -1,4 +1,4 @@
import type { I18n } from '@payloadcms/translations'
import type { I18nClient } from '@payloadcms/translations'
import type { Metadata } from 'next'
import type { SanitizedConfig } from 'payload'
@@ -15,7 +15,7 @@ export { generatePageMetadata } from './meta.js'
export type GenerateViewMetadata = (args: {
config: SanitizedConfig
i18n: I18n
i18n: I18nClient
isEditing?: boolean
params?: { [key: string]: string | string[] }
}) => Promise<Metadata>