@strapi/content-manager 0.0.0-next.973df62640087231761ffaeb1c2b5d0d706346d8 → 0.0.0-next.a4bb06d54b493ab973659d0200e0e42937988850
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/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -1
- package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-BCCTDNe1.js → ComponentConfigurationPage-BLWQy8ru.js} +4 -5
- package/dist/_chunks/{ComponentConfigurationPage-BCCTDNe1.js.map → ComponentConfigurationPage-BLWQy8ru.js.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-CsMNJw_0.mjs → ComponentConfigurationPage-CtIa3aa2.mjs} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-CsMNJw_0.mjs.map → ComponentConfigurationPage-CtIa3aa2.mjs.map} +1 -1
- package/dist/_chunks/{ComponentIcon-BXdiCGQp.js → ComponentIcon-CRbtQEUV.js} +2 -3
- package/dist/_chunks/{ComponentIcon-BXdiCGQp.js.map → ComponentIcon-CRbtQEUV.js.map} +1 -1
- package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -1
- package/dist/_chunks/{EditConfigurationPage-BkEV5bFT.mjs → EditConfigurationPage-DsPR2DVk.mjs} +3 -3
- package/dist/_chunks/{EditConfigurationPage-BkEV5bFT.mjs.map → EditConfigurationPage-DsPR2DVk.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-DC1Bpfr1.js → EditConfigurationPage-RQkymxCy.js} +4 -5
- package/dist/_chunks/{EditConfigurationPage-DC1Bpfr1.js.map → EditConfigurationPage-RQkymxCy.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-B_Gr-2r6.js → EditViewPage-B-kExt8C.js} +4 -5
- package/dist/_chunks/{EditViewPage-B_Gr-2r6.js.map → EditViewPage-B-kExt8C.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-Bc97GGF4.mjs → EditViewPage-BPyVuPfM.mjs} +3 -3
- package/dist/_chunks/{EditViewPage-Bc97GGF4.mjs.map → EditViewPage-BPyVuPfM.mjs.map} +1 -1
- package/dist/_chunks/{Field-CqmTpeRt.js → Field-DPIsQRre.js} +155 -120
- package/dist/_chunks/Field-DPIsQRre.js.map +1 -0
- package/dist/_chunks/{Field-CIuPhh1m.mjs → Field-Dltnt1km.mjs} +153 -118
- package/dist/_chunks/Field-Dltnt1km.mjs.map +1 -0
- package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
- package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
- package/dist/_chunks/{Form-BRlXI9Ey.js → Form-BFi4MXMT.js} +5 -6
- package/dist/_chunks/{Form-BRlXI9Ey.js.map → Form-BFi4MXMT.js.map} +1 -1
- package/dist/_chunks/{Form-C22QTzNy.mjs → Form-C1IcWm1u.mjs} +3 -3
- package/dist/_chunks/{Form-C22QTzNy.mjs.map → Form-C1IcWm1u.mjs.map} +1 -1
- package/dist/_chunks/{History-nFKCaE9Y.mjs → History-04ChQ4pl.mjs} +37 -60
- package/dist/_chunks/History-04ChQ4pl.mjs.map +1 -0
- package/dist/_chunks/{History-mYpwx4Rh.js → History-wjcK4L0C.js} +37 -61
- package/dist/_chunks/History-wjcK4L0C.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-vjQ_UKxh.mjs → ListConfigurationPage-BYqPYLSU.mjs} +6 -5
- package/dist/_chunks/ListConfigurationPage-BYqPYLSU.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-CXwjTP1m.js → ListConfigurationPage-CRbxIC3J.js} +6 -6
- package/dist/_chunks/ListConfigurationPage-CRbxIC3J.js.map +1 -0
- package/dist/_chunks/{ListViewPage-DFq-_rFt.js → ListViewPage-D5NY9183.js} +51 -51
- package/dist/_chunks/ListViewPage-D5NY9183.js.map +1 -0
- package/dist/_chunks/{ListViewPage-Cf1E8F2V.mjs → ListViewPage-FU2LBuhl.mjs} +50 -49
- package/dist/_chunks/ListViewPage-FU2LBuhl.mjs.map +1 -0
- package/dist/_chunks/{NoContentTypePage-BUnPLdSC.js → NoContentTypePage-BgQVE_Qb.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-BUnPLdSC.js.map → NoContentTypePage-BgQVE_Qb.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-CpFh_nLX.mjs → NoContentTypePage-DCKUkwb8.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-CpFh_nLX.mjs.map → NoContentTypePage-DCKUkwb8.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DlEaSUxx.js → NoPermissionsPage-C5jwn70o.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DlEaSUxx.js.map → NoPermissionsPage-C5jwn70o.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-GgY8yEd6.mjs → NoPermissionsPage-jqve7C8l.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-GgY8yEd6.mjs.map → NoPermissionsPage-jqve7C8l.mjs.map} +1 -1
- package/dist/_chunks/{Preview-BbRS-OKT.mjs → Preview-BMYN548c.mjs} +78 -72
- package/dist/_chunks/Preview-BMYN548c.mjs.map +1 -0
- package/dist/_chunks/{Preview-BPBvJI2O.js → Preview-DaOihysv.js} +77 -72
- package/dist/_chunks/Preview-DaOihysv.js.map +1 -0
- package/dist/_chunks/{Relations-C1HdkZyt.js → Relations-CTGM7Hv5.js} +7 -10
- package/dist/_chunks/{Relations-C1HdkZyt.js.map → Relations-CTGM7Hv5.js.map} +1 -1
- package/dist/_chunks/{Relations-CkIXcHbJ.mjs → Relations-gscPkxjF.mjs} +6 -8
- package/dist/_chunks/{Relations-CkIXcHbJ.mjs.map → Relations-gscPkxjF.mjs.map} +1 -1
- package/dist/_chunks/{en-CHOp_xJv.js → en-BzQmavmK.js} +11 -3
- package/dist/_chunks/{en-CHOp_xJv.js.map → en-BzQmavmK.js.map} +1 -1
- package/dist/_chunks/{en-D_BMf0hT.mjs → en-CSxLmrh1.mjs} +11 -3
- package/dist/_chunks/{en-D_BMf0hT.mjs.map → en-CSxLmrh1.mjs.map} +1 -1
- package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
- package/dist/_chunks/{index-BL9NYW88.js → index-Ca7YWlAA.js} +279 -165
- package/dist/_chunks/index-Ca7YWlAA.js.map +1 -0
- package/dist/_chunks/{index-C_KAytfk.mjs → index-DqasUQ6Q.mjs} +279 -164
- package/dist/_chunks/index-DqasUQ6Q.mjs.map +1 -0
- package/dist/_chunks/{layout-_a2iPFa6.js → layout-BW80JSCd.js} +5 -6
- package/dist/_chunks/{layout-_a2iPFa6.js.map → layout-BW80JSCd.js.map} +1 -1
- package/dist/_chunks/{layout-D6QIbKn7.mjs → layout-W3clJSCy.mjs} +4 -4
- package/dist/_chunks/{layout-D6QIbKn7.mjs.map → layout-W3clJSCy.mjs.map} +1 -1
- package/dist/_chunks/objects-BcXOv6_9.js.map +1 -1
- package/dist/_chunks/objects-D6yBsdmx.mjs.map +1 -1
- package/dist/_chunks/{relations-BIejV2xk.mjs → relations-BlDkoeWh.mjs} +2 -2
- package/dist/_chunks/{relations-BIejV2xk.mjs.map → relations-BlDkoeWh.mjs.map} +1 -1
- package/dist/_chunks/{relations-BX-k1SIX.js → relations-C9Usz9k5.js} +2 -2
- package/dist/_chunks/{relations-BX-k1SIX.js.map → relations-C9Usz9k5.js.map} +1 -1
- package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -1
- package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -1
- package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
- package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
- package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
- package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
- package/dist/admin/index.js +2 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +2 -1
- package/dist/admin/src/content-manager.d.ts +3 -2
- package/dist/admin/src/exports.d.ts +1 -0
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +3 -3
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +4 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +4 -1
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +16 -19
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +2 -2
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/server/index.js +230 -187
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +231 -187
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/history/controllers/history-version.d.ts +1 -1
- package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
- package/dist/server/src/history/services/history.d.ts +3 -3
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +6 -10
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +3 -2
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
- package/dist/server/src/preview/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/index.d.ts +1 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts +2 -0
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
- package/dist/server/src/preview/utils.d.ts +1 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +4 -2
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +3 -2
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
- package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
- package/dist/server/src/services/utils/populate.d.ts +2 -2
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/package.json +12 -11
- package/dist/_chunks/Field-CIuPhh1m.mjs.map +0 -1
- package/dist/_chunks/Field-CqmTpeRt.js.map +0 -1
- package/dist/_chunks/History-mYpwx4Rh.js.map +0 -1
- package/dist/_chunks/History-nFKCaE9Y.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-CXwjTP1m.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-vjQ_UKxh.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-Cf1E8F2V.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-DFq-_rFt.js.map +0 -1
- package/dist/_chunks/Preview-BPBvJI2O.js.map +0 -1
- package/dist/_chunks/Preview-BbRS-OKT.mjs.map +0 -1
- package/dist/_chunks/index-BL9NYW88.js.map +0 -1
- package/dist/_chunks/index-C_KAytfk.mjs.map +0 -1
- package/dist/admin/src/preview/constants.d.ts +0 -1
- package/dist/server/src/preview/constants.d.ts +0 -2
- package/dist/server/src/preview/constants.d.ts.map +0 -1
package/dist/server/index.js
CHANGED
@@ -10,8 +10,7 @@ const qs = require("qs");
|
|
10
10
|
const slugify = require("@sindresorhus/slugify");
|
11
11
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
12
12
|
function _interopNamespace(e) {
|
13
|
-
if (e && e.__esModule)
|
14
|
-
return e;
|
13
|
+
if (e && e.__esModule) return e;
|
15
14
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
16
15
|
if (e) {
|
17
16
|
for (const k in e) {
|
@@ -167,8 +166,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
167
166
|
};
|
168
167
|
const getRelationRestoreValue = async (versionRelationData, attribute) => {
|
169
168
|
if (Array.isArray(versionRelationData)) {
|
170
|
-
if (versionRelationData.length === 0)
|
171
|
-
return versionRelationData;
|
169
|
+
if (versionRelationData.length === 0) return versionRelationData;
|
172
170
|
const existingAndMissingRelations = await Promise.all(
|
173
171
|
versionRelationData.map((relation) => {
|
174
172
|
return strapi2.documents(attribute.target).findOne({
|
@@ -177,19 +175,16 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
177
175
|
});
|
178
176
|
})
|
179
177
|
);
|
180
|
-
return existingAndMissingRelations.filter(
|
181
|
-
(relation) => relation !== null
|
182
|
-
);
|
178
|
+
return existingAndMissingRelations.filter((relation) => relation !== null);
|
183
179
|
}
|
184
180
|
return strapi2.documents(attribute.target).findOne({
|
185
181
|
documentId: versionRelationData.documentId,
|
186
182
|
locale: versionRelationData.locale || void 0
|
187
183
|
});
|
188
184
|
};
|
189
|
-
const getMediaRestoreValue = async (versionRelationData
|
190
|
-
if (
|
185
|
+
const getMediaRestoreValue = async (versionRelationData) => {
|
186
|
+
if (Array.isArray(versionRelationData)) {
|
191
187
|
const existingAndMissingMedias = await Promise.all(
|
192
|
-
// @ts-expect-error Fix the type definitions so this isn't any
|
193
188
|
versionRelationData.map((media) => {
|
194
189
|
return strapi2.db.query("plugin::upload.file").findOne({ where: { id: media.id } });
|
195
190
|
})
|
@@ -203,8 +198,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
203
198
|
const getDefaultLocale = async () => localesService ? localesService.getDefaultLocale() : null;
|
204
199
|
const isLocalizedContentType = (model) => i18nContentTypeService ? i18nContentTypeService.isLocalizedContentType(model) : false;
|
205
200
|
const getLocaleDictionary = async () => {
|
206
|
-
if (!localesService)
|
207
|
-
return {};
|
201
|
+
if (!localesService) return {};
|
208
202
|
const locales = await localesService.find() || [];
|
209
203
|
return locales.reduce(
|
210
204
|
(acc, locale) => {
|
@@ -359,8 +353,8 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
359
353
|
});
|
360
354
|
},
|
361
355
|
async findVersionsPage(params) {
|
362
|
-
const
|
363
|
-
const isLocalizedContentType = serviceUtils.isLocalizedContentType(
|
356
|
+
const schema = strapi2.getModel(params.query.contentType);
|
357
|
+
const isLocalizedContentType = serviceUtils.isLocalizedContentType(schema);
|
364
358
|
const defaultLocale = await serviceUtils.getDefaultLocale();
|
365
359
|
let locale = null;
|
366
360
|
if (isLocalizedContentType) {
|
@@ -381,32 +375,20 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
381
375
|
}),
|
382
376
|
serviceUtils.getLocaleDictionary()
|
383
377
|
]);
|
384
|
-
const
|
385
|
-
|
386
|
-
async (
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
model: "plugin::upload.file"
|
393
|
-
});
|
394
|
-
const response = await serviceUtils.buildMediaResponse(attributeValues);
|
395
|
-
const sanitizedResults = await Promise.all(
|
396
|
-
response.results.map((media) => permissionChecker2.sanitizeOutput(media))
|
397
|
-
);
|
398
|
-
return {
|
399
|
-
...await currentDataWithRelations,
|
400
|
-
[attributeKey]: {
|
401
|
-
results: sanitizedResults,
|
402
|
-
meta: response.meta
|
403
|
-
}
|
404
|
-
};
|
378
|
+
const populateEntry = async (entry) => {
|
379
|
+
return strapiUtils.traverseEntity(
|
380
|
+
async (options, utils) => {
|
381
|
+
if (!options.attribute) return;
|
382
|
+
if (!options.value) return;
|
383
|
+
const currentValue = Array.isArray(options.value) ? options.value : [options.value];
|
384
|
+
if (options.attribute.type === "component") {
|
385
|
+
utils.remove("id");
|
405
386
|
}
|
406
|
-
if (
|
407
|
-
|
387
|
+
if (options.attribute.type === "relation" && // TODO: handle polymorphic relations
|
388
|
+
options.attribute.relation !== "morphToOne" && options.attribute.relation !== "morphToMany") {
|
389
|
+
if (options.attribute.target === "admin::user") {
|
408
390
|
const adminUsers = await Promise.all(
|
409
|
-
|
391
|
+
currentValue.map((userToPopulate) => {
|
410
392
|
if (userToPopulate == null) {
|
411
393
|
return null;
|
412
394
|
}
|
@@ -418,46 +400,51 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
418
400
|
});
|
419
401
|
})
|
420
402
|
);
|
421
|
-
|
422
|
-
...await currentDataWithRelations,
|
423
|
-
/**
|
424
|
-
* Ideally we would return the same "{results: [], meta: {}}" shape, however,
|
425
|
-
* when sanitizing the data as a whole in the controller before sending to the client,
|
426
|
-
* the data for admin relation user is completely sanitized if we return an object here as opposed to an array.
|
427
|
-
*/
|
428
|
-
[attributeKey]: adminUsers
|
429
|
-
};
|
403
|
+
utils.set(options.key, adminUsers);
|
430
404
|
}
|
431
405
|
const permissionChecker2 = getService$2("permission-checker").create({
|
432
406
|
userAbility: params.state.userAbility,
|
433
|
-
model:
|
407
|
+
model: options.attribute.target
|
434
408
|
});
|
435
409
|
const response = await serviceUtils.buildRelationReponse(
|
436
|
-
|
437
|
-
|
410
|
+
currentValue,
|
411
|
+
options.attribute
|
438
412
|
);
|
439
413
|
const sanitizedResults = await Promise.all(
|
440
414
|
response.results.map((media) => permissionChecker2.sanitizeOutput(media))
|
441
415
|
);
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
416
|
+
utils.set(options.key, {
|
417
|
+
results: sanitizedResults,
|
418
|
+
meta: response.meta
|
419
|
+
});
|
420
|
+
}
|
421
|
+
if (options.attribute.type === "media") {
|
422
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
423
|
+
userAbility: params.state.userAbility,
|
424
|
+
model: "plugin::upload.file"
|
425
|
+
});
|
426
|
+
const response = await serviceUtils.buildMediaResponse(currentValue);
|
427
|
+
const sanitizedResults = await Promise.all(
|
428
|
+
response.results.map((media) => permissionChecker2.sanitizeOutput(media))
|
429
|
+
);
|
430
|
+
utils.set(options.key, {
|
431
|
+
results: sanitizedResults,
|
432
|
+
meta: response.meta
|
433
|
+
});
|
449
434
|
}
|
450
|
-
return currentDataWithRelations;
|
451
435
|
},
|
452
|
-
|
436
|
+
{
|
437
|
+
schema,
|
438
|
+
getModel: strapi2.getModel.bind(strapi2)
|
439
|
+
},
|
440
|
+
entry.data
|
453
441
|
);
|
454
|
-
return entryWithRelations;
|
455
442
|
};
|
456
443
|
const formattedResults = await Promise.all(
|
457
444
|
results.map(async (result) => {
|
458
445
|
return {
|
459
446
|
...result,
|
460
|
-
data: await
|
447
|
+
data: await populateEntry(result),
|
461
448
|
meta: {
|
462
449
|
unknownAttributes: serviceUtils.getSchemaAttributesDiff(
|
463
450
|
result.schema,
|
@@ -488,30 +475,44 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
488
475
|
// Clone to avoid mutating the original version data
|
489
476
|
structuredClone(version.data)
|
490
477
|
);
|
491
|
-
const
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
478
|
+
const schema = structuredClone(version.schema);
|
479
|
+
schema.attributes = fp.omit(FIELDS_TO_IGNORE, contentTypeSchemaAttributes);
|
480
|
+
const dataWithoutMissingRelations = await strapiUtils.traverseEntity(
|
481
|
+
async (options, utils) => {
|
482
|
+
if (!options.attribute) return;
|
483
|
+
if (options.attribute.type === "component") {
|
484
|
+
utils.remove("id");
|
485
|
+
if (options.attribute.repeatable && options.value === null) {
|
486
|
+
utils.set(options.key, []);
|
487
|
+
}
|
488
|
+
}
|
489
|
+
if (options.attribute.type === "dynamiczone") {
|
490
|
+
if (options.value === null) {
|
491
|
+
utils.set(options.key, []);
|
492
|
+
}
|
501
493
|
}
|
502
|
-
if (attribute.type === "relation" && // TODO: handle polymorphic relations
|
503
|
-
attribute.relation !== "morphToOne" && attribute.relation !== "morphToMany") {
|
504
|
-
|
505
|
-
|
494
|
+
if (options.attribute.type === "relation" && // TODO: handle polymorphic relations
|
495
|
+
options.attribute.relation !== "morphToOne" && options.attribute.relation !== "morphToMany") {
|
496
|
+
if (!options.value) return;
|
497
|
+
const data2 = await serviceUtils.getRelationRestoreValue(
|
498
|
+
options.value,
|
499
|
+
options.attribute
|
500
|
+
);
|
501
|
+
utils.set(options.key, data2);
|
506
502
|
}
|
507
|
-
if (attribute.type === "media") {
|
508
|
-
|
509
|
-
|
503
|
+
if (options.attribute.type === "media") {
|
504
|
+
if (!options.value) return;
|
505
|
+
const data2 = await serviceUtils.getMediaRestoreValue(
|
506
|
+
options.value
|
507
|
+
);
|
508
|
+
utils.set(options.key, data2);
|
510
509
|
}
|
511
|
-
return previousRelationAttributes;
|
512
510
|
},
|
513
|
-
|
514
|
-
|
511
|
+
{
|
512
|
+
schema,
|
513
|
+
getModel: strapi2.getModel.bind(strapi2)
|
514
|
+
},
|
515
|
+
dataWithoutAddedAttributes
|
515
516
|
);
|
516
517
|
const data = fp.omit(["id", ...Object.keys(schemaDiff.removed)], dataWithoutMissingRelations);
|
517
518
|
const restoredDocument = await strapi2.documents(version.contentType).update({
|
@@ -740,14 +741,6 @@ const getFeature$1 = () => {
|
|
740
741
|
};
|
741
742
|
};
|
742
743
|
const history = getFeature$1();
|
743
|
-
const register = async ({ strapi: strapi2 }) => {
|
744
|
-
await history.register?.({ strapi: strapi2 });
|
745
|
-
};
|
746
|
-
const ALLOWED_WEBHOOK_EVENTS = {
|
747
|
-
ENTRY_PUBLISH: "entry.publish",
|
748
|
-
ENTRY_UNPUBLISH: "entry.unpublish"
|
749
|
-
};
|
750
|
-
const FEATURE_ID = "preview";
|
751
744
|
const info = { pluginName: "content-manager", type: "admin" };
|
752
745
|
const previewRouter = {
|
753
746
|
type: "admin",
|
@@ -793,6 +786,10 @@ const validatePreviewUrl = async (strapi2, uid2, params) => {
|
|
793
786
|
}
|
794
787
|
newParams.documentId = doc?.documentId;
|
795
788
|
}
|
789
|
+
if (!newParams.status) {
|
790
|
+
const isDPEnabled = model?.options?.draftAndPublish;
|
791
|
+
newParams.status = isDPEnabled ? "draft" : "published";
|
792
|
+
}
|
796
793
|
return newParams;
|
797
794
|
};
|
798
795
|
const createPreviewController = () => {
|
@@ -838,8 +835,48 @@ const createPreviewService = ({ strapi: strapi2 }) => {
|
|
838
835
|
}
|
839
836
|
};
|
840
837
|
};
|
838
|
+
const extendMiddlewareConfiguration = (middleware = { name: "", config: {} }) => {
|
839
|
+
const middlewares = strapi.config.get("middlewares");
|
840
|
+
const configuredMiddlewares = middlewares.map((currentMiddleware) => {
|
841
|
+
if (currentMiddleware === middleware.name) {
|
842
|
+
return middleware;
|
843
|
+
}
|
844
|
+
if (currentMiddleware.name === middleware.name) {
|
845
|
+
return fp.mergeWith(
|
846
|
+
(objValue, srcValue) => {
|
847
|
+
if (Array.isArray(objValue)) {
|
848
|
+
return objValue.concat(srcValue);
|
849
|
+
}
|
850
|
+
return void 0;
|
851
|
+
},
|
852
|
+
currentMiddleware,
|
853
|
+
middleware
|
854
|
+
);
|
855
|
+
}
|
856
|
+
return currentMiddleware;
|
857
|
+
});
|
858
|
+
strapi.config.set("middlewares", configuredMiddlewares);
|
859
|
+
};
|
841
860
|
const createPreviewConfigService = ({ strapi: strapi2 }) => {
|
842
861
|
return {
|
862
|
+
register() {
|
863
|
+
if (!this.isEnabled()) {
|
864
|
+
return;
|
865
|
+
}
|
866
|
+
const config = strapi2.config.get("admin.preview");
|
867
|
+
if (config.config?.allowedOrigins) {
|
868
|
+
extendMiddlewareConfiguration({
|
869
|
+
name: "strapi::security",
|
870
|
+
config: {
|
871
|
+
contentSecurityPolicy: {
|
872
|
+
directives: {
|
873
|
+
"frame-src": config.config.allowedOrigins
|
874
|
+
}
|
875
|
+
}
|
876
|
+
}
|
877
|
+
});
|
878
|
+
}
|
879
|
+
},
|
843
880
|
isEnabled() {
|
844
881
|
const config = strapi2.config.get("admin.preview");
|
845
882
|
if (!config) {
|
@@ -881,14 +918,13 @@ const services$1 = {
|
|
881
918
|
"preview-config": createPreviewConfigService
|
882
919
|
};
|
883
920
|
const getFeature = () => {
|
884
|
-
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
885
|
-
return {};
|
886
|
-
}
|
887
921
|
return {
|
888
|
-
|
889
|
-
console.log("Bootstrapping preview server");
|
922
|
+
register() {
|
890
923
|
const config = getService(strapi, "preview-config");
|
891
924
|
config.validate();
|
925
|
+
config.register();
|
926
|
+
},
|
927
|
+
bootstrap() {
|
892
928
|
},
|
893
929
|
routes: routes$1,
|
894
930
|
controllers: controllers$1,
|
@@ -896,6 +932,14 @@ const getFeature = () => {
|
|
896
932
|
};
|
897
933
|
};
|
898
934
|
const preview = getFeature();
|
935
|
+
const register = async ({ strapi: strapi2 }) => {
|
936
|
+
await history.register?.({ strapi: strapi2 });
|
937
|
+
await preview.register?.({ strapi: strapi2 });
|
938
|
+
};
|
939
|
+
const ALLOWED_WEBHOOK_EVENTS = {
|
940
|
+
ENTRY_PUBLISH: "entry.publish",
|
941
|
+
ENTRY_UNPUBLISH: "entry.unpublish"
|
942
|
+
};
|
899
943
|
const bootstrap = async () => {
|
900
944
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
901
945
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
@@ -1459,8 +1503,7 @@ const isSortable = (schema, name) => {
|
|
1459
1503
|
if (!___default.default.has(schema.attributes, name)) {
|
1460
1504
|
return false;
|
1461
1505
|
}
|
1462
|
-
if (schema.modelType === "component" && name === "id")
|
1463
|
-
return false;
|
1506
|
+
if (schema.modelType === "component" && name === "id") return false;
|
1464
1507
|
const attribute = schema.attributes[name];
|
1465
1508
|
if (NON_SORTABLES.includes(attribute.type)) {
|
1466
1509
|
return false;
|
@@ -1605,8 +1648,7 @@ const createDefaultSettings = async (schema) => {
|
|
1605
1648
|
};
|
1606
1649
|
};
|
1607
1650
|
const syncSettings = async (configuration, schema) => {
|
1608
|
-
if (fp.isEmpty(configuration.settings))
|
1609
|
-
return createDefaultSettings(schema);
|
1651
|
+
if (fp.isEmpty(configuration.settings)) return createDefaultSettings(schema);
|
1610
1652
|
const defaultField = getDefaultMainField(schema);
|
1611
1653
|
const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};
|
1612
1654
|
return {
|
@@ -1782,8 +1824,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
|
|
1782
1824
|
}
|
1783
1825
|
switch (attribute.type) {
|
1784
1826
|
case "relation": {
|
1785
|
-
if (canCreate(attributePath))
|
1786
|
-
return body2;
|
1827
|
+
if (canCreate(attributePath)) return body2;
|
1787
1828
|
return fp.set(attributePath, { set: [] }, body2);
|
1788
1829
|
}
|
1789
1830
|
case "component": {
|
@@ -1793,8 +1834,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
|
|
1793
1834
|
]);
|
1794
1835
|
}
|
1795
1836
|
default: {
|
1796
|
-
if (canCreate(attributePath))
|
1797
|
-
return body2;
|
1837
|
+
if (canCreate(attributePath)) return body2;
|
1798
1838
|
return fp.set(attributePath, null, body2);
|
1799
1839
|
}
|
1800
1840
|
}
|
@@ -2587,8 +2627,7 @@ const validateStatus = (sourceUid, status) => {
|
|
2587
2627
|
const sourceModel = strapi.getModel(sourceUid);
|
2588
2628
|
const isDP = strapiUtils.contentTypes.hasDraftAndPublish;
|
2589
2629
|
const isSourceDP = isDP(sourceModel);
|
2590
|
-
if (!isSourceDP)
|
2591
|
-
return { status: void 0 };
|
2630
|
+
if (!isSourceDP) return { status: void 0 };
|
2592
2631
|
switch (status) {
|
2593
2632
|
case "published":
|
2594
2633
|
return { status: "published" };
|
@@ -3233,18 +3272,15 @@ async function syncMetadatas(configuration, schema) {
|
|
3233
3272
|
___default.default.set(updatedMeta, ["list", "searchable"], false);
|
3234
3273
|
___default.default.set(acc, [key], updatedMeta);
|
3235
3274
|
}
|
3236
|
-
if (!___default.default.has(edit, "mainField"))
|
3237
|
-
return acc;
|
3275
|
+
if (!___default.default.has(edit, "mainField")) return acc;
|
3238
3276
|
if (!isRelation$1(attr)) {
|
3239
3277
|
___default.default.set(updatedMeta, "edit", ___default.default.omit(edit, ["mainField"]));
|
3240
3278
|
___default.default.set(acc, [key], updatedMeta);
|
3241
3279
|
return acc;
|
3242
3280
|
}
|
3243
|
-
if (edit.mainField === "id")
|
3244
|
-
return acc;
|
3281
|
+
if (edit.mainField === "id") return acc;
|
3245
3282
|
const targetSchema = getTargetSchema(attr.targetModel);
|
3246
|
-
if (!targetSchema)
|
3247
|
-
return acc;
|
3283
|
+
if (!targetSchema) return acc;
|
3248
3284
|
if (!isSortable(targetSchema, edit.mainField) && !isListable(targetSchema, edit.mainField)) {
|
3249
3285
|
___default.default.set(updatedMeta, ["edit", "mainField"], getDefaultMainField(targetSchema));
|
3250
3286
|
___default.default.set(acc, [key], updatedMeta);
|
@@ -3289,8 +3325,7 @@ function createDefaultEditLayout(schema) {
|
|
3289
3325
|
return appendToEditLayout([], keys2, schema);
|
3290
3326
|
}
|
3291
3327
|
function syncLayouts(configuration, schema) {
|
3292
|
-
if (___default.default.isEmpty(configuration.layouts))
|
3293
|
-
return createDefaultLayouts(schema);
|
3328
|
+
if (___default.default.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);
|
3294
3329
|
const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};
|
3295
3330
|
let cleanList = list.filter((attr) => isListable(schema, attr));
|
3296
3331
|
const cleanEditRelations = editRelations.filter(
|
@@ -3301,8 +3336,7 @@ function syncLayouts(configuration, schema) {
|
|
3301
3336
|
for (const row of edit) {
|
3302
3337
|
const newRow = [];
|
3303
3338
|
for (const el of row) {
|
3304
|
-
if (!hasEditableAttribute(schema, el.name))
|
3305
|
-
continue;
|
3339
|
+
if (!hasEditableAttribute(schema, el.name)) continue;
|
3306
3340
|
const { hasFieldSize } = getService$2("field-sizes");
|
3307
3341
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3308
3342
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
@@ -3333,8 +3367,7 @@ function syncLayouts(configuration, schema) {
|
|
3333
3367
|
};
|
3334
3368
|
}
|
3335
3369
|
const appendToEditLayout = (layout = [], keysToAppend, schema) => {
|
3336
|
-
if (keysToAppend.length === 0)
|
3337
|
-
return layout;
|
3370
|
+
if (keysToAppend.length === 0) return layout;
|
3338
3371
|
let currentRowIndex = Math.max(layout.length - 1, 0);
|
3339
3372
|
if (!layout[currentRowIndex]) {
|
3340
3373
|
layout[currentRowIndex] = [];
|
@@ -3900,6 +3933,12 @@ function getPopulateForRelation(attribute, model, attributeName, { countMany, co
|
|
3900
3933
|
if (initialPopulate) {
|
3901
3934
|
return initialPopulate;
|
3902
3935
|
}
|
3936
|
+
if (attributeName === "localizations") {
|
3937
|
+
const validationPopulate = getPopulateForValidation(model.uid);
|
3938
|
+
return {
|
3939
|
+
populate: validationPopulate.populate
|
3940
|
+
};
|
3941
|
+
}
|
3903
3942
|
if (!isVisibleAttribute$1(model, attributeName)) {
|
3904
3943
|
return true;
|
3905
3944
|
}
|
@@ -3959,6 +3998,9 @@ const getDeepPopulate = (uid2, {
|
|
3959
3998
|
return {};
|
3960
3999
|
}
|
3961
4000
|
const model = strapi.getModel(uid2);
|
4001
|
+
if (!model) {
|
4002
|
+
return {};
|
4003
|
+
}
|
3962
4004
|
return Object.keys(model.attributes).reduce(
|
3963
4005
|
(populateAcc, attributeName) => fp.merge(
|
3964
4006
|
populateAcc,
|
@@ -3978,40 +4020,46 @@ const getDeepPopulate = (uid2, {
|
|
3978
4020
|
{}
|
3979
4021
|
);
|
3980
4022
|
};
|
3981
|
-
const
|
3982
|
-
|
3983
|
-
|
3984
|
-
countOne = false,
|
3985
|
-
maxLevel = Infinity
|
3986
|
-
} = {}, level = 1) => {
|
3987
|
-
if (level > maxLevel) {
|
4023
|
+
const getPopulateForValidation = (uid2) => {
|
4024
|
+
const model = strapi.getModel(uid2);
|
4025
|
+
if (!model) {
|
3988
4026
|
return {};
|
3989
4027
|
}
|
3990
|
-
const model = strapi.getModel(uid2);
|
3991
4028
|
return Object.entries(model.attributes).reduce((populateAcc, [attributeName, attribute]) => {
|
3992
|
-
if (
|
4029
|
+
if (isScalarAttribute(attribute)) {
|
4030
|
+
if (getDoesAttributeRequireValidation(attribute)) {
|
4031
|
+
populateAcc.fields = populateAcc.fields || [];
|
4032
|
+
populateAcc.fields.push(attributeName);
|
4033
|
+
}
|
3993
4034
|
return populateAcc;
|
3994
4035
|
}
|
3995
|
-
if (
|
3996
|
-
|
3997
|
-
|
3998
|
-
|
4036
|
+
if (isComponent(attribute)) {
|
4037
|
+
const component = attribute.component;
|
4038
|
+
const componentResult = getPopulateForValidation(component);
|
4039
|
+
if (Object.keys(componentResult).length > 0) {
|
4040
|
+
populateAcc.populate = populateAcc.populate || {};
|
4041
|
+
populateAcc.populate[attributeName] = componentResult;
|
4042
|
+
}
|
4043
|
+
return populateAcc;
|
3999
4044
|
}
|
4000
|
-
|
4001
|
-
|
4002
|
-
|
4003
|
-
|
4004
|
-
|
4005
|
-
|
4006
|
-
|
4007
|
-
|
4008
|
-
|
4009
|
-
countOne,
|
4010
|
-
maxLevel
|
4045
|
+
if (isDynamicZone(attribute)) {
|
4046
|
+
const components2 = attribute.components;
|
4047
|
+
const componentsResult = (components2 || []).reduce(
|
4048
|
+
(acc, componentUID) => {
|
4049
|
+
const componentResult = getPopulateForValidation(componentUID);
|
4050
|
+
if (Object.keys(componentResult).length > 0) {
|
4051
|
+
acc[componentUID] = componentResult;
|
4052
|
+
}
|
4053
|
+
return acc;
|
4011
4054
|
},
|
4012
|
-
|
4013
|
-
)
|
4014
|
-
|
4055
|
+
{}
|
4056
|
+
);
|
4057
|
+
if (Object.keys(componentsResult).length > 0) {
|
4058
|
+
populateAcc.populate = populateAcc.populate || {};
|
4059
|
+
populateAcc.populate[attributeName] = { on: componentsResult };
|
4060
|
+
}
|
4061
|
+
}
|
4062
|
+
return populateAcc;
|
4015
4063
|
}, {});
|
4016
4064
|
};
|
4017
4065
|
const getDeepPopulateDraftCount = (uid2) => {
|
@@ -4253,7 +4301,6 @@ const AVAILABLE_LOCALES_FIELDS = [
|
|
4253
4301
|
"locale",
|
4254
4302
|
"updatedAt",
|
4255
4303
|
"createdAt",
|
4256
|
-
"status",
|
4257
4304
|
"publishedAt",
|
4258
4305
|
"documentId"
|
4259
4306
|
];
|
@@ -4274,36 +4321,20 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4274
4321
|
/**
|
4275
4322
|
* Returns available locales of a document for the current status
|
4276
4323
|
*/
|
4277
|
-
async getAvailableLocales(uid2, version, allVersions
|
4324
|
+
async getAvailableLocales(uid2, version, allVersions) {
|
4278
4325
|
const versionsByLocale = fp.groupBy("locale", allVersions);
|
4279
4326
|
if (version.locale) {
|
4280
4327
|
delete versionsByLocale[version.locale];
|
4281
4328
|
}
|
4282
4329
|
const model = strapi2.getModel(uid2);
|
4283
|
-
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4284
|
-
const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(
|
4285
|
-
({ key }, { remove }) => {
|
4286
|
-
if (keysToKeep.includes(key)) {
|
4287
|
-
return;
|
4288
|
-
}
|
4289
|
-
remove(key);
|
4290
|
-
},
|
4291
|
-
{ schema: model, getModel: strapi2.getModel.bind(strapi2) },
|
4292
|
-
// @ts-expect-error fix types DocumentVersion incompatible with Data
|
4293
|
-
localeVersion
|
4294
|
-
);
|
4295
4330
|
const mappingResult = await strapiUtils.async.map(
|
4296
4331
|
Object.values(versionsByLocale),
|
4297
4332
|
async (localeVersions) => {
|
4298
|
-
const mappedLocaleVersions = await strapiUtils.async.map(
|
4299
|
-
localeVersions,
|
4300
|
-
traversalFunction
|
4301
|
-
);
|
4302
4333
|
if (!strapiUtils.contentTypes.hasDraftAndPublish(model)) {
|
4303
|
-
return
|
4334
|
+
return localeVersions[0];
|
4304
4335
|
}
|
4305
|
-
const draftVersion =
|
4306
|
-
const otherVersions =
|
4336
|
+
const draftVersion = localeVersions.find((v) => v.publishedAt === null);
|
4337
|
+
const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);
|
4307
4338
|
if (!draftVersion) {
|
4308
4339
|
return;
|
4309
4340
|
}
|
@@ -4325,8 +4356,7 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4325
4356
|
const matchStatus = status === "published" ? v.publishedAt !== null : v.publishedAt === null;
|
4326
4357
|
return matchLocale && matchStatus;
|
4327
4358
|
});
|
4328
|
-
if (!availableStatus)
|
4329
|
-
return availableStatus;
|
4359
|
+
if (!availableStatus) return availableStatus;
|
4330
4360
|
return fp.pick(AVAILABLE_STATUS_FIELDS, availableStatus);
|
4331
4361
|
},
|
4332
4362
|
/**
|
@@ -4336,18 +4366,19 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4336
4366
|
* @returns
|
4337
4367
|
*/
|
4338
4368
|
async getManyAvailableStatus(uid2, documents) {
|
4339
|
-
if (!documents.length)
|
4340
|
-
return [];
|
4369
|
+
if (!documents.length) return [];
|
4341
4370
|
const status = documents[0].publishedAt !== null ? "published" : "draft";
|
4342
|
-
const
|
4343
|
-
const
|
4344
|
-
|
4345
|
-
|
4346
|
-
|
4347
|
-
|
4348
|
-
|
4349
|
-
|
4350
|
-
|
4371
|
+
const locales = documents.map((d) => d.locale).filter(Boolean);
|
4372
|
+
const where = {
|
4373
|
+
documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },
|
4374
|
+
publishedAt: { $null: status === "published" }
|
4375
|
+
};
|
4376
|
+
if (locales.length) {
|
4377
|
+
where.locale = { $in: locales };
|
4378
|
+
}
|
4379
|
+
return strapi2.query(uid2).findMany({
|
4380
|
+
where,
|
4381
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"]
|
4351
4382
|
});
|
4352
4383
|
},
|
4353
4384
|
getStatus(version, otherDocumentStatuses) {
|
@@ -4364,10 +4395,8 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4364
4395
|
} else if (otherVersion) {
|
4365
4396
|
draftVersion = otherVersion;
|
4366
4397
|
}
|
4367
|
-
if (!draftVersion)
|
4368
|
-
|
4369
|
-
if (!publishedVersion)
|
4370
|
-
return CONTENT_MANAGER_STATUS.DRAFT;
|
4398
|
+
if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;
|
4399
|
+
if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;
|
4371
4400
|
const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);
|
4372
4401
|
return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;
|
4373
4402
|
},
|
@@ -4375,11 +4404,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4375
4404
|
// We could refactor this so the locales are only loaded when they're
|
4376
4405
|
// needed. e.g. in the bulk locale action modal.
|
4377
4406
|
async getMetadata(uid2, version, { availableLocales = true, availableStatus = true } = {}) {
|
4378
|
-
const populate =
|
4379
|
-
const
|
4380
|
-
where: { documentId: version.documentId },
|
4407
|
+
const { populate = {}, fields = [] } = getPopulateForValidation(uid2);
|
4408
|
+
const params = {
|
4381
4409
|
populate: {
|
4382
|
-
// Populate only fields that require validation for bulk locale actions
|
4383
4410
|
...populate,
|
4384
4411
|
// NOTE: creator fields are selected in this way to avoid exposing sensitive data
|
4385
4412
|
createdBy: {
|
@@ -4388,9 +4415,15 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4388
4415
|
updatedBy: {
|
4389
4416
|
select: ["id", "firstname", "lastname", "email"]
|
4390
4417
|
}
|
4418
|
+
},
|
4419
|
+
fields: fp.uniq([...AVAILABLE_LOCALES_FIELDS, ...fields]),
|
4420
|
+
filters: {
|
4421
|
+
documentId: version.documentId
|
4391
4422
|
}
|
4392
|
-
}
|
4393
|
-
const
|
4423
|
+
};
|
4424
|
+
const dbParams = strapi2.get("query-params").transform(uid2, params);
|
4425
|
+
const versions = await strapi2.db.query(uid2).findMany(dbParams);
|
4426
|
+
const availableLocalesResult = availableLocales ? await this.getAvailableLocales(uid2, version, versions) : [];
|
4394
4427
|
const availableStatusResult = availableStatus ? this.getAvailableStatus(version, versions) : null;
|
4395
4428
|
return {
|
4396
4429
|
availableLocales: availableLocalesResult,
|
@@ -4417,6 +4450,16 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4417
4450
|
opts.availableStatus = false;
|
4418
4451
|
}
|
4419
4452
|
const meta = await this.getMetadata(uid2, document, opts);
|
4453
|
+
if (document.localizations) {
|
4454
|
+
const otherStatus = await this.getManyAvailableStatus(uid2, document.localizations);
|
4455
|
+
document.localizations = document.localizations.map((d) => {
|
4456
|
+
const status = otherStatus.find((s) => s.documentId === d.documentId);
|
4457
|
+
return {
|
4458
|
+
...d,
|
4459
|
+
status: this.getStatus(d, status ? [status] : [])
|
4460
|
+
};
|
4461
|
+
});
|
4462
|
+
}
|
4420
4463
|
return {
|
4421
4464
|
data: {
|
4422
4465
|
...document,
|