@roxxel/payload-multilang 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +7 -0
- package/README.md +50 -14
- package/dist/components/LanguageListToolbar.js +4 -3
- package/dist/components/LanguageListToolbar.js.map +1 -1
- package/dist/components/LanguageMetabox.js +18 -17
- package/dist/components/LanguageMetabox.js.map +1 -1
- package/dist/components/TranslationActionsClient.js +16 -14
- package/dist/components/TranslationActionsClient.js.map +1 -1
- package/dist/components/TranslationColumnCell.js +4 -1
- package/dist/components/TranslationColumnCell.js.map +1 -1
- package/dist/components/TranslationColumnCellClient.js +16 -7
- package/dist/components/TranslationColumnCellClient.js.map +1 -1
- package/dist/components/TranslationsTab.js +9 -8
- package/dist/components/TranslationsTab.js.map +1 -1
- package/dist/constants.d.ts +4 -1
- package/dist/constants.js +4 -1
- package/dist/constants.js.map +1 -1
- package/dist/endpoints/translations.js +4 -6
- package/dist/endpoints/translations.js.map +1 -1
- package/dist/hooks/translatedCollection.d.ts +2 -1
- package/dist/hooks/translatedCollection.js +122 -15
- package/dist/hooks/translatedCollection.js.map +1 -1
- package/dist/hooks/translatedGlobal.js +5 -1
- package/dist/hooks/translatedGlobal.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +27 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/config.js +2 -10
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/data.d.ts +72 -35
- package/dist/lib/data.js +118 -60
- package/dist/lib/data.js.map +1 -1
- package/dist/translations.d.ts +72 -0
- package/dist/translations.js +72 -0
- package/dist/translations.js.map +1 -0
- package/dist/types.d.ts +0 -19
- package/dist/types.js.map +1 -1
- package/docs/configuration.md +75 -10
- package/docs/helpers.md +95 -121
- package/docs/usage.md +115 -120
- package/package.json +1 -1
- package/dist/payload-config.d.js +0 -2
- package/dist/payload-config.d.js.map +0 -1
package/dist/lib/data.d.ts
CHANGED
|
@@ -11,18 +11,17 @@ type ConfigWithMultilang = Pick<Config, 'admin'> | Pick<Payload['config'], 'admi
|
|
|
11
11
|
export declare const getLanguagesFromCustom: (custom: unknown) => MultilangLanguage[];
|
|
12
12
|
/**
|
|
13
13
|
* Returns the languages configured for payload-multilang.
|
|
14
|
-
*
|
|
15
|
-
* Pass `languages` or a Payload `config` object when you already have them. Otherwise the helper
|
|
16
|
-
* resolves the cached Payload config from `@payload-config`.
|
|
17
14
|
*/
|
|
18
|
-
export declare const getLanguages: ({ config, languages, }?: {
|
|
15
|
+
export declare const getLanguages: ({ config, languages, payload, }?: {
|
|
19
16
|
config?: ConfigWithMultilang;
|
|
20
17
|
languages?: MultilangLanguage[];
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
payload?: Payload;
|
|
19
|
+
}) => MultilangLanguage[];
|
|
20
|
+
export declare const getDefaultLanguage: ({ config, languages, payload, }: {
|
|
23
21
|
config?: ConfigWithMultilang;
|
|
24
22
|
languages?: MultilangLanguage[];
|
|
25
|
-
|
|
23
|
+
payload?: Payload;
|
|
24
|
+
}) => MultilangLanguage | undefined;
|
|
26
25
|
/**
|
|
27
26
|
* Adds a language constraint to a Payload `where` query.
|
|
28
27
|
*
|
|
@@ -30,6 +29,36 @@ export declare const getDefaultLanguage: ({ config, languages, }: {
|
|
|
30
29
|
* payload-multilang language.
|
|
31
30
|
*/
|
|
32
31
|
export declare const withLanguage: ({ fieldName, language, where, }: WithLanguageArgs) => Where;
|
|
32
|
+
export type MultilangDocumentLanguageArgs = {
|
|
33
|
+
data?: unknown;
|
|
34
|
+
doc?: unknown;
|
|
35
|
+
fallback?: string;
|
|
36
|
+
fieldName?: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Resolves a document's payload-multilang language from draft/form data first, then persisted doc data.
|
|
40
|
+
*
|
|
41
|
+
* Useful in Payload admin preview and livePreview URL builders where unsaved form data may already
|
|
42
|
+
* contain the selected language.
|
|
43
|
+
*/
|
|
44
|
+
export declare const getMultilangDocumentLanguage: ({ data, doc, fallback, fieldName, }: MultilangDocumentLanguageArgs) => string | undefined;
|
|
45
|
+
export type LocalizedSlugQueryStatus = 'any' | 'draft' | 'published';
|
|
46
|
+
export type LocalizedSlugQueryArgs = {
|
|
47
|
+
fieldName?: string;
|
|
48
|
+
language: string;
|
|
49
|
+
slug: string;
|
|
50
|
+
slugFieldName?: string;
|
|
51
|
+
status?: LocalizedSlugQueryStatus;
|
|
52
|
+
where?: Where;
|
|
53
|
+
};
|
|
54
|
+
export type LocalizedSlugQuery = {
|
|
55
|
+
draft?: boolean;
|
|
56
|
+
where: Where;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Builds the common Payload Local API query for per-language documents addressed by slug.
|
|
60
|
+
*/
|
|
61
|
+
export declare const localizedSlugQuery: ({ slug, fieldName, language, slugFieldName, status, where, }: LocalizedSlugQueryArgs) => LocalizedSlugQuery;
|
|
33
62
|
export declare const getDocumentTranslationsWithPayload: <TDoc extends DocumentData = DocumentData>({ id, collection, fieldNames, overrideAccess, payload, req, }: {
|
|
34
63
|
collection: CollectionSlug;
|
|
35
64
|
fieldNames?: MultilangFieldNames;
|
|
@@ -48,26 +77,15 @@ export declare const getGroupTranslationsWithPayload: <TDoc extends DocumentData
|
|
|
48
77
|
}) => Promise<TranslationState<TDoc>>;
|
|
49
78
|
/**
|
|
50
79
|
* Returns the source document and every document in the same translation group, keyed by language.
|
|
51
|
-
*
|
|
52
|
-
* The helper resolves Payload with the cached project config, so callers only need to pass the
|
|
53
|
-
* collection slug and document id.
|
|
54
|
-
*/
|
|
55
|
-
export declare const getDocumentTranslations: <TDoc extends DocumentData = DocumentData>({ id, collection, fieldNames, }: {
|
|
56
|
-
collection: CollectionSlug;
|
|
57
|
-
fieldNames?: MultilangFieldNames;
|
|
58
|
-
id: number | string;
|
|
59
|
-
}) => Promise<TranslationState<TDoc>>;
|
|
60
|
-
/**
|
|
61
|
-
* Returns one target-language document from the source document's translation group.
|
|
62
|
-
*
|
|
63
|
-
* The helper resolves Payload with the cached project config, so callers only need to pass the
|
|
64
|
-
* collection slug, source document id, and target language code.
|
|
65
80
|
*/
|
|
66
|
-
export declare const
|
|
81
|
+
export declare const getDocumentTranslationWithPayload: <TDoc extends DocumentData = DocumentData>({ id, collection, fieldNames, language, overrideAccess, payload, req, }: {
|
|
67
82
|
collection: CollectionSlug;
|
|
68
83
|
fieldNames?: MultilangFieldNames;
|
|
69
84
|
id: number | string;
|
|
70
85
|
language: string;
|
|
86
|
+
overrideAccess?: boolean;
|
|
87
|
+
payload: Payload;
|
|
88
|
+
req?: PayloadRequest;
|
|
71
89
|
}) => Promise<TDoc | undefined>;
|
|
72
90
|
export declare const findGlobalByLanguageWithPayload: <TDoc extends DocumentData = DocumentData>({ slug, depth, language, overrideAccess, payload, req, }: {
|
|
73
91
|
depth?: number;
|
|
@@ -86,22 +104,41 @@ export declare const updateGlobalByLanguageWithPayload: <TDoc extends DocumentDa
|
|
|
86
104
|
req?: PayloadRequest;
|
|
87
105
|
slug: GlobalSlug;
|
|
88
106
|
}) => Promise<TDoc>;
|
|
89
|
-
export declare const
|
|
90
|
-
depth?: number;
|
|
91
|
-
language: string;
|
|
92
|
-
slug: GlobalSlug;
|
|
93
|
-
}) => Promise<TDoc>;
|
|
94
|
-
export declare const updateGlobalByLanguage: <TDoc extends DocumentData = DocumentData>({ slug, data, depth, language, }: {
|
|
95
|
-
data: Record<string, unknown>;
|
|
96
|
-
depth?: number;
|
|
97
|
-
language: string;
|
|
98
|
-
slug: GlobalSlug;
|
|
99
|
-
}) => Promise<TDoc>;
|
|
100
|
-
export declare const duplicateDocumentData: ({ collection, doc, duplicateExcludeFields, fieldNames, targetLanguage, }: {
|
|
107
|
+
export declare const duplicateDocumentData: ({ collection, doc, fieldNames, targetLanguage, }: {
|
|
101
108
|
collection: CollectionConfig;
|
|
102
109
|
doc: DocumentData;
|
|
103
|
-
duplicateExcludeFields: string[];
|
|
104
110
|
fieldNames: MultilangFieldNames;
|
|
105
111
|
targetLanguage: string;
|
|
106
112
|
}) => DocumentData;
|
|
113
|
+
export type PayloadFactory = () => Payload | Promise<Payload>;
|
|
114
|
+
export type GetDocumentTranslationsArgs = {
|
|
115
|
+
collection: CollectionSlug;
|
|
116
|
+
fieldNames?: MultilangFieldNames;
|
|
117
|
+
id: number | string;
|
|
118
|
+
overrideAccess?: boolean;
|
|
119
|
+
req?: PayloadRequest;
|
|
120
|
+
};
|
|
121
|
+
export type GetDocumentTranslationArgs = {
|
|
122
|
+
language: string;
|
|
123
|
+
} & GetDocumentTranslationsArgs;
|
|
124
|
+
export type FindGlobalByLanguageArgs = {
|
|
125
|
+
depth?: number;
|
|
126
|
+
language: string;
|
|
127
|
+
overrideAccess?: boolean;
|
|
128
|
+
req?: PayloadRequest;
|
|
129
|
+
slug: GlobalSlug;
|
|
130
|
+
};
|
|
131
|
+
export type UpdateGlobalByLanguageArgs = {
|
|
132
|
+
data: Record<string, unknown>;
|
|
133
|
+
} & FindGlobalByLanguageArgs;
|
|
134
|
+
export type MultilangHelpers = {
|
|
135
|
+
findGlobalByLanguage: <TDoc extends DocumentData = DocumentData>(args: FindGlobalByLanguageArgs) => Promise<TDoc>;
|
|
136
|
+
getDocumentTranslation: <TDoc extends DocumentData = DocumentData>(args: GetDocumentTranslationArgs) => Promise<TDoc | undefined>;
|
|
137
|
+
getDocumentTranslations: <TDoc extends DocumentData = DocumentData>(args: GetDocumentTranslationsArgs) => Promise<TranslationState<TDoc>>;
|
|
138
|
+
getLanguages: () => Promise<MultilangLanguage[]>;
|
|
139
|
+
updateGlobalByLanguage: <TDoc extends DocumentData = DocumentData>(args: UpdateGlobalByLanguageArgs) => Promise<TDoc>;
|
|
140
|
+
};
|
|
141
|
+
export declare const createMultilangHelpers: ({ getPayload, }: {
|
|
142
|
+
getPayload: PayloadFactory;
|
|
143
|
+
}) => MultilangHelpers;
|
|
107
144
|
export {};
|
package/dist/lib/data.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { getPayload } from 'payload';
|
|
3
|
-
import { DEFAULT_FIELD_NAMES } from '../constants.js';
|
|
1
|
+
import { DEFAULT_FIELD_NAMES, SYSTEM_DUPLICATION_EXCLUDED_FIELDS } from '../constants.js';
|
|
4
2
|
export const asDocument = (value)=>value && typeof value === 'object' ? value : {};
|
|
5
3
|
export const getStringValue = (value)=>typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
6
4
|
export const getID = (value)=>typeof value === 'number' || typeof value === 'string' ? value : undefined;
|
|
@@ -29,25 +27,23 @@ export const getLanguagesFromCustom = (custom)=>{
|
|
|
29
27
|
};
|
|
30
28
|
/**
|
|
31
29
|
* Returns the languages configured for payload-multilang.
|
|
32
|
-
|
|
33
|
-
* Pass `languages` or a Payload `config` object when you already have them. Otherwise the helper
|
|
34
|
-
* resolves the cached Payload config from `@payload-config`.
|
|
35
|
-
*/ export const getLanguages = async ({ config, languages } = {})=>{
|
|
30
|
+
*/ export const getLanguages = ({ config, languages, payload } = {})=>{
|
|
36
31
|
if (languages) {
|
|
37
32
|
return languages.map(normalizeLanguage).filter((language)=>language.code);
|
|
38
33
|
}
|
|
34
|
+
if (payload) {
|
|
35
|
+
return getLanguagesFromCustom(payload.config.admin?.custom);
|
|
36
|
+
}
|
|
39
37
|
if (config) {
|
|
40
38
|
return getLanguagesFromCustom(config.admin?.custom);
|
|
41
39
|
}
|
|
42
|
-
|
|
43
|
-
config: payloadConfig
|
|
44
|
-
});
|
|
45
|
-
return getLanguagesFromCustom(payload.config.admin?.custom);
|
|
40
|
+
throw new Error('getLanguages requires languages, config, or payload. Use createMultilangHelpers({ getPayload }) for app-level convenience.');
|
|
46
41
|
};
|
|
47
|
-
export const getDefaultLanguage =
|
|
48
|
-
const configuredLanguages =
|
|
42
|
+
export const getDefaultLanguage = ({ config, languages, payload })=>{
|
|
43
|
+
const configuredLanguages = getLanguages({
|
|
49
44
|
config,
|
|
50
|
-
languages
|
|
45
|
+
languages,
|
|
46
|
+
payload
|
|
51
47
|
});
|
|
52
48
|
return configuredLanguages.find((language)=>language.isDefault) || configuredLanguages[0];
|
|
53
49
|
};
|
|
@@ -72,6 +68,46 @@ export const getDefaultLanguage = async ({ config, languages })=>{
|
|
|
72
68
|
]
|
|
73
69
|
};
|
|
74
70
|
};
|
|
71
|
+
/**
|
|
72
|
+
* Resolves a document's payload-multilang language from draft/form data first, then persisted doc data.
|
|
73
|
+
*
|
|
74
|
+
* Useful in Payload admin preview and livePreview URL builders where unsaved form data may already
|
|
75
|
+
* contain the selected language.
|
|
76
|
+
*/ export const getMultilangDocumentLanguage = ({ data, doc, fallback, fieldName = DEFAULT_FIELD_NAMES.language })=>getStringValue(asDocument(data)[fieldName]) || getStringValue(asDocument(doc)[fieldName]) || fallback;
|
|
77
|
+
/**
|
|
78
|
+
* Builds the common Payload Local API query for per-language documents addressed by slug.
|
|
79
|
+
*/ export const localizedSlugQuery = ({ slug, fieldName = DEFAULT_FIELD_NAMES.language, language, slugFieldName = 'slug', status = 'published', where })=>{
|
|
80
|
+
const constraints = [
|
|
81
|
+
{
|
|
82
|
+
[slugFieldName]: {
|
|
83
|
+
equals: slug
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
[fieldName]: {
|
|
88
|
+
equals: language
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
];
|
|
92
|
+
if (where) {
|
|
93
|
+
constraints.unshift(where);
|
|
94
|
+
}
|
|
95
|
+
if (status !== 'any') {
|
|
96
|
+
constraints.push({
|
|
97
|
+
_status: {
|
|
98
|
+
equals: status
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
...status === 'draft' ? {
|
|
104
|
+
draft: true
|
|
105
|
+
} : {},
|
|
106
|
+
where: constraints.length === 1 ? constraints[0] : {
|
|
107
|
+
and: constraints
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
};
|
|
75
111
|
export const getDocumentTranslationsWithPayload = async ({ id, collection, fieldNames = DEFAULT_FIELD_NAMES, overrideAccess = true, payload, req })=>{
|
|
76
112
|
const source = asDocument(await payload.findByID({
|
|
77
113
|
id,
|
|
@@ -146,30 +182,14 @@ export const getGroupTranslationsWithPayload = async ({ collection, fieldNames =
|
|
|
146
182
|
};
|
|
147
183
|
/**
|
|
148
184
|
* Returns the source document and every document in the same translation group, keyed by language.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
* collection slug and document id.
|
|
152
|
-
*/ export const getDocumentTranslations = async ({ id, collection, fieldNames })=>{
|
|
153
|
-
const payload = await getPayload({
|
|
154
|
-
config: payloadConfig
|
|
155
|
-
});
|
|
156
|
-
return getDocumentTranslationsWithPayload({
|
|
185
|
+
*/ export const getDocumentTranslationWithPayload = async ({ id, collection, fieldNames, language, overrideAccess = true, payload, req })=>{
|
|
186
|
+
const state = await getDocumentTranslationsWithPayload({
|
|
157
187
|
id,
|
|
158
188
|
collection,
|
|
159
189
|
fieldNames,
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* Returns one target-language document from the source document's translation group.
|
|
165
|
-
*
|
|
166
|
-
* The helper resolves Payload with the cached project config, so callers only need to pass the
|
|
167
|
-
* collection slug, source document id, and target language code.
|
|
168
|
-
*/ export const getDocumentTranslation = async ({ id, collection, fieldNames, language })=>{
|
|
169
|
-
const state = await getDocumentTranslations({
|
|
170
|
-
id,
|
|
171
|
-
collection,
|
|
172
|
-
fieldNames
|
|
190
|
+
overrideAccess,
|
|
191
|
+
payload,
|
|
192
|
+
req
|
|
173
193
|
});
|
|
174
194
|
return state.translations[language];
|
|
175
195
|
};
|
|
@@ -257,36 +277,41 @@ export const updateGlobalByLanguageWithPayload = async ({ slug, data, depth, lan
|
|
|
257
277
|
language
|
|
258
278
|
});
|
|
259
279
|
};
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
280
|
+
const fieldAffectsData = (field)=>'name' in field && typeof field.name === 'string' && field.type !== 'ui';
|
|
281
|
+
const duplicateFieldValue = (field, value)=>{
|
|
282
|
+
if (field.type === 'array' && Array.isArray(value)) {
|
|
283
|
+
return value.map((row)=>duplicateRowValue(asDocument(row), field.fields));
|
|
284
|
+
}
|
|
285
|
+
if (field.type === 'blocks' && Array.isArray(value)) {
|
|
286
|
+
return value.map((row)=>{
|
|
287
|
+
const rowData = asDocument(row);
|
|
288
|
+
const block = field.blocks.find((candidate)=>candidate.slug === getStringValue(rowData.blockType));
|
|
289
|
+
return duplicateRowValue(rowData, block?.fields || []);
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
return value;
|
|
270
293
|
};
|
|
271
|
-
|
|
272
|
-
const
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
294
|
+
const duplicateRowValue = (row, fields)=>{
|
|
295
|
+
const data = Object.entries(row).reduce((acc, [key, value])=>{
|
|
296
|
+
if (key !== 'id') {
|
|
297
|
+
acc[key] = value;
|
|
298
|
+
}
|
|
299
|
+
return acc;
|
|
300
|
+
}, {});
|
|
301
|
+
for (const field of fields){
|
|
302
|
+
if (!fieldAffectsData(field) || !(field.name in data)) {
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
data[field.name] = duplicateFieldValue(field, data[field.name]);
|
|
306
|
+
}
|
|
307
|
+
return data;
|
|
282
308
|
};
|
|
283
|
-
const
|
|
284
|
-
export const duplicateDocumentData = ({ collection, doc, duplicateExcludeFields, fieldNames, targetLanguage })=>{
|
|
309
|
+
export const duplicateDocumentData = ({ collection, doc, fieldNames, targetLanguage })=>{
|
|
285
310
|
const excluded = new Set([
|
|
286
311
|
fieldNames.group,
|
|
287
312
|
fieldNames.language,
|
|
288
313
|
fieldNames.meta,
|
|
289
|
-
...
|
|
314
|
+
...SYSTEM_DUPLICATION_EXCLUDED_FIELDS
|
|
290
315
|
]);
|
|
291
316
|
const data = {};
|
|
292
317
|
for (const field of collection.fields || []){
|
|
@@ -296,12 +321,45 @@ export const duplicateDocumentData = ({ collection, doc, duplicateExcludeFields,
|
|
|
296
321
|
if (!(field.name in doc)) {
|
|
297
322
|
continue;
|
|
298
323
|
}
|
|
299
|
-
data[field.name] = doc[field.name];
|
|
324
|
+
data[field.name] = duplicateFieldValue(field, doc[field.name]);
|
|
300
325
|
}
|
|
301
326
|
if (typeof data.slug === 'string' && data.slug.length > 0) {
|
|
302
327
|
data.slug = `${data.slug}-${targetLanguage}`;
|
|
303
328
|
}
|
|
304
329
|
return data;
|
|
305
330
|
};
|
|
331
|
+
export const createMultilangHelpers = ({ getPayload })=>{
|
|
332
|
+
const resolvePayload = async ()=>getPayload();
|
|
333
|
+
return {
|
|
334
|
+
findGlobalByLanguage: async ({ slug, depth, language, overrideAccess, req })=>findGlobalByLanguageWithPayload({
|
|
335
|
+
slug,
|
|
336
|
+
depth,
|
|
337
|
+
language,
|
|
338
|
+
overrideAccess,
|
|
339
|
+
payload: await resolvePayload(),
|
|
340
|
+
req
|
|
341
|
+
}),
|
|
342
|
+
getDocumentTranslation: async (args)=>getDocumentTranslationWithPayload({
|
|
343
|
+
...args,
|
|
344
|
+
payload: await resolvePayload()
|
|
345
|
+
}),
|
|
346
|
+
getDocumentTranslations: async (args)=>getDocumentTranslationsWithPayload({
|
|
347
|
+
...args,
|
|
348
|
+
payload: await resolvePayload()
|
|
349
|
+
}),
|
|
350
|
+
getLanguages: async ()=>getLanguages({
|
|
351
|
+
payload: await resolvePayload()
|
|
352
|
+
}),
|
|
353
|
+
updateGlobalByLanguage: async ({ slug, data, depth, language, overrideAccess, req })=>updateGlobalByLanguageWithPayload({
|
|
354
|
+
slug,
|
|
355
|
+
data,
|
|
356
|
+
depth,
|
|
357
|
+
language,
|
|
358
|
+
overrideAccess,
|
|
359
|
+
payload: await resolvePayload(),
|
|
360
|
+
req
|
|
361
|
+
})
|
|
362
|
+
};
|
|
363
|
+
};
|
|
306
364
|
|
|
307
365
|
//# sourceMappingURL=data.js.map
|
package/dist/lib/data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/data.ts"],"sourcesContent":["import type {\n CollectionConfig,\n CollectionSlug,\n Config,\n Field,\n GlobalSlug,\n Payload,\n PayloadRequest,\n Where,\n} from 'payload'\n\nimport payloadConfig from '@payload-config'\nimport { getPayload } from 'payload'\n\nimport type {\n MultilangFieldNames,\n MultilangLanguage,\n TranslationState,\n WithLanguageArgs,\n} from '../types.js'\n\nimport { DEFAULT_FIELD_NAMES } from '../constants.js'\n\nexport type DocumentData = {\n id?: number | string\n} & Record<string, unknown>\n\nexport const asDocument = (value: unknown): DocumentData =>\n value && typeof value === 'object' ? (value as DocumentData) : {}\n\nexport const getStringValue = (value: unknown): string | undefined =>\n typeof value === 'string' && value.length > 0 ? value : undefined\n\nexport const getID = (value: unknown): number | string | undefined =>\n typeof value === 'number' || typeof value === 'string' ? value : undefined\n\nexport const normalizeLanguage = (doc: unknown): MultilangLanguage => {\n const data = asDocument(doc)\n const code = getStringValue(data.code)?.trim().toLowerCase() || ''\n\n return {\n id: getID(data.id),\n name: getStringValue(data.name)?.trim() || code,\n active: data.active !== false,\n code,\n direction: data.direction === 'rtl' ? 'rtl' : 'ltr',\n flagLabel: getStringValue(data.flagLabel),\n isDefault: data.isDefault === true,\n locale: getStringValue(data.locale),\n order: typeof data.order === 'number' ? data.order : 0,\n }\n}\n\ntype ConfigWithMultilang = Pick<Config, 'admin'> | Pick<Payload['config'], 'admin'>\n\nexport const getLanguagesFromCustom = (custom: unknown): MultilangLanguage[] => {\n const payloadMultilang = asDocument(asDocument(custom).payloadMultilang)\n const languages = payloadMultilang.languages\n\n if (!Array.isArray(languages)) {\n return []\n }\n\n return languages.map(normalizeLanguage).filter((language) => language.code)\n}\n\n/**\n * Returns the languages configured for payload-multilang.\n *\n * Pass `languages` or a Payload `config` object when you already have them. Otherwise the helper\n * resolves the cached Payload config from `@payload-config`.\n */\nexport const getLanguages = async ({\n config,\n languages,\n}: {\n config?: ConfigWithMultilang\n languages?: MultilangLanguage[]\n} = {}): Promise<MultilangLanguage[]> => {\n if (languages) {\n return languages.map(normalizeLanguage).filter((language) => language.code)\n }\n\n if (config) {\n return getLanguagesFromCustom(config.admin?.custom)\n }\n\n const payload = await getPayload({ config: payloadConfig })\n\n return getLanguagesFromCustom(payload.config.admin?.custom)\n}\n\nexport const getDefaultLanguage = async ({\n config,\n languages,\n}: {\n config?: ConfigWithMultilang\n languages?: MultilangLanguage[]\n}): Promise<MultilangLanguage | undefined> => {\n const configuredLanguages = await getLanguages({ config, languages })\n\n return configuredLanguages.find((language) => language.isDefault) || configuredLanguages[0]\n}\n\n/**\n * Adds a language constraint to a Payload `where` query.\n *\n * Use this when querying an enabled collection directly and you only want documents for one\n * payload-multilang language.\n */\nexport const withLanguage = ({\n fieldName = DEFAULT_FIELD_NAMES.language,\n language,\n where,\n}: WithLanguageArgs): Where => {\n const languageWhere: Where = {\n [fieldName]: {\n equals: language,\n },\n }\n\n if (!where) {\n return languageWhere\n }\n\n return {\n and: [where, languageWhere],\n }\n}\n\nexport const getDocumentTranslationsWithPayload = async <TDoc extends DocumentData = DocumentData>({\n id,\n collection,\n fieldNames = DEFAULT_FIELD_NAMES,\n overrideAccess = true,\n payload,\n req,\n}: {\n collection: CollectionSlug\n fieldNames?: MultilangFieldNames\n id: number | string\n overrideAccess?: boolean\n payload: Payload\n req?: PayloadRequest\n}): Promise<TranslationState<TDoc>> => {\n const source = asDocument(\n await payload.findByID({\n id,\n collection,\n depth: 0,\n overrideAccess,\n req,\n }),\n ) as TDoc\n\n const group = getStringValue(source[fieldNames.group])\n const language = getStringValue(source[fieldNames.language])\n\n if (!group) {\n return {\n language,\n source,\n translations: language ? { [language]: source } : {},\n }\n }\n\n const result = await payload.find({\n collection,\n depth: 0,\n limit: 200,\n overrideAccess,\n req,\n where: {\n [fieldNames.group]: {\n equals: group,\n },\n },\n })\n\n const translations = result.docs.reduce<TranslationState<TDoc>['translations']>((acc, doc) => {\n const translation = asDocument(doc) as TDoc\n const code = getStringValue(translation[fieldNames.language])\n\n if (code) {\n acc[code] = translation\n }\n\n return acc\n }, {})\n\n return {\n group,\n language,\n source,\n translations,\n }\n}\n\nexport const getGroupTranslationsWithPayload = async <TDoc extends DocumentData = DocumentData>({\n collection,\n fieldNames = DEFAULT_FIELD_NAMES,\n group,\n overrideAccess = true,\n payload,\n req,\n}: {\n collection: CollectionSlug\n fieldNames?: MultilangFieldNames\n group: string\n overrideAccess?: boolean\n payload: Payload\n req?: PayloadRequest\n}): Promise<TranslationState<TDoc>> => {\n const result = await payload.find({\n collection,\n depth: 0,\n limit: 200,\n overrideAccess,\n req,\n where: {\n [fieldNames.group]: {\n equals: group,\n },\n },\n })\n\n const translations = result.docs.reduce<TranslationState<TDoc>['translations']>((acc, doc) => {\n const translation = asDocument(doc) as TDoc\n const code = getStringValue(translation[fieldNames.language])\n\n if (code) {\n acc[code] = translation\n }\n\n return acc\n }, {})\n\n return {\n group,\n translations,\n }\n}\n\n/**\n * Returns the source document and every document in the same translation group, keyed by language.\n *\n * The helper resolves Payload with the cached project config, so callers only need to pass the\n * collection slug and document id.\n */\nexport const getDocumentTranslations = async <TDoc extends DocumentData = DocumentData>({\n id,\n collection,\n fieldNames,\n}: {\n collection: CollectionSlug\n fieldNames?: MultilangFieldNames\n id: number | string\n}): Promise<TranslationState<TDoc>> => {\n const payload = await getPayload({ config: payloadConfig })\n\n return getDocumentTranslationsWithPayload<TDoc>({\n id,\n collection,\n fieldNames,\n payload,\n })\n}\n\n/**\n * Returns one target-language document from the source document's translation group.\n *\n * The helper resolves Payload with the cached project config, so callers only need to pass the\n * collection slug, source document id, and target language code.\n */\nexport const getDocumentTranslation = async <TDoc extends DocumentData = DocumentData>({\n id,\n collection,\n fieldNames,\n language,\n}: {\n collection: CollectionSlug\n fieldNames?: MultilangFieldNames\n id: number | string\n language: string\n}): Promise<TDoc | undefined> => {\n const state = await getDocumentTranslations<TDoc>({\n id,\n collection,\n fieldNames,\n })\n\n return state.translations[language]\n}\n\nconst GLOBAL_SYSTEM_FIELDS = new Set(['_status', 'createdAt', 'globalType', 'id', 'updatedAt'])\n\nconst getGlobalPayloadMultilangCustom = ({\n slug,\n payload,\n}: {\n payload: Payload\n slug: GlobalSlug\n}): {\n defaultLanguage?: MultilangLanguage\n languages?: MultilangLanguage[]\n} => {\n const global = payload.config.globals.find((item) => item.slug === slug)\n const payloadMultilang = asDocument(asDocument(global?.admin?.custom).payloadMultilang)\n\n return payloadMultilang as {\n defaultLanguage?: MultilangLanguage\n languages?: MultilangLanguage[]\n }\n}\n\nconst validateGlobalLanguage = ({\n slug,\n language,\n payload,\n}: {\n language: string\n payload: Payload\n slug: GlobalSlug\n}): void => {\n const languages = getGlobalPayloadMultilangCustom({ slug, payload }).languages\n\n if (!Array.isArray(languages) || languages.length === 0) {\n return\n }\n\n if (!languages.some((candidate) => candidate.code === language)) {\n throw new Error(`Language \"${language}\" is not configured for ${slug}.`)\n }\n}\n\nconst getGlobalLanguageTab = <TDoc extends DocumentData = DocumentData>({\n doc,\n language,\n}: {\n doc: DocumentData\n language: string\n}): TDoc => {\n const languageData = asDocument(doc[language])\n const systemData = Object.entries(doc).reduce<DocumentData>((acc, [key, value]) => {\n if (GLOBAL_SYSTEM_FIELDS.has(key)) {\n acc[key] = value\n }\n\n return acc\n }, {})\n\n return {\n ...systemData,\n ...languageData,\n } as TDoc\n}\n\nexport const findGlobalByLanguageWithPayload = async <TDoc extends DocumentData = DocumentData>({\n slug,\n depth,\n language,\n overrideAccess = true,\n payload,\n req,\n}: {\n depth?: number\n language: string\n overrideAccess?: boolean\n payload: Payload\n req?: PayloadRequest\n slug: GlobalSlug\n}): Promise<TDoc> => {\n validateGlobalLanguage({ slug, language, payload })\n\n const doc = asDocument(\n await payload.findGlobal({\n slug,\n depth,\n overrideAccess,\n req,\n } as never),\n )\n\n return getGlobalLanguageTab<TDoc>({\n doc,\n language,\n })\n}\n\nexport const updateGlobalByLanguageWithPayload = async <TDoc extends DocumentData = DocumentData>({\n slug,\n data,\n depth,\n language,\n overrideAccess = true,\n payload,\n req,\n}: {\n data: Record<string, unknown>\n depth?: number\n language: string\n overrideAccess?: boolean\n payload: Payload\n req?: PayloadRequest\n slug: GlobalSlug\n}): Promise<TDoc> => {\n validateGlobalLanguage({ slug, language, payload })\n\n const currentDoc = asDocument(\n await payload.findGlobal({\n slug,\n depth: 0,\n overrideAccess,\n req,\n } as never),\n )\n const currentLanguageData = asDocument(currentDoc[language])\n\n const doc = asDocument(\n await payload.updateGlobal({\n slug,\n data: {\n [language]: {\n ...currentLanguageData,\n ...data,\n },\n },\n depth,\n overrideAccess,\n req,\n } as never),\n )\n\n return getGlobalLanguageTab<TDoc>({\n doc,\n language,\n })\n}\n\nexport const findGlobalByLanguage = async <TDoc extends DocumentData = DocumentData>({\n slug,\n depth,\n language,\n}: {\n depth?: number\n language: string\n slug: GlobalSlug\n}): Promise<TDoc> => {\n const payload = await getPayload({ config: payloadConfig })\n\n return findGlobalByLanguageWithPayload<TDoc>({\n slug,\n depth,\n language,\n payload,\n })\n}\n\nexport const updateGlobalByLanguage = async <TDoc extends DocumentData = DocumentData>({\n slug,\n data,\n depth,\n language,\n}: {\n data: Record<string, unknown>\n depth?: number\n language: string\n slug: GlobalSlug\n}): Promise<TDoc> => {\n const payload = await getPayload({ config: payloadConfig })\n\n return updateGlobalByLanguageWithPayload<TDoc>({\n slug,\n data,\n depth,\n language,\n payload,\n })\n}\n\nconst fieldAffectsData = (field: Field): field is { name: string } & Field =>\n 'name' in field && typeof field.name === 'string' && field.type !== 'ui'\n\nexport const duplicateDocumentData = ({\n collection,\n doc,\n duplicateExcludeFields,\n fieldNames,\n targetLanguage,\n}: {\n collection: CollectionConfig\n doc: DocumentData\n duplicateExcludeFields: string[]\n fieldNames: MultilangFieldNames\n targetLanguage: string\n}): DocumentData => {\n const excluded = new Set([\n fieldNames.group,\n fieldNames.language,\n fieldNames.meta,\n ...duplicateExcludeFields,\n ])\n\n const data: DocumentData = {}\n\n for (const field of collection.fields || []) {\n if (!fieldAffectsData(field) || excluded.has(field.name)) {\n continue\n }\n\n if (!(field.name in doc)) {\n continue\n }\n\n data[field.name] = doc[field.name]\n }\n\n if (typeof data.slug === 'string' && data.slug.length > 0) {\n data.slug = `${data.slug}-${targetLanguage}`\n }\n\n return data\n}\n"],"names":["payloadConfig","getPayload","DEFAULT_FIELD_NAMES","asDocument","value","getStringValue","length","undefined","getID","normalizeLanguage","doc","data","code","trim","toLowerCase","id","name","active","direction","flagLabel","isDefault","locale","order","getLanguagesFromCustom","custom","payloadMultilang","languages","Array","isArray","map","filter","language","getLanguages","config","admin","payload","getDefaultLanguage","configuredLanguages","find","withLanguage","fieldName","where","languageWhere","equals","and","getDocumentTranslationsWithPayload","collection","fieldNames","overrideAccess","req","source","findByID","depth","group","translations","result","limit","docs","reduce","acc","translation","getGroupTranslationsWithPayload","getDocumentTranslations","getDocumentTranslation","state","GLOBAL_SYSTEM_FIELDS","Set","getGlobalPayloadMultilangCustom","slug","global","globals","item","validateGlobalLanguage","some","candidate","Error","getGlobalLanguageTab","languageData","systemData","Object","entries","key","has","findGlobalByLanguageWithPayload","findGlobal","updateGlobalByLanguageWithPayload","currentDoc","currentLanguageData","updateGlobal","findGlobalByLanguage","updateGlobalByLanguage","fieldAffectsData","field","type","duplicateDocumentData","duplicateExcludeFields","targetLanguage","excluded","meta","fields"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/data.ts"],"sourcesContent":["import type {\n CollectionConfig,\n CollectionSlug,\n Config,\n Field,\n GlobalSlug,\n Payload,\n PayloadRequest,\n Where,\n} from 'payload'\n\nimport type {\n MultilangFieldNames,\n MultilangLanguage,\n TranslationState,\n WithLanguageArgs,\n} from '../types.js'\n\nimport { DEFAULT_FIELD_NAMES, SYSTEM_DUPLICATION_EXCLUDED_FIELDS } from '../constants.js'\n\nexport type DocumentData = {\n id?: number | string\n} & Record<string, unknown>\n\nexport const asDocument = (value: unknown): DocumentData =>\n value && typeof value === 'object' ? (value as DocumentData) : {}\n\nexport const getStringValue = (value: unknown): string | undefined =>\n typeof value === 'string' && value.length > 0 ? value : undefined\n\nexport const getID = (value: unknown): number | string | undefined =>\n typeof value === 'number' || typeof value === 'string' ? value : undefined\n\nexport const normalizeLanguage = (doc: unknown): MultilangLanguage => {\n const data = asDocument(doc)\n const code = getStringValue(data.code)?.trim().toLowerCase() || ''\n\n return {\n id: getID(data.id),\n name: getStringValue(data.name)?.trim() || code,\n active: data.active !== false,\n code,\n direction: data.direction === 'rtl' ? 'rtl' : 'ltr',\n flagLabel: getStringValue(data.flagLabel),\n isDefault: data.isDefault === true,\n locale: getStringValue(data.locale),\n order: typeof data.order === 'number' ? data.order : 0,\n }\n}\n\ntype ConfigWithMultilang = Pick<Config, 'admin'> | Pick<Payload['config'], 'admin'>\n\nexport const getLanguagesFromCustom = (custom: unknown): MultilangLanguage[] => {\n const payloadMultilang = asDocument(asDocument(custom).payloadMultilang)\n const languages = payloadMultilang.languages\n\n if (!Array.isArray(languages)) {\n return []\n }\n\n return languages.map(normalizeLanguage).filter((language) => language.code)\n}\n\n/**\n * Returns the languages configured for payload-multilang.\n */\nexport const getLanguages = ({\n config,\n languages,\n payload,\n}: {\n config?: ConfigWithMultilang\n languages?: MultilangLanguage[]\n payload?: Payload\n} = {}): MultilangLanguage[] => {\n if (languages) {\n return languages.map(normalizeLanguage).filter((language) => language.code)\n }\n\n if (payload) {\n return getLanguagesFromCustom(payload.config.admin?.custom)\n }\n\n if (config) {\n return getLanguagesFromCustom(config.admin?.custom)\n }\n\n throw new Error(\n 'getLanguages requires languages, config, or payload. Use createMultilangHelpers({ getPayload }) for app-level convenience.',\n )\n}\n\nexport const getDefaultLanguage = ({\n config,\n languages,\n payload,\n}: {\n config?: ConfigWithMultilang\n languages?: MultilangLanguage[]\n payload?: Payload\n}): MultilangLanguage | undefined => {\n const configuredLanguages = getLanguages({ config, languages, payload })\n\n return configuredLanguages.find((language) => language.isDefault) || configuredLanguages[0]\n}\n\n/**\n * Adds a language constraint to a Payload `where` query.\n *\n * Use this when querying an enabled collection directly and you only want documents for one\n * payload-multilang language.\n */\nexport const withLanguage = ({\n fieldName = DEFAULT_FIELD_NAMES.language,\n language,\n where,\n}: WithLanguageArgs): Where => {\n const languageWhere: Where = {\n [fieldName]: {\n equals: language,\n },\n }\n\n if (!where) {\n return languageWhere\n }\n\n return {\n and: [where, languageWhere],\n }\n}\n\nexport type MultilangDocumentLanguageArgs = {\n data?: unknown\n doc?: unknown\n fallback?: string\n fieldName?: string\n}\n\n/**\n * Resolves a document's payload-multilang language from draft/form data first, then persisted doc data.\n *\n * Useful in Payload admin preview and livePreview URL builders where unsaved form data may already\n * contain the selected language.\n */\nexport const getMultilangDocumentLanguage = ({\n data,\n doc,\n fallback,\n fieldName = DEFAULT_FIELD_NAMES.language,\n}: MultilangDocumentLanguageArgs): string | undefined =>\n getStringValue(asDocument(data)[fieldName]) ||\n getStringValue(asDocument(doc)[fieldName]) ||\n fallback\n\nexport type LocalizedSlugQueryStatus = 'any' | 'draft' | 'published'\n\nexport type LocalizedSlugQueryArgs = {\n fieldName?: string\n language: string\n slug: string\n slugFieldName?: string\n status?: LocalizedSlugQueryStatus\n where?: Where\n}\n\nexport type LocalizedSlugQuery = {\n draft?: boolean\n where: Where\n}\n\n/**\n * Builds the common Payload Local API query for per-language documents addressed by slug.\n */\nexport const localizedSlugQuery = ({\n slug,\n fieldName = DEFAULT_FIELD_NAMES.language,\n language,\n slugFieldName = 'slug',\n status = 'published',\n where,\n}: LocalizedSlugQueryArgs): LocalizedSlugQuery => {\n const constraints: Where[] = [\n {\n [slugFieldName]: {\n equals: slug,\n },\n },\n {\n [fieldName]: {\n equals: language,\n },\n },\n ]\n\n if (where) {\n constraints.unshift(where)\n }\n\n if (status !== 'any') {\n constraints.push({\n _status: {\n equals: status,\n },\n })\n }\n\n return {\n ...(status === 'draft' ? { draft: true } : {}),\n where:\n constraints.length === 1\n ? constraints[0]\n : {\n and: constraints,\n },\n }\n}\n\nexport const getDocumentTranslationsWithPayload = async <TDoc extends DocumentData = DocumentData>({\n id,\n collection,\n fieldNames = DEFAULT_FIELD_NAMES,\n overrideAccess = true,\n payload,\n req,\n}: {\n collection: CollectionSlug\n fieldNames?: MultilangFieldNames\n id: number | string\n overrideAccess?: boolean\n payload: Payload\n req?: PayloadRequest\n}): Promise<TranslationState<TDoc>> => {\n const source = asDocument(\n await payload.findByID({\n id,\n collection,\n depth: 0,\n overrideAccess,\n req,\n }),\n ) as TDoc\n\n const group = getStringValue(source[fieldNames.group])\n const language = getStringValue(source[fieldNames.language])\n\n if (!group) {\n return {\n language,\n source,\n translations: language ? { [language]: source } : {},\n }\n }\n\n const result = await payload.find({\n collection,\n depth: 0,\n limit: 200,\n overrideAccess,\n req,\n where: {\n [fieldNames.group]: {\n equals: group,\n },\n },\n })\n\n const translations = result.docs.reduce<TranslationState<TDoc>['translations']>((acc, doc) => {\n const translation = asDocument(doc) as TDoc\n const code = getStringValue(translation[fieldNames.language])\n\n if (code) {\n acc[code] = translation\n }\n\n return acc\n }, {})\n\n return {\n group,\n language,\n source,\n translations,\n }\n}\n\nexport const getGroupTranslationsWithPayload = async <TDoc extends DocumentData = DocumentData>({\n collection,\n fieldNames = DEFAULT_FIELD_NAMES,\n group,\n overrideAccess = true,\n payload,\n req,\n}: {\n collection: CollectionSlug\n fieldNames?: MultilangFieldNames\n group: string\n overrideAccess?: boolean\n payload: Payload\n req?: PayloadRequest\n}): Promise<TranslationState<TDoc>> => {\n const result = await payload.find({\n collection,\n depth: 0,\n limit: 200,\n overrideAccess,\n req,\n where: {\n [fieldNames.group]: {\n equals: group,\n },\n },\n })\n\n const translations = result.docs.reduce<TranslationState<TDoc>['translations']>((acc, doc) => {\n const translation = asDocument(doc) as TDoc\n const code = getStringValue(translation[fieldNames.language])\n\n if (code) {\n acc[code] = translation\n }\n\n return acc\n }, {})\n\n return {\n group,\n translations,\n }\n}\n\n/**\n * Returns the source document and every document in the same translation group, keyed by language.\n */\nexport const getDocumentTranslationWithPayload = async <TDoc extends DocumentData = DocumentData>({\n id,\n collection,\n fieldNames,\n language,\n overrideAccess = true,\n payload,\n req,\n}: {\n collection: CollectionSlug\n fieldNames?: MultilangFieldNames\n id: number | string\n language: string\n overrideAccess?: boolean\n payload: Payload\n req?: PayloadRequest\n}): Promise<TDoc | undefined> => {\n const state = await getDocumentTranslationsWithPayload<TDoc>({\n id,\n collection,\n fieldNames,\n overrideAccess,\n payload,\n req,\n })\n\n return state.translations[language]\n}\n\nconst GLOBAL_SYSTEM_FIELDS = new Set(['_status', 'createdAt', 'globalType', 'id', 'updatedAt'])\n\nconst getGlobalPayloadMultilangCustom = ({\n slug,\n payload,\n}: {\n payload: Payload\n slug: GlobalSlug\n}): {\n defaultLanguage?: MultilangLanguage\n languages?: MultilangLanguage[]\n} => {\n const global = payload.config.globals.find((item) => item.slug === slug)\n const payloadMultilang = asDocument(asDocument(global?.admin?.custom).payloadMultilang)\n\n return payloadMultilang as {\n defaultLanguage?: MultilangLanguage\n languages?: MultilangLanguage[]\n }\n}\n\nconst validateGlobalLanguage = ({\n slug,\n language,\n payload,\n}: {\n language: string\n payload: Payload\n slug: GlobalSlug\n}): void => {\n const languages = getGlobalPayloadMultilangCustom({ slug, payload }).languages\n\n if (!Array.isArray(languages) || languages.length === 0) {\n return\n }\n\n if (!languages.some((candidate) => candidate.code === language)) {\n throw new Error(`Language \"${language}\" is not configured for ${slug}.`)\n }\n}\n\nconst getGlobalLanguageTab = <TDoc extends DocumentData = DocumentData>({\n doc,\n language,\n}: {\n doc: DocumentData\n language: string\n}): TDoc => {\n const languageData = asDocument(doc[language])\n const systemData = Object.entries(doc).reduce<DocumentData>((acc, [key, value]) => {\n if (GLOBAL_SYSTEM_FIELDS.has(key)) {\n acc[key] = value\n }\n\n return acc\n }, {})\n\n return {\n ...systemData,\n ...languageData,\n } as TDoc\n}\n\nexport const findGlobalByLanguageWithPayload = async <TDoc extends DocumentData = DocumentData>({\n slug,\n depth,\n language,\n overrideAccess = true,\n payload,\n req,\n}: {\n depth?: number\n language: string\n overrideAccess?: boolean\n payload: Payload\n req?: PayloadRequest\n slug: GlobalSlug\n}): Promise<TDoc> => {\n validateGlobalLanguage({ slug, language, payload })\n\n const doc = asDocument(\n await payload.findGlobal({\n slug,\n depth,\n overrideAccess,\n req,\n } as never),\n )\n\n return getGlobalLanguageTab<TDoc>({\n doc,\n language,\n })\n}\n\nexport const updateGlobalByLanguageWithPayload = async <TDoc extends DocumentData = DocumentData>({\n slug,\n data,\n depth,\n language,\n overrideAccess = true,\n payload,\n req,\n}: {\n data: Record<string, unknown>\n depth?: number\n language: string\n overrideAccess?: boolean\n payload: Payload\n req?: PayloadRequest\n slug: GlobalSlug\n}): Promise<TDoc> => {\n validateGlobalLanguage({ slug, language, payload })\n\n const currentDoc = asDocument(\n await payload.findGlobal({\n slug,\n depth: 0,\n overrideAccess,\n req,\n } as never),\n )\n const currentLanguageData = asDocument(currentDoc[language])\n\n const doc = asDocument(\n await payload.updateGlobal({\n slug,\n data: {\n [language]: {\n ...currentLanguageData,\n ...data,\n },\n },\n depth,\n overrideAccess,\n req,\n } as never),\n )\n\n return getGlobalLanguageTab<TDoc>({\n doc,\n language,\n })\n}\n\nconst fieldAffectsData = (field: Field): field is { name: string } & Field =>\n 'name' in field && typeof field.name === 'string' && field.type !== 'ui'\n\nconst duplicateFieldValue = (field: Field, value: unknown): unknown => {\n if (field.type === 'array' && Array.isArray(value)) {\n return value.map((row) =>\n duplicateRowValue(asDocument(row), field.fields),\n )\n }\n\n if (field.type === 'blocks' && Array.isArray(value)) {\n return value.map((row) => {\n const rowData = asDocument(row)\n const block = field.blocks.find(\n (candidate) => candidate.slug === getStringValue(rowData.blockType),\n )\n\n return duplicateRowValue(rowData, block?.fields || [])\n })\n }\n\n return value\n}\n\nconst duplicateRowValue = (\n row: Record<string, unknown>,\n fields: Field[],\n): Record<string, unknown> => {\n const data = Object.entries(row).reduce<Record<string, unknown>>(\n (acc, [key, value]) => {\n if (key !== 'id') {\n acc[key] = value\n }\n\n return acc\n },\n {},\n )\n\n for (const field of fields) {\n if (!fieldAffectsData(field) || !(field.name in data)) {\n continue\n }\n\n data[field.name] = duplicateFieldValue(field, data[field.name])\n }\n\n return data\n}\n\nexport const duplicateDocumentData = ({\n collection,\n doc,\n fieldNames,\n targetLanguage,\n}: {\n collection: CollectionConfig\n doc: DocumentData\n fieldNames: MultilangFieldNames\n targetLanguage: string\n}): DocumentData => {\n const excluded = new Set([\n fieldNames.group,\n fieldNames.language,\n fieldNames.meta,\n ...SYSTEM_DUPLICATION_EXCLUDED_FIELDS,\n ])\n\n const data: DocumentData = {}\n\n for (const field of collection.fields || []) {\n if (!fieldAffectsData(field) || excluded.has(field.name)) {\n continue\n }\n\n if (!(field.name in doc)) {\n continue\n }\n\n data[field.name] = duplicateFieldValue(field, doc[field.name])\n }\n\n if (typeof data.slug === 'string' && data.slug.length > 0) {\n data.slug = `${data.slug}-${targetLanguage}`\n }\n\n return data\n}\n\nexport type PayloadFactory = () => Payload | Promise<Payload>\n\nexport type GetDocumentTranslationsArgs = {\n collection: CollectionSlug\n fieldNames?: MultilangFieldNames\n id: number | string\n overrideAccess?: boolean\n req?: PayloadRequest\n}\n\nexport type GetDocumentTranslationArgs = {\n language: string\n} & GetDocumentTranslationsArgs\n\nexport type FindGlobalByLanguageArgs = {\n depth?: number\n language: string\n overrideAccess?: boolean\n req?: PayloadRequest\n slug: GlobalSlug\n}\n\nexport type UpdateGlobalByLanguageArgs = {\n data: Record<string, unknown>\n} & FindGlobalByLanguageArgs\n\nexport type MultilangHelpers = {\n findGlobalByLanguage: <TDoc extends DocumentData = DocumentData>(\n args: FindGlobalByLanguageArgs,\n ) => Promise<TDoc>\n getDocumentTranslation: <TDoc extends DocumentData = DocumentData>(\n args: GetDocumentTranslationArgs,\n ) => Promise<TDoc | undefined>\n getDocumentTranslations: <TDoc extends DocumentData = DocumentData>(\n args: GetDocumentTranslationsArgs,\n ) => Promise<TranslationState<TDoc>>\n getLanguages: () => Promise<MultilangLanguage[]>\n updateGlobalByLanguage: <TDoc extends DocumentData = DocumentData>(\n args: UpdateGlobalByLanguageArgs,\n ) => Promise<TDoc>\n}\n\nexport const createMultilangHelpers = ({\n getPayload,\n}: {\n getPayload: PayloadFactory\n}): MultilangHelpers => {\n const resolvePayload = async () => getPayload()\n\n return {\n findGlobalByLanguage: async <TDoc extends DocumentData = DocumentData>({\n slug,\n depth,\n language,\n overrideAccess,\n req,\n }: FindGlobalByLanguageArgs): Promise<TDoc> =>\n findGlobalByLanguageWithPayload<TDoc>({\n slug,\n depth,\n language,\n overrideAccess,\n payload: await resolvePayload(),\n req,\n }),\n\n getDocumentTranslation: async <TDoc extends DocumentData = DocumentData>(\n args: GetDocumentTranslationArgs,\n ): Promise<TDoc | undefined> =>\n getDocumentTranslationWithPayload<TDoc>({\n ...args,\n payload: await resolvePayload(),\n }),\n\n getDocumentTranslations: async <TDoc extends DocumentData = DocumentData>(\n args: GetDocumentTranslationsArgs,\n ): Promise<TranslationState<TDoc>> =>\n getDocumentTranslationsWithPayload<TDoc>({\n ...args,\n payload: await resolvePayload(),\n }),\n\n getLanguages: async (): Promise<MultilangLanguage[]> =>\n getLanguages({ payload: await resolvePayload() }),\n\n updateGlobalByLanguage: async <TDoc extends DocumentData = DocumentData>({\n slug,\n data,\n depth,\n language,\n overrideAccess,\n req,\n }: UpdateGlobalByLanguageArgs): Promise<TDoc> =>\n updateGlobalByLanguageWithPayload<TDoc>({\n slug,\n data,\n depth,\n language,\n overrideAccess,\n payload: await resolvePayload(),\n req,\n }),\n }\n}\n"],"names":["DEFAULT_FIELD_NAMES","SYSTEM_DUPLICATION_EXCLUDED_FIELDS","asDocument","value","getStringValue","length","undefined","getID","normalizeLanguage","doc","data","code","trim","toLowerCase","id","name","active","direction","flagLabel","isDefault","locale","order","getLanguagesFromCustom","custom","payloadMultilang","languages","Array","isArray","map","filter","language","getLanguages","config","payload","admin","Error","getDefaultLanguage","configuredLanguages","find","withLanguage","fieldName","where","languageWhere","equals","and","getMultilangDocumentLanguage","fallback","localizedSlugQuery","slug","slugFieldName","status","constraints","unshift","push","_status","draft","getDocumentTranslationsWithPayload","collection","fieldNames","overrideAccess","req","source","findByID","depth","group","translations","result","limit","docs","reduce","acc","translation","getGroupTranslationsWithPayload","getDocumentTranslationWithPayload","state","GLOBAL_SYSTEM_FIELDS","Set","getGlobalPayloadMultilangCustom","global","globals","item","validateGlobalLanguage","some","candidate","getGlobalLanguageTab","languageData","systemData","Object","entries","key","has","findGlobalByLanguageWithPayload","findGlobal","updateGlobalByLanguageWithPayload","currentDoc","currentLanguageData","updateGlobal","fieldAffectsData","field","type","duplicateFieldValue","row","duplicateRowValue","fields","rowData","block","blocks","blockType","duplicateDocumentData","targetLanguage","excluded","meta","createMultilangHelpers","getPayload","resolvePayload","findGlobalByLanguage","getDocumentTranslation","args","getDocumentTranslations","updateGlobalByLanguage"],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export declare const payloadMultilangTranslations: {
|
|
2
|
+
readonly en: {
|
|
3
|
+
readonly payloadMultilang: {
|
|
4
|
+
readonly allLanguages: "All languages";
|
|
5
|
+
readonly chooseLanguage: "Choose language";
|
|
6
|
+
readonly chooseTargetLanguage: "Choose a target language.";
|
|
7
|
+
readonly connectExisting: "Connect existing";
|
|
8
|
+
readonly createOrConnectDocuments: "Create or connect separate localized documents.";
|
|
9
|
+
readonly createTranslation: "Create translation";
|
|
10
|
+
readonly createTranslationFor: "Create {{language}} translation";
|
|
11
|
+
readonly current: "Current";
|
|
12
|
+
readonly disconnectDocument: "Disconnect this document";
|
|
13
|
+
readonly documentID: "Document ID";
|
|
14
|
+
readonly editTranslationFor: "Edit {{language}} translation";
|
|
15
|
+
readonly existingDocumentID: "Existing document ID";
|
|
16
|
+
readonly language: "Language";
|
|
17
|
+
readonly linkedDocuments: "Linked documents";
|
|
18
|
+
readonly localized: "Localized";
|
|
19
|
+
readonly localizedContent: "Localized content";
|
|
20
|
+
readonly missing: "Missing";
|
|
21
|
+
readonly saveBeforeAddingTranslations: "Save before adding translations.";
|
|
22
|
+
readonly saveBeforeCreatingTranslations: "Save the document before creating translations.";
|
|
23
|
+
readonly saveBeforeManagingTranslations: "Save the document before managing translations.";
|
|
24
|
+
readonly targetIDAndLanguageRequired: "Target ID and language are required.";
|
|
25
|
+
readonly translationActions: "Translation actions";
|
|
26
|
+
readonly translationConnected: "Translation connected.";
|
|
27
|
+
readonly translationCouldNotBeConnected: "Translation could not be connected.";
|
|
28
|
+
readonly translationCouldNotBeCreated: "Translation could not be created.";
|
|
29
|
+
readonly translationCouldNotBeDisconnected: "Translation could not be disconnected.";
|
|
30
|
+
readonly translationDisconnected: "Translation disconnected.";
|
|
31
|
+
readonly translations: "Translations";
|
|
32
|
+
readonly unassigned: "Unassigned";
|
|
33
|
+
readonly unassignedStoredLanguageNotConfigured: "Unassigned; stored language \"{{language}}\" is not configured";
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
readonly uk: {
|
|
37
|
+
readonly payloadMultilang: {
|
|
38
|
+
readonly allLanguages: "Усі мови";
|
|
39
|
+
readonly chooseLanguage: "Оберіть мову";
|
|
40
|
+
readonly chooseTargetLanguage: "Оберіть цільову мову.";
|
|
41
|
+
readonly connectExisting: "Підключити наявний";
|
|
42
|
+
readonly createOrConnectDocuments: "Створюйте або підключайте окремі локалізовані документи.";
|
|
43
|
+
readonly createTranslation: "Створити переклад";
|
|
44
|
+
readonly createTranslationFor: "Створити переклад: {{language}}";
|
|
45
|
+
readonly current: "Поточний";
|
|
46
|
+
readonly disconnectDocument: "Від’єднати цей документ";
|
|
47
|
+
readonly documentID: "ID документа";
|
|
48
|
+
readonly editTranslationFor: "Редагувати переклад: {{language}}";
|
|
49
|
+
readonly existingDocumentID: "ID наявного документа";
|
|
50
|
+
readonly language: "Мова";
|
|
51
|
+
readonly linkedDocuments: "Пов’язані документи";
|
|
52
|
+
readonly localized: "Локалізовано";
|
|
53
|
+
readonly localizedContent: "Локалізований вміст";
|
|
54
|
+
readonly missing: "Відсутній";
|
|
55
|
+
readonly saveBeforeAddingTranslations: "Збережіть перед додаванням перекладів.";
|
|
56
|
+
readonly saveBeforeCreatingTranslations: "Збережіть документ перед створенням перекладів.";
|
|
57
|
+
readonly saveBeforeManagingTranslations: "Збережіть документ перед керуванням перекладами.";
|
|
58
|
+
readonly targetIDAndLanguageRequired: "Потрібні ID цільового документа та мова.";
|
|
59
|
+
readonly translationActions: "Дії з перекладами";
|
|
60
|
+
readonly translationConnected: "Переклад підключено.";
|
|
61
|
+
readonly translationCouldNotBeConnected: "Не вдалося підключити переклад.";
|
|
62
|
+
readonly translationCouldNotBeCreated: "Не вдалося створити переклад.";
|
|
63
|
+
readonly translationCouldNotBeDisconnected: "Не вдалося від’єднати переклад.";
|
|
64
|
+
readonly translationDisconnected: "Переклад від’єднано.";
|
|
65
|
+
readonly translations: "Переклади";
|
|
66
|
+
readonly unassigned: "Не призначено";
|
|
67
|
+
readonly unassignedStoredLanguageNotConfigured: "Не призначено; збережена мова \"{{language}}\" не налаштована";
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
export type PayloadMultilangTranslations = (typeof payloadMultilangTranslations)['en'];
|
|
72
|
+
export type PayloadMultilangTranslationKey = `payloadMultilang:${keyof PayloadMultilangTranslations['payloadMultilang']}`;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export const payloadMultilangTranslations = {
|
|
2
|
+
en: {
|
|
3
|
+
payloadMultilang: {
|
|
4
|
+
allLanguages: 'All languages',
|
|
5
|
+
chooseLanguage: 'Choose language',
|
|
6
|
+
chooseTargetLanguage: 'Choose a target language.',
|
|
7
|
+
connectExisting: 'Connect existing',
|
|
8
|
+
createOrConnectDocuments: 'Create or connect separate localized documents.',
|
|
9
|
+
createTranslation: 'Create translation',
|
|
10
|
+
createTranslationFor: 'Create {{language}} translation',
|
|
11
|
+
current: 'Current',
|
|
12
|
+
disconnectDocument: 'Disconnect this document',
|
|
13
|
+
documentID: 'Document ID',
|
|
14
|
+
editTranslationFor: 'Edit {{language}} translation',
|
|
15
|
+
existingDocumentID: 'Existing document ID',
|
|
16
|
+
language: 'Language',
|
|
17
|
+
linkedDocuments: 'Linked documents',
|
|
18
|
+
localized: 'Localized',
|
|
19
|
+
localizedContent: 'Localized content',
|
|
20
|
+
missing: 'Missing',
|
|
21
|
+
saveBeforeAddingTranslations: 'Save before adding translations.',
|
|
22
|
+
saveBeforeCreatingTranslations: 'Save the document before creating translations.',
|
|
23
|
+
saveBeforeManagingTranslations: 'Save the document before managing translations.',
|
|
24
|
+
targetIDAndLanguageRequired: 'Target ID and language are required.',
|
|
25
|
+
translationActions: 'Translation actions',
|
|
26
|
+
translationConnected: 'Translation connected.',
|
|
27
|
+
translationCouldNotBeConnected: 'Translation could not be connected.',
|
|
28
|
+
translationCouldNotBeCreated: 'Translation could not be created.',
|
|
29
|
+
translationCouldNotBeDisconnected: 'Translation could not be disconnected.',
|
|
30
|
+
translationDisconnected: 'Translation disconnected.',
|
|
31
|
+
translations: 'Translations',
|
|
32
|
+
unassigned: 'Unassigned',
|
|
33
|
+
unassignedStoredLanguageNotConfigured: 'Unassigned; stored language "{{language}}" is not configured'
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
uk: {
|
|
37
|
+
payloadMultilang: {
|
|
38
|
+
allLanguages: 'Усі мови',
|
|
39
|
+
chooseLanguage: 'Оберіть мову',
|
|
40
|
+
chooseTargetLanguage: 'Оберіть цільову мову.',
|
|
41
|
+
connectExisting: 'Підключити наявний',
|
|
42
|
+
createOrConnectDocuments: 'Створюйте або підключайте окремі локалізовані документи.',
|
|
43
|
+
createTranslation: 'Створити переклад',
|
|
44
|
+
createTranslationFor: 'Створити переклад: {{language}}',
|
|
45
|
+
current: 'Поточний',
|
|
46
|
+
disconnectDocument: 'Від’єднати цей документ',
|
|
47
|
+
documentID: 'ID документа',
|
|
48
|
+
editTranslationFor: 'Редагувати переклад: {{language}}',
|
|
49
|
+
existingDocumentID: 'ID наявного документа',
|
|
50
|
+
language: 'Мова',
|
|
51
|
+
linkedDocuments: 'Пов’язані документи',
|
|
52
|
+
localized: 'Локалізовано',
|
|
53
|
+
localizedContent: 'Локалізований вміст',
|
|
54
|
+
missing: 'Відсутній',
|
|
55
|
+
saveBeforeAddingTranslations: 'Збережіть перед додаванням перекладів.',
|
|
56
|
+
saveBeforeCreatingTranslations: 'Збережіть документ перед створенням перекладів.',
|
|
57
|
+
saveBeforeManagingTranslations: 'Збережіть документ перед керуванням перекладами.',
|
|
58
|
+
targetIDAndLanguageRequired: 'Потрібні ID цільового документа та мова.',
|
|
59
|
+
translationActions: 'Дії з перекладами',
|
|
60
|
+
translationConnected: 'Переклад підключено.',
|
|
61
|
+
translationCouldNotBeConnected: 'Не вдалося підключити переклад.',
|
|
62
|
+
translationCouldNotBeCreated: 'Не вдалося створити переклад.',
|
|
63
|
+
translationCouldNotBeDisconnected: 'Не вдалося від’єднати переклад.',
|
|
64
|
+
translationDisconnected: 'Переклад від’єднано.',
|
|
65
|
+
translations: 'Переклади',
|
|
66
|
+
unassigned: 'Не призначено',
|
|
67
|
+
unassignedStoredLanguageNotConfigured: 'Не призначено; збережена мова "{{language}}" не налаштована'
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=translations.js.map
|