@strapi/content-manager 0.0.0-next.c823b10e981295994d8b0733c78fa065aec064ee → 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 (139) 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-CL9CAMaL.js → ComponentConfigurationPage-BSEZcJVB.js} +4 -5
  4. package/dist/_chunks/{ComponentConfigurationPage-CL9CAMaL.js.map → ComponentConfigurationPage-BSEZcJVB.js.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-BpM_Hc7r.mjs → ComponentConfigurationPage-BiASGi7x.mjs} +3 -3
  6. package/dist/_chunks/{ComponentConfigurationPage-BpM_Hc7r.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-ILWo0h1e.js → EditConfigurationPage-D2rtvneE.js} +4 -5
  11. package/dist/_chunks/{EditConfigurationPage-ILWo0h1e.js.map → EditConfigurationPage-D2rtvneE.js.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-_prbqpTM.mjs → EditConfigurationPage-vN4zupij.mjs} +3 -3
  13. package/dist/_chunks/{EditConfigurationPage-_prbqpTM.mjs.map → EditConfigurationPage-vN4zupij.mjs.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-BqZvBN4s.js → EditViewPage-BwisF04Q.js} +38 -9
  15. package/dist/_chunks/EditViewPage-BwisF04Q.js.map +1 -0
  16. package/dist/_chunks/{EditViewPage-DAtscabN.mjs → EditViewPage-_A31Cl4g.mjs} +38 -8
  17. package/dist/_chunks/EditViewPage-_A31Cl4g.mjs.map +1 -0
  18. package/dist/_chunks/{Field-D-mgn1tH.mjs → Field-CvIunNOj.mjs} +169 -117
  19. package/dist/_chunks/Field-CvIunNOj.mjs.map +1 -0
  20. package/dist/_chunks/{Field-CcoQiiz1.js → Field-Dsu6-FrM.js} +171 -119
  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-BxyeWiXW.mjs → Form-DK0fG0Gj.mjs} +3 -3
  25. package/dist/_chunks/{Form-BxyeWiXW.mjs.map → Form-DK0fG0Gj.mjs.map} +1 -1
  26. package/dist/_chunks/{Form-CmLbZDfi.js → Form-DUwWcCmA.js} +5 -6
  27. package/dist/_chunks/{Form-CmLbZDfi.js.map → Form-DUwWcCmA.js.map} +1 -1
  28. package/dist/_chunks/{History-uECUbCZB.js → History-CeCDhoJG.js} +9 -64
  29. package/dist/_chunks/History-CeCDhoJG.js.map +1 -0
  30. package/dist/_chunks/{History-BOhLaq_g.mjs → History-DP8gmXpm.mjs} +9 -63
  31. package/dist/_chunks/History-DP8gmXpm.mjs.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-D0vQez6F.mjs → ListConfigurationPage-BCkO5iuN.mjs} +6 -5
  33. package/dist/_chunks/ListConfigurationPage-BCkO5iuN.mjs.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-D_bBSFNW.js → ListConfigurationPage-C-bAd44a.js} +6 -6
  35. package/dist/_chunks/ListConfigurationPage-C-bAd44a.js.map +1 -0
  36. package/dist/_chunks/{ListViewPage-BkZ83b1A.js → ListViewPage-BKTZFhsM.js} +64 -53
  37. package/dist/_chunks/ListViewPage-BKTZFhsM.js.map +1 -0
  38. package/dist/_chunks/{ListViewPage-ns-bmy5C.mjs → ListViewPage-Cf_DgaFV.mjs} +63 -51
  39. package/dist/_chunks/ListViewPage-Cf_DgaFV.mjs.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-C1439s4s.js → NoContentTypePage-D3Cm3v3q.js} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-C1439s4s.js.map → NoContentTypePage-D3Cm3v3q.js.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-BA5ZKMDR.mjs → NoContentTypePage-nHIyvJcB.mjs} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-BA5ZKMDR.mjs.map → NoContentTypePage-nHIyvJcB.mjs.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-B0GdMw1Q.mjs → NoPermissionsPage-BALVSJ7x.mjs} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-B0GdMw1Q.mjs.map → NoPermissionsPage-BALVSJ7x.mjs.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-CPGwsVfb.js → NoPermissionsPage-CChGWBj5.js} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-CPGwsVfb.js.map → NoPermissionsPage-CChGWBj5.js.map} +1 -1
  48. package/dist/_chunks/Preview-C4NBzKUV.mjs +294 -0
  49. package/dist/_chunks/Preview-C4NBzKUV.mjs.map +1 -0
  50. package/dist/_chunks/Preview-CT28Ckpg.js +312 -0
  51. package/dist/_chunks/Preview-CT28Ckpg.js.map +1 -0
  52. package/dist/_chunks/{Relations-BIGPMSW4.mjs → Relations-C8uC89cT.mjs} +6 -8
  53. package/dist/_chunks/{Relations-BIGPMSW4.mjs.map → Relations-C8uC89cT.mjs.map} +1 -1
  54. package/dist/_chunks/{Relations-d-8Uef_-.js → Relations-CvkPCng_.js} +7 -10
  55. package/dist/_chunks/{Relations-d-8Uef_-.js.map → Relations-CvkPCng_.js.map} +1 -1
  56. package/dist/_chunks/{en-Bdpa50w3.js → en-BK8Xyl5I.js} +11 -3
  57. package/dist/_chunks/{en-Bdpa50w3.js.map → en-BK8Xyl5I.js.map} +1 -1
  58. package/dist/_chunks/{en-CZw4xdPY.mjs → en-Dtk_ot79.mjs} +11 -3
  59. package/dist/_chunks/{en-CZw4xdPY.mjs.map → en-Dtk_ot79.mjs.map} +1 -1
  60. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  61. package/dist/_chunks/{index-BgaeYWIy.js → index-CnX_j5h-.js} +298 -210
  62. package/dist/_chunks/index-CnX_j5h-.js.map +1 -0
  63. package/dist/_chunks/{index-3_WeHXYp.mjs → index-Dh2aGTGJ.mjs} +303 -214
  64. package/dist/_chunks/index-Dh2aGTGJ.mjs.map +1 -0
  65. package/dist/_chunks/{layout-CrTxOnCy.mjs → layout-B5qsPihj.mjs} +4 -4
  66. package/dist/_chunks/{layout-CrTxOnCy.mjs.map → layout-B5qsPihj.mjs.map} +1 -1
  67. package/dist/_chunks/{layout-ByFyQRDH.js → layout-B_qdWGny.js} +5 -6
  68. package/dist/_chunks/{layout-ByFyQRDH.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-C5RSW926.js → relations-ChcieiF5.js} +6 -3
  72. package/dist/_chunks/relations-ChcieiF5.js.map +1 -0
  73. package/dist/_chunks/{relations-BlpLgngh.mjs → relations-DMXpNY-e.mjs} +6 -3
  74. package/dist/_chunks/relations-DMXpNY-e.mjs.map +1 -0
  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 +4 -4
  83. package/dist/admin/src/content-manager.d.ts +3 -2
  84. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  85. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  86. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
  87. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  88. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  89. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
  90. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  91. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  92. package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
  93. package/dist/admin/src/preview/routes.d.ts +3 -0
  94. package/dist/admin/src/router.d.ts +1 -1
  95. package/dist/admin/src/services/documents.d.ts +0 -3
  96. package/dist/server/index.js +151 -112
  97. package/dist/server/index.js.map +1 -1
  98. package/dist/server/index.mjs +152 -112
  99. package/dist/server/index.mjs.map +1 -1
  100. package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
  101. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  102. package/dist/server/src/index.d.ts +3 -2
  103. package/dist/server/src/index.d.ts.map +1 -1
  104. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
  105. package/dist/server/src/preview/index.d.ts.map +1 -1
  106. package/dist/server/src/preview/services/index.d.ts +1 -0
  107. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  108. package/dist/server/src/preview/services/preview-config.d.ts +2 -0
  109. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  110. package/dist/server/src/preview/utils.d.ts +1 -0
  111. package/dist/server/src/preview/utils.d.ts.map +1 -1
  112. package/dist/server/src/register.d.ts.map +1 -1
  113. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  114. package/dist/server/src/services/document-metadata.d.ts +4 -2
  115. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  116. package/dist/server/src/services/index.d.ts +3 -2
  117. package/dist/server/src/services/index.d.ts.map +1 -1
  118. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  119. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  120. package/dist/server/src/services/utils/populate.d.ts +2 -2
  121. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  122. package/package.json +12 -10
  123. package/dist/_chunks/EditViewPage-BqZvBN4s.js.map +0 -1
  124. package/dist/_chunks/EditViewPage-DAtscabN.mjs.map +0 -1
  125. package/dist/_chunks/Field-CcoQiiz1.js.map +0 -1
  126. package/dist/_chunks/Field-D-mgn1tH.mjs.map +0 -1
  127. package/dist/_chunks/History-BOhLaq_g.mjs.map +0 -1
  128. package/dist/_chunks/History-uECUbCZB.js.map +0 -1
  129. package/dist/_chunks/ListConfigurationPage-D0vQez6F.mjs.map +0 -1
  130. package/dist/_chunks/ListConfigurationPage-D_bBSFNW.js.map +0 -1
  131. package/dist/_chunks/ListViewPage-BkZ83b1A.js.map +0 -1
  132. package/dist/_chunks/ListViewPage-ns-bmy5C.mjs.map +0 -1
  133. package/dist/_chunks/index-3_WeHXYp.mjs.map +0 -1
  134. package/dist/_chunks/index-BgaeYWIy.js.map +0 -1
  135. package/dist/_chunks/relations-BlpLgngh.mjs.map +0 -1
  136. package/dist/_chunks/relations-C5RSW926.js.map +0 -1
  137. package/dist/admin/src/preview/constants.d.ts +0 -1
  138. package/dist/server/src/preview/constants.d.ts +0 -2
  139. 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,14 +737,6 @@ const getFeature$1 = () => {
740
737
  };
741
738
  };
742
739
  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
740
  const info = { pluginName: "content-manager", type: "admin" };
752
741
  const previewRouter = {
753
742
  type: "admin",
@@ -793,6 +782,10 @@ const validatePreviewUrl = async (strapi2, uid2, params) => {
793
782
  }
794
783
  newParams.documentId = doc?.documentId;
795
784
  }
785
+ if (!newParams.status) {
786
+ const isDPEnabled = model?.options?.draftAndPublish;
787
+ newParams.status = isDPEnabled ? "draft" : "published";
788
+ }
796
789
  return newParams;
797
790
  };
798
791
  const createPreviewController = () => {
@@ -838,8 +831,48 @@ const createPreviewService = ({ strapi: strapi2 }) => {
838
831
  }
839
832
  };
840
833
  };
834
+ const extendMiddlewareConfiguration = (middleware = { name: "", config: {} }) => {
835
+ const middlewares = strapi.config.get("middlewares");
836
+ const configuredMiddlewares = middlewares.map((currentMiddleware) => {
837
+ if (currentMiddleware === middleware.name) {
838
+ return middleware;
839
+ }
840
+ if (currentMiddleware.name === middleware.name) {
841
+ return fp.mergeWith(
842
+ (objValue, srcValue) => {
843
+ if (Array.isArray(objValue)) {
844
+ return objValue.concat(srcValue);
845
+ }
846
+ return void 0;
847
+ },
848
+ currentMiddleware,
849
+ middleware
850
+ );
851
+ }
852
+ return currentMiddleware;
853
+ });
854
+ strapi.config.set("middlewares", configuredMiddlewares);
855
+ };
841
856
  const createPreviewConfigService = ({ strapi: strapi2 }) => {
842
857
  return {
858
+ register() {
859
+ if (!this.isEnabled()) {
860
+ return;
861
+ }
862
+ const config = strapi2.config.get("admin.preview");
863
+ if (config.config?.allowedOrigins) {
864
+ extendMiddlewareConfiguration({
865
+ name: "strapi::security",
866
+ config: {
867
+ contentSecurityPolicy: {
868
+ directives: {
869
+ "frame-src": config.config.allowedOrigins
870
+ }
871
+ }
872
+ }
873
+ });
874
+ }
875
+ },
843
876
  isEnabled() {
844
877
  const config = strapi2.config.get("admin.preview");
845
878
  if (!config) {
@@ -881,14 +914,13 @@ const services$1 = {
881
914
  "preview-config": createPreviewConfigService
882
915
  };
883
916
  const getFeature = () => {
884
- if (!strapi.features.future.isEnabled(FEATURE_ID)) {
885
- return {};
886
- }
887
917
  return {
888
- bootstrap() {
889
- console.log("Bootstrapping preview server");
918
+ register() {
890
919
  const config = getService(strapi, "preview-config");
891
920
  config.validate();
921
+ config.register();
922
+ },
923
+ bootstrap() {
892
924
  },
893
925
  routes: routes$1,
894
926
  controllers: controllers$1,
@@ -896,6 +928,14 @@ const getFeature = () => {
896
928
  };
897
929
  };
898
930
  const preview = getFeature();
931
+ const register = async ({ strapi: strapi2 }) => {
932
+ await history.register?.({ strapi: strapi2 });
933
+ await preview.register?.({ strapi: strapi2 });
934
+ };
935
+ const ALLOWED_WEBHOOK_EVENTS = {
936
+ ENTRY_PUBLISH: "entry.publish",
937
+ ENTRY_UNPUBLISH: "entry.unpublish"
938
+ };
899
939
  const bootstrap = async () => {
900
940
  Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
901
941
  strapi.get("webhookStore").addAllowedEvent(key, value);
@@ -1459,8 +1499,7 @@ const isSortable = (schema, name) => {
1459
1499
  if (!___default.default.has(schema.attributes, name)) {
1460
1500
  return false;
1461
1501
  }
1462
- if (schema.modelType === "component" && name === "id")
1463
- return false;
1502
+ if (schema.modelType === "component" && name === "id") return false;
1464
1503
  const attribute = schema.attributes[name];
1465
1504
  if (NON_SORTABLES.includes(attribute.type)) {
1466
1505
  return false;
@@ -1605,8 +1644,7 @@ const createDefaultSettings = async (schema) => {
1605
1644
  };
1606
1645
  };
1607
1646
  const syncSettings = async (configuration, schema) => {
1608
- if (fp.isEmpty(configuration.settings))
1609
- return createDefaultSettings(schema);
1647
+ if (fp.isEmpty(configuration.settings)) return createDefaultSettings(schema);
1610
1648
  const defaultField = getDefaultMainField(schema);
1611
1649
  const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};
1612
1650
  return {
@@ -1782,8 +1820,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
1782
1820
  }
1783
1821
  switch (attribute.type) {
1784
1822
  case "relation": {
1785
- if (canCreate(attributePath))
1786
- return body2;
1823
+ if (canCreate(attributePath)) return body2;
1787
1824
  return fp.set(attributePath, { set: [] }, body2);
1788
1825
  }
1789
1826
  case "component": {
@@ -1793,8 +1830,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
1793
1830
  ]);
1794
1831
  }
1795
1832
  default: {
1796
- if (canCreate(attributePath))
1797
- return body2;
1833
+ if (canCreate(attributePath)) return body2;
1798
1834
  return fp.set(attributePath, null, body2);
1799
1835
  }
1800
1836
  }
@@ -2587,8 +2623,7 @@ const validateStatus = (sourceUid, status) => {
2587
2623
  const sourceModel = strapi.getModel(sourceUid);
2588
2624
  const isDP = strapiUtils.contentTypes.hasDraftAndPublish;
2589
2625
  const isSourceDP = isDP(sourceModel);
2590
- if (!isSourceDP)
2591
- return { status: void 0 };
2626
+ if (!isSourceDP) return { status: void 0 };
2592
2627
  switch (status) {
2593
2628
  case "published":
2594
2629
  return { status: "published" };
@@ -3233,18 +3268,15 @@ async function syncMetadatas(configuration, schema) {
3233
3268
  ___default.default.set(updatedMeta, ["list", "searchable"], false);
3234
3269
  ___default.default.set(acc, [key], updatedMeta);
3235
3270
  }
3236
- if (!___default.default.has(edit, "mainField"))
3237
- return acc;
3271
+ if (!___default.default.has(edit, "mainField")) return acc;
3238
3272
  if (!isRelation$1(attr)) {
3239
3273
  ___default.default.set(updatedMeta, "edit", ___default.default.omit(edit, ["mainField"]));
3240
3274
  ___default.default.set(acc, [key], updatedMeta);
3241
3275
  return acc;
3242
3276
  }
3243
- if (edit.mainField === "id")
3244
- return acc;
3277
+ if (edit.mainField === "id") return acc;
3245
3278
  const targetSchema = getTargetSchema(attr.targetModel);
3246
- if (!targetSchema)
3247
- return acc;
3279
+ if (!targetSchema) return acc;
3248
3280
  if (!isSortable(targetSchema, edit.mainField) && !isListable(targetSchema, edit.mainField)) {
3249
3281
  ___default.default.set(updatedMeta, ["edit", "mainField"], getDefaultMainField(targetSchema));
3250
3282
  ___default.default.set(acc, [key], updatedMeta);
@@ -3289,8 +3321,7 @@ function createDefaultEditLayout(schema) {
3289
3321
  return appendToEditLayout([], keys2, schema);
3290
3322
  }
3291
3323
  function syncLayouts(configuration, schema) {
3292
- if (___default.default.isEmpty(configuration.layouts))
3293
- return createDefaultLayouts(schema);
3324
+ if (___default.default.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);
3294
3325
  const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};
3295
3326
  let cleanList = list.filter((attr) => isListable(schema, attr));
3296
3327
  const cleanEditRelations = editRelations.filter(
@@ -3301,8 +3332,7 @@ function syncLayouts(configuration, schema) {
3301
3332
  for (const row of edit) {
3302
3333
  const newRow = [];
3303
3334
  for (const el of row) {
3304
- if (!hasEditableAttribute(schema, el.name))
3305
- continue;
3335
+ if (!hasEditableAttribute(schema, el.name)) continue;
3306
3336
  const { hasFieldSize } = getService$2("field-sizes");
3307
3337
  const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
3308
3338
  if (!isAllowedFieldSize(fieldType, el.size)) {
@@ -3333,8 +3363,7 @@ function syncLayouts(configuration, schema) {
3333
3363
  };
3334
3364
  }
3335
3365
  const appendToEditLayout = (layout = [], keysToAppend, schema) => {
3336
- if (keysToAppend.length === 0)
3337
- return layout;
3366
+ if (keysToAppend.length === 0) return layout;
3338
3367
  let currentRowIndex = Math.max(layout.length - 1, 0);
3339
3368
  if (!layout[currentRowIndex]) {
3340
3369
  layout[currentRowIndex] = [];
@@ -3900,6 +3929,12 @@ function getPopulateForRelation(attribute, model, attributeName, { countMany, co
3900
3929
  if (initialPopulate) {
3901
3930
  return initialPopulate;
3902
3931
  }
3932
+ if (attributeName === "localizations") {
3933
+ const validationPopulate = getPopulateForValidation(model.uid);
3934
+ return {
3935
+ populate: validationPopulate.populate
3936
+ };
3937
+ }
3903
3938
  if (!isVisibleAttribute$1(model, attributeName)) {
3904
3939
  return true;
3905
3940
  }
@@ -3959,6 +3994,9 @@ const getDeepPopulate = (uid2, {
3959
3994
  return {};
3960
3995
  }
3961
3996
  const model = strapi.getModel(uid2);
3997
+ if (!model) {
3998
+ return {};
3999
+ }
3962
4000
  return Object.keys(model.attributes).reduce(
3963
4001
  (populateAcc, attributeName) => fp.merge(
3964
4002
  populateAcc,
@@ -3978,40 +4016,46 @@ const getDeepPopulate = (uid2, {
3978
4016
  {}
3979
4017
  );
3980
4018
  };
3981
- const getValidatableFieldsPopulate = (uid2, {
3982
- initialPopulate = {},
3983
- countMany = false,
3984
- countOne = false,
3985
- maxLevel = Infinity
3986
- } = {}, level = 1) => {
3987
- if (level > maxLevel) {
4019
+ const getPopulateForValidation = (uid2) => {
4020
+ const model = strapi.getModel(uid2);
4021
+ if (!model) {
3988
4022
  return {};
3989
4023
  }
3990
- const model = strapi.getModel(uid2);
3991
4024
  return Object.entries(model.attributes).reduce((populateAcc, [attributeName, attribute]) => {
3992
- if (!getDoesAttributeRequireValidation(attribute)) {
4025
+ if (isScalarAttribute(attribute)) {
4026
+ if (getDoesAttributeRequireValidation(attribute)) {
4027
+ populateAcc.fields = populateAcc.fields || [];
4028
+ populateAcc.fields.push(attributeName);
4029
+ }
3993
4030
  return populateAcc;
3994
4031
  }
3995
- if (isScalarAttribute(attribute)) {
3996
- return fp.merge(populateAcc, {
3997
- [attributeName]: true
3998
- });
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;
3999
4040
  }
4000
- return fp.merge(
4001
- populateAcc,
4002
- getPopulateFor(
4003
- attributeName,
4004
- model,
4005
- {
4006
- // @ts-expect-error - improve types
4007
- initialPopulate: initialPopulate?.[attributeName],
4008
- countMany,
4009
- countOne,
4010
- 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;
4011
4050
  },
4012
- level
4013
- )
4014
- );
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;
4015
4059
  }, {});
4016
4060
  };
4017
4061
  const getDeepPopulateDraftCount = (uid2) => {
@@ -4253,7 +4297,6 @@ const AVAILABLE_LOCALES_FIELDS = [
4253
4297
  "locale",
4254
4298
  "updatedAt",
4255
4299
  "createdAt",
4256
- "status",
4257
4300
  "publishedAt",
4258
4301
  "documentId"
4259
4302
  ];
@@ -4274,36 +4317,20 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4274
4317
  /**
4275
4318
  * Returns available locales of a document for the current status
4276
4319
  */
4277
- async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
4320
+ async getAvailableLocales(uid2, version, allVersions) {
4278
4321
  const versionsByLocale = fp.groupBy("locale", allVersions);
4279
4322
  if (version.locale) {
4280
4323
  delete versionsByLocale[version.locale];
4281
4324
  }
4282
4325
  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
4326
  const mappingResult = await strapiUtils.async.map(
4296
4327
  Object.values(versionsByLocale),
4297
4328
  async (localeVersions) => {
4298
- const mappedLocaleVersions = await strapiUtils.async.map(
4299
- localeVersions,
4300
- traversalFunction
4301
- );
4302
4329
  if (!strapiUtils.contentTypes.hasDraftAndPublish(model)) {
4303
- return mappedLocaleVersions[0];
4330
+ return localeVersions[0];
4304
4331
  }
4305
- const draftVersion = mappedLocaleVersions.find((v) => v.publishedAt === null);
4306
- 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);
4307
4334
  if (!draftVersion) {
4308
4335
  return;
4309
4336
  }
@@ -4325,8 +4352,7 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4325
4352
  const matchStatus = status === "published" ? v.publishedAt !== null : v.publishedAt === null;
4326
4353
  return matchLocale && matchStatus;
4327
4354
  });
4328
- if (!availableStatus)
4329
- return availableStatus;
4355
+ if (!availableStatus) return availableStatus;
4330
4356
  return fp.pick(AVAILABLE_STATUS_FIELDS, availableStatus);
4331
4357
  },
4332
4358
  /**
@@ -4336,18 +4362,19 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4336
4362
  * @returns
4337
4363
  */
4338
4364
  async getManyAvailableStatus(uid2, documents) {
4339
- if (!documents.length)
4340
- return [];
4365
+ if (!documents.length) return [];
4341
4366
  const status = documents[0].publishedAt !== null ? "published" : "draft";
4342
- const locale = documents[0]?.locale;
4343
- const otherStatus = status === "published" ? "draft" : "published";
4344
- return strapi2.documents(uid2).findMany({
4345
- filters: {
4346
- documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) }
4347
- },
4348
- status: otherStatus,
4349
- locale,
4350
- 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"]
4351
4378
  });
4352
4379
  },
4353
4380
  getStatus(version, otherDocumentStatuses) {
@@ -4364,10 +4391,8 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4364
4391
  } else if (otherVersion) {
4365
4392
  draftVersion = otherVersion;
4366
4393
  }
4367
- if (!draftVersion)
4368
- return CONTENT_MANAGER_STATUS.PUBLISHED;
4369
- if (!publishedVersion)
4370
- return CONTENT_MANAGER_STATUS.DRAFT;
4394
+ if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;
4395
+ if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;
4371
4396
  const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);
4372
4397
  return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;
4373
4398
  },
@@ -4375,11 +4400,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4375
4400
  // We could refactor this so the locales are only loaded when they're
4376
4401
  // needed. e.g. in the bulk locale action modal.
4377
4402
  async getMetadata(uid2, version, { availableLocales = true, availableStatus = true } = {}) {
4378
- const populate = getValidatableFieldsPopulate(uid2);
4379
- const versions = await strapi2.db.query(uid2).findMany({
4380
- where: { documentId: version.documentId },
4403
+ const { populate = {}, fields = [] } = getPopulateForValidation(uid2);
4404
+ const params = {
4381
4405
  populate: {
4382
- // Populate only fields that require validation for bulk locale actions
4383
4406
  ...populate,
4384
4407
  // NOTE: creator fields are selected in this way to avoid exposing sensitive data
4385
4408
  createdBy: {
@@ -4388,9 +4411,15 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4388
4411
  updatedBy: {
4389
4412
  select: ["id", "firstname", "lastname", "email"]
4390
4413
  }
4414
+ },
4415
+ fields: fp.uniq([...AVAILABLE_LOCALES_FIELDS, ...fields]),
4416
+ filters: {
4417
+ documentId: version.documentId
4391
4418
  }
4392
- });
4393
- 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) : [];
4394
4423
  const availableStatusResult = availableStatus ? this.getAvailableStatus(version, versions) : null;
4395
4424
  return {
4396
4425
  availableLocales: availableLocalesResult,
@@ -4417,6 +4446,16 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4417
4446
  opts.availableStatus = false;
4418
4447
  }
4419
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
+ }
4420
4459
  return {
4421
4460
  data: {
4422
4461
  ...document,