chore: uses defaultLocale for local operations locale and fallbackLocale

This commit is contained in:
Jarrod Flesch
2023-01-10 10:38:13 -05:00
parent 6c25ad9cc2
commit 9b71aa17b3
10 changed files with 123 additions and 45 deletions

View File

@@ -44,10 +44,11 @@ export default async function createLocal<T = any>(payload: Payload, options: Op
} = options; } = options;
const collection = payload.collections[collectionSlug]; const collection = payload.collections[collectionSlug];
const defaultLocale = payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null;
req.payloadAPI = 'local'; req.payloadAPI = 'local';
req.locale = locale || req?.locale || (payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null); req.locale = locale ?? req?.locale ?? defaultLocale;
req.fallbackLocale = fallbackLocale || req?.fallbackLocale || null; req.fallbackLocale = fallbackLocale ?? req?.fallbackLocale ?? defaultLocale;
req.payload = payload; req.payload = payload;
req.i18n = i18n(payload.config.i18n); req.i18n = i18n(payload.config.i18n);
req.files = { req.files = {

View File

@@ -22,20 +22,21 @@ export default async function deleteLocal<T extends TypeWithID = any>(payload: P
collection: collectionSlug, collection: collectionSlug,
depth, depth,
id, id,
locale = payload.config.localization ? payload.config.localization?.defaultLocale : null, locale,
fallbackLocale = null, fallbackLocale,
user, user,
overrideAccess = true, overrideAccess = true,
showHiddenFields, showHiddenFields,
} = options; } = options;
const collection = payload.collections[collectionSlug]; const collection = payload.collections[collectionSlug];
const defaultLocale = payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null;
const req = { const req = {
user, user,
payloadAPI: 'local', payloadAPI: 'local',
locale, locale: locale ?? defaultLocale,
fallbackLocale, fallbackLocale: fallbackLocale ?? defaultLocale,
payload, payload,
i18n: i18n(payload.config.i18n), i18n: i18n(payload.config.i18n),
} as PayloadRequest; } as PayloadRequest;

View File

@@ -48,10 +48,11 @@ export default async function findLocal<T extends TypeWithID = any>(payload: Pay
} = options; } = options;
const collection = payload.collections[collectionSlug]; const collection = payload.collections[collectionSlug];
const defaultLocale = payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null;
req.payloadAPI = 'local'; req.payloadAPI = 'local';
req.locale = locale || req?.locale || (payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null); req.locale = locale ?? req?.locale ?? defaultLocale;
req.fallbackLocale = fallbackLocale || req?.fallbackLocale || null; req.fallbackLocale = fallbackLocale ?? req?.fallbackLocale ?? defaultLocale;
req.i18n = i18n(payload.config.i18n); req.i18n = i18n(payload.config.i18n);
req.payload = payload; req.payload = payload;

View File

@@ -39,10 +39,11 @@ export default async function findByIDLocal<T extends TypeWithID = any>(payload:
} = options; } = options;
const collection = payload.collections[collectionSlug]; const collection = payload.collections[collectionSlug];
const defaultLocale = payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null;
req.payloadAPI = 'local'; req.payloadAPI = 'local';
req.locale = locale || req?.locale || (payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null); req.locale = locale ?? req?.locale ?? defaultLocale;
req.fallbackLocale = fallbackLocale || req?.fallbackLocale || null; req.fallbackLocale = fallbackLocale ?? req?.fallbackLocale ?? defaultLocale;
req.i18n = i18n(payload.config.i18n); req.i18n = i18n(payload.config.i18n);
req.payload = payload; req.payload = payload;

View File

@@ -24,8 +24,8 @@ export default async function findVersionByIDLocal<T extends TypeWithVersion<T>
collection: collectionSlug, collection: collectionSlug,
depth, depth,
id, id,
locale = payload.config.localization ? payload.config.localization?.defaultLocale : null, locale,
fallbackLocale = null, fallbackLocale,
overrideAccess = true, overrideAccess = true,
disableErrors = false, disableErrors = false,
showHiddenFields, showHiddenFields,
@@ -33,10 +33,11 @@ export default async function findVersionByIDLocal<T extends TypeWithVersion<T>
} = options; } = options;
const collection = payload.collections[collectionSlug]; const collection = payload.collections[collectionSlug];
const defaultLocale = payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null;
req.payloadAPI = 'local'; req.payloadAPI = 'local';
req.locale = locale || req?.locale || this?.config?.localization?.defaultLocale; req.locale = locale ?? req?.locale ?? defaultLocale;
req.fallbackLocale = fallbackLocale || req?.fallbackLocale || null; req.fallbackLocale = fallbackLocale ?? req?.fallbackLocale ?? defaultLocale;
req.i18n = i18n(payload.config.i18n); req.i18n = i18n(payload.config.i18n);
req.payload = payload; req.payload = payload;

View File

@@ -28,8 +28,8 @@ export default async function findVersionsLocal<T extends TypeWithVersion<T> = a
page, page,
limit, limit,
where, where,
locale = payload.config.localization ? payload.config.localization?.defaultLocale : null, locale,
fallbackLocale = null, fallbackLocale,
user, user,
overrideAccess = true, overrideAccess = true,
showHiddenFields, showHiddenFields,
@@ -37,13 +37,14 @@ export default async function findVersionsLocal<T extends TypeWithVersion<T> = a
} = options; } = options;
const collection = payload.collections[collectionSlug]; const collection = payload.collections[collectionSlug];
const defaultLocale = payload?.config?.localization ? payload?.config?.localization?.defaultLocale : null;
const i18n = i18nInit(payload.config.i18n); const i18n = i18nInit(payload.config.i18n);
const req = { const req = {
user, user,
payloadAPI: 'local', payloadAPI: 'local',
locale, locale: locale ?? defaultLocale,
fallbackLocale, fallbackLocale: fallbackLocale ?? defaultLocale,
payload, payload,
i18n, i18n,
} as PayloadRequest; } as PayloadRequest;

View File

@@ -28,8 +28,8 @@ export default async function updateLocal<T = any>(payload: Payload, options: Op
const { const {
collection: collectionSlug, collection: collectionSlug,
depth, depth,
locale = payload.config.localization ? payload.config.localization?.defaultLocale : null, locale,
fallbackLocale = null, fallbackLocale,
data, data,
id, id,
user, user,
@@ -44,12 +44,13 @@ export default async function updateLocal<T = any>(payload: Payload, options: Op
const collection = payload.collections[collectionSlug]; const collection = payload.collections[collectionSlug];
const i18n = i18nInit(payload.config.i18n); const i18n = i18nInit(payload.config.i18n);
const defaultLocale = payload.config.localization ? payload.config.localization?.defaultLocale : null;
const req = { const req = {
user, user,
payloadAPI: 'local', payloadAPI: 'local',
locale, locale: locale ?? defaultLocale,
fallbackLocale, fallbackLocale: fallbackLocale ?? defaultLocale,
payload, payload,
i18n, i18n,
files: { files: {

View File

@@ -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,
},
],
},
],
};

View File

@@ -1,6 +1,6 @@
import { buildConfig } from '../buildConfig'; import { buildConfig } from '../buildConfig';
import { devUser } from '../credentials'; import { devUser } from '../credentials';
import { GlobalArray } from './Array'; import { ArrayCollection } from './collections/Array';
import { LocalizedPost, RelationshipLocalized } from './payload-types'; import { LocalizedPost, RelationshipLocalized } from './payload-types';
import { import {
defaultLocale, defaultLocale,
@@ -36,6 +36,7 @@ export default buildConfig({
localization: { localization: {
locales: [defaultLocale, spanishLocale], locales: [defaultLocale, spanishLocale],
defaultLocale, defaultLocale,
fallback: true,
}, },
collections: [ collections: [
{ {
@@ -65,27 +66,7 @@ export default buildConfig({
}, },
], ],
}, },
{ ArrayCollection,
slug: 'arrays',
fields: [
{
type: 'text',
name: 'requiredText',
localized: true,
},
{
type: 'array',
name: 'arrayFields',
localized: true,
fields: [
{
name: 'text',
type: 'text',
},
],
},
],
},
{ {
slug: withRequiredLocalizedFields, slug: withRequiredLocalizedFields,
fields: [ fields: [

View File

@@ -22,8 +22,9 @@ import {
spanishTitle, spanishTitle,
} from './shared'; } from './shared';
import type { Where } from '../../src/types'; import type { Where } from '../../src/types';
import { arrayCollectionSlug } from './collections/Array';
const collection = config.collections[1]?.slug; const collection = slug;
let serverURL; let serverURL;
@@ -199,6 +200,7 @@ describe('Localization', () => {
}); });
}); });
}); });
describe('Localized Relationship', () => { describe('Localized Relationship', () => {
let localizedRelation: LocalizedPost; let localizedRelation: LocalizedPost;
let localizedRelation2: LocalizedPost; let localizedRelation2: LocalizedPost;
@@ -650,6 +652,73 @@ describe('Localization', () => {
expect(result.title[spanishLocale]).toStrictEqual(spanishTitle); 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: { async function createLocalizedPost(data: {