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;
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 = {

View File

@@ -22,20 +22,21 @@ export default async function deleteLocal<T extends TypeWithID = any>(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;

View File

@@ -48,10 +48,11 @@ export default async function findLocal<T extends TypeWithID = any>(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;

View File

@@ -39,10 +39,11 @@ export default async function findByIDLocal<T extends TypeWithID = any>(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;

View File

@@ -24,8 +24,8 @@ export default async function findVersionByIDLocal<T extends TypeWithVersion<T>
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<T extends TypeWithVersion<T>
} = 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;

View File

@@ -28,8 +28,8 @@ export default async function findVersionsLocal<T extends TypeWithVersion<T> = 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<T extends TypeWithVersion<T> = 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;

View File

@@ -28,8 +28,8 @@ export default async function updateLocal<T = any>(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<T = any>(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: {

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 { 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: [

View File

@@ -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: {