@sittari/payload-templates 0.3.1 → 0.4.0
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 +64 -7
- package/dist/admin/TemplateField.d.ts +3 -0
- package/dist/admin/TemplateField.d.ts.map +1 -0
- package/dist/admin/TemplateField.js +82 -0
- package/dist/admin/TemplateField.js.map +1 -0
- package/dist/admin/templatePlaceholders.d.ts +3 -0
- package/dist/admin/templatePlaceholders.d.ts.map +1 -0
- package/dist/admin/templatePlaceholders.js +72 -0
- package/dist/admin/templatePlaceholders.js.map +1 -0
- package/dist/exports/client.d.ts +2 -0
- package/dist/exports/client.d.ts.map +1 -0
- package/dist/exports/client.js +3 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +52 -3
- package/dist/plugin.js.map +1 -1
- package/dist/translations/en.d.ts +1 -0
- package/dist/translations/en.d.ts.map +1 -1
- package/dist/translations/en.js +1 -0
- package/dist/translations/en.js.map +1 -1
- package/dist/translations/index.d.ts +4 -0
- package/dist/translations/index.d.ts.map +1 -1
- package/dist/translations/index.js +5 -0
- package/dist/translations/index.js.map +1 -1
- package/dist/translations/ru.d.ts +1 -0
- package/dist/translations/ru.d.ts.map +1 -1
- package/dist/translations/ru.js +1 -0
- package/dist/translations/ru.js.map +1 -1
- package/dist/translations/uk.d.ts +1 -0
- package/dist/translations/uk.d.ts.map +1 -1
- package/dist/translations/uk.js +1 -0
- package/dist/translations/uk.js.map +1 -1
- package/package.json +12 -2
package/README.md
CHANGED
|
@@ -50,10 +50,66 @@ The generated document stores editable fields under `data_<name>`—for example,
|
|
|
50
50
|
|
|
51
51
|
## Template-backed fields
|
|
52
52
|
|
|
53
|
-
`templateField(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
### `templateField()`
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
templateField(config: TemplateFieldConfig): GroupField
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Creates a named Payload group whose fields and fallback values come from a
|
|
60
|
+
template registered with `templatesPlugin()`. It can be used anywhere Payload
|
|
61
|
+
accepts fields, including collections, globals, tabs, arrays, and blocks.
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
import { templateField } from '@sittari/payload-templates'
|
|
65
|
+
import type { CollectionConfig } from 'payload'
|
|
66
|
+
|
|
67
|
+
export const Pages: CollectionConfig = {
|
|
68
|
+
slug: 'pages',
|
|
69
|
+
fields: [
|
|
70
|
+
templateField({
|
|
71
|
+
name: 'hero',
|
|
72
|
+
template: 'defaultHero',
|
|
73
|
+
label: {
|
|
74
|
+
en: 'Hero overrides',
|
|
75
|
+
uk: 'Перевизначення Hero',
|
|
76
|
+
},
|
|
77
|
+
admin: {
|
|
78
|
+
hideGutter: true,
|
|
79
|
+
},
|
|
80
|
+
}),
|
|
81
|
+
],
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
| Option | Type | Required | Description |
|
|
86
|
+
| --- | --- | --- | --- |
|
|
87
|
+
| `name` | `string` | Yes | Field name used in the consuming document. Its stored overrides live at this property. |
|
|
88
|
+
| `template` | `string` | Yes | `name` of a template registered with `templatesPlugin()`. Unknown names throw during configuration. |
|
|
89
|
+
| `label` | `GroupField['label']` | No | Payload group label. Static strings, localized label maps, and label functions are supported. |
|
|
90
|
+
| `admin` | `GroupField['admin']` | No | Payload Admin settings for the generated group. The plugin preserves these settings and installs its template field renderer. |
|
|
91
|
+
|
|
92
|
+
The function initially returns a marked group definition. During plugin
|
|
93
|
+
configuration, `templatesPlugin()` replaces its empty field list with an
|
|
94
|
+
optionalized copy of the registered template fields and adds the fallback hook.
|
|
95
|
+
Consequently, `templateField()` must be used in the same Payload config as an
|
|
96
|
+
enabled `templatesPlugin()` call containing the referenced template.
|
|
97
|
+
|
|
98
|
+
The consuming document stores only local overrides:
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
// Managed template: data_defaultHero
|
|
102
|
+
{
|
|
103
|
+
heading: 'Build something useful',
|
|
104
|
+
summary: 'Default summary',
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Page document: hero
|
|
108
|
+
{
|
|
109
|
+
heading: 'A page-specific heading',
|
|
110
|
+
// Empty summary inherits "Default summary".
|
|
111
|
+
}
|
|
112
|
+
```
|
|
57
113
|
|
|
58
114
|
Fields copied into the consuming group are optional, even when the managed
|
|
59
115
|
template requires them. On read, empty local values inherit from the managed
|
|
@@ -67,9 +123,10 @@ template:
|
|
|
67
123
|
|
|
68
124
|
Inheritance is read-time only. Fallback values are not written into the
|
|
69
125
|
consuming document, so later edits to the managed template are reflected on the
|
|
70
|
-
next API read. Admin edit forms receive the raw stored overrides
|
|
71
|
-
|
|
72
|
-
|
|
126
|
+
next API read. Admin edit forms receive the raw stored overrides. Empty
|
|
127
|
+
supported inputs display the active locale's managed template value as a
|
|
128
|
+
placeholder, and each template-backed group includes a localized link to edit
|
|
129
|
+
that template document. The Admin API inspector still displays resolved values.
|
|
73
130
|
|
|
74
131
|
You can explicitly control resolution for Local API operations through Payload
|
|
75
132
|
request context:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateField.d.ts","sourceRoot":"","sources":["../../src/admin/TemplateField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAqBpD,eAAO,MAAM,aAAa,GAAI,OAAO,qBAAqB,gCAsGzD,CAAA"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { GroupField, useConfig, useLocale, useTranslation } from '@payloadcms/ui';
|
|
4
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
5
|
+
import { translate } from '../translations/index.js';
|
|
6
|
+
import { applyTemplatePlaceholders } from './templatePlaceholders.js';
|
|
7
|
+
const joinURL = (base, path) => `${base.replace(/\/+$/, '')}/${path.replace(/^\/+/, '')}`;
|
|
8
|
+
export const TemplateField = (props) => {
|
|
9
|
+
const { config } = useConfig();
|
|
10
|
+
const locale = useLocale();
|
|
11
|
+
const { i18n } = useTranslation();
|
|
12
|
+
const custom = props.field.admin?.custom;
|
|
13
|
+
const template = custom?.templateField?.template;
|
|
14
|
+
const dataField = custom?.templateField?.dataField;
|
|
15
|
+
const localeCode = typeof locale?.code === 'string' && locale.code ? locale.code : undefined;
|
|
16
|
+
const [templateDocument, setTemplateDocument] = useState();
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (typeof template !== 'string' || typeof dataField !== 'string') {
|
|
19
|
+
setTemplateDocument(undefined);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const abortController = new AbortController();
|
|
23
|
+
const params = new URLSearchParams({
|
|
24
|
+
depth: '0',
|
|
25
|
+
limit: '1',
|
|
26
|
+
pagination: 'false',
|
|
27
|
+
[`select[${dataField}]`]: 'true',
|
|
28
|
+
'where[templateType][equals]': template,
|
|
29
|
+
});
|
|
30
|
+
if (localeCode) {
|
|
31
|
+
params.set('locale', localeCode);
|
|
32
|
+
}
|
|
33
|
+
const endpoint = joinURL(config.serverURL, `${config.routes.api}/templates?${params.toString()}`);
|
|
34
|
+
void fetch(endpoint, {
|
|
35
|
+
credentials: 'same-origin',
|
|
36
|
+
signal: abortController.signal,
|
|
37
|
+
})
|
|
38
|
+
.then(async (response) => {
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const result = await response.json();
|
|
43
|
+
const document = result.docs?.[0];
|
|
44
|
+
return document && typeof document === 'object'
|
|
45
|
+
? document
|
|
46
|
+
: undefined;
|
|
47
|
+
})
|
|
48
|
+
.then(setTemplateDocument)
|
|
49
|
+
.catch((error) => {
|
|
50
|
+
if (!(error instanceof DOMException && error.name === 'AbortError')) {
|
|
51
|
+
setTemplateDocument(undefined);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
return () => abortController.abort();
|
|
55
|
+
}, [
|
|
56
|
+
config.routes.api,
|
|
57
|
+
config.serverURL,
|
|
58
|
+
dataField,
|
|
59
|
+
localeCode,
|
|
60
|
+
template,
|
|
61
|
+
]);
|
|
62
|
+
const field = useMemo(() => {
|
|
63
|
+
const templateData = typeof dataField === 'string' &&
|
|
64
|
+
templateDocument?.[dataField] &&
|
|
65
|
+
typeof templateDocument[dataField] === 'object' &&
|
|
66
|
+
!Array.isArray(templateDocument[dataField])
|
|
67
|
+
? templateDocument[dataField]
|
|
68
|
+
: undefined;
|
|
69
|
+
return templateData
|
|
70
|
+
? {
|
|
71
|
+
...props.field,
|
|
72
|
+
fields: applyTemplatePlaceholders(props.field.fields, templateData),
|
|
73
|
+
}
|
|
74
|
+
: props.field;
|
|
75
|
+
}, [dataField, props.field, templateDocument]);
|
|
76
|
+
const templateID = templateDocument?.id;
|
|
77
|
+
const templateURL = templateID === undefined
|
|
78
|
+
? undefined
|
|
79
|
+
: `${joinURL(config.routes.admin, `collections/templates/${encodeURIComponent(String(templateID))}`)}${localeCode ? `?${new URLSearchParams({ locale: localeCode }).toString()}` : ''}`;
|
|
80
|
+
return (_jsxs("div", { className: "template-field", children: [templateURL && (_jsx("div", { style: { fontSize: '13px', marginBottom: '6px', textAlign: 'right' }, children: _jsx("a", { href: templateURL, children: translate('editTemplate', i18n.language) }) })), _jsx(GroupField, { ...props, field: field })] }));
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=TemplateField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateField.js","sourceRoot":"","sources":["../../src/admin/TemplateField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templatePlaceholders.d.ts","sourceRoot":"","sources":["../../src/admin/templatePlaceholders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAwG1C,eAAO,MAAM,yBAAyB,GACpC,QAAQ,WAAW,EAAE,EACrB,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACpC,WAAW,EACqD,CAAA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
const PLACEHOLDER_FIELD_TYPES = new Set([
|
|
2
|
+
'code',
|
|
3
|
+
'date',
|
|
4
|
+
'email',
|
|
5
|
+
'number',
|
|
6
|
+
'select',
|
|
7
|
+
'text',
|
|
8
|
+
'textarea',
|
|
9
|
+
]);
|
|
10
|
+
const isRecord = (value) => Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
11
|
+
const getPlaceholder = (value) => {
|
|
12
|
+
if (typeof value === 'string') {
|
|
13
|
+
return value || undefined;
|
|
14
|
+
}
|
|
15
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
16
|
+
return String(value);
|
|
17
|
+
}
|
|
18
|
+
if (Array.isArray(value) &&
|
|
19
|
+
value.length > 0 &&
|
|
20
|
+
value.every((item) => typeof item === 'string' || typeof item === 'number')) {
|
|
21
|
+
return value.join(', ');
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
};
|
|
25
|
+
const getFieldValue = (field, templateData) => 'name' in field && typeof field.name === 'string'
|
|
26
|
+
? templateData[field.name]
|
|
27
|
+
: templateData;
|
|
28
|
+
const applyFieldPlaceholder = (field, templateData) => {
|
|
29
|
+
const fieldValue = getFieldValue(field, templateData);
|
|
30
|
+
if (field.type === 'row' || field.type === 'collapsible') {
|
|
31
|
+
return {
|
|
32
|
+
...field,
|
|
33
|
+
fields: applyTemplatePlaceholders(field.fields, templateData),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (field.type === 'tabs') {
|
|
37
|
+
return {
|
|
38
|
+
...field,
|
|
39
|
+
tabs: field.tabs.map((tab) => {
|
|
40
|
+
const tabValue = 'name' in tab && typeof tab.name === 'string'
|
|
41
|
+
? templateData[tab.name]
|
|
42
|
+
: templateData;
|
|
43
|
+
return {
|
|
44
|
+
...tab,
|
|
45
|
+
fields: applyTemplatePlaceholders(tab.fields, isRecord(tabValue) ? tabValue : {}),
|
|
46
|
+
};
|
|
47
|
+
}),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (field.type === 'group') {
|
|
51
|
+
return {
|
|
52
|
+
...field,
|
|
53
|
+
fields: applyTemplatePlaceholders(field.fields, isRecord(fieldValue) ? fieldValue : {}),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (!PLACEHOLDER_FIELD_TYPES.has(field.type)) {
|
|
57
|
+
return field;
|
|
58
|
+
}
|
|
59
|
+
const placeholder = getPlaceholder(fieldValue);
|
|
60
|
+
if (placeholder === undefined) {
|
|
61
|
+
return field;
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
...field,
|
|
65
|
+
admin: {
|
|
66
|
+
...field.admin,
|
|
67
|
+
placeholder,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
export const applyTemplatePlaceholders = (fields, templateData) => fields.map((field) => applyFieldPlaceholder(field, templateData));
|
|
72
|
+
//# sourceMappingURL=templatePlaceholders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templatePlaceholders.js","sourceRoot":"","sources":["../../src/admin/templatePlaceholders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAOV,MAAM,EACP,MAAM,SAAS,CAAA;AAOhB,OAAO,KAAK,EAAkB,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAiSvE,eAAO,MAAM,eAAe,GACzB,cAAc,qBAAqB,KAAG,MAyCpC,CAAA;AAEL,eAAe,eAAe,CAAA"}
|
package/dist/plugin.js
CHANGED
|
@@ -5,6 +5,8 @@ import { localizedText } from './translations/index.js';
|
|
|
5
5
|
import { fieldsContain, transformBlock, transformFields } from './traverseFields.js';
|
|
6
6
|
const COLLECTION_SLUG = 'templates';
|
|
7
7
|
const DATA_FIELD_PREFIX = 'data_';
|
|
8
|
+
const RECONCILE_CONTEXT_KEY = 'sittariTemplatesReconcile';
|
|
9
|
+
const TEMPLATE_FIELD_ADMIN_COMPONENT = '@sittari/payload-templates/client#TemplateField';
|
|
8
10
|
const VALID_TEMPLATE_NAME = /^[A-Za-z0-9_]+$/;
|
|
9
11
|
const dataFieldName = (name) => `${DATA_FIELD_PREFIX}${name}`;
|
|
10
12
|
const extendOnInit = (incomingConfig, onInit) => async (payload) => {
|
|
@@ -52,6 +54,20 @@ const createTemplateFieldTransformer = (templates, reusableBlocks) => {
|
|
|
52
54
|
const localized = fieldsContain(fields, (templateField) => 'localized' in templateField && templateField.localized === true);
|
|
53
55
|
return {
|
|
54
56
|
...groupField,
|
|
57
|
+
admin: {
|
|
58
|
+
...groupField.admin,
|
|
59
|
+
components: {
|
|
60
|
+
...groupField.admin?.components,
|
|
61
|
+
Field: TEMPLATE_FIELD_ADMIN_COMPONENT,
|
|
62
|
+
},
|
|
63
|
+
custom: {
|
|
64
|
+
...groupField.admin?.custom,
|
|
65
|
+
templateField: {
|
|
66
|
+
dataField: dataFieldName(templateName),
|
|
67
|
+
template: templateName,
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
},
|
|
55
71
|
fields,
|
|
56
72
|
hooks: {
|
|
57
73
|
...groupField.hooks,
|
|
@@ -106,7 +122,7 @@ const createTemplateFields = (templates) => [
|
|
|
106
122
|
},
|
|
107
123
|
})),
|
|
108
124
|
];
|
|
109
|
-
const createTemplatesCollection = (templates) => ({
|
|
125
|
+
const createTemplatesCollection = (templates, beforeOperation) => ({
|
|
110
126
|
slug: COLLECTION_SLUG,
|
|
111
127
|
access: {
|
|
112
128
|
create: () => false,
|
|
@@ -121,11 +137,18 @@ const createTemplatesCollection = (templates) => ({
|
|
|
121
137
|
singular: localizedText('template'),
|
|
122
138
|
plural: localizedText('templates'),
|
|
123
139
|
},
|
|
140
|
+
hooks: {
|
|
141
|
+
beforeOperation: [beforeOperation],
|
|
142
|
+
},
|
|
124
143
|
fields: createTemplateFields(templates),
|
|
125
144
|
});
|
|
126
145
|
const reconcileTemplates = async (payload, templates) => {
|
|
146
|
+
const context = {
|
|
147
|
+
[RECONCILE_CONTEXT_KEY]: true,
|
|
148
|
+
};
|
|
127
149
|
const result = await payload.find({
|
|
128
150
|
collection: COLLECTION_SLUG,
|
|
151
|
+
context,
|
|
129
152
|
depth: 0,
|
|
130
153
|
limit: 0,
|
|
131
154
|
overrideAccess: true,
|
|
@@ -141,6 +164,7 @@ const reconcileTemplates = async (payload, templates) => {
|
|
|
141
164
|
if (!existing) {
|
|
142
165
|
await payload.create({
|
|
143
166
|
collection: COLLECTION_SLUG,
|
|
167
|
+
context,
|
|
144
168
|
data: {
|
|
145
169
|
[dataFieldName(template.name)]: template.initialData ?? {},
|
|
146
170
|
templateType: template.name,
|
|
@@ -153,6 +177,7 @@ const reconcileTemplates = async (payload, templates) => {
|
|
|
153
177
|
if (existing.title !== template.label) {
|
|
154
178
|
await payload.update({
|
|
155
179
|
collection: COLLECTION_SLUG,
|
|
180
|
+
context,
|
|
156
181
|
id: existing.id,
|
|
157
182
|
data: { title: template.label },
|
|
158
183
|
overrideAccess: true,
|
|
@@ -163,12 +188,35 @@ const reconcileTemplates = async (payload, templates) => {
|
|
|
163
188
|
if (typeof document.templateType !== 'string' || !configuredNames.has(document.templateType)) {
|
|
164
189
|
await payload.delete({
|
|
165
190
|
collection: COLLECTION_SLUG,
|
|
191
|
+
context,
|
|
166
192
|
id: document.id,
|
|
167
193
|
overrideAccess: true,
|
|
168
194
|
});
|
|
169
195
|
}
|
|
170
196
|
}
|
|
171
197
|
};
|
|
198
|
+
const createTemplateReconciler = (templates) => {
|
|
199
|
+
let reconciliation;
|
|
200
|
+
const reconcile = (payload) => {
|
|
201
|
+
if (!reconciliation) {
|
|
202
|
+
reconciliation = reconcileTemplates(payload, templates).catch((error) => {
|
|
203
|
+
reconciliation = undefined;
|
|
204
|
+
throw error;
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
return reconciliation;
|
|
208
|
+
};
|
|
209
|
+
const beforeOperation = async ({ context, req }) => {
|
|
210
|
+
if (context[RECONCILE_CONTEXT_KEY] === true) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
await reconcile(req.payload);
|
|
214
|
+
};
|
|
215
|
+
return {
|
|
216
|
+
beforeOperation,
|
|
217
|
+
reconcile,
|
|
218
|
+
};
|
|
219
|
+
};
|
|
172
220
|
export const templatesPlugin = (pluginConfig) => (incomingConfig) => {
|
|
173
221
|
if (pluginConfig.enabled === false) {
|
|
174
222
|
return incomingConfig;
|
|
@@ -178,6 +226,7 @@ export const templatesPlugin = (pluginConfig) => (incomingConfig) => {
|
|
|
178
226
|
throw new Error(`[templatesPlugin] A collection with slug "${COLLECTION_SLUG}" already exists.`);
|
|
179
227
|
}
|
|
180
228
|
const transformTemplateField = createTemplateFieldTransformer(pluginConfig.templates, incomingConfig.blocks ?? []);
|
|
229
|
+
const templateReconciler = createTemplateReconciler(pluginConfig.templates);
|
|
181
230
|
const collections = (incomingConfig.collections ?? []).map((collection) => {
|
|
182
231
|
const fields = transformFields(collection.fields, transformTemplateField);
|
|
183
232
|
return fields === collection.fields ? collection : { ...collection, fields };
|
|
@@ -190,11 +239,11 @@ export const templatesPlugin = (pluginConfig) => (incomingConfig) => {
|
|
|
190
239
|
...incomingConfig,
|
|
191
240
|
collections: [
|
|
192
241
|
...collections,
|
|
193
|
-
createTemplatesCollection(pluginConfig.templates),
|
|
242
|
+
createTemplatesCollection(pluginConfig.templates, templateReconciler.beforeOperation),
|
|
194
243
|
],
|
|
195
244
|
globals,
|
|
196
245
|
blocks: incomingConfig.blocks?.map((block) => transformBlock(block, transformTemplateField)),
|
|
197
|
-
onInit: extendOnInit(incomingConfig,
|
|
246
|
+
onInit: extendOnInit(incomingConfig, templateReconciler.reconcile),
|
|
198
247
|
};
|
|
199
248
|
};
|
|
200
249
|
export default templatesPlugin;
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/translations/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/translations/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;CAIL,CAAA;AAEV,MAAM,MAAM,oBAAoB,GAAG;KAChC,GAAG,IAAI,MAAM,OAAO,EAAE,GAAG,MAAM;CACjC,CAAA"}
|
package/dist/translations/en.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/translations/en.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;CACd,CAAA"}
|
|
1
|
+
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/translations/en.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,YAAY,EAAE,eAAe;IAC7B,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;CACd,CAAA"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { en } from './en.js';
|
|
2
2
|
export declare const translations: {
|
|
3
3
|
en: {
|
|
4
|
+
readonly editTemplate: "Edit template";
|
|
4
5
|
readonly template: "Template";
|
|
5
6
|
readonly templates: "Templates";
|
|
6
7
|
};
|
|
7
8
|
ru: {
|
|
9
|
+
editTemplate: string;
|
|
8
10
|
template: string;
|
|
9
11
|
templates: string;
|
|
10
12
|
};
|
|
11
13
|
uk: {
|
|
14
|
+
editTemplate: string;
|
|
12
15
|
template: string;
|
|
13
16
|
templates: string;
|
|
14
17
|
};
|
|
@@ -16,4 +19,5 @@ export declare const translations: {
|
|
|
16
19
|
export type TemplatesLanguage = keyof typeof translations;
|
|
17
20
|
export type TemplatesTranslationKey = keyof typeof en;
|
|
18
21
|
export declare const localizedText: (key: TemplatesTranslationKey) => Record<TemplatesLanguage, string>;
|
|
22
|
+
export declare const translate: (key: TemplatesTranslationKey, language?: string) => string;
|
|
19
23
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAI5B,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAI5B,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;CAAiB,CAAA;AAE1C,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,YAAY,CAAA;AACzD,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,EAAE,CAAA;AAErD,eAAO,MAAM,aAAa,GAAI,KAAK,uBAAuB,KAAG,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAI3F,CAAA;AAEF,eAAO,MAAM,SAAS,GACpB,KAAK,uBAAuB,EAC5B,WAAW,MAAM,KAChB,MAMF,CAAA"}
|
|
@@ -7,4 +7,9 @@ export const localizedText = (key) => ({
|
|
|
7
7
|
ru: ru[key],
|
|
8
8
|
uk: uk[key],
|
|
9
9
|
});
|
|
10
|
+
export const translate = (key, language) => {
|
|
11
|
+
const normalized = language?.trim().toLowerCase().split(/[-_]/, 1)[0];
|
|
12
|
+
const resolvedLanguage = normalized === 'ru' || normalized === 'uk' ? normalized : 'en';
|
|
13
|
+
return translations[resolvedLanguage][key];
|
|
14
|
+
};
|
|
10
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAE5B,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAA;AAK1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAA4B,EAAqC,EAAE,CAAC,CAAC;IACjG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;IACX,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;IACX,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;CACZ,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAE5B,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAA;AAK1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAA4B,EAAqC,EAAE,CAAC,CAAC;IACjG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;IACX,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;IACX,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;CACZ,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,GAA4B,EAC5B,QAAiB,EACT,EAAE;IACV,MAAM,UAAU,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrE,MAAM,gBAAgB,GACpB,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAA;IAEhE,OAAO,YAAY,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAA;AAC5C,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/translations/ru.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/translations/ru.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,EAAE;;;;CAIiB,CAAA"}
|
package/dist/translations/ru.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/translations/ru.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,SAAS;CACU,CAAA"}
|
|
1
|
+
{"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/translations/ru.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,YAAY,EAAE,sBAAsB;IACpC,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,SAAS;CACU,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uk.d.ts","sourceRoot":"","sources":["../../src/translations/uk.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"uk.d.ts","sourceRoot":"","sources":["../../src/translations/uk.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,EAAE;;;;CAIiB,CAAA"}
|
package/dist/translations/uk.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uk.js","sourceRoot":"","sources":["../../src/translations/uk.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,SAAS;CACU,CAAA"}
|
|
1
|
+
{"version":3,"file":"uk.js","sourceRoot":"","sources":["../../src/translations/uk.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,YAAY,EAAE,mBAAmB;IACjC,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,SAAS;CACU,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sittari/payload-templates",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Managed template documents for Payload CMS.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
"import": "./dist/index.js",
|
|
13
13
|
"default": "./dist/index.js"
|
|
14
14
|
},
|
|
15
|
+
"./client": {
|
|
16
|
+
"types": "./dist/exports/client.d.ts",
|
|
17
|
+
"import": "./dist/exports/client.js"
|
|
18
|
+
},
|
|
15
19
|
"./types": {
|
|
16
20
|
"types": "./dist/exports/types.d.ts",
|
|
17
21
|
"import": "./dist/exports/types.js"
|
|
@@ -22,12 +26,18 @@
|
|
|
22
26
|
"README.md"
|
|
23
27
|
],
|
|
24
28
|
"sideEffects": false,
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@payloadcms/ui": "^3.0.0"
|
|
31
|
+
},
|
|
25
32
|
"peerDependencies": {
|
|
26
|
-
"payload": "^3.0.0"
|
|
33
|
+
"payload": "^3.0.0",
|
|
34
|
+
"react": "^19.0.0"
|
|
27
35
|
},
|
|
28
36
|
"devDependencies": {
|
|
29
37
|
"@payloadcms/db-sqlite": "3.85.2",
|
|
38
|
+
"@types/react": "^19.0.0",
|
|
30
39
|
"payload": "^3.0.0",
|
|
40
|
+
"react": "^19.0.0",
|
|
31
41
|
"typescript": "5.9.3",
|
|
32
42
|
"vitest": "4.1.9"
|
|
33
43
|
},
|