From 9b71aa17b36418f3033e7e08163bfda3b337ec27 Mon Sep 17 00:00:00 2001 From: Jarrod Flesch Date: Tue, 10 Jan 2023 10:38:13 -0500 Subject: [PATCH] chore: uses defaultLocale for local operations locale and fallbackLocale --- src/collections/operations/local/create.ts | 5 +- src/collections/operations/local/delete.ts | 9 +-- src/collections/operations/local/find.ts | 5 +- src/collections/operations/local/findByID.ts | 5 +- .../operations/local/findVersionByID.ts | 9 +-- .../operations/local/findVersions.ts | 9 +-- src/collections/operations/local/update.ts | 9 +-- test/localization/collections/Array/index.ts | 21 ++++++ test/localization/config.ts | 25 +------ test/localization/int.spec.ts | 71 ++++++++++++++++++- 10 files changed, 123 insertions(+), 45 deletions(-) create mode 100644 test/localization/collections/Array/index.ts diff --git a/src/collections/operations/local/create.ts b/src/collections/operations/local/create.ts index 6bd6da46ea..c8579b0bbf 100644 --- a/src/collections/operations/local/create.ts +++ b/src/collections/operations/local/create.ts @@ -44,10 +44,11 @@ export default async function createLocal(payload: Payload, options: Op } = options; const collection = payload.collections[collectionSlug]; + const defaultLocale = payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null; req.payloadAPI = 'local'; - req.locale = locale || req?.locale || (payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null); - req.fallbackLocale = fallbackLocale || req?.fallbackLocale || null; + req.locale = locale ?? req?.locale ?? defaultLocale; + req.fallbackLocale = fallbackLocale ?? req?.fallbackLocale ?? defaultLocale; req.payload = payload; req.i18n = i18n(payload.config.i18n); req.files = { diff --git a/src/collections/operations/local/delete.ts b/src/collections/operations/local/delete.ts index 98f8601732..95d6f672a7 100644 --- a/src/collections/operations/local/delete.ts +++ b/src/collections/operations/local/delete.ts @@ -22,20 +22,21 @@ export default async function deleteLocal(payload: P collection: collectionSlug, depth, id, - locale = payload.config.localization ? payload.config.localization?.defaultLocale : null, - fallbackLocale = null, + locale, + fallbackLocale, user, overrideAccess = true, showHiddenFields, } = options; const collection = payload.collections[collectionSlug]; + const defaultLocale = payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null; const req = { user, payloadAPI: 'local', - locale, - fallbackLocale, + locale: locale ?? defaultLocale, + fallbackLocale: fallbackLocale ?? defaultLocale, payload, i18n: i18n(payload.config.i18n), } as PayloadRequest; diff --git a/src/collections/operations/local/find.ts b/src/collections/operations/local/find.ts index 11fcc4f705..577f0212f7 100644 --- a/src/collections/operations/local/find.ts +++ b/src/collections/operations/local/find.ts @@ -48,10 +48,11 @@ export default async function findLocal(payload: Pay } = options; const collection = payload.collections[collectionSlug]; + const defaultLocale = payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null; req.payloadAPI = 'local'; - req.locale = locale || req?.locale || (payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null); - req.fallbackLocale = fallbackLocale || req?.fallbackLocale || null; + req.locale = locale ?? req?.locale ?? defaultLocale; + req.fallbackLocale = fallbackLocale ?? req?.fallbackLocale ?? defaultLocale; req.i18n = i18n(payload.config.i18n); req.payload = payload; diff --git a/src/collections/operations/local/findByID.ts b/src/collections/operations/local/findByID.ts index c7e9bf2297..06742605df 100644 --- a/src/collections/operations/local/findByID.ts +++ b/src/collections/operations/local/findByID.ts @@ -39,10 +39,11 @@ export default async function findByIDLocal(payload: } = options; const collection = payload.collections[collectionSlug]; + const defaultLocale = payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null; req.payloadAPI = 'local'; - req.locale = locale || req?.locale || (payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null); - req.fallbackLocale = fallbackLocale || req?.fallbackLocale || null; + req.locale = locale ?? req?.locale ?? defaultLocale; + req.fallbackLocale = fallbackLocale ?? req?.fallbackLocale ?? defaultLocale; req.i18n = i18n(payload.config.i18n); req.payload = payload; diff --git a/src/collections/operations/local/findVersionByID.ts b/src/collections/operations/local/findVersionByID.ts index 20bafa4539..6f5548b5c8 100644 --- a/src/collections/operations/local/findVersionByID.ts +++ b/src/collections/operations/local/findVersionByID.ts @@ -24,8 +24,8 @@ export default async function findVersionByIDLocal collection: collectionSlug, depth, id, - locale = payload.config.localization ? payload.config.localization?.defaultLocale : null, - fallbackLocale = null, + locale, + fallbackLocale, overrideAccess = true, disableErrors = false, showHiddenFields, @@ -33,10 +33,11 @@ export default async function findVersionByIDLocal } = options; const collection = payload.collections[collectionSlug]; + const defaultLocale = payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null; req.payloadAPI = 'local'; - req.locale = locale || req?.locale || this?.config?.localization?.defaultLocale; - req.fallbackLocale = fallbackLocale || req?.fallbackLocale || null; + req.locale = locale ?? req?.locale ?? defaultLocale; + req.fallbackLocale = fallbackLocale ?? req?.fallbackLocale ?? defaultLocale; req.i18n = i18n(payload.config.i18n); req.payload = payload; diff --git a/src/collections/operations/local/findVersions.ts b/src/collections/operations/local/findVersions.ts index c21711d06a..2a56ebe18f 100644 --- a/src/collections/operations/local/findVersions.ts +++ b/src/collections/operations/local/findVersions.ts @@ -28,8 +28,8 @@ export default async function findVersionsLocal = a page, limit, where, - locale = payload.config.localization ? payload.config.localization?.defaultLocale : null, - fallbackLocale = null, + locale, + fallbackLocale, user, overrideAccess = true, showHiddenFields, @@ -37,13 +37,14 @@ export default async function findVersionsLocal = a } = options; const collection = payload.collections[collectionSlug]; + const defaultLocale = payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null; const i18n = i18nInit(payload.config.i18n); const req = { user, payloadAPI: 'local', - locale, - fallbackLocale, + locale: locale ?? defaultLocale, + fallbackLocale: fallbackLocale ?? defaultLocale, payload, i18n, } as PayloadRequest; diff --git a/src/collections/operations/local/update.ts b/src/collections/operations/local/update.ts index 02e02ca4ab..71f564f985 100644 --- a/src/collections/operations/local/update.ts +++ b/src/collections/operations/local/update.ts @@ -28,8 +28,8 @@ export default async function updateLocal(payload: Payload, options: Op const { collection: collectionSlug, depth, - locale = payload.config.localization ? payload.config.localization?.defaultLocale : null, - fallbackLocale = null, + locale, + fallbackLocale, data, id, user, @@ -44,12 +44,13 @@ export default async function updateLocal(payload: Payload, options: Op const collection = payload.collections[collectionSlug]; const i18n = i18nInit(payload.config.i18n); + const defaultLocale = payload.config.localization ? payload.config.localization?.defaultLocale : null; const req = { user, payloadAPI: 'local', - locale, - fallbackLocale, + locale: locale ?? defaultLocale, + fallbackLocale: fallbackLocale ?? defaultLocale, payload, i18n, files: { diff --git a/test/localization/collections/Array/index.ts b/test/localization/collections/Array/index.ts new file mode 100644 index 0000000000..bb629f9b95 --- /dev/null +++ b/test/localization/collections/Array/index.ts @@ -0,0 +1,21 @@ +import type { CollectionConfig } from '../../../../src/collections/config/types'; + +export const arrayCollectionSlug = 'array-fields'; + +export const ArrayCollection: CollectionConfig = { + slug: arrayCollectionSlug, + fields: [ + { + name: 'items', + type: 'array', + localized: true, + fields: [ + { + name: 'text', + type: 'text', + required: true, + }, + ], + }, + ], +}; diff --git a/test/localization/config.ts b/test/localization/config.ts index 11d9190e79..88fd345abb 100644 --- a/test/localization/config.ts +++ b/test/localization/config.ts @@ -1,6 +1,6 @@ import { buildConfig } from '../buildConfig'; import { devUser } from '../credentials'; -import { GlobalArray } from './Array'; +import { ArrayCollection } from './collections/Array'; import { LocalizedPost, RelationshipLocalized } from './payload-types'; import { defaultLocale, @@ -36,6 +36,7 @@ export default buildConfig({ localization: { locales: [defaultLocale, spanishLocale], defaultLocale, + fallback: true, }, collections: [ { @@ -65,27 +66,7 @@ export default buildConfig({ }, ], }, - { - slug: 'arrays', - fields: [ - { - type: 'text', - name: 'requiredText', - localized: true, - }, - { - type: 'array', - name: 'arrayFields', - localized: true, - fields: [ - { - name: 'text', - type: 'text', - }, - ], - }, - ], - }, + ArrayCollection, { slug: withRequiredLocalizedFields, fields: [ diff --git a/test/localization/int.spec.ts b/test/localization/int.spec.ts index c017201089..600b143999 100644 --- a/test/localization/int.spec.ts +++ b/test/localization/int.spec.ts @@ -22,8 +22,9 @@ import { spanishTitle, } from './shared'; import type { Where } from '../../src/types'; +import { arrayCollectionSlug } from './collections/Array'; -const collection = config.collections[1]?.slug; +const collection = slug; let serverURL; @@ -199,6 +200,7 @@ describe('Localization', () => { }); }); }); + describe('Localized Relationship', () => { let localizedRelation: LocalizedPost; let localizedRelation2: LocalizedPost; @@ -650,6 +652,73 @@ describe('Localization', () => { expect(result.title[spanishLocale]).toStrictEqual(spanishTitle); }); }); + + describe('Localized - Arrays', () => { + let docID; + + beforeAll(async () => { + const englishDoc = await payload.create({ + collection: arrayCollectionSlug, + data: { + items: [ + { + text: englishTitle, + }, + ], + }, + }); + + docID = englishDoc.id; + }); + + it('should use default locale as fallback', async () => { + const spanishDoc = await payload.findByID({ + locale: spanishLocale, + collection: arrayCollectionSlug, + id: docID, + }); + + expect(spanishDoc.items[0].text).toStrictEqual(englishTitle); + }); + + it('should use empty array as value', async () => { + const updatedSpanishDoc = await payload.update({ + collection: arrayCollectionSlug, + locale: spanishLocale, + id: docID, + data: { + items: [], + }, + }); + + expect(updatedSpanishDoc.items).toStrictEqual([]); + }); + + it('should use fallback value if setting null', async () => { + await payload.update({ + collection: arrayCollectionSlug, + locale: spanishLocale, + id: docID, + data: { + items: [], + }, + }); + + const updatedSpanishDoc = await payload.update({ + collection: arrayCollectionSlug, + locale: spanishLocale, + id: docID, + data: { + items: null, + }, + }); + + // should return the value of the fallback locale + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + expect(updatedSpanishDoc.items[0].text).toStrictEqual(englishTitle); + }); + }); }); async function createLocalizedPost(data: {