@payload-onpage/plugin 0.2.1 → 0.3.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/dist/access.d.ts +7 -4
- package/dist/access.d.ts.map +1 -1
- package/dist/access.js +23 -20
- package/dist/access.js.map +1 -1
- package/dist/admin/OnPageAdminControls.d.ts +3 -2
- package/dist/admin/OnPageAdminControls.d.ts.map +1 -1
- package/dist/admin/OnPageAdminControls.js +12 -8
- package/dist/admin/OnPageAdminControls.js.map +1 -1
- package/dist/endpoints.d.ts +22 -6
- package/dist/endpoints.d.ts.map +1 -1
- package/dist/endpoints.js +87 -80
- package/dist/endpoints.js.map +1 -1
- package/dist/hooks.d.ts +11 -5
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +2 -2
- package/dist/hooks.js.map +1 -1
- package/dist/http.d.ts +18 -4
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +30 -16
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -50
- package/dist/index.js.map +1 -1
- package/dist/options.d.ts +22 -11
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +11 -3
- package/dist/options.js.map +1 -1
- package/dist/paths.d.ts +2 -2
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +11 -24
- package/dist/paths.js.map +1 -1
- package/dist/schema.d.ts +6 -4
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +115 -62
- package/dist/schema.js.map +1 -1
- package/dist/translations.d.ts +12 -1
- package/dist/translations.d.ts.map +1 -1
- package/dist/translations.js +10 -9
- package/dist/translations.js.map +1 -1
- package/package.json +2 -2
- package/src/access.ts +26 -19
- package/src/admin/OnPageAdminControls.tsx +16 -16
- package/src/endpoints.ts +105 -98
- package/src/hooks.ts +14 -5
- package/src/http.ts +51 -15
- package/src/index.ts +77 -64
- package/src/options.ts +29 -17
- package/src/paths.ts +14 -27
- package/src/schema.ts +137 -79
- package/src/translations.ts +17 -11
package/dist/schema.d.ts
CHANGED
|
@@ -10,17 +10,19 @@ type I18nLike = Parameters<typeof getTranslation>[1];
|
|
|
10
10
|
type Permissions = SanitizedFieldsPermissions | undefined;
|
|
11
11
|
export interface SerializeContext {
|
|
12
12
|
/** Translates labels into the admin language. Without it, plain-string labels or the field name are used. */
|
|
13
|
-
i18n?: I18nLike;
|
|
13
|
+
i18n?: I18nLike | undefined;
|
|
14
14
|
/** Global blocks (`config.blocks`), to resolve `blockReferences`. */
|
|
15
|
-
blocks?: Block[];
|
|
15
|
+
blocks?: Block[] | undefined;
|
|
16
16
|
/** Field-level permissions: fields the user can't update are left out. */
|
|
17
|
-
permissions?: Permissions;
|
|
17
|
+
permissions?: Permissions | undefined;
|
|
18
18
|
/** Collects function defaults to evaluate for this request. */
|
|
19
19
|
defaults?: {
|
|
20
20
|
req: PayloadRequest;
|
|
21
21
|
pending: Promise<void>[];
|
|
22
|
-
};
|
|
22
|
+
} | undefined;
|
|
23
23
|
}
|
|
24
|
+
/** A config label (string, translations or function) in the request's language, else `fallback`. */
|
|
25
|
+
export declare const label: (value: unknown, fallback: string, ctx: Pick<SerializeContext, "i18n">) => string;
|
|
24
26
|
/**
|
|
25
27
|
* Serialize Payload field configs into the editor schema. Presentational
|
|
26
28
|
* containers (row, collapsible, unnamed group/tab) are flattened into their
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAe,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAe,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAkCvF,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;AAEpD,KAAK,WAAW,GAAG,0BAA0B,GAAG,SAAS,CAAA;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,6GAA6G;IAC7G,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC3B,qEAAqE;IACrE,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,CAAA;IAC5B,0EAA0E;IAC1E,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IACrC,+DAA+D;IAC/D,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;KAAE,GAAG,SAAS,CAAA;CACzE;AAED,oGAAoG;AACpG,eAAO,MAAM,KAAK,GAChB,OAAO,OAAO,EACd,UAAU,MAAM,EAChB,KAAK,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAClC,MAUF,CAAA;AA6CD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAC3B,GAAG,GAAE,gBAAqB,GACzB,WAAW,EAAE,CA0Kf;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,IAAI,cAAoB,GAAG,GAAG,CAAC,MAAM,CAAC,CAQ5F;AAED,YAAY,EAAE,cAAc,EAAE,CAAA"}
|
package/dist/schema.js
CHANGED
|
@@ -10,7 +10,10 @@ import { fieldAffectsData, fieldIsHiddenOrDisabled, fieldIsVirtual, tabHasName,
|
|
|
10
10
|
const SYSTEM_FIELDS = new Set(['id', 'createdAt', 'updatedAt', '_status', 'deletedAt']);
|
|
11
11
|
/** Data fields with no meaningful on-page value. */
|
|
12
12
|
const SKIP_TYPES = new Set(['join', 'ui']);
|
|
13
|
-
|
|
13
|
+
/** `{ key: n }` when n is a number, else nothing (for spreading optional limits). */
|
|
14
|
+
const num = (key, n) => typeof n === 'number' ? { [key]: n } : {};
|
|
15
|
+
/** A config label (string, translations or function) in the request's language, else `fallback`. */
|
|
16
|
+
export const label = (value, fallback, ctx) => {
|
|
14
17
|
if (value == null || value === false)
|
|
15
18
|
return fallback;
|
|
16
19
|
if (typeof value === 'string')
|
|
@@ -116,77 +119,127 @@ export function serializeFields(fields, ctx = {}) {
|
|
|
116
119
|
const perms = childPermissions(ctx.permissions, f.name);
|
|
117
120
|
if (perms === false)
|
|
118
121
|
continue;
|
|
119
|
-
|
|
120
|
-
const
|
|
121
|
-
const field = {
|
|
122
|
+
const common = f;
|
|
123
|
+
const base = {
|
|
122
124
|
name: f.name,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
+
label: label(common.label, toWords(f.name), ctx),
|
|
126
|
+
...(common.localized ? { localized: true } : {}),
|
|
127
|
+
...(common.required ? { required: true } : {}),
|
|
125
128
|
};
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
const description = label(common.admin?.description, '', ctx);
|
|
130
|
+
const editor = common.admin?.custom?.onpage?.editor ?? common.custom?.onpage?.editor;
|
|
131
|
+
const childCtx = { ...ctx, permissions: perms };
|
|
132
|
+
const rows = (labels, min, max) => {
|
|
133
|
+
const fallback = formatLabels(f.name);
|
|
134
|
+
return {
|
|
135
|
+
labels: {
|
|
136
|
+
singular: label(labels?.singular, fallback.singular, ctx),
|
|
137
|
+
plural: label(labels?.plural, fallback.plural, ctx),
|
|
138
|
+
},
|
|
139
|
+
...num('minRows', min),
|
|
140
|
+
...num('maxRows', max),
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
let field;
|
|
144
|
+
switch (f.type) {
|
|
145
|
+
case 'text':
|
|
146
|
+
case 'textarea':
|
|
147
|
+
case 'email':
|
|
148
|
+
case 'code':
|
|
149
|
+
case 'json':
|
|
150
|
+
case 'checkbox':
|
|
151
|
+
case 'point':
|
|
152
|
+
case 'richText':
|
|
153
|
+
field = { ...base, type: f.type, ...('hasMany' in f && f.hasMany ? { hasMany: true } : {}) };
|
|
154
|
+
break;
|
|
155
|
+
case 'number':
|
|
156
|
+
field = {
|
|
157
|
+
...base,
|
|
158
|
+
type: 'number',
|
|
159
|
+
...(f.hasMany ? { hasMany: true } : {}),
|
|
160
|
+
...num('min', f.min),
|
|
161
|
+
...num('max', f.max),
|
|
162
|
+
};
|
|
163
|
+
break;
|
|
164
|
+
case 'date': {
|
|
165
|
+
const picker = f.admin?.date?.pickerAppearance;
|
|
166
|
+
field = {
|
|
167
|
+
...base,
|
|
168
|
+
type: 'date',
|
|
169
|
+
...(typeof picker === 'string' ? { pickerAppearance: picker } : {}),
|
|
170
|
+
};
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case 'select':
|
|
174
|
+
case 'radio':
|
|
175
|
+
field = {
|
|
176
|
+
...base,
|
|
177
|
+
type: f.type,
|
|
178
|
+
options: f.options.map((o) => typeof o === 'string'
|
|
179
|
+
? { label: o, value: o }
|
|
180
|
+
: { label: label(o.label, String(o.value), ctx), value: String(o.value) }),
|
|
181
|
+
...('hasMany' in f && f.hasMany ? { hasMany: true } : {}),
|
|
182
|
+
};
|
|
183
|
+
break;
|
|
184
|
+
case 'relationship':
|
|
185
|
+
case 'upload':
|
|
186
|
+
field = {
|
|
187
|
+
...base,
|
|
188
|
+
type: f.type,
|
|
189
|
+
relationTo: f.relationTo,
|
|
190
|
+
...(f.hasMany ? { hasMany: true } : {}),
|
|
191
|
+
};
|
|
192
|
+
break;
|
|
193
|
+
case 'group':
|
|
194
|
+
field = { ...base, type: 'group', fields: serializeFields(f.fields, childCtx) };
|
|
195
|
+
break;
|
|
196
|
+
case 'array':
|
|
197
|
+
field = {
|
|
198
|
+
...base,
|
|
199
|
+
type: 'array',
|
|
200
|
+
fields: serializeFields(f.fields, childCtx),
|
|
201
|
+
...rows(f.labels, f.minRows, f.maxRows),
|
|
202
|
+
};
|
|
203
|
+
break;
|
|
204
|
+
case 'blocks': {
|
|
205
|
+
const refs = (f.blockReferences ?? [])
|
|
206
|
+
.map((b) => (typeof b === 'string' ? ctx.blocks?.find((x) => x.slug === b) : b))
|
|
207
|
+
.filter((b) => !!b);
|
|
208
|
+
field = {
|
|
209
|
+
...base,
|
|
210
|
+
type: 'blocks',
|
|
211
|
+
blocks: [...f.blocks, ...refs].map((b) => serializeBlock(b, blockPermissions(ctx.permissions, f.name, b.slug), ctx)),
|
|
212
|
+
...rows(f.labels, f.minRows, f.maxRows),
|
|
213
|
+
};
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
default:
|
|
217
|
+
// join/ui are skipped above; anything newer than this plugin isn't editable on the page.
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
if (description)
|
|
221
|
+
field.description = description;
|
|
222
|
+
if (typeof editor === 'string')
|
|
223
|
+
field.editor = editor;
|
|
224
|
+
if (typeof common.defaultValue === 'function') {
|
|
133
225
|
if (ctx.defaults) {
|
|
134
226
|
const { req, pending } = ctx.defaults;
|
|
227
|
+
const target = field;
|
|
135
228
|
pending.push(getDefaultValue({
|
|
136
|
-
defaultValue:
|
|
229
|
+
defaultValue: common.defaultValue,
|
|
137
230
|
locale: req.locale ?? undefined,
|
|
138
231
|
req,
|
|
139
232
|
user: req.user,
|
|
140
233
|
})
|
|
141
234
|
.then((v) => {
|
|
142
235
|
if (isJsonSafe(v))
|
|
143
|
-
|
|
236
|
+
target.defaultValue = v;
|
|
144
237
|
})
|
|
145
238
|
.catch(() => undefined));
|
|
146
239
|
}
|
|
147
240
|
}
|
|
148
|
-
else if (isJsonSafe(
|
|
149
|
-
field.defaultValue =
|
|
150
|
-
}
|
|
151
|
-
const description = label(anyField.admin?.description, '', ctx);
|
|
152
|
-
if (description)
|
|
153
|
-
field.description = description;
|
|
154
|
-
if (Array.isArray(anyField.options)) {
|
|
155
|
-
field.options = anyField.options.map((o) => typeof o === 'string'
|
|
156
|
-
? { label: o, value: o }
|
|
157
|
-
: {
|
|
158
|
-
label: label(o.label, String(o.value), ctx),
|
|
159
|
-
value: String(o.value),
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
if (anyField.relationTo)
|
|
163
|
-
field.relationTo = anyField.relationTo;
|
|
164
|
-
for (const k of ['minRows', 'maxRows', 'min', 'max']) {
|
|
165
|
-
const n = anyField[k];
|
|
166
|
-
if (typeof n === 'number')
|
|
167
|
-
field[k] = n;
|
|
168
|
-
}
|
|
169
|
-
const editor = anyField.admin?.custom?.onpage?.editor ?? anyField.custom?.onpage?.editor;
|
|
170
|
-
if (typeof editor === 'string')
|
|
171
|
-
field.editor = editor;
|
|
172
|
-
const picker = anyField.admin?.date?.pickerAppearance;
|
|
173
|
-
if (typeof picker === 'string')
|
|
174
|
-
field.pickerAppearance = picker;
|
|
175
|
-
const childCtx = { ...ctx, permissions: perms };
|
|
176
|
-
if (f.type === 'group' || f.type === 'array')
|
|
177
|
-
field.fields = serializeFields(f.fields, childCtx);
|
|
178
|
-
if (f.type === 'array') {
|
|
179
|
-
const fallback = formatLabels(f.name);
|
|
180
|
-
field.labels = {
|
|
181
|
-
singular: label(anyField.labels?.singular, fallback.singular, ctx),
|
|
182
|
-
plural: label(anyField.labels?.plural, fallback.plural, ctx),
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
if (f.type === 'blocks') {
|
|
186
|
-
const refs = (f.blockReferences ?? [])
|
|
187
|
-
.map((b) => (typeof b === 'string' ? ctx.blocks?.find((x) => x.slug === b) : b))
|
|
188
|
-
.filter((b) => !!b);
|
|
189
|
-
field.blocks = [...(f.blocks ?? []), ...refs].map((b) => serializeBlock(b, blockPermissions(ctx.permissions, f.name, b.slug), ctx));
|
|
241
|
+
else if (isJsonSafe(common.defaultValue)) {
|
|
242
|
+
field.defaultValue = common.defaultValue;
|
|
190
243
|
}
|
|
191
244
|
out.push(field);
|
|
192
245
|
}
|
|
@@ -195,14 +248,14 @@ export function serializeFields(fields, ctx = {}) {
|
|
|
195
248
|
/** Every collection a relationship or upload field in `fields` points to. */
|
|
196
249
|
export function relationTargets(fields, into = new Set()) {
|
|
197
250
|
for (const f of fields) {
|
|
198
|
-
if (
|
|
251
|
+
if (f.type === 'relationship' || f.type === 'upload')
|
|
199
252
|
for (const slug of Array.isArray(f.relationTo) ? f.relationTo : [f.relationTo])
|
|
200
253
|
into.add(slug);
|
|
201
|
-
|
|
202
|
-
if (f.fields)
|
|
254
|
+
if (f.type === 'group' || f.type === 'array')
|
|
203
255
|
relationTargets(f.fields, into);
|
|
204
|
-
|
|
205
|
-
|
|
256
|
+
if (f.type === 'blocks')
|
|
257
|
+
for (const b of f.blocks)
|
|
258
|
+
relationTargets(b.fields, into);
|
|
206
259
|
}
|
|
207
260
|
return into;
|
|
208
261
|
}
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAGzD,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,OAAO,GACR,MAAM,gBAAgB,CAAA;AAEvB,iEAAiE;AACjE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAA;AACvF,oDAAoD;AACpD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/translations.d.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
|
+
import type { NestedKeysStripped } from '@payloadcms/translations';
|
|
1
2
|
/**
|
|
2
3
|
* Admin UI strings, registered with Payload's i18n under the `onpage` namespace
|
|
3
4
|
* (so the admin language applies). Add or override languages with
|
|
4
5
|
* `i18n.translations` in your Payload config.
|
|
5
6
|
*/
|
|
7
|
+
declare const en: {
|
|
8
|
+
onpage: {
|
|
9
|
+
editOnPage: string;
|
|
10
|
+
copyPreviewLink: string;
|
|
11
|
+
copyPreviewLinkHint: string;
|
|
12
|
+
linkCopied: string;
|
|
13
|
+
linkFailed: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
6
16
|
export declare const translations: {
|
|
7
17
|
en: {
|
|
8
18
|
onpage: {
|
|
@@ -41,5 +51,6 @@ export declare const translations: {
|
|
|
41
51
|
};
|
|
42
52
|
};
|
|
43
53
|
};
|
|
44
|
-
export type OnPageTranslationKey =
|
|
54
|
+
export type OnPageTranslationKey = NestedKeysStripped<typeof en>;
|
|
55
|
+
export {};
|
|
45
56
|
//# sourceMappingURL=translations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../src/translations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../src/translations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAClE;;;;GAIG;AACH,QAAA,MAAM,EAAE;;;;;;;;CAQP,CAAA;AAKD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BQ,CAAA;AAEjC,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAA"}
|
package/dist/translations.js
CHANGED
|
@@ -3,16 +3,17 @@
|
|
|
3
3
|
* (so the admin language applies). Add or override languages with
|
|
4
4
|
* `i18n.translations` in your Payload config.
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
linkFailed: "Couldn't create a preview link: {{message}}",
|
|
14
|
-
},
|
|
6
|
+
const en = {
|
|
7
|
+
onpage: {
|
|
8
|
+
editOnPage: 'Edit on page',
|
|
9
|
+
copyPreviewLink: 'Copy preview link',
|
|
10
|
+
copyPreviewLinkHint: 'Copy a read-only link to this draft',
|
|
11
|
+
linkCopied: 'Preview link copied — valid until {{date}}',
|
|
12
|
+
linkFailed: "Couldn't create a preview link: {{message}}",
|
|
15
13
|
},
|
|
14
|
+
};
|
|
15
|
+
export const translations = {
|
|
16
|
+
en,
|
|
16
17
|
es: {
|
|
17
18
|
onpage: {
|
|
18
19
|
editOnPage: 'Editar en la página',
|
package/dist/translations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translations.js","sourceRoot":"","sources":["../src/translations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"translations.js","sourceRoot":"","sources":["../src/translations.ts"],"names":[],"mappings":"AACA;;;;GAIG;AACH,MAAM,EAAE,GAAG;IACT,MAAM,EAAE;QACN,UAAU,EAAE,cAAc;QAC1B,eAAe,EAAE,mBAAmB;QACpC,mBAAmB,EAAE,qCAAqC;QAC1D,UAAU,EAAE,4CAA4C;QACxD,UAAU,EAAE,6CAA6C;KAC1D;CACF,CAAA;AAKD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,EAAE;IACF,EAAE,EAAE;QACF,MAAM,EAAE;YACN,UAAU,EAAE,qBAAqB;YACjC,eAAe,EAAE,+BAA+B;YAChD,mBAAmB,EAAE,kDAAkD;YACvE,UAAU,EAAE,uCAAuC;YACnD,UAAU,EAAE,yCAAyC;SACtD;KACF;IACD,EAAE,EAAE;QACF,MAAM,EAAE;YACN,UAAU,EAAE,sBAAsB;YAClC,eAAe,EAAE,yBAAyB;YAC1C,mBAAmB,EAAE,mDAAmD;YACxE,UAAU,EAAE,uCAAuC;YACnD,UAAU,EAAE,2CAA2C;SACxD;KACF;IACD,EAAE,EAAE;QACF,MAAM,EAAE;YACN,UAAU,EAAE,0BAA0B;YACtC,eAAe,EAAE,uBAAuB;YACxC,mBAAmB,EAAE,0DAA0D;YAC/E,UAAU,EAAE,4CAA4C;YACxD,UAAU,EAAE,wDAAwD;SACrE;KACF;CAC8B,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payload-onpage/plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "payload-onpage for Payload CMS: on-page editing endpoints, auto-mapping, preview links and admin controls.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"provenance": true
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@payload-onpage/core": "0.
|
|
56
|
+
"@payload-onpage/core": "0.3.0"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
59
|
"payload": "^3.90.2",
|
package/src/access.ts
CHANGED
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
type SanitizedCollectionPermission,
|
|
13
13
|
type SanitizedGlobalPermission,
|
|
14
14
|
} from 'payload'
|
|
15
|
+
import { entityConfig } from './http.ts'
|
|
15
16
|
import type { OnPageOptions } from './options.ts'
|
|
16
17
|
|
|
17
18
|
/** Signed in as an admin user (or allowed by the `access` option). */
|
|
@@ -24,22 +25,34 @@ export async function canUseOnPage(req: PayloadRequest, options: OnPageOptions):
|
|
|
24
25
|
/** Payload's sanitized permissions for one document (or the collection, without an id). */
|
|
25
26
|
export async function documentPermissions(
|
|
26
27
|
req: PayloadRequest,
|
|
27
|
-
ref:
|
|
28
|
+
ref: { kind: DocRef['kind']; slug: string; id?: string | number | undefined },
|
|
28
29
|
): Promise<SanitizedCollectionPermission | SanitizedGlobalPermission | null> {
|
|
29
30
|
try {
|
|
30
31
|
if (ref.kind === 'global') {
|
|
31
|
-
const globalConfig = req
|
|
32
|
+
const globalConfig = entityConfig(req, 'global', ref.slug)
|
|
32
33
|
return globalConfig ? await docAccessOperationGlobal({ globalConfig, req }) : null
|
|
33
34
|
}
|
|
34
35
|
const collection = req.payload.collections[ref.slug]
|
|
35
36
|
if (!collection) return null
|
|
36
|
-
return await docAccessOperation({
|
|
37
|
-
|
|
37
|
+
return await docAccessOperation({
|
|
38
|
+
collection,
|
|
39
|
+
...(ref.id !== undefined ? { id: ref.id } : {}),
|
|
40
|
+
req,
|
|
41
|
+
})
|
|
42
|
+
} catch (err) {
|
|
43
|
+
// An access function that throws denies, as in Payload, but shouldn't fail silently.
|
|
44
|
+
req.payload.logger.error({
|
|
45
|
+
err,
|
|
46
|
+
msg: `payload-onpage: access check failed for ${ref.kind} "${ref.slug}"`,
|
|
47
|
+
})
|
|
38
48
|
return null
|
|
39
49
|
}
|
|
40
50
|
}
|
|
41
51
|
|
|
42
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* May this user edit this document on the page? With an id, Payload evaluates a
|
|
54
|
+
* row-level rule (a `where`) against that document itself, so its answer is final.
|
|
55
|
+
*/
|
|
43
56
|
export async function canEditDocument(
|
|
44
57
|
req: PayloadRequest,
|
|
45
58
|
ref: DocRef,
|
|
@@ -48,18 +61,12 @@ export async function canEditDocument(
|
|
|
48
61
|
if (!req.user) return false
|
|
49
62
|
if (options.access) return Boolean(await options.access({ req, ref }))
|
|
50
63
|
if (!(await canUseOnPage(req, options))) return false
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
collection: ref.slug as never,
|
|
60
|
-
where: { and: [{ id: { equals: ref.id } }, update.where] } as never,
|
|
61
|
-
overrideAccess: true,
|
|
62
|
-
req,
|
|
63
|
-
})
|
|
64
|
-
return totalDocs > 0
|
|
64
|
+
const update: unknown = (await documentPermissions(req, ref))?.update
|
|
65
|
+
return (
|
|
66
|
+
update === true ||
|
|
67
|
+
(typeof update === 'object' &&
|
|
68
|
+
update !== null &&
|
|
69
|
+
'permission' in update &&
|
|
70
|
+
update.permission === true)
|
|
71
|
+
)
|
|
65
72
|
}
|
|
@@ -14,14 +14,16 @@ import {
|
|
|
14
14
|
useLocale,
|
|
15
15
|
useTranslation,
|
|
16
16
|
} from '@payloadcms/ui'
|
|
17
|
-
import type
|
|
17
|
+
import { errorText, ROUTES, type DocRef } from '@payload-onpage/core'
|
|
18
|
+
import { formatAdminURL } from 'payload/shared'
|
|
18
19
|
import { useMemo, useState } from 'react'
|
|
20
|
+
import type { OnPageTranslationKey, translations } from '../translations.ts'
|
|
19
21
|
|
|
20
22
|
export interface OnPageAdminControlsProps {
|
|
21
|
-
kind: '
|
|
23
|
+
kind: DocRef['kind']
|
|
22
24
|
slug: string
|
|
23
25
|
/** Plugin endpoint prefix (`routePrefix`). */
|
|
24
|
-
prefix: string
|
|
26
|
+
prefix: `/${string}`
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
/**
|
|
@@ -42,16 +44,16 @@ export function OnPageAdminControls({ kind, slug, prefix }: OnPageAdminControlsP
|
|
|
42
44
|
const { id, hasSavePermission } = useDocumentInfo()
|
|
43
45
|
const { config } = useConfig()
|
|
44
46
|
const locale = useLocale()
|
|
45
|
-
const { t
|
|
46
|
-
const t = (key: OnPageTranslationKey, vars?: Record<string, string>) =>
|
|
47
|
-
(translate as (k: string, v?: Record<string, string>) => string)(key, vars)
|
|
47
|
+
const { t } = useTranslation<(typeof translations)['en'], OnPageTranslationKey>()
|
|
48
48
|
const [busy, setBusy] = useState(false)
|
|
49
|
-
|
|
49
|
+
// Built like Payload's own API URLs: routes.api, serverURL, Next's basePath.
|
|
50
|
+
const apiBase = formatAdminURL({ apiRoute: config.routes.api, serverURL: config.serverURL })
|
|
50
51
|
const dataSource = useMemo(() => payloadRest({ apiBase, prefix }), [apiBase, prefix])
|
|
51
52
|
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
if (hasSavePermission === false) return null
|
|
54
|
+
const ref: DocRef | null =
|
|
55
|
+
kind === 'global' ? { kind, slug } : id != null ? { kind, slug, id } : null
|
|
56
|
+
if (!ref) return null
|
|
55
57
|
const params = new URLSearchParams({ kind, slug, mode: 'edit' })
|
|
56
58
|
if (kind === 'collection') params.set('id', String(id))
|
|
57
59
|
if (locale?.code) params.set('locale', locale.code)
|
|
@@ -59,13 +61,11 @@ export function OnPageAdminControls({ kind, slug, prefix }: OnPageAdminControlsP
|
|
|
59
61
|
const copyLink = async () => {
|
|
60
62
|
setBusy(true)
|
|
61
63
|
try {
|
|
62
|
-
const link = await dataSource.createPreviewLink
|
|
64
|
+
const link = await dataSource.createPreviewLink(ref, { locale: locale?.code })
|
|
63
65
|
await navigator.clipboard.writeText(link.url)
|
|
64
|
-
toast.success(
|
|
65
|
-
`Preview link copied — valid until ${new Date(link.expiresAt).toLocaleString()}`,
|
|
66
|
-
)
|
|
66
|
+
toast.success(t('onpage:linkCopied', { date: new Date(link.expiresAt).toLocaleString() }))
|
|
67
67
|
} catch (e) {
|
|
68
|
-
toast.error(t('onpage:linkFailed', { message: (e
|
|
68
|
+
toast.error(t('onpage:linkFailed', { message: errorText(e) }))
|
|
69
69
|
} finally {
|
|
70
70
|
setBusy(false)
|
|
71
71
|
}
|
|
@@ -77,7 +77,7 @@ export function OnPageAdminControls({ kind, slug, prefix }: OnPageAdminControlsP
|
|
|
77
77
|
<Button
|
|
78
78
|
buttonStyle="secondary"
|
|
79
79
|
size="medium"
|
|
80
|
-
onClick={() => postInNewTab(`${apiBase}${prefix}
|
|
80
|
+
onClick={() => postInNewTab(`${apiBase}${prefix}${ROUTES.enter}?${params}`)}
|
|
81
81
|
extraButtonProps={{ style, 'data-testid': 'onpage-edit-on-page' }}
|
|
82
82
|
>
|
|
83
83
|
{t('onpage:editOnPage')}
|