@roxxel/payload-multilang 0.0.1
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/README.md +165 -0
- package/dist/components/LanguageListToolbar.d.ts +6 -0
- package/dist/components/LanguageListToolbar.js +69 -0
- package/dist/components/LanguageListToolbar.js.map +1 -0
- package/dist/components/LanguageMetabox.d.ts +2 -0
- package/dist/components/LanguageMetabox.js +275 -0
- package/dist/components/LanguageMetabox.js.map +1 -0
- package/dist/components/TranslationActionsClient.d.ts +10 -0
- package/dist/components/TranslationActionsClient.js +166 -0
- package/dist/components/TranslationActionsClient.js.map +1 -0
- package/dist/components/TranslationColumnCell.d.ts +2 -0
- package/dist/components/TranslationColumnCell.js +69 -0
- package/dist/components/TranslationColumnCell.js.map +1 -0
- package/dist/components/TranslationColumnCellClient.d.ts +12 -0
- package/dist/components/TranslationColumnCellClient.js +107 -0
- package/dist/components/TranslationColumnCellClient.js.map +1 -0
- package/dist/components/TranslationsTab.d.ts +2 -0
- package/dist/components/TranslationsTab.js +118 -0
- package/dist/components/TranslationsTab.js.map +1 -0
- package/dist/components/config.d.ts +40 -0
- package/dist/components/config.js +31 -0
- package/dist/components/config.js.map +1 -0
- package/dist/constants.d.ts +5 -0
- package/dist/constants.js +24 -0
- package/dist/constants.js.map +1 -0
- package/dist/endpoints/translations.d.ts +19 -0
- package/dist/endpoints/translations.js +301 -0
- package/dist/endpoints/translations.js.map +1 -0
- package/dist/exports/client.d.ts +4 -0
- package/dist/exports/client.js +6 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/exports/rsc.d.ts +2 -0
- package/dist/exports/rsc.js +4 -0
- package/dist/exports/rsc.js.map +1 -0
- package/dist/hooks/translatedCollection.d.ts +26 -0
- package/dist/hooks/translatedCollection.js +290 -0
- package/dist/hooks/translatedCollection.js.map +1 -0
- package/dist/hooks/translatedGlobal.d.ts +16 -0
- package/dist/hooks/translatedGlobal.js +71 -0
- package/dist/hooks/translatedGlobal.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +14 -0
- package/dist/lib/config.js +96 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/data.d.ts +107 -0
- package/dist/lib/data.js +307 -0
- package/dist/lib/data.js.map +1 -0
- package/dist/payload-config.d.js +2 -0
- package/dist/payload-config.d.js.map +1 -0
- package/dist/styles/admin.css +316 -0
- package/dist/types.d.ts +96 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/docs/assets/admin-ui/collection-list-language-shortcuts.png +0 -0
- package/docs/assets/admin-ui/english-post-translations.png +0 -0
- package/docs/assets/admin-ui/ukrainian-post-translations.png +0 -0
- package/docs/configuration.md +192 -0
- package/docs/helpers.md +231 -0
- package/docs/usage.md +269 -0
- package/package.json +95 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { CollectionConfig, CollectionSlug, Config, GlobalSlug, Payload, PayloadRequest, Where } from 'payload';
|
|
2
|
+
import type { MultilangFieldNames, MultilangLanguage, TranslationState, WithLanguageArgs } from '../types.js';
|
|
3
|
+
export type DocumentData = {
|
|
4
|
+
id?: number | string;
|
|
5
|
+
} & Record<string, unknown>;
|
|
6
|
+
export declare const asDocument: (value: unknown) => DocumentData;
|
|
7
|
+
export declare const getStringValue: (value: unknown) => string | undefined;
|
|
8
|
+
export declare const getID: (value: unknown) => number | string | undefined;
|
|
9
|
+
export declare const normalizeLanguage: (doc: unknown) => MultilangLanguage;
|
|
10
|
+
type ConfigWithMultilang = Pick<Config, 'admin'> | Pick<Payload['config'], 'admin'>;
|
|
11
|
+
export declare const getLanguagesFromCustom: (custom: unknown) => MultilangLanguage[];
|
|
12
|
+
/**
|
|
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
|
+
*/
|
|
18
|
+
export declare const getLanguages: ({ config, languages, }?: {
|
|
19
|
+
config?: ConfigWithMultilang;
|
|
20
|
+
languages?: MultilangLanguage[];
|
|
21
|
+
}) => Promise<MultilangLanguage[]>;
|
|
22
|
+
export declare const getDefaultLanguage: ({ config, languages, }: {
|
|
23
|
+
config?: ConfigWithMultilang;
|
|
24
|
+
languages?: MultilangLanguage[];
|
|
25
|
+
}) => Promise<MultilangLanguage | undefined>;
|
|
26
|
+
/**
|
|
27
|
+
* Adds a language constraint to a Payload `where` query.
|
|
28
|
+
*
|
|
29
|
+
* Use this when querying an enabled collection directly and you only want documents for one
|
|
30
|
+
* payload-multilang language.
|
|
31
|
+
*/
|
|
32
|
+
export declare const withLanguage: ({ fieldName, language, where, }: WithLanguageArgs) => Where;
|
|
33
|
+
export declare const getDocumentTranslationsWithPayload: <TDoc extends DocumentData = DocumentData>({ id, collection, fieldNames, overrideAccess, payload, req, }: {
|
|
34
|
+
collection: CollectionSlug;
|
|
35
|
+
fieldNames?: MultilangFieldNames;
|
|
36
|
+
id: number | string;
|
|
37
|
+
overrideAccess?: boolean;
|
|
38
|
+
payload: Payload;
|
|
39
|
+
req?: PayloadRequest;
|
|
40
|
+
}) => Promise<TranslationState<TDoc>>;
|
|
41
|
+
export declare const getGroupTranslationsWithPayload: <TDoc extends DocumentData = DocumentData>({ collection, fieldNames, group, overrideAccess, payload, req, }: {
|
|
42
|
+
collection: CollectionSlug;
|
|
43
|
+
fieldNames?: MultilangFieldNames;
|
|
44
|
+
group: string;
|
|
45
|
+
overrideAccess?: boolean;
|
|
46
|
+
payload: Payload;
|
|
47
|
+
req?: PayloadRequest;
|
|
48
|
+
}) => Promise<TranslationState<TDoc>>;
|
|
49
|
+
/**
|
|
50
|
+
* 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
|
+
*/
|
|
66
|
+
export declare const getDocumentTranslation: <TDoc extends DocumentData = DocumentData>({ id, collection, fieldNames, language, }: {
|
|
67
|
+
collection: CollectionSlug;
|
|
68
|
+
fieldNames?: MultilangFieldNames;
|
|
69
|
+
id: number | string;
|
|
70
|
+
language: string;
|
|
71
|
+
}) => Promise<TDoc | undefined>;
|
|
72
|
+
export declare const findGlobalByLanguageWithPayload: <TDoc extends DocumentData = DocumentData>({ slug, depth, language, overrideAccess, payload, req, }: {
|
|
73
|
+
depth?: number;
|
|
74
|
+
language: string;
|
|
75
|
+
overrideAccess?: boolean;
|
|
76
|
+
payload: Payload;
|
|
77
|
+
req?: PayloadRequest;
|
|
78
|
+
slug: GlobalSlug;
|
|
79
|
+
}) => Promise<TDoc>;
|
|
80
|
+
export declare const updateGlobalByLanguageWithPayload: <TDoc extends DocumentData = DocumentData>({ slug, data, depth, language, overrideAccess, payload, req, }: {
|
|
81
|
+
data: Record<string, unknown>;
|
|
82
|
+
depth?: number;
|
|
83
|
+
language: string;
|
|
84
|
+
overrideAccess?: boolean;
|
|
85
|
+
payload: Payload;
|
|
86
|
+
req?: PayloadRequest;
|
|
87
|
+
slug: GlobalSlug;
|
|
88
|
+
}) => Promise<TDoc>;
|
|
89
|
+
export declare const findGlobalByLanguage: <TDoc extends DocumentData = DocumentData>({ slug, depth, language, }: {
|
|
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, }: {
|
|
101
|
+
collection: CollectionConfig;
|
|
102
|
+
doc: DocumentData;
|
|
103
|
+
duplicateExcludeFields: string[];
|
|
104
|
+
fieldNames: MultilangFieldNames;
|
|
105
|
+
targetLanguage: string;
|
|
106
|
+
}) => DocumentData;
|
|
107
|
+
export {};
|
package/dist/lib/data.js
ADDED
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import payloadConfig from '@payload-config';
|
|
2
|
+
import { getPayload } from 'payload';
|
|
3
|
+
import { DEFAULT_FIELD_NAMES } from '../constants.js';
|
|
4
|
+
export const asDocument = (value)=>value && typeof value === 'object' ? value : {};
|
|
5
|
+
export const getStringValue = (value)=>typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
6
|
+
export const getID = (value)=>typeof value === 'number' || typeof value === 'string' ? value : undefined;
|
|
7
|
+
export const normalizeLanguage = (doc)=>{
|
|
8
|
+
const data = asDocument(doc);
|
|
9
|
+
const code = getStringValue(data.code)?.trim().toLowerCase() || '';
|
|
10
|
+
return {
|
|
11
|
+
id: getID(data.id),
|
|
12
|
+
name: getStringValue(data.name)?.trim() || code,
|
|
13
|
+
active: data.active !== false,
|
|
14
|
+
code,
|
|
15
|
+
direction: data.direction === 'rtl' ? 'rtl' : 'ltr',
|
|
16
|
+
flagLabel: getStringValue(data.flagLabel),
|
|
17
|
+
isDefault: data.isDefault === true,
|
|
18
|
+
locale: getStringValue(data.locale),
|
|
19
|
+
order: typeof data.order === 'number' ? data.order : 0
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export const getLanguagesFromCustom = (custom)=>{
|
|
23
|
+
const payloadMultilang = asDocument(asDocument(custom).payloadMultilang);
|
|
24
|
+
const languages = payloadMultilang.languages;
|
|
25
|
+
if (!Array.isArray(languages)) {
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
return languages.map(normalizeLanguage).filter((language)=>language.code);
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* 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 } = {})=>{
|
|
36
|
+
if (languages) {
|
|
37
|
+
return languages.map(normalizeLanguage).filter((language)=>language.code);
|
|
38
|
+
}
|
|
39
|
+
if (config) {
|
|
40
|
+
return getLanguagesFromCustom(config.admin?.custom);
|
|
41
|
+
}
|
|
42
|
+
const payload = await getPayload({
|
|
43
|
+
config: payloadConfig
|
|
44
|
+
});
|
|
45
|
+
return getLanguagesFromCustom(payload.config.admin?.custom);
|
|
46
|
+
};
|
|
47
|
+
export const getDefaultLanguage = async ({ config, languages })=>{
|
|
48
|
+
const configuredLanguages = await getLanguages({
|
|
49
|
+
config,
|
|
50
|
+
languages
|
|
51
|
+
});
|
|
52
|
+
return configuredLanguages.find((language)=>language.isDefault) || configuredLanguages[0];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Adds a language constraint to a Payload `where` query.
|
|
56
|
+
*
|
|
57
|
+
* Use this when querying an enabled collection directly and you only want documents for one
|
|
58
|
+
* payload-multilang language.
|
|
59
|
+
*/ export const withLanguage = ({ fieldName = DEFAULT_FIELD_NAMES.language, language, where })=>{
|
|
60
|
+
const languageWhere = {
|
|
61
|
+
[fieldName]: {
|
|
62
|
+
equals: language
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
if (!where) {
|
|
66
|
+
return languageWhere;
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
and: [
|
|
70
|
+
where,
|
|
71
|
+
languageWhere
|
|
72
|
+
]
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
export const getDocumentTranslationsWithPayload = async ({ id, collection, fieldNames = DEFAULT_FIELD_NAMES, overrideAccess = true, payload, req })=>{
|
|
76
|
+
const source = asDocument(await payload.findByID({
|
|
77
|
+
id,
|
|
78
|
+
collection,
|
|
79
|
+
depth: 0,
|
|
80
|
+
overrideAccess,
|
|
81
|
+
req
|
|
82
|
+
}));
|
|
83
|
+
const group = getStringValue(source[fieldNames.group]);
|
|
84
|
+
const language = getStringValue(source[fieldNames.language]);
|
|
85
|
+
if (!group) {
|
|
86
|
+
return {
|
|
87
|
+
language,
|
|
88
|
+
source,
|
|
89
|
+
translations: language ? {
|
|
90
|
+
[language]: source
|
|
91
|
+
} : {}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const result = await payload.find({
|
|
95
|
+
collection,
|
|
96
|
+
depth: 0,
|
|
97
|
+
limit: 200,
|
|
98
|
+
overrideAccess,
|
|
99
|
+
req,
|
|
100
|
+
where: {
|
|
101
|
+
[fieldNames.group]: {
|
|
102
|
+
equals: group
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
const translations = result.docs.reduce((acc, doc)=>{
|
|
107
|
+
const translation = asDocument(doc);
|
|
108
|
+
const code = getStringValue(translation[fieldNames.language]);
|
|
109
|
+
if (code) {
|
|
110
|
+
acc[code] = translation;
|
|
111
|
+
}
|
|
112
|
+
return acc;
|
|
113
|
+
}, {});
|
|
114
|
+
return {
|
|
115
|
+
group,
|
|
116
|
+
language,
|
|
117
|
+
source,
|
|
118
|
+
translations
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
export const getGroupTranslationsWithPayload = async ({ collection, fieldNames = DEFAULT_FIELD_NAMES, group, overrideAccess = true, payload, req })=>{
|
|
122
|
+
const result = await payload.find({
|
|
123
|
+
collection,
|
|
124
|
+
depth: 0,
|
|
125
|
+
limit: 200,
|
|
126
|
+
overrideAccess,
|
|
127
|
+
req,
|
|
128
|
+
where: {
|
|
129
|
+
[fieldNames.group]: {
|
|
130
|
+
equals: group
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
const translations = result.docs.reduce((acc, doc)=>{
|
|
135
|
+
const translation = asDocument(doc);
|
|
136
|
+
const code = getStringValue(translation[fieldNames.language]);
|
|
137
|
+
if (code) {
|
|
138
|
+
acc[code] = translation;
|
|
139
|
+
}
|
|
140
|
+
return acc;
|
|
141
|
+
}, {});
|
|
142
|
+
return {
|
|
143
|
+
group,
|
|
144
|
+
translations
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* Returns the source document and every document in the same translation group, keyed by language.
|
|
149
|
+
*
|
|
150
|
+
* The helper resolves Payload with the cached project config, so callers only need to pass the
|
|
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({
|
|
157
|
+
id,
|
|
158
|
+
collection,
|
|
159
|
+
fieldNames,
|
|
160
|
+
payload
|
|
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
|
|
173
|
+
});
|
|
174
|
+
return state.translations[language];
|
|
175
|
+
};
|
|
176
|
+
const GLOBAL_SYSTEM_FIELDS = new Set([
|
|
177
|
+
'_status',
|
|
178
|
+
'createdAt',
|
|
179
|
+
'globalType',
|
|
180
|
+
'id',
|
|
181
|
+
'updatedAt'
|
|
182
|
+
]);
|
|
183
|
+
const getGlobalPayloadMultilangCustom = ({ slug, payload })=>{
|
|
184
|
+
const global = payload.config.globals.find((item)=>item.slug === slug);
|
|
185
|
+
const payloadMultilang = asDocument(asDocument(global?.admin?.custom).payloadMultilang);
|
|
186
|
+
return payloadMultilang;
|
|
187
|
+
};
|
|
188
|
+
const validateGlobalLanguage = ({ slug, language, payload })=>{
|
|
189
|
+
const languages = getGlobalPayloadMultilangCustom({
|
|
190
|
+
slug,
|
|
191
|
+
payload
|
|
192
|
+
}).languages;
|
|
193
|
+
if (!Array.isArray(languages) || languages.length === 0) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
if (!languages.some((candidate)=>candidate.code === language)) {
|
|
197
|
+
throw new Error(`Language "${language}" is not configured for ${slug}.`);
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
const getGlobalLanguageTab = ({ doc, language })=>{
|
|
201
|
+
const languageData = asDocument(doc[language]);
|
|
202
|
+
const systemData = Object.entries(doc).reduce((acc, [key, value])=>{
|
|
203
|
+
if (GLOBAL_SYSTEM_FIELDS.has(key)) {
|
|
204
|
+
acc[key] = value;
|
|
205
|
+
}
|
|
206
|
+
return acc;
|
|
207
|
+
}, {});
|
|
208
|
+
return {
|
|
209
|
+
...systemData,
|
|
210
|
+
...languageData
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
export const findGlobalByLanguageWithPayload = async ({ slug, depth, language, overrideAccess = true, payload, req })=>{
|
|
214
|
+
validateGlobalLanguage({
|
|
215
|
+
slug,
|
|
216
|
+
language,
|
|
217
|
+
payload
|
|
218
|
+
});
|
|
219
|
+
const doc = asDocument(await payload.findGlobal({
|
|
220
|
+
slug,
|
|
221
|
+
depth,
|
|
222
|
+
overrideAccess,
|
|
223
|
+
req
|
|
224
|
+
}));
|
|
225
|
+
return getGlobalLanguageTab({
|
|
226
|
+
doc,
|
|
227
|
+
language
|
|
228
|
+
});
|
|
229
|
+
};
|
|
230
|
+
export const updateGlobalByLanguageWithPayload = async ({ slug, data, depth, language, overrideAccess = true, payload, req })=>{
|
|
231
|
+
validateGlobalLanguage({
|
|
232
|
+
slug,
|
|
233
|
+
language,
|
|
234
|
+
payload
|
|
235
|
+
});
|
|
236
|
+
const currentDoc = asDocument(await payload.findGlobal({
|
|
237
|
+
slug,
|
|
238
|
+
depth: 0,
|
|
239
|
+
overrideAccess,
|
|
240
|
+
req
|
|
241
|
+
}));
|
|
242
|
+
const currentLanguageData = asDocument(currentDoc[language]);
|
|
243
|
+
const doc = asDocument(await payload.updateGlobal({
|
|
244
|
+
slug,
|
|
245
|
+
data: {
|
|
246
|
+
[language]: {
|
|
247
|
+
...currentLanguageData,
|
|
248
|
+
...data
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
depth,
|
|
252
|
+
overrideAccess,
|
|
253
|
+
req
|
|
254
|
+
}));
|
|
255
|
+
return getGlobalLanguageTab({
|
|
256
|
+
doc,
|
|
257
|
+
language
|
|
258
|
+
});
|
|
259
|
+
};
|
|
260
|
+
export const findGlobalByLanguage = async ({ slug, depth, language })=>{
|
|
261
|
+
const payload = await getPayload({
|
|
262
|
+
config: payloadConfig
|
|
263
|
+
});
|
|
264
|
+
return findGlobalByLanguageWithPayload({
|
|
265
|
+
slug,
|
|
266
|
+
depth,
|
|
267
|
+
language,
|
|
268
|
+
payload
|
|
269
|
+
});
|
|
270
|
+
};
|
|
271
|
+
export const updateGlobalByLanguage = async ({ slug, data, depth, language })=>{
|
|
272
|
+
const payload = await getPayload({
|
|
273
|
+
config: payloadConfig
|
|
274
|
+
});
|
|
275
|
+
return updateGlobalByLanguageWithPayload({
|
|
276
|
+
slug,
|
|
277
|
+
data,
|
|
278
|
+
depth,
|
|
279
|
+
language,
|
|
280
|
+
payload
|
|
281
|
+
});
|
|
282
|
+
};
|
|
283
|
+
const fieldAffectsData = (field)=>'name' in field && typeof field.name === 'string' && field.type !== 'ui';
|
|
284
|
+
export const duplicateDocumentData = ({ collection, doc, duplicateExcludeFields, fieldNames, targetLanguage })=>{
|
|
285
|
+
const excluded = new Set([
|
|
286
|
+
fieldNames.group,
|
|
287
|
+
fieldNames.language,
|
|
288
|
+
fieldNames.meta,
|
|
289
|
+
...duplicateExcludeFields
|
|
290
|
+
]);
|
|
291
|
+
const data = {};
|
|
292
|
+
for (const field of collection.fields || []){
|
|
293
|
+
if (!fieldAffectsData(field) || excluded.has(field.name)) {
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
if (!(field.name in doc)) {
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
data[field.name] = doc[field.name];
|
|
300
|
+
}
|
|
301
|
+
if (typeof data.slug === 'string' && data.slug.length > 0) {
|
|
302
|
+
data.slug = `${data.slug}-${targetLanguage}`;
|
|
303
|
+
}
|
|
304
|
+
return data;
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
//# sourceMappingURL=data.js.map
|
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/payload-config.d.ts"],"names":[],"mappings":""}
|