@strapi/content-manager 5.0.0-rc.4 → 5.0.0-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{ComponentConfigurationPage-5ukroXAh.js → ComponentConfigurationPage-DXYBg6Q4.js} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-5ukroXAh.js.map → ComponentConfigurationPage-DXYBg6Q4.js.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-BAgyHiMm.mjs → ComponentConfigurationPage-Diwy7rap.mjs} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-BAgyHiMm.mjs.map → ComponentConfigurationPage-Diwy7rap.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-DmoXawIh.mjs → EditConfigurationPage-C62aCKGN.mjs} +3 -3
- package/dist/_chunks/{EditConfigurationPage-DmoXawIh.mjs.map → EditConfigurationPage-C62aCKGN.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Xp7lun0f.js → EditConfigurationPage-DCyvZplh.js} +3 -3
- package/dist/_chunks/{EditConfigurationPage-Xp7lun0f.js.map → EditConfigurationPage-DCyvZplh.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-BLsjc5F-.mjs → EditViewPage-D7pEHIUi.mjs} +3 -3
- package/dist/_chunks/{EditViewPage-BLsjc5F-.mjs.map → EditViewPage-D7pEHIUi.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-C-ukDOB7.js → EditViewPage-Q1iL6Yjq.js} +3 -3
- package/dist/_chunks/{EditViewPage-C-ukDOB7.js.map → EditViewPage-Q1iL6Yjq.js.map} +1 -1
- package/dist/_chunks/{Field-Cs7duwWd.mjs → Field-B5WAARex.mjs} +3 -3
- package/dist/_chunks/Field-B5WAARex.mjs.map +1 -0
- package/dist/_chunks/{Field-Bfph5SOd.js → Field-tNsYzab8.js} +3 -3
- package/dist/_chunks/Field-tNsYzab8.js.map +1 -0
- package/dist/_chunks/{Form-CPYqIWDG.js → Form-BLOtEgdG.js} +2 -2
- package/dist/_chunks/{Form-CPYqIWDG.js.map → Form-BLOtEgdG.js.map} +1 -1
- package/dist/_chunks/{Form-Dg_GS5TQ.mjs → Form-BdgxktG0.mjs} +2 -2
- package/dist/_chunks/{Form-Dg_GS5TQ.mjs.map → Form-BdgxktG0.mjs.map} +1 -1
- package/dist/_chunks/{History-DNQkXANT.js → History-CNQ3y0Td.js} +4 -4
- package/dist/_chunks/{History-DNQkXANT.js.map → History-CNQ3y0Td.js.map} +1 -1
- package/dist/_chunks/{History-wrnHqf09.mjs → History-DCbphAxD.mjs} +4 -4
- package/dist/_chunks/{History-wrnHqf09.mjs.map → History-DCbphAxD.mjs.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-CUQxfpjT.js → ListConfigurationPage-CGiDaV99.js} +2 -2
- package/dist/_chunks/{ListConfigurationPage-CUQxfpjT.js.map → ListConfigurationPage-CGiDaV99.js.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-DScmJVkW.mjs → ListConfigurationPage-DfvPhk6u.mjs} +2 -2
- package/dist/_chunks/{ListConfigurationPage-DScmJVkW.mjs.map → ListConfigurationPage-DfvPhk6u.mjs.map} +1 -1
- package/dist/_chunks/{ListViewPage-BsLiH2-2.js → ListViewPage-BoBeCtmC.js} +9 -4
- package/dist/_chunks/ListViewPage-BoBeCtmC.js.map +1 -0
- package/dist/_chunks/{ListViewPage-C4IvrMgY.mjs → ListViewPage-D4UEitVJ.mjs} +10 -5
- package/dist/_chunks/ListViewPage-D4UEitVJ.mjs.map +1 -0
- package/dist/_chunks/{NoContentTypePage-Djg8nPlj.mjs → NoContentTypePage-Dg8RTwSG.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-Djg8nPlj.mjs.map → NoContentTypePage-Dg8RTwSG.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-BZ-PnGAf.js → NoContentTypePage-r8lNSL9g.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-BZ-PnGAf.js.map → NoContentTypePage-r8lNSL9g.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-_lUqjGW3.js → NoPermissionsPage-C-4rQU7A.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-_lUqjGW3.js.map → NoPermissionsPage-C-4rQU7A.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DSP7R-hv.mjs → NoPermissionsPage-Kpz9mv4K.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DSP7R-hv.mjs.map → NoPermissionsPage-Kpz9mv4K.mjs.map} +1 -1
- package/dist/_chunks/{Relations-CtELXYIK.js → Relations-DORNjmbK.js} +3 -3
- package/dist/_chunks/{Relations-CtELXYIK.js.map → Relations-DORNjmbK.js.map} +1 -1
- package/dist/_chunks/{Relations-BZr8tL0R.mjs → Relations-Q66m8cnC.mjs} +3 -3
- package/dist/_chunks/{Relations-BZr8tL0R.mjs.map → Relations-Q66m8cnC.mjs.map} +1 -1
- package/dist/_chunks/{index-OerGjbAN.js → index-B74KYy73.js} +28 -36
- package/dist/_chunks/index-B74KYy73.js.map +1 -0
- package/dist/_chunks/{index-c_5DdJi-.mjs → index-CW--YEA6.mjs} +29 -37
- package/dist/_chunks/index-CW--YEA6.mjs.map +1 -0
- package/dist/_chunks/{layout-oPBiO7RY.mjs → layout-CcKSoI_3.mjs} +17 -5
- package/dist/_chunks/{layout-oPBiO7RY.mjs.map → layout-CcKSoI_3.mjs.map} +1 -1
- package/dist/_chunks/{layout-Ci7qHlFb.js → layout-CwR7rEv4.js} +16 -4
- package/dist/_chunks/{layout-Ci7qHlFb.js.map → layout-CwR7rEv4.js.map} +1 -1
- package/dist/_chunks/{relations-BIdWFjdq.mjs → relations-Dsery6I2.mjs} +2 -2
- package/dist/_chunks/{relations-BIdWFjdq.mjs.map → relations-Dsery6I2.mjs.map} +1 -1
- package/dist/_chunks/{relations-COBpStiF.js → relations-S1dd0utS.js} +2 -2
- package/dist/_chunks/{relations-COBpStiF.js.map → relations-S1dd0utS.js.map} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/server/index.js +98 -58
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +99 -59
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +1 -1
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/package.json +6 -6
- package/dist/_chunks/Field-Bfph5SOd.js.map +0 -1
- package/dist/_chunks/Field-Cs7duwWd.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-BsLiH2-2.js.map +0 -1
- package/dist/_chunks/ListViewPage-C4IvrMgY.mjs.map +0 -1
- package/dist/_chunks/index-OerGjbAN.js.map +0 -1
- package/dist/_chunks/index-c_5DdJi-.mjs.map +0 -1
package/dist/server/index.mjs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import strapiUtils, { validateYupSchema, errors, async, contentTypes as contentTypes$1, yup as yup$1, validateYupSchemaSync, policy, traverse, setCreatorFields, isOperatorOfType, relations as relations$1, traverseEntity, pagination } from "@strapi/utils";
|
2
|
-
import { pick, omit, difference, intersection, pipe, propOr, isEqual, isEmpty, set, has, prop, assoc, mapValues, flow, uniq, uniqBy, concat,
|
2
|
+
import { pick, omit, difference, castArray, intersection, pipe, propOr, isEqual, isEmpty, set, isNil as isNil$1, has, prop, assoc, mapValues, flow, uniq, uniqBy, concat, getOr, propEq, merge, groupBy } from "lodash/fp";
|
3
3
|
import "@strapi/types";
|
4
4
|
import * as yup from "yup";
|
5
5
|
import { scheduleJob } from "node-schedule";
|
@@ -200,9 +200,10 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
200
200
|
const meta = await documentMetadataService.getMetadata(contentTypeUid, document);
|
201
201
|
return documentMetadataService.getStatus(document, meta.availableStatus);
|
202
202
|
};
|
203
|
-
const getDeepPopulate2 = (uid2) => {
|
203
|
+
const getDeepPopulate2 = (uid2, useDatabaseSyntax = false) => {
|
204
204
|
const model = strapi2.getModel(uid2);
|
205
205
|
const attributes = Object.entries(model.attributes);
|
206
|
+
const fieldSelector = useDatabaseSyntax ? "select" : "fields";
|
206
207
|
return attributes.reduce((acc, [attributeName, attribute]) => {
|
207
208
|
switch (attribute.type) {
|
208
209
|
case "relation": {
|
@@ -212,12 +213,12 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
212
213
|
}
|
213
214
|
const isVisible2 = contentTypes$1.isVisibleAttribute(model, attributeName);
|
214
215
|
if (isVisible2) {
|
215
|
-
acc[attributeName] = {
|
216
|
+
acc[attributeName] = { [fieldSelector]: ["documentId", "locale", "publishedAt"] };
|
216
217
|
}
|
217
218
|
break;
|
218
219
|
}
|
219
220
|
case "media": {
|
220
|
-
acc[attributeName] = {
|
221
|
+
acc[attributeName] = { [fieldSelector]: ["id"] };
|
221
222
|
break;
|
222
223
|
}
|
223
224
|
case "component": {
|
@@ -468,6 +469,42 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
468
469
|
}
|
469
470
|
};
|
470
471
|
};
|
472
|
+
const shouldCreateHistoryVersion = (context) => {
|
473
|
+
if (!strapi.requestContext.get()?.request.url.startsWith("/content-manager")) {
|
474
|
+
return false;
|
475
|
+
}
|
476
|
+
if (context.action !== "create" && context.action !== "update" && context.action !== "clone" && context.action !== "publish" && context.action !== "unpublish" && context.action !== "discardDraft") {
|
477
|
+
return false;
|
478
|
+
}
|
479
|
+
if (context.action === "update" && strapi.requestContext.get()?.request.url.endsWith("/actions/publish")) {
|
480
|
+
return false;
|
481
|
+
}
|
482
|
+
if (!context.contentType.uid.startsWith("api::")) {
|
483
|
+
return false;
|
484
|
+
}
|
485
|
+
return true;
|
486
|
+
};
|
487
|
+
const getSchemas = (uid2) => {
|
488
|
+
const attributesSchema = strapi.getModel(uid2).attributes;
|
489
|
+
const componentsSchemas = Object.keys(attributesSchema).reduce(
|
490
|
+
(currentComponentSchemas, key) => {
|
491
|
+
const fieldSchema = attributesSchema[key];
|
492
|
+
if (fieldSchema.type === "component") {
|
493
|
+
const componentSchema = strapi.getModel(fieldSchema.component).attributes;
|
494
|
+
return {
|
495
|
+
...currentComponentSchemas,
|
496
|
+
[fieldSchema.component]: componentSchema
|
497
|
+
};
|
498
|
+
}
|
499
|
+
return currentComponentSchemas;
|
500
|
+
},
|
501
|
+
{}
|
502
|
+
);
|
503
|
+
return {
|
504
|
+
schema: omit(FIELDS_TO_IGNORE, attributesSchema),
|
505
|
+
componentsSchemas
|
506
|
+
};
|
507
|
+
};
|
471
508
|
const createLifecyclesService = ({ strapi: strapi2 }) => {
|
472
509
|
const state = {
|
473
510
|
deleteExpiredJob: null,
|
@@ -480,63 +517,43 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
480
517
|
return;
|
481
518
|
}
|
482
519
|
strapi2.documents.use(async (context, next) => {
|
483
|
-
if (!strapi2.requestContext.get()?.request.url.startsWith("/content-manager")) {
|
484
|
-
return next();
|
485
|
-
}
|
486
|
-
if (context.action !== "create" && context.action !== "update" && context.action !== "clone" && context.action !== "publish" && context.action !== "unpublish" && context.action !== "discardDraft") {
|
487
|
-
return next();
|
488
|
-
}
|
489
|
-
if (context.action === "update" && strapi2.requestContext.get()?.request.url.endsWith("/actions/publish")) {
|
490
|
-
return next();
|
491
|
-
}
|
492
|
-
const contentTypeUid = context.contentType.uid;
|
493
|
-
if (!contentTypeUid.startsWith("api::")) {
|
494
|
-
return next();
|
495
|
-
}
|
496
520
|
const result = await next();
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
521
|
+
if (!shouldCreateHistoryVersion(context)) {
|
522
|
+
return result;
|
523
|
+
}
|
524
|
+
const documentId = context.action === "create" || context.action === "clone" ? result.documentId : context.params.documentId;
|
501
525
|
const defaultLocale = await serviceUtils.getDefaultLocale();
|
502
|
-
const
|
503
|
-
if (
|
504
|
-
|
505
|
-
"[Content manager history middleware]: An array of locales was provided, but only a single locale is supported for the findOne operation."
|
506
|
-
);
|
507
|
-
return next();
|
526
|
+
const locales = castArray(context.params?.locale || defaultLocale);
|
527
|
+
if (!locales.length) {
|
528
|
+
return result;
|
508
529
|
}
|
509
|
-
const
|
510
|
-
|
511
|
-
|
512
|
-
|
530
|
+
const uid2 = context.contentType.uid;
|
531
|
+
const schemas = getSchemas(uid2);
|
532
|
+
const localeEntries = await strapi2.db.query(uid2).findMany({
|
533
|
+
where: {
|
534
|
+
documentId,
|
535
|
+
locale: { $in: locales },
|
536
|
+
publishedAt: null
|
537
|
+
},
|
538
|
+
populate: serviceUtils.getDeepPopulate(
|
539
|
+
uid2,
|
540
|
+
true
|
541
|
+
/* use database syntax */
|
542
|
+
)
|
513
543
|
});
|
514
|
-
const status = await serviceUtils.getVersionStatus(contentTypeUid, document);
|
515
|
-
const attributesSchema = strapi2.getModel(contentTypeUid).attributes;
|
516
|
-
const componentsSchemas = Object.keys(
|
517
|
-
attributesSchema
|
518
|
-
).reduce((currentComponentSchemas, key) => {
|
519
|
-
const fieldSchema = attributesSchema[key];
|
520
|
-
if (fieldSchema.type === "component") {
|
521
|
-
const componentSchema = strapi2.getModel(fieldSchema.component).attributes;
|
522
|
-
return {
|
523
|
-
...currentComponentSchemas,
|
524
|
-
[fieldSchema.component]: componentSchema
|
525
|
-
};
|
526
|
-
}
|
527
|
-
return currentComponentSchemas;
|
528
|
-
}, {});
|
529
544
|
await strapi2.db.transaction(async ({ onCommit }) => {
|
530
|
-
onCommit(() => {
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
545
|
+
onCommit(async () => {
|
546
|
+
for (const entry of localeEntries) {
|
547
|
+
const status = await serviceUtils.getVersionStatus(uid2, entry);
|
548
|
+
await getService(strapi2, "history").createVersion({
|
549
|
+
contentType: uid2,
|
550
|
+
data: omit(FIELDS_TO_IGNORE, entry),
|
551
|
+
relatedDocumentId: documentId,
|
552
|
+
locale: entry.locale,
|
553
|
+
status,
|
554
|
+
...schemas
|
555
|
+
});
|
556
|
+
}
|
540
557
|
});
|
541
558
|
});
|
542
559
|
return result;
|
@@ -1854,11 +1871,28 @@ const collectionTypes = {
|
|
1854
1871
|
const publishedDocument = await strapi.db.transaction(async () => {
|
1855
1872
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1856
1873
|
const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1857
|
-
|
1874
|
+
let document;
|
1875
|
+
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1876
|
+
const isCreate = isNil$1(id);
|
1877
|
+
if (isCreate) {
|
1878
|
+
if (permissionChecker2.cannot.create()) {
|
1879
|
+
throw new errors.ForbiddenError();
|
1880
|
+
}
|
1881
|
+
document = await createDocument(ctx, { populate });
|
1882
|
+
}
|
1883
|
+
const isUpdate = !isCreate;
|
1884
|
+
if (isUpdate) {
|
1885
|
+
document = await documentManager2.findOne(id, model, { populate, locale });
|
1886
|
+
if (!document) {
|
1887
|
+
throw new errors.NotFoundError("Document not found");
|
1888
|
+
}
|
1889
|
+
if (permissionChecker2.can.update(document)) {
|
1890
|
+
await updateDocument(ctx);
|
1891
|
+
}
|
1892
|
+
}
|
1858
1893
|
if (permissionChecker2.cannot.publish(document)) {
|
1859
1894
|
throw new errors.ForbiddenError();
|
1860
1895
|
}
|
1861
|
-
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1862
1896
|
const publishResult = await documentManager2.publish(document.documentId, model, {
|
1863
1897
|
locale
|
1864
1898
|
// TODO: Allow setting creator fields on publish
|
@@ -4107,7 +4141,13 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4107
4141
|
*/
|
4108
4142
|
async formatDocumentWithMetadata(uid2, document, opts = {}) {
|
4109
4143
|
if (!document) {
|
4110
|
-
return
|
4144
|
+
return {
|
4145
|
+
data: document,
|
4146
|
+
meta: {
|
4147
|
+
availableLocales: [],
|
4148
|
+
availableStatus: []
|
4149
|
+
}
|
4150
|
+
};
|
4111
4151
|
}
|
4112
4152
|
const hasDraftAndPublish = contentTypes$1.hasDraftAndPublish(strapi2.getModel(uid2));
|
4113
4153
|
if (!hasDraftAndPublish) {
|