From 75c4b4f234c681ece92999821e79775fb4e6691d Mon Sep 17 00:00:00 2001 From: Alessio Gravili <70709113+AlessioGr@users.noreply.github.com> Date: Mon, 26 Feb 2024 15:25:28 -0500 Subject: [PATCH] fix: i18nInit doesn't have to be async, richtext i18n types (#5176) --- .../src/utilities/createPayloadRequest.ts | 2 +- packages/next/src/utilities/getNextT.ts | 2 +- packages/next/src/utilities/initPage.ts | 2 +- packages/richtext-lexical/package.json | 1 - .../src/field/features/Link/index.ts | 18 ++--- .../plugins/floatingLinkEditor/utilities.ts | 6 +- .../src/field/elements/link/utilities.tsx | 10 +-- packages/richtext-slate/src/types.ts | 4 +- packages/translations/src/types.ts | 2 +- packages/translations/src/utilities/init.ts | 6 +- pnpm-lock.yaml | 75 ++++++++----------- 11 files changed, 59 insertions(+), 69 deletions(-) diff --git a/packages/next/src/utilities/createPayloadRequest.ts b/packages/next/src/utilities/createPayloadRequest.ts index 42e35f3ab..d214a026c 100644 --- a/packages/next/src/utilities/createPayloadRequest.ts +++ b/packages/next/src/utilities/createPayloadRequest.ts @@ -69,7 +69,7 @@ export const createPayloadRequest = async ({ headers: request.headers, }) - const i18n = await initI18n({ + const i18n = initI18n({ config: config.i18n, context: 'api', language, diff --git a/packages/next/src/utilities/getNextT.ts b/packages/next/src/utilities/getNextT.ts index b778964d8..52cd712d1 100644 --- a/packages/next/src/utilities/getNextT.ts +++ b/packages/next/src/utilities/getNextT.ts @@ -14,7 +14,7 @@ export const getNextT = async ({ config: SanitizedConfig language?: string }): Promise => { - const i18n = await initI18n({ + const i18n = initI18n({ config: config.i18n, context: 'client', language: language || getRequestLanguage({ cookies: cookies(), headers: headers() }), diff --git a/packages/next/src/utilities/initPage.ts b/packages/next/src/utilities/initPage.ts index c0e2e2383..ed5ac0ea4 100644 --- a/packages/next/src/utilities/initPage.ts +++ b/packages/next/src/utilities/initPage.ts @@ -68,7 +68,7 @@ export const initPage = async ({ config, }) - const i18n = await initI18n({ + const i18n = initI18n({ config: config.i18n, context: 'client', language, diff --git a/packages/richtext-lexical/package.json b/packages/richtext-lexical/package.json index 8a27994ae..384026296 100644 --- a/packages/richtext-lexical/package.json +++ b/packages/richtext-lexical/package.json @@ -33,7 +33,6 @@ "bson-objectid": "2.0.4", "classnames": "^2.3.2", "deep-equal": "2.2.3", - "i18next": "22.5.1", "json-schema": "^0.4.0", "lexical": "0.13.1", "lodash": "4.17.21", diff --git a/packages/richtext-lexical/src/field/features/Link/index.ts b/packages/richtext-lexical/src/field/features/Link/index.ts index 078a2bd1b..07257b230 100644 --- a/packages/richtext-lexical/src/field/features/Link/index.ts +++ b/packages/richtext-lexical/src/field/features/Link/index.ts @@ -1,4 +1,4 @@ -import type { i18n } from 'i18next' +import type { I18n } from '@payloadcms/translations' import type { SanitizedConfig } from 'payload/config' import type { Field } from 'payload/types' @@ -46,7 +46,7 @@ export type LinkFeatureProps = ExclusiveLinkCollectionsProps & { * displayed in the link editor drawer. */ fields?: - | ((args: { config: SanitizedConfig; defaultFields: Field[]; i18n: i18n }) => Field[]) + | ((args: { config: SanitizedConfig; defaultFields: Field[]; i18n: I18n }) => Field[]) | Field[] } @@ -59,7 +59,7 @@ export const LinkFeature = (props: LinkFeatureProps): FeatureProvider => { FeaturesSectionWithEntries([ { ChildComponent: () => - // @ts-ignore-next-line + // @ts-expect-error-next-line import('../../lexical/ui/icons/Link').then((module) => module.LinkIcon), isActive: ({ selection }) => { if ($isRangeSelection(selection)) { @@ -99,6 +99,7 @@ export const LinkFeature = (props: LinkFeatureProps): FeatureProvider => { }, nodes: [ { + type: LinkNode.getType(), converters: { html: { converter: async ({ converters, node, parent }) => { @@ -125,10 +126,10 @@ export const LinkFeature = (props: LinkFeatureProps): FeatureProvider => { }, node: LinkNode, populationPromises: [linkPopulationPromiseHOC(props)], - type: LinkNode.getType(), // TODO: Add validation similar to upload for internal links and fields }, { + type: AutoLinkNode.getType(), converters: { html: { converter: async ({ converters, node, parent }) => { @@ -158,31 +159,30 @@ export const LinkFeature = (props: LinkFeatureProps): FeatureProvider => { }, node: AutoLinkNode, populationPromises: [linkPopulationPromiseHOC(props)], - type: AutoLinkNode.getType(), }, ], plugins: [ { Component: () => - // @ts-ignore-next-line + // @ts-expect-error-next-line import('./plugins/link').then((module) => module.LinkPlugin), position: 'normal', }, { Component: () => - // @ts-ignore-next-line + // @ts-expect-error-next-line import('./plugins/autoLink').then((module) => module.AutoLinkPlugin), position: 'normal', }, { Component: () => - // @ts-ignore-next-line + // @ts-expect-error-next-line import('./plugins/clickableLink').then((module) => module.ClickableLinkPlugin), position: 'normal', }, { Component: () => - // @ts-ignore-next-line + // @ts-expect-error-next-line import('./plugins/floatingLinkEditor').then((module) => { const floatingLinkEditorPlugin = module.FloatingLinkEditorPlugin return import('@payloadcms/ui').then((module) => diff --git a/packages/richtext-lexical/src/field/features/Link/plugins/floatingLinkEditor/utilities.ts b/packages/richtext-lexical/src/field/features/Link/plugins/floatingLinkEditor/utilities.ts index 881654f36..ab80b35c7 100644 --- a/packages/richtext-lexical/src/field/features/Link/plugins/floatingLinkEditor/utilities.ts +++ b/packages/richtext-lexical/src/field/features/Link/plugins/floatingLinkEditor/utilities.ts @@ -1,4 +1,4 @@ -import type { i18n } from 'i18next' +import type { I18n } from '@payloadcms/translations' import type { SanitizedConfig } from 'payload/config' import type { Field, GroupField } from 'payload/types' @@ -9,10 +9,10 @@ import { getBaseFields } from '../../drawer/baseFields' */ export function transformExtraFields( customFieldSchema: - | ((args: { config: SanitizedConfig; defaultFields: Field[]; i18n: i18n }) => Field[]) + | ((args: { config: SanitizedConfig; defaultFields: Field[]; i18n: I18n }) => Field[]) | Field[], config: SanitizedConfig, - i18n: i18n, + i18n: I18n, enabledCollections?: false | string[], disabledCollections?: false | string[], ): Field[] { diff --git a/packages/richtext-slate/src/field/elements/link/utilities.tsx b/packages/richtext-slate/src/field/elements/link/utilities.tsx index 6508099c1..38333c6cf 100644 --- a/packages/richtext-slate/src/field/elements/link/utilities.tsx +++ b/packages/richtext-slate/src/field/elements/link/utilities.tsx @@ -1,4 +1,4 @@ -import type { i18n } from 'i18next' +import type { I18n } from '@payloadcms/translations' import type { SanitizedConfig } from 'payload/config' import type { Field } from 'payload/types' import type { Editor } from 'slate' @@ -16,9 +16,9 @@ export const wrapLink = (editor: Editor): void => { const isCollapsed = selection && Range.isCollapsed(selection) const link = { + type: 'link', children: isCollapsed ? [{ text: '' }] : [], newTab: false, - type: 'link', url: undefined, } @@ -35,10 +35,10 @@ export const wrapLink = (editor: Editor): void => { */ export function transformExtraFields( customFieldSchema: - | ((args: { config: SanitizedConfig; defaultFields: Field[]; i18n: i18n }) => Field[]) + | ((args: { config: SanitizedConfig; defaultFields: Field[]; i18n: I18n }) => Field[]) | Field[], config: SanitizedConfig, - i18n: i18n, + i18n: I18n, ): Field[] { const baseFields: Field[] = getBaseFields(config) @@ -68,6 +68,7 @@ export function transformExtraFields( if (Array.isArray(customFieldSchema) || fields.length > 0) { fields.push({ name: 'fields', + type: 'group', admin: { style: { borderBottom: 0, @@ -79,7 +80,6 @@ export function transformExtraFields( fields: Array.isArray(customFieldSchema) ? customFieldSchema.concat(extraFields) : extraFields, - type: 'group', }) } return fields diff --git a/packages/richtext-slate/src/types.ts b/packages/richtext-slate/src/types.ts index cb5d488fb..f55e41ece 100644 --- a/packages/richtext-slate/src/types.ts +++ b/packages/richtext-slate/src/types.ts @@ -1,4 +1,4 @@ -import type { i18n as Ii18n } from 'i18next' +import type { I18n } from '@payloadcms/translations' import type { SanitizedConfig } from 'payload/config' import type { Field, RichTextFieldProps } from 'payload/types' import type { Editor } from 'slate' @@ -59,7 +59,7 @@ export type AdapterArguments = { leaves?: RichTextLeaf[] link?: { fields?: - | ((args: { config: SanitizedConfig; defaultFields: Field[]; i18n: Ii18n }) => Field[]) + | ((args: { config: SanitizedConfig; defaultFields: Field[]; i18n: I18n }) => Field[]) | Field[] } placeholder?: Record | string diff --git a/packages/translations/src/types.ts b/packages/translations/src/types.ts index 617730a91..a4336cdb8 100644 --- a/packages/translations/src/types.ts +++ b/packages/translations/src/types.ts @@ -48,4 +48,4 @@ export type InitI18n = (args: { language?: string translations: Translations context: 'api' | 'client' -}) => Promise +}) => I18n diff --git a/packages/translations/src/utilities/init.ts b/packages/translations/src/utilities/init.ts index dd8e41b4b..b98335a1d 100644 --- a/packages/translations/src/utilities/init.ts +++ b/packages/translations/src/utilities/init.ts @@ -207,11 +207,11 @@ const initTFunction: InitTFunction = (args) => (key, vars) => { function memoize(fn: Function, keys: string[]): T { const cacheMap = new Map() - return async function (args) { + return function (args) { const cacheKey = keys.reduce((acc, key) => acc + args[key], '') if (!cacheMap.has(cacheKey)) { - const result = await fn(args) + const result = fn(args) cacheMap.set(cacheKey, result) } @@ -220,7 +220,7 @@ function memoize(fn: Function, keys: string[]): T { } export const initI18n: InitI18n = memoize( - (async ({ config, language = 'en', translations, context }) => { + (({ config, language = 'en', translations, context }) => { const i18n = { fallbackLanguage: config.fallbackLanguage, language: language || config.fallbackLanguage, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20268f0f2..3b13ba609 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -920,7 +920,7 @@ importers: version: 18.2.0 ts-node: specifier: 10.9.1 - version: 10.9.1(@swc/core@1.4.2)(@types/node@20.6.2)(typescript@5.2.2) + version: 10.9.1(@swc/core@1.4.2)(@types/node@16.18.83)(typescript@5.2.2) packages/plugin-nested-docs: devDependencies: @@ -1141,9 +1141,6 @@ importers: deep-equal: specifier: 2.2.3 version: 2.2.3 - i18next: - specifier: 22.5.1 - version: 22.5.1 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -9971,12 +9968,6 @@ packages: hasBin: true dev: true - /i18next@22.5.1: - resolution: {integrity: sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==} - dependencies: - '@babel/runtime': 7.23.9 - dev: false - /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -15299,6 +15290,38 @@ packages: yargs-parser: 21.1.1 dev: true + /ts-node@10.9.1(@swc/core@1.4.2)(@types/node@16.18.83)(typescript@5.2.2): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@swc/core': 1.4.2 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 16.18.83 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.2.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + /ts-node@10.9.1(@swc/core@1.4.2)(@types/node@20.5.7)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true @@ -15330,38 +15353,6 @@ packages: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - /ts-node@10.9.1(@swc/core@1.4.2)(@types/node@20.6.2)(typescript@5.2.2): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.4.2 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.6.2 - acorn: 8.11.3 - acorn-walk: 8.3.2 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.2.2 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - /ts-node@9.1.1(typescript@5.2.2): resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} engines: {node: '>=10.0.0'}