@strapi/content-manager 0.0.0-next.c9f32f6f0c2be1b88323373117f12eb33219d20e → 0.0.0-next.cb5f24c83e8fde7c31e5850c14430d38aa9b8862

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 (114) hide show
  1. package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -1
  2. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-N-CTtgQa.js → ComponentConfigurationPage-BSEZcJVB.js} +4 -5
  4. package/dist/_chunks/{ComponentConfigurationPage-N-CTtgQa.js.map → ComponentConfigurationPage-BSEZcJVB.js.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-BaJMOQyq.mjs → ComponentConfigurationPage-BiASGi7x.mjs} +3 -3
  6. package/dist/_chunks/{ComponentConfigurationPage-BaJMOQyq.mjs.map → ComponentConfigurationPage-BiASGi7x.mjs.map} +1 -1
  7. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js → ComponentIcon-CRbtQEUV.js} +2 -3
  8. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js.map → ComponentIcon-CRbtQEUV.js.map} +1 -1
  9. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -1
  10. package/dist/_chunks/{EditConfigurationPage-BHkjAbxH.js → EditConfigurationPage-D2rtvneE.js} +4 -5
  11. package/dist/_chunks/{EditConfigurationPage-BHkjAbxH.js.map → EditConfigurationPage-D2rtvneE.js.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-CKK-5LfX.mjs → EditConfigurationPage-vN4zupij.mjs} +3 -3
  13. package/dist/_chunks/{EditConfigurationPage-CKK-5LfX.mjs.map → EditConfigurationPage-vN4zupij.mjs.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-QPUftxUd.js → EditViewPage-BwisF04Q.js} +4 -5
  15. package/dist/_chunks/{EditViewPage-QPUftxUd.js.map → EditViewPage-BwisF04Q.js.map} +1 -1
  16. package/dist/_chunks/{EditViewPage-B11aeMcf.mjs → EditViewPage-_A31Cl4g.mjs} +3 -3
  17. package/dist/_chunks/{EditViewPage-B11aeMcf.mjs.map → EditViewPage-_A31Cl4g.mjs.map} +1 -1
  18. package/dist/_chunks/{Field-Bj_RgtGo.mjs → Field-CvIunNOj.mjs} +129 -96
  19. package/dist/_chunks/Field-CvIunNOj.mjs.map +1 -0
  20. package/dist/_chunks/{Field-DUK83cfh.js → Field-Dsu6-FrM.js} +132 -99
  21. package/dist/_chunks/Field-Dsu6-FrM.js.map +1 -0
  22. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
  23. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
  24. package/dist/_chunks/{Form-DLMSoXV7.mjs → Form-DK0fG0Gj.mjs} +3 -3
  25. package/dist/_chunks/{Form-DLMSoXV7.mjs.map → Form-DK0fG0Gj.mjs.map} +1 -1
  26. package/dist/_chunks/{Form-DHmBRlHd.js → Form-DUwWcCmA.js} +5 -6
  27. package/dist/_chunks/{Form-DHmBRlHd.js.map → Form-DUwWcCmA.js.map} +1 -1
  28. package/dist/_chunks/{History-Di3zm4HT.js → History-CeCDhoJG.js} +5 -6
  29. package/dist/_chunks/{History-Di3zm4HT.js.map → History-CeCDhoJG.js.map} +1 -1
  30. package/dist/_chunks/{History-CfCSNlG9.mjs → History-DP8gmXpm.mjs} +4 -4
  31. package/dist/_chunks/{History-CfCSNlG9.mjs.map → History-DP8gmXpm.mjs.map} +1 -1
  32. package/dist/_chunks/{ListConfigurationPage-0mtv_iqk.mjs → ListConfigurationPage-BCkO5iuN.mjs} +3 -3
  33. package/dist/_chunks/{ListConfigurationPage-0mtv_iqk.mjs.map → ListConfigurationPage-BCkO5iuN.mjs.map} +1 -1
  34. package/dist/_chunks/{ListConfigurationPage-Cq361KIt.js → ListConfigurationPage-C-bAd44a.js} +4 -5
  35. package/dist/_chunks/{ListConfigurationPage-Cq361KIt.js.map → ListConfigurationPage-C-bAd44a.js.map} +1 -1
  36. package/dist/_chunks/{ListViewPage-DFDcG8gM.js → ListViewPage-BKTZFhsM.js} +4 -5
  37. package/dist/_chunks/{ListViewPage-DFDcG8gM.js.map → ListViewPage-BKTZFhsM.js.map} +1 -1
  38. package/dist/_chunks/{ListViewPage-BxLVROX8.mjs → ListViewPage-Cf_DgaFV.mjs} +3 -3
  39. package/dist/_chunks/{ListViewPage-BxLVROX8.mjs.map → ListViewPage-Cf_DgaFV.mjs.map} +1 -1
  40. package/dist/_chunks/{NoContentTypePage-BSyvnDZZ.js → NoContentTypePage-D3Cm3v3q.js} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-BSyvnDZZ.js.map → NoContentTypePage-D3Cm3v3q.js.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-BRfDd67_.mjs → NoContentTypePage-nHIyvJcB.mjs} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-BRfDd67_.mjs.map → NoContentTypePage-nHIyvJcB.mjs.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-CV9V8KWa.mjs → NoPermissionsPage-BALVSJ7x.mjs} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-CV9V8KWa.mjs.map → NoPermissionsPage-BALVSJ7x.mjs.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-DyLphsn_.js → NoPermissionsPage-CChGWBj5.js} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-DyLphsn_.js.map → NoPermissionsPage-CChGWBj5.js.map} +1 -1
  48. package/dist/_chunks/{Preview-C_B1nx3g.mjs → Preview-C4NBzKUV.mjs} +33 -11
  49. package/dist/_chunks/Preview-C4NBzKUV.mjs.map +1 -0
  50. package/dist/_chunks/{Preview-D_3aO6Ly.js → Preview-CT28Ckpg.js} +33 -12
  51. package/dist/_chunks/Preview-CT28Ckpg.js.map +1 -0
  52. package/dist/_chunks/{Relations-C6pwmDXh.mjs → Relations-C8uC89cT.mjs} +6 -8
  53. package/dist/_chunks/{Relations-C6pwmDXh.mjs.map → Relations-C8uC89cT.mjs.map} +1 -1
  54. package/dist/_chunks/{Relations-Cne2AlrL.js → Relations-CvkPCng_.js} +7 -10
  55. package/dist/_chunks/{Relations-Cne2AlrL.js.map → Relations-CvkPCng_.js.map} +1 -1
  56. package/dist/_chunks/{en-Ic0kXjxB.js → en-BK8Xyl5I.js} +2 -1
  57. package/dist/_chunks/{en-Ic0kXjxB.js.map → en-BK8Xyl5I.js.map} +1 -1
  58. package/dist/_chunks/{en-DhFUjrNW.mjs → en-Dtk_ot79.mjs} +2 -1
  59. package/dist/_chunks/{en-DhFUjrNW.mjs.map → en-Dtk_ot79.mjs.map} +1 -1
  60. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  61. package/dist/_chunks/{index-T-aWjbj2.js → index-CnX_j5h-.js} +206 -124
  62. package/dist/_chunks/index-CnX_j5h-.js.map +1 -0
  63. package/dist/_chunks/{index-BpxR3En4.mjs → index-Dh2aGTGJ.mjs} +205 -122
  64. package/dist/_chunks/index-Dh2aGTGJ.mjs.map +1 -0
  65. package/dist/_chunks/{layout-DhMZ_lDx.mjs → layout-B5qsPihj.mjs} +4 -4
  66. package/dist/_chunks/{layout-DhMZ_lDx.mjs.map → layout-B5qsPihj.mjs.map} +1 -1
  67. package/dist/_chunks/{layout-BEuNwv-F.js → layout-B_qdWGny.js} +5 -6
  68. package/dist/_chunks/{layout-BEuNwv-F.js.map → layout-B_qdWGny.js.map} +1 -1
  69. package/dist/_chunks/objects-BcXOv6_9.js.map +1 -1
  70. package/dist/_chunks/objects-D6yBsdmx.mjs.map +1 -1
  71. package/dist/_chunks/{relations-kLcuobLk.js → relations-ChcieiF5.js} +2 -2
  72. package/dist/_chunks/{relations-kLcuobLk.js.map → relations-ChcieiF5.js.map} +1 -1
  73. package/dist/_chunks/{relations-BdnxoX6f.mjs → relations-DMXpNY-e.mjs} +2 -2
  74. package/dist/_chunks/{relations-BdnxoX6f.mjs.map → relations-DMXpNY-e.mjs.map} +1 -1
  75. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -1
  76. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -1
  77. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
  78. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
  79. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
  80. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
  81. package/dist/admin/index.js +1 -1
  82. package/dist/admin/index.mjs +1 -1
  83. package/dist/admin/src/content-manager.d.ts +3 -2
  84. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  85. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  86. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  87. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
  88. package/dist/server/index.js +95 -103
  89. package/dist/server/index.js.map +1 -1
  90. package/dist/server/index.mjs +95 -102
  91. package/dist/server/index.mjs.map +1 -1
  92. package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
  93. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  94. package/dist/server/src/index.d.ts +3 -2
  95. package/dist/server/src/index.d.ts.map +1 -1
  96. package/dist/server/src/preview/index.d.ts.map +1 -1
  97. package/dist/server/src/services/document-metadata.d.ts +4 -2
  98. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  99. package/dist/server/src/services/index.d.ts +3 -2
  100. package/dist/server/src/services/index.d.ts.map +1 -1
  101. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  102. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  103. package/dist/server/src/services/utils/populate.d.ts +2 -2
  104. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  105. package/package.json +11 -9
  106. package/dist/_chunks/Field-Bj_RgtGo.mjs.map +0 -1
  107. package/dist/_chunks/Field-DUK83cfh.js.map +0 -1
  108. package/dist/_chunks/Preview-C_B1nx3g.mjs.map +0 -1
  109. package/dist/_chunks/Preview-D_3aO6Ly.js.map +0 -1
  110. package/dist/_chunks/index-BpxR3En4.mjs.map +0 -1
  111. package/dist/_chunks/index-T-aWjbj2.js.map +0 -1
  112. package/dist/admin/src/preview/constants.d.ts +0 -1
  113. package/dist/server/src/preview/constants.d.ts +0 -2
  114. package/dist/server/src/preview/constants.d.ts.map +0 -1
@@ -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({
@@ -203,8 +201,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
203
201
  const getDefaultLocale = async () => localesService ? localesService.getDefaultLocale() : null;
204
202
  const isLocalizedContentType = (model) => i18nContentTypeService ? i18nContentTypeService.isLocalizedContentType(model) : false;
205
203
  const getLocaleDictionary = async () => {
206
- if (!localesService)
207
- return {};
204
+ if (!localesService) return {};
208
205
  const locales = await localesService.find() || [];
209
206
  return locales.reduce(
210
207
  (acc, locale) => {
@@ -740,7 +737,6 @@ const getFeature$1 = () => {
740
737
  };
741
738
  };
742
739
  const history = getFeature$1();
743
- const FEATURE_ID = "preview";
744
740
  const info = { pluginName: "content-manager", type: "admin" };
745
741
  const previewRouter = {
746
742
  type: "admin",
@@ -918,9 +914,6 @@ const services$1 = {
918
914
  "preview-config": createPreviewConfigService
919
915
  };
920
916
  const getFeature = () => {
921
- if (!strapi.features.future.isEnabled(FEATURE_ID)) {
922
- return {};
923
- }
924
917
  return {
925
918
  register() {
926
919
  const config = getService(strapi, "preview-config");
@@ -1506,8 +1499,7 @@ const isSortable = (schema, name) => {
1506
1499
  if (!___default.default.has(schema.attributes, name)) {
1507
1500
  return false;
1508
1501
  }
1509
- if (schema.modelType === "component" && name === "id")
1510
- return false;
1502
+ if (schema.modelType === "component" && name === "id") return false;
1511
1503
  const attribute = schema.attributes[name];
1512
1504
  if (NON_SORTABLES.includes(attribute.type)) {
1513
1505
  return false;
@@ -1652,8 +1644,7 @@ const createDefaultSettings = async (schema) => {
1652
1644
  };
1653
1645
  };
1654
1646
  const syncSettings = async (configuration, schema) => {
1655
- if (fp.isEmpty(configuration.settings))
1656
- return createDefaultSettings(schema);
1647
+ if (fp.isEmpty(configuration.settings)) return createDefaultSettings(schema);
1657
1648
  const defaultField = getDefaultMainField(schema);
1658
1649
  const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};
1659
1650
  return {
@@ -1829,8 +1820,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
1829
1820
  }
1830
1821
  switch (attribute.type) {
1831
1822
  case "relation": {
1832
- if (canCreate(attributePath))
1833
- return body2;
1823
+ if (canCreate(attributePath)) return body2;
1834
1824
  return fp.set(attributePath, { set: [] }, body2);
1835
1825
  }
1836
1826
  case "component": {
@@ -1840,8 +1830,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
1840
1830
  ]);
1841
1831
  }
1842
1832
  default: {
1843
- if (canCreate(attributePath))
1844
- return body2;
1833
+ if (canCreate(attributePath)) return body2;
1845
1834
  return fp.set(attributePath, null, body2);
1846
1835
  }
1847
1836
  }
@@ -2634,8 +2623,7 @@ const validateStatus = (sourceUid, status) => {
2634
2623
  const sourceModel = strapi.getModel(sourceUid);
2635
2624
  const isDP = strapiUtils.contentTypes.hasDraftAndPublish;
2636
2625
  const isSourceDP = isDP(sourceModel);
2637
- if (!isSourceDP)
2638
- return { status: void 0 };
2626
+ if (!isSourceDP) return { status: void 0 };
2639
2627
  switch (status) {
2640
2628
  case "published":
2641
2629
  return { status: "published" };
@@ -3280,18 +3268,15 @@ async function syncMetadatas(configuration, schema) {
3280
3268
  ___default.default.set(updatedMeta, ["list", "searchable"], false);
3281
3269
  ___default.default.set(acc, [key], updatedMeta);
3282
3270
  }
3283
- if (!___default.default.has(edit, "mainField"))
3284
- return acc;
3271
+ if (!___default.default.has(edit, "mainField")) return acc;
3285
3272
  if (!isRelation$1(attr)) {
3286
3273
  ___default.default.set(updatedMeta, "edit", ___default.default.omit(edit, ["mainField"]));
3287
3274
  ___default.default.set(acc, [key], updatedMeta);
3288
3275
  return acc;
3289
3276
  }
3290
- if (edit.mainField === "id")
3291
- return acc;
3277
+ if (edit.mainField === "id") return acc;
3292
3278
  const targetSchema = getTargetSchema(attr.targetModel);
3293
- if (!targetSchema)
3294
- return acc;
3279
+ if (!targetSchema) return acc;
3295
3280
  if (!isSortable(targetSchema, edit.mainField) && !isListable(targetSchema, edit.mainField)) {
3296
3281
  ___default.default.set(updatedMeta, ["edit", "mainField"], getDefaultMainField(targetSchema));
3297
3282
  ___default.default.set(acc, [key], updatedMeta);
@@ -3336,8 +3321,7 @@ function createDefaultEditLayout(schema) {
3336
3321
  return appendToEditLayout([], keys2, schema);
3337
3322
  }
3338
3323
  function syncLayouts(configuration, schema) {
3339
- if (___default.default.isEmpty(configuration.layouts))
3340
- return createDefaultLayouts(schema);
3324
+ if (___default.default.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);
3341
3325
  const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};
3342
3326
  let cleanList = list.filter((attr) => isListable(schema, attr));
3343
3327
  const cleanEditRelations = editRelations.filter(
@@ -3348,8 +3332,7 @@ function syncLayouts(configuration, schema) {
3348
3332
  for (const row of edit) {
3349
3333
  const newRow = [];
3350
3334
  for (const el of row) {
3351
- if (!hasEditableAttribute(schema, el.name))
3352
- continue;
3335
+ if (!hasEditableAttribute(schema, el.name)) continue;
3353
3336
  const { hasFieldSize } = getService$2("field-sizes");
3354
3337
  const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
3355
3338
  if (!isAllowedFieldSize(fieldType, el.size)) {
@@ -3380,8 +3363,7 @@ function syncLayouts(configuration, schema) {
3380
3363
  };
3381
3364
  }
3382
3365
  const appendToEditLayout = (layout = [], keysToAppend, schema) => {
3383
- if (keysToAppend.length === 0)
3384
- return layout;
3366
+ if (keysToAppend.length === 0) return layout;
3385
3367
  let currentRowIndex = Math.max(layout.length - 1, 0);
3386
3368
  if (!layout[currentRowIndex]) {
3387
3369
  layout[currentRowIndex] = [];
@@ -3947,6 +3929,12 @@ function getPopulateForRelation(attribute, model, attributeName, { countMany, co
3947
3929
  if (initialPopulate) {
3948
3930
  return initialPopulate;
3949
3931
  }
3932
+ if (attributeName === "localizations") {
3933
+ const validationPopulate = getPopulateForValidation(model.uid);
3934
+ return {
3935
+ populate: validationPopulate.populate
3936
+ };
3937
+ }
3950
3938
  if (!isVisibleAttribute$1(model, attributeName)) {
3951
3939
  return true;
3952
3940
  }
@@ -4006,6 +3994,9 @@ const getDeepPopulate = (uid2, {
4006
3994
  return {};
4007
3995
  }
4008
3996
  const model = strapi.getModel(uid2);
3997
+ if (!model) {
3998
+ return {};
3999
+ }
4009
4000
  return Object.keys(model.attributes).reduce(
4010
4001
  (populateAcc, attributeName) => fp.merge(
4011
4002
  populateAcc,
@@ -4025,40 +4016,46 @@ const getDeepPopulate = (uid2, {
4025
4016
  {}
4026
4017
  );
4027
4018
  };
4028
- const getValidatableFieldsPopulate = (uid2, {
4029
- initialPopulate = {},
4030
- countMany = false,
4031
- countOne = false,
4032
- maxLevel = Infinity
4033
- } = {}, level = 1) => {
4034
- if (level > maxLevel) {
4019
+ const getPopulateForValidation = (uid2) => {
4020
+ const model = strapi.getModel(uid2);
4021
+ if (!model) {
4035
4022
  return {};
4036
4023
  }
4037
- const model = strapi.getModel(uid2);
4038
4024
  return Object.entries(model.attributes).reduce((populateAcc, [attributeName, attribute]) => {
4039
- if (!getDoesAttributeRequireValidation(attribute)) {
4025
+ if (isScalarAttribute(attribute)) {
4026
+ if (getDoesAttributeRequireValidation(attribute)) {
4027
+ populateAcc.fields = populateAcc.fields || [];
4028
+ populateAcc.fields.push(attributeName);
4029
+ }
4040
4030
  return populateAcc;
4041
4031
  }
4042
- if (isScalarAttribute(attribute)) {
4043
- return fp.merge(populateAcc, {
4044
- [attributeName]: true
4045
- });
4032
+ if (isComponent(attribute)) {
4033
+ const component = attribute.component;
4034
+ const componentResult = getPopulateForValidation(component);
4035
+ if (Object.keys(componentResult).length > 0) {
4036
+ populateAcc.populate = populateAcc.populate || {};
4037
+ populateAcc.populate[attributeName] = componentResult;
4038
+ }
4039
+ return populateAcc;
4046
4040
  }
4047
- return fp.merge(
4048
- populateAcc,
4049
- getPopulateFor(
4050
- attributeName,
4051
- model,
4052
- {
4053
- // @ts-expect-error - improve types
4054
- initialPopulate: initialPopulate?.[attributeName],
4055
- countMany,
4056
- countOne,
4057
- maxLevel
4041
+ if (isDynamicZone(attribute)) {
4042
+ const components2 = attribute.components;
4043
+ const componentsResult = (components2 || []).reduce(
4044
+ (acc, componentUID) => {
4045
+ const componentResult = getPopulateForValidation(componentUID);
4046
+ if (Object.keys(componentResult).length > 0) {
4047
+ acc[componentUID] = componentResult;
4048
+ }
4049
+ return acc;
4058
4050
  },
4059
- level
4060
- )
4061
- );
4051
+ {}
4052
+ );
4053
+ if (Object.keys(componentsResult).length > 0) {
4054
+ populateAcc.populate = populateAcc.populate || {};
4055
+ populateAcc.populate[attributeName] = { on: componentsResult };
4056
+ }
4057
+ }
4058
+ return populateAcc;
4062
4059
  }, {});
4063
4060
  };
4064
4061
  const getDeepPopulateDraftCount = (uid2) => {
@@ -4300,7 +4297,6 @@ const AVAILABLE_LOCALES_FIELDS = [
4300
4297
  "locale",
4301
4298
  "updatedAt",
4302
4299
  "createdAt",
4303
- "status",
4304
4300
  "publishedAt",
4305
4301
  "documentId"
4306
4302
  ];
@@ -4321,36 +4317,20 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4321
4317
  /**
4322
4318
  * Returns available locales of a document for the current status
4323
4319
  */
4324
- async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
4320
+ async getAvailableLocales(uid2, version, allVersions) {
4325
4321
  const versionsByLocale = fp.groupBy("locale", allVersions);
4326
4322
  if (version.locale) {
4327
4323
  delete versionsByLocale[version.locale];
4328
4324
  }
4329
4325
  const model = strapi2.getModel(uid2);
4330
- const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
4331
- const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(
4332
- ({ key }, { remove }) => {
4333
- if (keysToKeep.includes(key)) {
4334
- return;
4335
- }
4336
- remove(key);
4337
- },
4338
- { schema: model, getModel: strapi2.getModel.bind(strapi2) },
4339
- // @ts-expect-error fix types DocumentVersion incompatible with Data
4340
- localeVersion
4341
- );
4342
4326
  const mappingResult = await strapiUtils.async.map(
4343
4327
  Object.values(versionsByLocale),
4344
4328
  async (localeVersions) => {
4345
- const mappedLocaleVersions = await strapiUtils.async.map(
4346
- localeVersions,
4347
- traversalFunction
4348
- );
4349
4329
  if (!strapiUtils.contentTypes.hasDraftAndPublish(model)) {
4350
- return mappedLocaleVersions[0];
4330
+ return localeVersions[0];
4351
4331
  }
4352
- const draftVersion = mappedLocaleVersions.find((v) => v.publishedAt === null);
4353
- const otherVersions = mappedLocaleVersions.filter((v) => v.id !== draftVersion?.id);
4332
+ const draftVersion = localeVersions.find((v) => v.publishedAt === null);
4333
+ const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);
4354
4334
  if (!draftVersion) {
4355
4335
  return;
4356
4336
  }
@@ -4372,8 +4352,7 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4372
4352
  const matchStatus = status === "published" ? v.publishedAt !== null : v.publishedAt === null;
4373
4353
  return matchLocale && matchStatus;
4374
4354
  });
4375
- if (!availableStatus)
4376
- return availableStatus;
4355
+ if (!availableStatus) return availableStatus;
4377
4356
  return fp.pick(AVAILABLE_STATUS_FIELDS, availableStatus);
4378
4357
  },
4379
4358
  /**
@@ -4383,18 +4362,19 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4383
4362
  * @returns
4384
4363
  */
4385
4364
  async getManyAvailableStatus(uid2, documents) {
4386
- if (!documents.length)
4387
- return [];
4365
+ if (!documents.length) return [];
4388
4366
  const status = documents[0].publishedAt !== null ? "published" : "draft";
4389
- const locale = documents[0]?.locale;
4390
- const otherStatus = status === "published" ? "draft" : "published";
4391
- return strapi2.documents(uid2).findMany({
4392
- filters: {
4393
- documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) }
4394
- },
4395
- status: otherStatus,
4396
- locale,
4397
- fields: ["documentId", "locale", "updatedAt", "createdAt", "publishedAt"]
4367
+ const locales = documents.map((d) => d.locale).filter(Boolean);
4368
+ const where = {
4369
+ documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },
4370
+ publishedAt: { $null: status === "published" }
4371
+ };
4372
+ if (locales.length) {
4373
+ where.locale = { $in: locales };
4374
+ }
4375
+ return strapi2.query(uid2).findMany({
4376
+ where,
4377
+ select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"]
4398
4378
  });
4399
4379
  },
4400
4380
  getStatus(version, otherDocumentStatuses) {
@@ -4411,10 +4391,8 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4411
4391
  } else if (otherVersion) {
4412
4392
  draftVersion = otherVersion;
4413
4393
  }
4414
- if (!draftVersion)
4415
- return CONTENT_MANAGER_STATUS.PUBLISHED;
4416
- if (!publishedVersion)
4417
- return CONTENT_MANAGER_STATUS.DRAFT;
4394
+ if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;
4395
+ if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;
4418
4396
  const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);
4419
4397
  return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;
4420
4398
  },
@@ -4422,11 +4400,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4422
4400
  // We could refactor this so the locales are only loaded when they're
4423
4401
  // needed. e.g. in the bulk locale action modal.
4424
4402
  async getMetadata(uid2, version, { availableLocales = true, availableStatus = true } = {}) {
4425
- const populate = getValidatableFieldsPopulate(uid2);
4426
- const versions = await strapi2.db.query(uid2).findMany({
4427
- where: { documentId: version.documentId },
4403
+ const { populate = {}, fields = [] } = getPopulateForValidation(uid2);
4404
+ const params = {
4428
4405
  populate: {
4429
- // Populate only fields that require validation for bulk locale actions
4430
4406
  ...populate,
4431
4407
  // NOTE: creator fields are selected in this way to avoid exposing sensitive data
4432
4408
  createdBy: {
@@ -4435,9 +4411,15 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4435
4411
  updatedBy: {
4436
4412
  select: ["id", "firstname", "lastname", "email"]
4437
4413
  }
4414
+ },
4415
+ fields: fp.uniq([...AVAILABLE_LOCALES_FIELDS, ...fields]),
4416
+ filters: {
4417
+ documentId: version.documentId
4438
4418
  }
4439
- });
4440
- const availableLocalesResult = availableLocales ? await this.getAvailableLocales(uid2, version, versions, Object.keys(populate)) : [];
4419
+ };
4420
+ const dbParams = strapi2.get("query-params").transform(uid2, params);
4421
+ const versions = await strapi2.db.query(uid2).findMany(dbParams);
4422
+ const availableLocalesResult = availableLocales ? await this.getAvailableLocales(uid2, version, versions) : [];
4441
4423
  const availableStatusResult = availableStatus ? this.getAvailableStatus(version, versions) : null;
4442
4424
  return {
4443
4425
  availableLocales: availableLocalesResult,
@@ -4464,6 +4446,16 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4464
4446
  opts.availableStatus = false;
4465
4447
  }
4466
4448
  const meta = await this.getMetadata(uid2, document, opts);
4449
+ if (document.localizations) {
4450
+ const otherStatus = await this.getManyAvailableStatus(uid2, document.localizations);
4451
+ document.localizations = document.localizations.map((d) => {
4452
+ const status = otherStatus.find((s) => s.documentId === d.documentId);
4453
+ return {
4454
+ ...d,
4455
+ status: this.getStatus(d, status ? [status] : [])
4456
+ };
4457
+ });
4458
+ }
4467
4459
  return {
4468
4460
  data: {
4469
4461
  ...document,