@strapi/content-manager 5.5.1 → 5.6.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.
Files changed (92) hide show
  1. package/dist/_chunks/{ComponentConfigurationPage-DYq8aqos.js → ComponentConfigurationPage-BlzvDpbX.js} +3 -3
  2. package/dist/_chunks/{ComponentConfigurationPage-DYq8aqos.js.map → ComponentConfigurationPage-BlzvDpbX.js.map} +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-CzVt9QCC.mjs → ComponentConfigurationPage-DaPOlQaD.mjs} +3 -3
  4. package/dist/_chunks/{ComponentConfigurationPage-CzVt9QCC.mjs.map → ComponentConfigurationPage-DaPOlQaD.mjs.map} +1 -1
  5. package/dist/_chunks/{EditConfigurationPage-CLDwrUv5.mjs → EditConfigurationPage-BZPXItXo.mjs} +3 -3
  6. package/dist/_chunks/{EditConfigurationPage-CLDwrUv5.mjs.map → EditConfigurationPage-BZPXItXo.mjs.map} +1 -1
  7. package/dist/_chunks/{EditConfigurationPage-C9IATpr0.js → EditConfigurationPage-uy-v43AR.js} +3 -3
  8. package/dist/_chunks/{EditConfigurationPage-C9IATpr0.js.map → EditConfigurationPage-uy-v43AR.js.map} +1 -1
  9. package/dist/_chunks/{EditViewPage-Ch-uBvbv.js → EditViewPage-DT6A4ayX.js} +3 -3
  10. package/dist/_chunks/{EditViewPage-Ch-uBvbv.js.map → EditViewPage-DT6A4ayX.js.map} +1 -1
  11. package/dist/_chunks/{EditViewPage-DtKM7Jgw.mjs → EditViewPage-oOLeTySr.mjs} +3 -3
  12. package/dist/_chunks/{EditViewPage-DtKM7Jgw.mjs.map → EditViewPage-oOLeTySr.mjs.map} +1 -1
  13. package/dist/_chunks/{Field-Bn1jgMeF.mjs → Field-D7dv2aUX.mjs} +107 -55
  14. package/dist/_chunks/Field-D7dv2aUX.mjs.map +1 -0
  15. package/dist/_chunks/{Field-B9ADaInZ.js → Field-kYFVIGiP.js} +108 -55
  16. package/dist/_chunks/Field-kYFVIGiP.js.map +1 -0
  17. package/dist/_chunks/{Form-BB5i9Pxl.mjs → Form-BxR6sc29.mjs} +2 -2
  18. package/dist/_chunks/{Form-BB5i9Pxl.mjs.map → Form-BxR6sc29.mjs.map} +1 -1
  19. package/dist/_chunks/{Form-C3kjKrPw.js → Form-CCijSg3V.js} +2 -2
  20. package/dist/_chunks/{Form-C3kjKrPw.js.map → Form-CCijSg3V.js.map} +1 -1
  21. package/dist/_chunks/{History-AwrK0-SA.js → History-BMndx49M.js} +4 -4
  22. package/dist/_chunks/{History-AwrK0-SA.js.map → History-BMndx49M.js.map} +1 -1
  23. package/dist/_chunks/{History-Cw2Q7OQL.mjs → History-D8F7aYQU.mjs} +4 -4
  24. package/dist/_chunks/{History-Cw2Q7OQL.mjs.map → History-D8F7aYQU.mjs.map} +1 -1
  25. package/dist/_chunks/{ListConfigurationPage-CNTJ0DBm.js → ListConfigurationPage-DouY1EWM.js} +2 -2
  26. package/dist/_chunks/{ListConfigurationPage-CNTJ0DBm.js.map → ListConfigurationPage-DouY1EWM.js.map} +1 -1
  27. package/dist/_chunks/{ListConfigurationPage-B47JIu1e.mjs → ListConfigurationPage-DqAdSPwC.mjs} +2 -2
  28. package/dist/_chunks/{ListConfigurationPage-B47JIu1e.mjs.map → ListConfigurationPage-DqAdSPwC.mjs.map} +1 -1
  29. package/dist/_chunks/{ListViewPage-Be_UEBar.js → ListViewPage-BPVmh9pq.js} +3 -3
  30. package/dist/_chunks/{ListViewPage-Be_UEBar.js.map → ListViewPage-BPVmh9pq.js.map} +1 -1
  31. package/dist/_chunks/{ListViewPage-DuvjX6ra.mjs → ListViewPage-C73F0jPh.mjs} +3 -3
  32. package/dist/_chunks/{ListViewPage-DuvjX6ra.mjs.map → ListViewPage-C73F0jPh.mjs.map} +1 -1
  33. package/dist/_chunks/{NoContentTypePage-C6M-Q0Tv.mjs → NoContentTypePage-B5w7iJOF.mjs} +2 -2
  34. package/dist/_chunks/{NoContentTypePage-C6M-Q0Tv.mjs.map → NoContentTypePage-B5w7iJOF.mjs.map} +1 -1
  35. package/dist/_chunks/{NoContentTypePage-B1J0KUCO.js → NoContentTypePage-BwcL--4H.js} +2 -2
  36. package/dist/_chunks/{NoContentTypePage-B1J0KUCO.js.map → NoContentTypePage-BwcL--4H.js.map} +1 -1
  37. package/dist/_chunks/{NoPermissionsPage-CN34TlEE.js → NoPermissionsPage-BMFKVcwJ.js} +2 -2
  38. package/dist/_chunks/{NoPermissionsPage-CN34TlEE.js.map → NoPermissionsPage-BMFKVcwJ.js.map} +1 -1
  39. package/dist/_chunks/{NoPermissionsPage-CAi3zCAD.mjs → NoPermissionsPage-UnEgMGK4.mjs} +2 -2
  40. package/dist/_chunks/{NoPermissionsPage-CAi3zCAD.mjs.map → NoPermissionsPage-UnEgMGK4.mjs.map} +1 -1
  41. package/dist/_chunks/{Preview-DOqm5jcJ.js → Preview-B7PR3Ok_.js} +5 -4
  42. package/dist/_chunks/Preview-B7PR3Ok_.js.map +1 -0
  43. package/dist/_chunks/{Preview-BrBRcL10.mjs → Preview-DECOhK0D.mjs} +5 -4
  44. package/dist/_chunks/Preview-DECOhK0D.mjs.map +1 -0
  45. package/dist/_chunks/{Relations-_K-HYOiM.mjs → Relations-DinMQJ4B.mjs} +3 -3
  46. package/dist/_chunks/{Relations-_K-HYOiM.mjs.map → Relations-DinMQJ4B.mjs.map} +1 -1
  47. package/dist/_chunks/{Relations-xtKZHtTN.js → Relations-lndx3aQk.js} +3 -3
  48. package/dist/_chunks/{Relations-xtKZHtTN.js.map → Relations-lndx3aQk.js.map} +1 -1
  49. package/dist/_chunks/{index-tETMKK2G.mjs → index-C2SagWVW.mjs} +11 -15
  50. package/dist/_chunks/index-C2SagWVW.mjs.map +1 -0
  51. package/dist/_chunks/{index-BlX-OdHL.js → index-Cnw4gqee.js} +11 -15
  52. package/dist/_chunks/index-Cnw4gqee.js.map +1 -0
  53. package/dist/_chunks/{layout-BaQBaz56.mjs → layout-DY_D9MGA.mjs} +3 -3
  54. package/dist/_chunks/{layout-BaQBaz56.mjs.map → layout-DY_D9MGA.mjs.map} +1 -1
  55. package/dist/_chunks/{layout-D8Sz3KxF.js → layout-ivwIVPnV.js} +3 -3
  56. package/dist/_chunks/{layout-D8Sz3KxF.js.map → layout-ivwIVPnV.js.map} +1 -1
  57. package/dist/_chunks/{relations-CAbbX8Sa.js → relations-B7C7O_Pv.js} +2 -2
  58. package/dist/_chunks/{relations-CAbbX8Sa.js.map → relations-B7C7O_Pv.js.map} +1 -1
  59. package/dist/_chunks/{relations-CsfmCqOU.mjs → relations-Boc5Y9kX.mjs} +2 -2
  60. package/dist/_chunks/{relations-CsfmCqOU.mjs.map → relations-Boc5Y9kX.mjs.map} +1 -1
  61. package/dist/admin/index.js +1 -1
  62. package/dist/admin/index.mjs +1 -1
  63. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  64. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  65. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
  66. package/dist/server/index.js +74 -66
  67. package/dist/server/index.js.map +1 -1
  68. package/dist/server/index.mjs +75 -67
  69. package/dist/server/index.mjs.map +1 -1
  70. package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
  71. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  72. package/dist/server/src/index.d.ts +3 -2
  73. package/dist/server/src/index.d.ts.map +1 -1
  74. package/dist/server/src/preview/index.d.ts.map +1 -1
  75. package/dist/server/src/services/document-metadata.d.ts +4 -2
  76. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  77. package/dist/server/src/services/index.d.ts +3 -2
  78. package/dist/server/src/services/index.d.ts.map +1 -1
  79. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  80. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  81. package/dist/server/src/services/utils/populate.d.ts +2 -2
  82. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  83. package/package.json +7 -5
  84. package/dist/_chunks/Field-B9ADaInZ.js.map +0 -1
  85. package/dist/_chunks/Field-Bn1jgMeF.mjs.map +0 -1
  86. package/dist/_chunks/Preview-BrBRcL10.mjs.map +0 -1
  87. package/dist/_chunks/Preview-DOqm5jcJ.js.map +0 -1
  88. package/dist/_chunks/index-BlX-OdHL.js.map +0 -1
  89. package/dist/_chunks/index-tETMKK2G.mjs.map +0 -1
  90. package/dist/admin/src/preview/constants.d.ts +0 -1
  91. package/dist/server/src/preview/constants.d.ts +0 -2
  92. package/dist/server/src/preview/constants.d.ts.map +0 -1
@@ -1,4 +1,4 @@
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";
1
+ import strapiUtils, { validateYupSchema, errors, async, contentTypes as contentTypes$1, yup as yup$1, validateYupSchemaSync, policy, traverse, setCreatorFields, isOperatorOfType, relations as relations$1, pagination } from "@strapi/utils";
2
2
  import { pick, omit, difference, castArray, mergeWith, 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";
@@ -712,7 +712,6 @@ const getFeature$1 = () => {
712
712
  };
713
713
  };
714
714
  const history = getFeature$1();
715
- const FEATURE_ID = "preview";
716
715
  const info = { pluginName: "content-manager", type: "admin" };
717
716
  const previewRouter = {
718
717
  type: "admin",
@@ -890,9 +889,6 @@ const services$1 = {
890
889
  "preview-config": createPreviewConfigService
891
890
  };
892
891
  const getFeature = () => {
893
- if (!strapi.features.future.isEnabled(FEATURE_ID)) {
894
- return {};
895
- }
896
892
  return {
897
893
  register() {
898
894
  const config = getService(strapi, "preview-config");
@@ -3908,6 +3904,12 @@ function getPopulateForRelation(attribute, model, attributeName, { countMany, co
3908
3904
  if (initialPopulate) {
3909
3905
  return initialPopulate;
3910
3906
  }
3907
+ if (attributeName === "localizations") {
3908
+ const validationPopulate = getPopulateForValidation(model.uid);
3909
+ return {
3910
+ populate: validationPopulate.populate
3911
+ };
3912
+ }
3911
3913
  if (!isVisibleAttribute$1(model, attributeName)) {
3912
3914
  return true;
3913
3915
  }
@@ -3967,6 +3969,9 @@ const getDeepPopulate = (uid2, {
3967
3969
  return {};
3968
3970
  }
3969
3971
  const model = strapi.getModel(uid2);
3972
+ if (!model) {
3973
+ return {};
3974
+ }
3970
3975
  return Object.keys(model.attributes).reduce(
3971
3976
  (populateAcc, attributeName) => merge(
3972
3977
  populateAcc,
@@ -3986,40 +3991,46 @@ const getDeepPopulate = (uid2, {
3986
3991
  {}
3987
3992
  );
3988
3993
  };
3989
- const getValidatableFieldsPopulate = (uid2, {
3990
- initialPopulate = {},
3991
- countMany = false,
3992
- countOne = false,
3993
- maxLevel = Infinity
3994
- } = {}, level = 1) => {
3995
- if (level > maxLevel) {
3994
+ const getPopulateForValidation = (uid2) => {
3995
+ const model = strapi.getModel(uid2);
3996
+ if (!model) {
3996
3997
  return {};
3997
3998
  }
3998
- const model = strapi.getModel(uid2);
3999
3999
  return Object.entries(model.attributes).reduce((populateAcc, [attributeName, attribute]) => {
4000
- if (!getDoesAttributeRequireValidation(attribute)) {
4000
+ if (isScalarAttribute(attribute)) {
4001
+ if (getDoesAttributeRequireValidation(attribute)) {
4002
+ populateAcc.fields = populateAcc.fields || [];
4003
+ populateAcc.fields.push(attributeName);
4004
+ }
4001
4005
  return populateAcc;
4002
4006
  }
4003
- if (isScalarAttribute(attribute)) {
4004
- return merge(populateAcc, {
4005
- [attributeName]: true
4006
- });
4007
+ if (isComponent(attribute)) {
4008
+ const component = attribute.component;
4009
+ const componentResult = getPopulateForValidation(component);
4010
+ if (Object.keys(componentResult).length > 0) {
4011
+ populateAcc.populate = populateAcc.populate || {};
4012
+ populateAcc.populate[attributeName] = componentResult;
4013
+ }
4014
+ return populateAcc;
4007
4015
  }
4008
- return merge(
4009
- populateAcc,
4010
- getPopulateFor(
4011
- attributeName,
4012
- model,
4013
- {
4014
- // @ts-expect-error - improve types
4015
- initialPopulate: initialPopulate?.[attributeName],
4016
- countMany,
4017
- countOne,
4018
- maxLevel
4016
+ if (isDynamicZone(attribute)) {
4017
+ const components2 = attribute.components;
4018
+ const componentsResult = (components2 || []).reduce(
4019
+ (acc, componentUID) => {
4020
+ const componentResult = getPopulateForValidation(componentUID);
4021
+ if (Object.keys(componentResult).length > 0) {
4022
+ acc[componentUID] = componentResult;
4023
+ }
4024
+ return acc;
4019
4025
  },
4020
- level
4021
- )
4022
- );
4026
+ {}
4027
+ );
4028
+ if (Object.keys(componentsResult).length > 0) {
4029
+ populateAcc.populate = populateAcc.populate || {};
4030
+ populateAcc.populate[attributeName] = { on: componentsResult };
4031
+ }
4032
+ }
4033
+ return populateAcc;
4023
4034
  }, {});
4024
4035
  };
4025
4036
  const getDeepPopulateDraftCount = (uid2) => {
@@ -4261,7 +4272,6 @@ const AVAILABLE_LOCALES_FIELDS = [
4261
4272
  "locale",
4262
4273
  "updatedAt",
4263
4274
  "createdAt",
4264
- "status",
4265
4275
  "publishedAt",
4266
4276
  "documentId"
4267
4277
  ];
@@ -4282,36 +4292,20 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4282
4292
  /**
4283
4293
  * Returns available locales of a document for the current status
4284
4294
  */
4285
- async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
4295
+ async getAvailableLocales(uid2, version, allVersions) {
4286
4296
  const versionsByLocale = groupBy("locale", allVersions);
4287
4297
  if (version.locale) {
4288
4298
  delete versionsByLocale[version.locale];
4289
4299
  }
4290
4300
  const model = strapi2.getModel(uid2);
4291
- const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
4292
- const traversalFunction = async (localeVersion) => traverseEntity(
4293
- ({ key }, { remove }) => {
4294
- if (keysToKeep.includes(key)) {
4295
- return;
4296
- }
4297
- remove(key);
4298
- },
4299
- { schema: model, getModel: strapi2.getModel.bind(strapi2) },
4300
- // @ts-expect-error fix types DocumentVersion incompatible with Data
4301
- localeVersion
4302
- );
4303
4301
  const mappingResult = await async.map(
4304
4302
  Object.values(versionsByLocale),
4305
4303
  async (localeVersions) => {
4306
- const mappedLocaleVersions = await async.map(
4307
- localeVersions,
4308
- traversalFunction
4309
- );
4310
4304
  if (!contentTypes$1.hasDraftAndPublish(model)) {
4311
- return mappedLocaleVersions[0];
4305
+ return localeVersions[0];
4312
4306
  }
4313
- const draftVersion = mappedLocaleVersions.find((v) => v.publishedAt === null);
4314
- const otherVersions = mappedLocaleVersions.filter((v) => v.id !== draftVersion?.id);
4307
+ const draftVersion = localeVersions.find((v) => v.publishedAt === null);
4308
+ const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);
4315
4309
  if (!draftVersion) {
4316
4310
  return;
4317
4311
  }
@@ -4345,15 +4339,15 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4345
4339
  async getManyAvailableStatus(uid2, documents) {
4346
4340
  if (!documents.length) return [];
4347
4341
  const status = documents[0].publishedAt !== null ? "published" : "draft";
4348
- const locale = documents[0]?.locale;
4349
- const otherStatus = status === "published" ? "draft" : "published";
4350
- return strapi2.documents(uid2).findMany({
4351
- filters: {
4352
- documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) }
4342
+ const locales = documents.map((d) => d.locale).filter(Boolean);
4343
+ return strapi2.query(uid2).findMany({
4344
+ where: {
4345
+ documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },
4346
+ // NOTE: find the "opposite" status
4347
+ publishedAt: { $null: status === "published" },
4348
+ locale: { $in: locales }
4353
4349
  },
4354
- status: otherStatus,
4355
- locale,
4356
- fields: ["documentId", "locale", "updatedAt", "createdAt", "publishedAt"]
4350
+ select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"]
4357
4351
  });
4358
4352
  },
4359
4353
  getStatus(version, otherDocumentStatuses) {
@@ -4379,11 +4373,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4379
4373
  // We could refactor this so the locales are only loaded when they're
4380
4374
  // needed. e.g. in the bulk locale action modal.
4381
4375
  async getMetadata(uid2, version, { availableLocales = true, availableStatus = true } = {}) {
4382
- const populate = getValidatableFieldsPopulate(uid2);
4383
- const versions = await strapi2.db.query(uid2).findMany({
4384
- where: { documentId: version.documentId },
4376
+ const { populate = {}, fields = [] } = getPopulateForValidation(uid2);
4377
+ const params = {
4385
4378
  populate: {
4386
- // Populate only fields that require validation for bulk locale actions
4387
4379
  ...populate,
4388
4380
  // NOTE: creator fields are selected in this way to avoid exposing sensitive data
4389
4381
  createdBy: {
@@ -4392,9 +4384,15 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4392
4384
  updatedBy: {
4393
4385
  select: ["id", "firstname", "lastname", "email"]
4394
4386
  }
4387
+ },
4388
+ fields: uniq([...AVAILABLE_LOCALES_FIELDS, ...fields]),
4389
+ filters: {
4390
+ documentId: version.documentId
4395
4391
  }
4396
- });
4397
- const availableLocalesResult = availableLocales ? await this.getAvailableLocales(uid2, version, versions, Object.keys(populate)) : [];
4392
+ };
4393
+ const dbParams = strapi2.get("query-params").transform(uid2, params);
4394
+ const versions = await strapi2.db.query(uid2).findMany(dbParams);
4395
+ const availableLocalesResult = availableLocales ? await this.getAvailableLocales(uid2, version, versions) : [];
4398
4396
  const availableStatusResult = availableStatus ? this.getAvailableStatus(version, versions) : null;
4399
4397
  return {
4400
4398
  availableLocales: availableLocalesResult,
@@ -4421,6 +4419,16 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4421
4419
  opts.availableStatus = false;
4422
4420
  }
4423
4421
  const meta = await this.getMetadata(uid2, document, opts);
4422
+ if (document.localizations) {
4423
+ const otherStatus = await this.getManyAvailableStatus(uid2, document.localizations);
4424
+ document.localizations = document.localizations.map((d) => {
4425
+ const status = otherStatus.find((s) => s.documentId === d.documentId);
4426
+ return {
4427
+ ...d,
4428
+ status: this.getStatus(d, status ? [status] : [])
4429
+ };
4430
+ });
4431
+ }
4424
4432
  return {
4425
4433
  data: {
4426
4434
  ...document,