@strapi/content-manager 0.0.0-experimental.71ed910bd859c7e558bd1c1042eaadb7d26fd22a → 0.0.0-experimental.7273fc63f5c2c8aa9e100655b1776f3e0621e61a

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 (142) hide show
  1. package/dist/_chunks/{ComponentConfigurationPage-DP7AC0UU.js → ComponentConfigurationPage-D2_cVxXK.js} +4 -4
  2. package/dist/_chunks/{ComponentConfigurationPage-DP7AC0UU.js.map → ComponentConfigurationPage-D2_cVxXK.js.map} +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-7-qB29e7.mjs → ComponentConfigurationPage-suSMW3KC.mjs} +4 -4
  4. package/dist/_chunks/{ComponentConfigurationPage-7-qB29e7.mjs.map → ComponentConfigurationPage-suSMW3KC.mjs.map} +1 -1
  5. package/dist/_chunks/{EditConfigurationPage-CI4XoymK.mjs → EditConfigurationPage-CBscKbxt.mjs} +4 -4
  6. package/dist/_chunks/{EditConfigurationPage-CI4XoymK.mjs.map → EditConfigurationPage-CBscKbxt.mjs.map} +1 -1
  7. package/dist/_chunks/{EditConfigurationPage-DITVliEI.js → EditConfigurationPage-Z_VzHVH4.js} +4 -4
  8. package/dist/_chunks/{EditConfigurationPage-DITVliEI.js.map → EditConfigurationPage-Z_VzHVH4.js.map} +1 -1
  9. package/dist/_chunks/{EditViewPage-Dzpno8xI.mjs → EditViewPage-D5Zhyw_q.mjs} +10 -4
  10. package/dist/_chunks/EditViewPage-D5Zhyw_q.mjs.map +1 -0
  11. package/dist/_chunks/{EditViewPage-CUS2EAhB.js → EditViewPage-DzDDKiF5.js} +10 -4
  12. package/dist/_chunks/EditViewPage-DzDDKiF5.js.map +1 -0
  13. package/dist/_chunks/{Field-CtUU1Fg8.js → Field-CZHNLm_m.js} +42 -10
  14. package/dist/_chunks/Field-CZHNLm_m.js.map +1 -0
  15. package/dist/_chunks/{Field-B_jG_EV9.mjs → Field-FNlyAbcI.mjs} +42 -10
  16. package/dist/_chunks/Field-FNlyAbcI.mjs.map +1 -0
  17. package/dist/_chunks/{Form-DTqO0ymI.js → Form-DqPHDLuK.js} +3 -3
  18. package/dist/_chunks/Form-DqPHDLuK.js.map +1 -0
  19. package/dist/_chunks/{Form-BXHao2mZ.mjs → Form-Sq_OVNv-.mjs} +3 -3
  20. package/dist/_chunks/Form-Sq_OVNv-.mjs.map +1 -0
  21. package/dist/_chunks/{History-C_uSGzO5.js → History-B-ZiOAEg.js} +37 -40
  22. package/dist/_chunks/History-B-ZiOAEg.js.map +1 -0
  23. package/dist/_chunks/{History-2Ah2CQ4T.mjs → History-DlL3k_OW.mjs} +38 -41
  24. package/dist/_chunks/History-DlL3k_OW.mjs.map +1 -0
  25. package/dist/_chunks/{ListConfigurationPage-nyuP7OSy.js → ListConfigurationPage-Cc0hLAoS.js} +3 -3
  26. package/dist/_chunks/{ListConfigurationPage-nyuP7OSy.js.map → ListConfigurationPage-Cc0hLAoS.js.map} +1 -1
  27. package/dist/_chunks/{ListConfigurationPage-BjSJlaoC.mjs → ListConfigurationPage-xj3cSF5M.mjs} +3 -3
  28. package/dist/_chunks/{ListConfigurationPage-BjSJlaoC.mjs.map → ListConfigurationPage-xj3cSF5M.mjs.map} +1 -1
  29. package/dist/_chunks/{ListViewPage-B75x3nz2.mjs → ListViewPage-C9STpcYd.mjs} +15 -4
  30. package/dist/_chunks/{ListViewPage-B75x3nz2.mjs.map → ListViewPage-C9STpcYd.mjs.map} +1 -1
  31. package/dist/_chunks/{ListViewPage-DHgHD8Xg.js → ListViewPage-D48T84aT.js} +15 -4
  32. package/dist/_chunks/ListViewPage-D48T84aT.js.map +1 -0
  33. package/dist/_chunks/{NoContentTypePage-CDUKdZ7d.js → NoContentTypePage-BnUmUnXQ.js} +2 -2
  34. package/dist/_chunks/{NoContentTypePage-CDUKdZ7d.js.map → NoContentTypePage-BnUmUnXQ.js.map} +1 -1
  35. package/dist/_chunks/{NoContentTypePage-DUacQSyF.mjs → NoContentTypePage-DpV_ouD6.mjs} +2 -2
  36. package/dist/_chunks/{NoContentTypePage-DUacQSyF.mjs.map → NoContentTypePage-DpV_ouD6.mjs.map} +1 -1
  37. package/dist/_chunks/{NoPermissionsPage-SFllMekk.mjs → NoPermissionsPage-BeDixsE9.mjs} +2 -2
  38. package/dist/_chunks/{NoPermissionsPage-SFllMekk.mjs.map → NoPermissionsPage-BeDixsE9.mjs.map} +1 -1
  39. package/dist/_chunks/{NoPermissionsPage-zwIZydDI.js → NoPermissionsPage-z-CpOFfh.js} +2 -2
  40. package/dist/_chunks/{NoPermissionsPage-zwIZydDI.js.map → NoPermissionsPage-z-CpOFfh.js.map} +1 -1
  41. package/dist/_chunks/{Relations-D2NRW8fC.mjs → Relations-CTiimSAg.mjs} +65 -33
  42. package/dist/_chunks/Relations-CTiimSAg.mjs.map +1 -0
  43. package/dist/_chunks/{Relations-NFLaRNPr.js → Relations-Cs5vJLAp.js} +64 -32
  44. package/dist/_chunks/Relations-Cs5vJLAp.js.map +1 -0
  45. package/dist/_chunks/{en-BlhnxQfj.js → en-Bm0D0IWz.js} +7 -7
  46. package/dist/_chunks/{en-BlhnxQfj.js.map → en-Bm0D0IWz.js.map} +1 -1
  47. package/dist/_chunks/{en-C8YBvRrK.mjs → en-DKV44jRb.mjs} +7 -7
  48. package/dist/_chunks/{en-C8YBvRrK.mjs.map → en-DKV44jRb.mjs.map} +1 -1
  49. package/dist/_chunks/{fr-B7kGGg3E.js → fr-C6t7ywEg.js} +12 -2
  50. package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-C6t7ywEg.js.map} +1 -1
  51. package/dist/_chunks/{fr-CD9VFbPM.mjs → fr-DxrTDLl6.mjs} +12 -2
  52. package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr-DxrTDLl6.mjs.map} +1 -1
  53. package/dist/_chunks/{index-C9HxCo5R.mjs → index-DUZzV11o.mjs} +119 -84
  54. package/dist/_chunks/index-DUZzV11o.mjs.map +1 -0
  55. package/dist/_chunks/{index-ovJRE1FM.js → index-dFQ_8EM3.js} +119 -83
  56. package/dist/_chunks/index-dFQ_8EM3.js.map +1 -0
  57. package/dist/_chunks/{layout-UNWstw_s.js → layout-Bu-ET7w6.js} +3 -3
  58. package/dist/_chunks/{layout-UNWstw_s.js.map → layout-Bu-ET7w6.js.map} +1 -1
  59. package/dist/_chunks/{layout-DaUjDiWQ.mjs → layout-C-eg7m9Y.mjs} +3 -3
  60. package/dist/_chunks/{layout-DaUjDiWQ.mjs.map → layout-C-eg7m9Y.mjs.map} +1 -1
  61. package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
  62. package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
  63. package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
  64. package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
  65. package/dist/_chunks/{relations-D8iFAeRu.mjs → relations-Cj61Oyt2.mjs} +3 -7
  66. package/dist/_chunks/relations-Cj61Oyt2.mjs.map +1 -0
  67. package/dist/_chunks/{relations-NN3coOG5.js → relations-isLeDaA0.js} +3 -7
  68. package/dist/_chunks/relations-isLeDaA0.js.map +1 -0
  69. package/dist/admin/index.js +1 -1
  70. package/dist/admin/index.mjs +1 -1
  71. package/dist/admin/src/preview/constants.d.ts +1 -0
  72. package/dist/admin/src/preview/index.d.ts +4 -0
  73. package/dist/server/index.js +351 -146
  74. package/dist/server/index.js.map +1 -1
  75. package/dist/server/index.mjs +351 -146
  76. package/dist/server/index.mjs.map +1 -1
  77. package/dist/server/src/bootstrap.d.ts.map +1 -1
  78. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  79. package/dist/server/src/controllers/index.d.ts.map +1 -1
  80. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  81. package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
  82. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  83. package/dist/server/src/history/services/history.d.ts.map +1 -1
  84. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  85. package/dist/server/src/history/services/utils.d.ts +2 -3
  86. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  87. package/dist/server/src/index.d.ts +4 -4
  88. package/dist/server/src/preview/constants.d.ts +2 -0
  89. package/dist/server/src/preview/constants.d.ts.map +1 -0
  90. package/dist/server/src/preview/controllers/index.d.ts +2 -0
  91. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  92. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  93. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  94. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  95. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  96. package/dist/server/src/preview/index.d.ts +4 -0
  97. package/dist/server/src/preview/index.d.ts.map +1 -0
  98. package/dist/server/src/preview/routes/index.d.ts +8 -0
  99. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  100. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  101. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  102. package/dist/server/src/preview/services/index.d.ts +15 -0
  103. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  104. package/dist/server/src/preview/services/preview-config.d.ts +30 -0
  105. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  106. package/dist/server/src/preview/services/preview.d.ts +12 -0
  107. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  108. package/dist/server/src/preview/utils.d.ts +18 -0
  109. package/dist/server/src/preview/utils.d.ts.map +1 -0
  110. package/dist/server/src/routes/index.d.ts.map +1 -1
  111. package/dist/server/src/services/document-metadata.d.ts +8 -8
  112. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  113. package/dist/server/src/services/index.d.ts +4 -4
  114. package/dist/server/src/services/index.d.ts.map +1 -1
  115. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  116. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  117. package/dist/server/src/utils/index.d.ts +2 -0
  118. package/dist/server/src/utils/index.d.ts.map +1 -1
  119. package/dist/shared/contracts/index.d.ts +1 -0
  120. package/dist/shared/contracts/index.d.ts.map +1 -1
  121. package/dist/shared/contracts/preview.d.ts +27 -0
  122. package/dist/shared/contracts/preview.d.ts.map +1 -0
  123. package/dist/shared/index.js +4 -0
  124. package/dist/shared/index.js.map +1 -1
  125. package/dist/shared/index.mjs +4 -0
  126. package/dist/shared/index.mjs.map +1 -1
  127. package/package.json +8 -8
  128. package/dist/_chunks/EditViewPage-CUS2EAhB.js.map +0 -1
  129. package/dist/_chunks/EditViewPage-Dzpno8xI.mjs.map +0 -1
  130. package/dist/_chunks/Field-B_jG_EV9.mjs.map +0 -1
  131. package/dist/_chunks/Field-CtUU1Fg8.js.map +0 -1
  132. package/dist/_chunks/Form-BXHao2mZ.mjs.map +0 -1
  133. package/dist/_chunks/Form-DTqO0ymI.js.map +0 -1
  134. package/dist/_chunks/History-2Ah2CQ4T.mjs.map +0 -1
  135. package/dist/_chunks/History-C_uSGzO5.js.map +0 -1
  136. package/dist/_chunks/ListViewPage-DHgHD8Xg.js.map +0 -1
  137. package/dist/_chunks/Relations-D2NRW8fC.mjs.map +0 -1
  138. package/dist/_chunks/Relations-NFLaRNPr.js.map +0 -1
  139. package/dist/_chunks/index-C9HxCo5R.mjs.map +0 -1
  140. package/dist/_chunks/index-ovJRE1FM.js.map +0 -1
  141. package/dist/_chunks/relations-D8iFAeRu.mjs.map +0 -1
  142. package/dist/_chunks/relations-NN3coOG5.js.map +0 -1
@@ -1,9 +1,10 @@
1
1
  import { More, Cross, WarningCircle, ListPlus, Pencil, Trash, Check, CrossCircle, CheckCircle, ArrowsCounterClockwise, ChevronRight, Duplicate, ClockCounterClockwise, Feather } from "@strapi/icons";
2
2
  import { jsx, Fragment, jsxs } from "react/jsx-runtime";
3
- import { useStrapiApp, createContext, useAuth, useRBAC, Page, adminApi, translatedErrors, useNotification, useAPIErrorHandler, useQueryParams, getYupValidationErrors, useForm, useTracking, useGuidedTour, BackButton, DescriptionComponentRenderer, useTable, Table } from "@strapi/admin/strapi-admin";
3
+ import { useStrapiApp, createContext, useQueryParams, useAuth, useRBAC, Page, adminApi, translatedErrors, useNotification, useAPIErrorHandler, getYupValidationErrors, useForm, useTracking, useGuidedTour, BackButton, DescriptionComponentRenderer, useTable, Table } from "@strapi/admin/strapi-admin";
4
4
  import * as React from "react";
5
5
  import { lazy } from "react";
6
6
  import { Button, Menu, VisuallyHidden, Flex, Typography, Dialog, Modal, Radio, Status, Box, SingleSelect, SingleSelectOption, IconButton, Loader, Tooltip, LinkButton } from "@strapi/design-system";
7
+ import mapValues from "lodash/fp/mapValues";
7
8
  import { useIntl } from "react-intl";
8
9
  import { useParams, useNavigate, Navigate, useMatch, useLocation, Link, NavLink } from "react-router-dom";
9
10
  import * as yup from "yup";
@@ -100,6 +101,7 @@ const DocumentRBAC = ({ children, permissions }) => {
100
101
  if (!slug) {
101
102
  throw new Error("Cannot find the slug param in the URL");
102
103
  }
104
+ const [{ rawQuery }] = useQueryParams();
103
105
  const userPermissions = useAuth("DocumentRBAC", (state) => state.permissions);
104
106
  const contentTypePermissions = React.useMemo(() => {
105
107
  const contentTypePermissions2 = userPermissions.filter(
@@ -110,7 +112,14 @@ const DocumentRBAC = ({ children, permissions }) => {
110
112
  return { ...acc, [action]: [permission] };
111
113
  }, {});
112
114
  }, [slug, userPermissions]);
113
- const { isLoading, allowedActions } = useRBAC(contentTypePermissions, permissions ?? void 0);
115
+ const { isLoading, allowedActions } = useRBAC(
116
+ contentTypePermissions,
117
+ permissions ?? void 0,
118
+ // TODO: useRBAC context should be typed and built differently
119
+ // We are passing raw query as context to the hook so that it can
120
+ // rely on the locale provided from DocumentRBAC for its permission calculations.
121
+ rawQuery
122
+ );
114
123
  const canCreateFields = !isLoading && allowedActions.canCreate ? extractAndDedupeFields(contentTypePermissions.create) : [];
115
124
  const canReadFields = !isLoading && allowedActions.canRead ? extractAndDedupeFields(contentTypePermissions.read) : [];
116
125
  const canUpdateFields = !isLoading && allowedActions.canUpdate ? extractAndDedupeFields(contentTypePermissions.update) : [];
@@ -262,7 +271,7 @@ const documentApi = contentManagerApi.injectEndpoints({
262
271
  */
263
272
  getAllDocuments: builder.query({
264
273
  query: ({ model, params }) => ({
265
- url: `/content-manager/collection-types/${model}`,
274
+ url: `/content-manager/collection-types/${model}${params ? `?${params}` : ""}`,
266
275
  method: "GET",
267
276
  config: {
268
277
  params
@@ -461,6 +470,24 @@ const buildValidParams = (query) => {
461
470
  const isBaseQueryError = (error) => {
462
471
  return error.name !== void 0;
463
472
  };
473
+ const arrayValidator = (attribute, options) => ({
474
+ message: translatedErrors.required,
475
+ test(value) {
476
+ if (options.status === "draft") {
477
+ return true;
478
+ }
479
+ if (!attribute.required) {
480
+ return true;
481
+ }
482
+ if (!value) {
483
+ return false;
484
+ }
485
+ if (Array.isArray(value) && value.length === 0) {
486
+ return false;
487
+ }
488
+ return true;
489
+ }
490
+ });
464
491
  const createYupSchema = (attributes = {}, components = {}, options = { status: null }) => {
465
492
  const createModelSchema = (attributes2) => yup.object().shape(
466
493
  Object.entries(attributes2).reduce((acc, [name, attribute]) => {
@@ -468,6 +495,7 @@ const createYupSchema = (attributes = {}, components = {}, options = { status: n
468
495
  return acc;
469
496
  }
470
497
  const validations = [
498
+ addNullableValidation,
471
499
  addRequiredValidation,
472
500
  addMinLengthValidation,
473
501
  addMaxLengthValidation,
@@ -484,12 +512,12 @@ const createYupSchema = (attributes = {}, components = {}, options = { status: n
484
512
  ...acc,
485
513
  [name]: transformSchema(
486
514
  yup.array().of(createModelSchema(attributes3).nullable(false))
487
- )
515
+ ).test(arrayValidator(attribute, options))
488
516
  };
489
517
  } else {
490
518
  return {
491
519
  ...acc,
492
- [name]: transformSchema(createModelSchema(attributes3))
520
+ [name]: transformSchema(createModelSchema(attributes3).nullable())
493
521
  };
494
522
  }
495
523
  }
@@ -511,7 +539,7 @@ const createYupSchema = (attributes = {}, components = {}, options = { status: n
511
539
  }
512
540
  )
513
541
  )
514
- )
542
+ ).test(arrayValidator(attribute, options))
515
543
  };
516
544
  case "relation":
517
545
  return {
@@ -609,17 +637,17 @@ const nullableSchema = (schema) => {
609
637
  schema
610
638
  );
611
639
  };
640
+ const addNullableValidation = () => (schema) => {
641
+ return nullableSchema(schema);
642
+ };
612
643
  const addRequiredValidation = (attribute, options) => (schema) => {
613
- if (options.status === "draft") {
614
- return nullableSchema(schema);
615
- }
616
- if ((attribute.type === "component" && attribute.repeatable || attribute.type === "dynamiczone") && attribute.required && "min" in schema) {
617
- return schema.min(1, translatedErrors.required);
644
+ if (options.status === "draft" || !attribute.required) {
645
+ return schema;
618
646
  }
619
- if (attribute.required && attribute.type !== "relation") {
647
+ if (attribute.required && "required" in schema) {
620
648
  return schema.required(translatedErrors.required);
621
649
  }
622
- return nullableSchema(schema);
650
+ return schema;
623
651
  };
624
652
  const addMinLengthValidation = (attribute, options) => (schema) => {
625
653
  if (options.status === "draft") {
@@ -647,31 +675,12 @@ const addMaxLengthValidation = (attribute) => (schema) => {
647
675
  return schema;
648
676
  };
649
677
  const addMinValidation = (attribute, options) => (schema) => {
650
- if ("min" in attribute) {
678
+ if (options.status === "draft") {
679
+ return schema;
680
+ }
681
+ if ("min" in attribute && "min" in schema) {
651
682
  const min = toInteger(attribute.min);
652
- if (attribute.type === "component" && attribute.repeatable || attribute.type === "dynamiczone") {
653
- if (options.status !== "draft" && !attribute.required && "test" in schema && min) {
654
- return schema.test(
655
- "custom-min",
656
- {
657
- ...translatedErrors.min,
658
- values: {
659
- min: attribute.min
660
- }
661
- },
662
- (value) => {
663
- if (!value) {
664
- return true;
665
- }
666
- if (Array.isArray(value) && value.length === 0) {
667
- return true;
668
- }
669
- return value.length >= min;
670
- }
671
- );
672
- }
673
- }
674
- if ("min" in schema && min) {
683
+ if (min) {
675
684
  return schema.min(min, {
676
685
  ...translatedErrors.min,
677
686
  values: {
@@ -960,9 +969,10 @@ const formatEditLayout = (data, {
960
969
  currentPanelIndex += 2;
961
970
  } else {
962
971
  if (!panels[currentPanelIndex]) {
963
- panels.push([]);
972
+ panels.push([row]);
973
+ } else {
974
+ panels[currentPanelIndex].push(row);
964
975
  }
965
- panels[currentPanelIndex].push(row);
966
976
  }
967
977
  return panels;
968
978
  }, []);
@@ -1166,16 +1176,18 @@ const useDoc = () => {
1166
1176
  if (!slug) {
1167
1177
  throw new Error("Could not find model in url params");
1168
1178
  }
1179
+ const document = useDocument(
1180
+ { documentId: origin || id, model: slug, collectionType, params },
1181
+ {
1182
+ skip: id === "create" || !origin && !id && collectionType !== SINGLE_TYPES
1183
+ }
1184
+ );
1185
+ const returnId = origin || id === "create" ? void 0 : id;
1169
1186
  return {
1170
1187
  collectionType,
1171
1188
  model: slug,
1172
- id: origin || id === "create" ? void 0 : id,
1173
- ...useDocument(
1174
- { documentId: origin || id, model: slug, collectionType, params },
1175
- {
1176
- skip: id === "create" || !origin && !id && collectionType !== SINGLE_TYPES
1177
- }
1178
- )
1189
+ id: returnId,
1190
+ ...document
1179
1191
  };
1180
1192
  };
1181
1193
  const useContentManagerContext = () => {
@@ -1218,9 +1230,6 @@ const useContentManagerContext = () => {
1218
1230
  };
1219
1231
  };
1220
1232
  const prefixPluginTranslations = (trad, pluginId) => {
1221
- if (!pluginId) {
1222
- throw new TypeError("pluginId can't be empty");
1223
- }
1224
1233
  return Object.keys(trad).reduce((acc, current) => {
1225
1234
  acc[`${pluginId}.${current}`] = trad[current];
1226
1235
  return acc;
@@ -1655,7 +1664,7 @@ const useDocumentActions = () => {
1655
1664
  };
1656
1665
  };
1657
1666
  const ProtectedHistoryPage = lazy(
1658
- () => import("./History-2Ah2CQ4T.mjs").then((mod) => ({ default: mod.ProtectedHistoryPage }))
1667
+ () => import("./History-DlL3k_OW.mjs").then((mod) => ({ default: mod.ProtectedHistoryPage }))
1659
1668
  );
1660
1669
  const routes$1 = [
1661
1670
  {
@@ -1668,31 +1677,31 @@ const routes$1 = [
1668
1677
  }
1669
1678
  ];
1670
1679
  const ProtectedEditViewPage = lazy(
1671
- () => import("./EditViewPage-Dzpno8xI.mjs").then((mod) => ({ default: mod.ProtectedEditViewPage }))
1680
+ () => import("./EditViewPage-D5Zhyw_q.mjs").then((mod) => ({ default: mod.ProtectedEditViewPage }))
1672
1681
  );
1673
1682
  const ProtectedListViewPage = lazy(
1674
- () => import("./ListViewPage-B75x3nz2.mjs").then((mod) => ({ default: mod.ProtectedListViewPage }))
1683
+ () => import("./ListViewPage-C9STpcYd.mjs").then((mod) => ({ default: mod.ProtectedListViewPage }))
1675
1684
  );
1676
1685
  const ProtectedListConfiguration = lazy(
1677
- () => import("./ListConfigurationPage-BjSJlaoC.mjs").then((mod) => ({
1686
+ () => import("./ListConfigurationPage-xj3cSF5M.mjs").then((mod) => ({
1678
1687
  default: mod.ProtectedListConfiguration
1679
1688
  }))
1680
1689
  );
1681
1690
  const ProtectedEditConfigurationPage = lazy(
1682
- () => import("./EditConfigurationPage-CI4XoymK.mjs").then((mod) => ({
1691
+ () => import("./EditConfigurationPage-CBscKbxt.mjs").then((mod) => ({
1683
1692
  default: mod.ProtectedEditConfigurationPage
1684
1693
  }))
1685
1694
  );
1686
1695
  const ProtectedComponentConfigurationPage = lazy(
1687
- () => import("./ComponentConfigurationPage-7-qB29e7.mjs").then((mod) => ({
1696
+ () => import("./ComponentConfigurationPage-suSMW3KC.mjs").then((mod) => ({
1688
1697
  default: mod.ProtectedComponentConfigurationPage
1689
1698
  }))
1690
1699
  );
1691
1700
  const NoPermissions = lazy(
1692
- () => import("./NoPermissionsPage-SFllMekk.mjs").then((mod) => ({ default: mod.NoPermissions }))
1701
+ () => import("./NoPermissionsPage-BeDixsE9.mjs").then((mod) => ({ default: mod.NoPermissions }))
1693
1702
  );
1694
1703
  const NoContentType = lazy(
1695
- () => import("./NoContentTypePage-DUacQSyF.mjs").then((mod) => ({ default: mod.NoContentType }))
1704
+ () => import("./NoContentTypePage-DpV_ouD6.mjs").then((mod) => ({ default: mod.NoContentType }))
1696
1705
  );
1697
1706
  const CollectionTypePages = () => {
1698
1707
  const { collectionType } = useParams();
@@ -2046,6 +2055,18 @@ const DocumentActionModal = ({
2046
2055
  typeof Footer === "function" ? /* @__PURE__ */ jsx(Footer, { onClose: handleClose }) : Footer
2047
2056
  ] }) });
2048
2057
  };
2058
+ const transformData = (data) => {
2059
+ if (Array.isArray(data)) {
2060
+ return data.map(transformData);
2061
+ }
2062
+ if (typeof data === "object" && data !== null) {
2063
+ if ("apiData" in data) {
2064
+ return data.apiData;
2065
+ }
2066
+ return mapValues(transformData)(data);
2067
+ }
2068
+ return data;
2069
+ };
2049
2070
  const PublishAction$1 = ({
2050
2071
  activeTab,
2051
2072
  documentId,
@@ -2139,7 +2160,9 @@ const PublishAction$1 = ({
2139
2160
  const performPublish = async () => {
2140
2161
  setSubmitting(true);
2141
2162
  try {
2142
- const { errors } = await validate();
2163
+ const { errors } = await validate(true, {
2164
+ status: "published"
2165
+ });
2143
2166
  if (errors) {
2144
2167
  toggleNotification({
2145
2168
  type: "danger",
@@ -2157,7 +2180,7 @@ const PublishAction$1 = ({
2157
2180
  documentId,
2158
2181
  params
2159
2182
  },
2160
- formValues
2183
+ transformData(formValues)
2161
2184
  );
2162
2185
  if ("data" in res && collectionType !== SINGLE_TYPES) {
2163
2186
  navigate({
@@ -2253,18 +2276,18 @@ const UpdateAction = ({
2253
2276
  onClick: async () => {
2254
2277
  setSubmitting(true);
2255
2278
  try {
2256
- if (activeTab !== "draft") {
2257
- const { errors } = await validate();
2258
- if (errors) {
2259
- toggleNotification({
2260
- type: "danger",
2261
- message: formatMessage({
2262
- id: "content-manager.validation.error",
2263
- defaultMessage: "There are validation errors in your document. Please fix them before saving."
2264
- })
2265
- });
2266
- return;
2267
- }
2279
+ const { errors } = await validate(true, {
2280
+ status: "draft"
2281
+ });
2282
+ if (errors) {
2283
+ toggleNotification({
2284
+ type: "danger",
2285
+ message: formatMessage({
2286
+ id: "content-manager.validation.error",
2287
+ defaultMessage: "There are validation errors in your document. Please fix them before saving."
2288
+ })
2289
+ });
2290
+ return;
2268
2291
  }
2269
2292
  if (isCloning) {
2270
2293
  const res = await clone(
@@ -2273,7 +2296,7 @@ const UpdateAction = ({
2273
2296
  documentId: cloneMatch.params.origin,
2274
2297
  params
2275
2298
  },
2276
- document
2299
+ transformData(document)
2277
2300
  );
2278
2301
  if ("data" in res) {
2279
2302
  navigate(
@@ -2294,7 +2317,7 @@ const UpdateAction = ({
2294
2317
  documentId,
2295
2318
  params
2296
2319
  },
2297
- document
2320
+ transformData(document)
2298
2321
  );
2299
2322
  if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2300
2323
  setErrors(formatValidationErrors(res.error));
@@ -2307,7 +2330,7 @@ const UpdateAction = ({
2307
2330
  model,
2308
2331
  params
2309
2332
  },
2310
- document
2333
+ transformData(document)
2311
2334
  );
2312
2335
  if ("data" in res && collectionType !== SINGLE_TYPES) {
2313
2336
  navigate(
@@ -2646,12 +2669,12 @@ const Information = ({ activeTab }) => {
2646
2669
  isDisplayed: !!publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME],
2647
2670
  label: formatMessage({
2648
2671
  id: "content-manager.containers.edit.information.last-published.label",
2649
- defaultMessage: "Last published"
2672
+ defaultMessage: "Published"
2650
2673
  }),
2651
2674
  value: formatMessage(
2652
2675
  {
2653
2676
  id: "content-manager.containers.edit.information.last-published.value",
2654
- defaultMessage: `Published {time}{isAnonymous, select, true {} other { by {author}}}`
2677
+ defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`
2655
2678
  },
2656
2679
  {
2657
2680
  time: /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME]) }),
@@ -2664,12 +2687,12 @@ const Information = ({ activeTab }) => {
2664
2687
  isDisplayed: !!createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME],
2665
2688
  label: formatMessage({
2666
2689
  id: "content-manager.containers.edit.information.last-draft.label",
2667
- defaultMessage: "Last draft"
2690
+ defaultMessage: "Updated"
2668
2691
  }),
2669
2692
  value: formatMessage(
2670
2693
  {
2671
2694
  id: "content-manager.containers.edit.information.last-draft.value",
2672
- defaultMessage: `Modified {time}{isAnonymous, select, true {} other { by {author}}}`
2695
+ defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`
2673
2696
  },
2674
2697
  {
2675
2698
  time: /* @__PURE__ */ jsx(
@@ -2687,12 +2710,12 @@ const Information = ({ activeTab }) => {
2687
2710
  isDisplayed: !!createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME],
2688
2711
  label: formatMessage({
2689
2712
  id: "content-manager.containers.edit.information.document.label",
2690
- defaultMessage: "Document"
2713
+ defaultMessage: "Created"
2691
2714
  }),
2692
2715
  value: formatMessage(
2693
2716
  {
2694
2717
  id: "content-manager.containers.edit.information.document.value",
2695
- defaultMessage: `Created {time}{isAnonymous, select, true {} other { by {author}}}`
2718
+ defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`
2696
2719
  },
2697
2720
  {
2698
2721
  time: /* @__PURE__ */ jsx(
@@ -2995,7 +3018,7 @@ const Panel = React.forwardRef(({ children, title }, ref) => {
2995
3018
  justifyContent: "stretch",
2996
3019
  alignItems: "flex-start",
2997
3020
  children: [
2998
- /* @__PURE__ */ jsx(Typography, { tag: "h2", variant: "sigma", textTransform: "uppercase", children: title }),
3021
+ /* @__PURE__ */ jsx(Typography, { tag: "h2", variant: "sigma", textTransform: "uppercase", textColor: "neutral600", children: title }),
2999
3022
  children
3000
3023
  ]
3001
3024
  }
@@ -3978,6 +4001,15 @@ const { setInitialData } = actions;
3978
4001
  const reducer = combineReducers({
3979
4002
  app: reducer$1
3980
4003
  });
4004
+ const FEATURE_ID = "preview";
4005
+ const previewAdmin = {
4006
+ bootstrap(app) {
4007
+ if (!window.strapi.future.isEnabled(FEATURE_ID)) {
4008
+ return {};
4009
+ }
4010
+ console.log("Bootstrapping preview admin");
4011
+ }
4012
+ };
3981
4013
  const index = {
3982
4014
  register(app) {
3983
4015
  const cm = new ContentManagerPlugin();
@@ -3997,7 +4029,7 @@ const index = {
3997
4029
  app.router.addRoute({
3998
4030
  path: "content-manager/*",
3999
4031
  lazy: async () => {
4000
- const { Layout } = await import("./layout-DaUjDiWQ.mjs");
4032
+ const { Layout } = await import("./layout-C-eg7m9Y.mjs");
4001
4033
  return {
4002
4034
  Component: Layout
4003
4035
  };
@@ -4010,11 +4042,14 @@ const index = {
4010
4042
  if (typeof historyAdmin.bootstrap === "function") {
4011
4043
  historyAdmin.bootstrap(app);
4012
4044
  }
4045
+ if (typeof previewAdmin.bootstrap === "function") {
4046
+ previewAdmin.bootstrap(app);
4047
+ }
4013
4048
  },
4014
4049
  async registerTrads({ locales }) {
4015
4050
  const importedTrads = await Promise.all(
4016
4051
  locales.map((locale) => {
4017
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => import("./ar-CCEVvqGG.mjs"), "./translations/ca.json": () => import("./ca-5U32ON2v.mjs"), "./translations/cs.json": () => import("./cs-CM2aBUar.mjs"), "./translations/de.json": () => import("./de-C72KDNOl.mjs"), "./translations/en.json": () => import("./en-C8YBvRrK.mjs"), "./translations/es.json": () => import("./es-CeXiYflN.mjs"), "./translations/eu.json": () => import("./eu-CdALomew.mjs"), "./translations/fr.json": () => import("./fr-CD9VFbPM.mjs"), "./translations/gu.json": () => import("./gu-CNpaMDpH.mjs"), "./translations/hi.json": () => import("./hi-Dwvd04m3.mjs"), "./translations/hu.json": () => import("./hu-CeYvaaO0.mjs"), "./translations/id.json": () => import("./id-BtwA9WJT.mjs"), "./translations/it.json": () => import("./it-BrVPqaf1.mjs"), "./translations/ja.json": () => import("./ja-CtsUxOvk.mjs"), "./translations/ko.json": () => import("./ko-HVQRlfUI.mjs"), "./translations/ml.json": () => import("./ml-BihZwQit.mjs"), "./translations/ms.json": () => import("./ms-m_WjyWx7.mjs"), "./translations/nl.json": () => import("./nl-D4R9gHx5.mjs"), "./translations/pl.json": () => import("./pl-sbx9mSt_.mjs"), "./translations/pt-BR.json": () => import("./pt-BR-C71iDxnh.mjs"), "./translations/pt.json": () => import("./pt-BsaFvS8-.mjs"), "./translations/ru.json": () => import("./ru-BE6A4Exp.mjs"), "./translations/sa.json": () => import("./sa-Dag0k-Z8.mjs"), "./translations/sk.json": () => import("./sk-BFg-R8qJ.mjs"), "./translations/sv.json": () => import("./sv-CUnfWGsh.mjs"), "./translations/th.json": () => import("./th-BqbI8lIT.mjs"), "./translations/tr.json": () => import("./tr-CgeK3wJM.mjs"), "./translations/uk.json": () => import("./uk-CR-zDhAY.mjs"), "./translations/vi.json": () => import("./vi-DUXIk_fw.mjs"), "./translations/zh-Hans.json": () => import("./zh-Hans-BPQcRIyH.mjs"), "./translations/zh.json": () => import("./zh-BWZspA60.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
4052
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => import("./ar-CCEVvqGG.mjs"), "./translations/ca.json": () => import("./ca-5U32ON2v.mjs"), "./translations/cs.json": () => import("./cs-CM2aBUar.mjs"), "./translations/de.json": () => import("./de-C72KDNOl.mjs"), "./translations/en.json": () => import("./en-DKV44jRb.mjs"), "./translations/es.json": () => import("./es-CeXiYflN.mjs"), "./translations/eu.json": () => import("./eu-CdALomew.mjs"), "./translations/fr.json": () => import("./fr-DxrTDLl6.mjs"), "./translations/gu.json": () => import("./gu-CNpaMDpH.mjs"), "./translations/hi.json": () => import("./hi-Dwvd04m3.mjs"), "./translations/hu.json": () => import("./hu-CeYvaaO0.mjs"), "./translations/id.json": () => import("./id-BtwA9WJT.mjs"), "./translations/it.json": () => import("./it-BrVPqaf1.mjs"), "./translations/ja.json": () => import("./ja-CtsUxOvk.mjs"), "./translations/ko.json": () => import("./ko-HVQRlfUI.mjs"), "./translations/ml.json": () => import("./ml-BihZwQit.mjs"), "./translations/ms.json": () => import("./ms-m_WjyWx7.mjs"), "./translations/nl.json": () => import("./nl-D4R9gHx5.mjs"), "./translations/pl.json": () => import("./pl-sbx9mSt_.mjs"), "./translations/pt-BR.json": () => import("./pt-BR-C71iDxnh.mjs"), "./translations/pt.json": () => import("./pt-BsaFvS8-.mjs"), "./translations/ru.json": () => import("./ru-BE6A4Exp.mjs"), "./translations/sa.json": () => import("./sa-Dag0k-Z8.mjs"), "./translations/sk.json": () => import("./sk-BFg-R8qJ.mjs"), "./translations/sv.json": () => import("./sv-CUnfWGsh.mjs"), "./translations/th.json": () => import("./th-BqbI8lIT.mjs"), "./translations/tr.json": () => import("./tr-CgeK3wJM.mjs"), "./translations/uk.json": () => import("./uk-CR-zDhAY.mjs"), "./translations/vi.json": () => import("./vi-DUXIk_fw.mjs"), "./translations/zh-Hans.json": () => import("./zh-Hans-BPQcRIyH.mjs"), "./translations/zh.json": () => import("./zh-BWZspA60.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
4018
4053
  return {
4019
4054
  data: prefixPluginTranslations(data, PLUGIN_ID),
4020
4055
  locale
@@ -4075,4 +4110,4 @@ export {
4075
4110
  capitalise as y,
4076
4111
  useUpdateContentTypeConfigurationMutation as z
4077
4112
  };
4078
- //# sourceMappingURL=index-C9HxCo5R.mjs.map
4113
+ //# sourceMappingURL=index-DUZzV11o.mjs.map