@strapi/content-manager 0.0.0-experimental.6d27139261823fc4b18da9f3c10b271d5010dbf0 → 0.0.0-experimental.702fcf7aec9be82c4485a8bd49e235293c37f022

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 (182) hide show
  1. package/dist/_chunks/{ComponentConfigurationPage-DyDkPajU.js → ComponentConfigurationPage-BaGEn2nd.js} +4 -4
  2. package/dist/_chunks/{ComponentConfigurationPage-DyDkPajU.js.map → ComponentConfigurationPage-BaGEn2nd.js.map} +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-9lRmRdIr.mjs → ComponentConfigurationPage-EIYRzIr6.mjs} +4 -4
  4. package/dist/_chunks/{ComponentConfigurationPage-9lRmRdIr.mjs.map → ComponentConfigurationPage-EIYRzIr6.mjs.map} +1 -1
  5. package/dist/_chunks/{EditConfigurationPage-DValmA0m.js → EditConfigurationPage-BQGdJb6Z.js} +4 -4
  6. package/dist/_chunks/{EditConfigurationPage-DValmA0m.js.map → EditConfigurationPage-BQGdJb6Z.js.map} +1 -1
  7. package/dist/_chunks/{EditConfigurationPage-Bk893vVY.mjs → EditConfigurationPage-ByaNUj_q.mjs} +4 -4
  8. package/dist/_chunks/{EditConfigurationPage-Bk893vVY.mjs.map → EditConfigurationPage-ByaNUj_q.mjs.map} +1 -1
  9. package/dist/_chunks/{EditViewPage-DiNFdFqP.mjs → EditViewPage-BgeC8L9X.mjs} +50 -10
  10. package/dist/_chunks/EditViewPage-BgeC8L9X.mjs.map +1 -0
  11. package/dist/_chunks/{EditViewPage-Dk7Eaft4.js → EditViewPage-s_qVLiC6.js} +49 -9
  12. package/dist/_chunks/EditViewPage-s_qVLiC6.js.map +1 -0
  13. package/dist/_chunks/{Field-DH2OaqUP.js → Field-0AdG2t0D.js} +100 -46
  14. package/dist/_chunks/Field-0AdG2t0D.js.map +1 -0
  15. package/dist/_chunks/{Field-Dv_HTFTa.mjs → Field-DbpDop_h.mjs} +96 -42
  16. package/dist/_chunks/Field-DbpDop_h.mjs.map +1 -0
  17. package/dist/_chunks/{Form-B_dUDizM.js → Form-BpC9hWi-.js} +16 -8
  18. package/dist/_chunks/Form-BpC9hWi-.js.map +1 -0
  19. package/dist/_chunks/{Form-Dy6P4HgH.mjs → Form-Xb-u04dn.mjs} +16 -8
  20. package/dist/_chunks/Form-Xb-u04dn.mjs.map +1 -0
  21. package/dist/_chunks/{History-DrwsD1Vc.mjs → History-DLl10NEN.mjs} +42 -99
  22. package/dist/_chunks/History-DLl10NEN.mjs.map +1 -0
  23. package/dist/_chunks/{History-BT4w83Oa.js → History-sJ61vusJ.js} +40 -97
  24. package/dist/_chunks/History-sJ61vusJ.js.map +1 -0
  25. package/dist/_chunks/{ListConfigurationPage-CuYrMcW3.js → ListConfigurationPage-C00guBjQ.js} +5 -4
  26. package/dist/_chunks/ListConfigurationPage-C00guBjQ.js.map +1 -0
  27. package/dist/_chunks/{ListConfigurationPage-BxIP0jRy.mjs → ListConfigurationPage-mbZQmEZ3.mjs} +6 -5
  28. package/dist/_chunks/ListConfigurationPage-mbZQmEZ3.mjs.map +1 -0
  29. package/dist/_chunks/{ListViewPage-BvpwNur7.js → ListViewPage-DDVpN1ql.js} +53 -19
  30. package/dist/_chunks/ListViewPage-DDVpN1ql.js.map +1 -0
  31. package/dist/_chunks/{ListViewPage-5a1vw-OK.mjs → ListViewPage-iRJ5AUjS.mjs} +49 -15
  32. package/dist/_chunks/ListViewPage-iRJ5AUjS.mjs.map +1 -0
  33. package/dist/_chunks/{NoContentTypePage-UqEiWKkM.js → NoContentTypePage-BvkII4H4.js} +2 -2
  34. package/dist/_chunks/{NoContentTypePage-UqEiWKkM.js.map → NoContentTypePage-BvkII4H4.js.map} +1 -1
  35. package/dist/_chunks/{NoContentTypePage-Bm6tRcd3.mjs → NoContentTypePage-DI8VWkVK.mjs} +2 -2
  36. package/dist/_chunks/{NoContentTypePage-Bm6tRcd3.mjs.map → NoContentTypePage-DI8VWkVK.mjs.map} +1 -1
  37. package/dist/_chunks/{NoPermissionsPage-C_vGRo8Q.js → NoPermissionsPage-BZjHQTpb.js} +2 -2
  38. package/dist/_chunks/{NoPermissionsPage-C_vGRo8Q.js.map → NoPermissionsPage-BZjHQTpb.js.map} +1 -1
  39. package/dist/_chunks/{NoPermissionsPage-BHPqn_tQ.mjs → NoPermissionsPage-DckHN3oZ.mjs} +2 -2
  40. package/dist/_chunks/{NoPermissionsPage-BHPqn_tQ.mjs.map → NoPermissionsPage-DckHN3oZ.mjs.map} +1 -1
  41. package/dist/_chunks/Preview-BDOUHeaW.mjs +267 -0
  42. package/dist/_chunks/Preview-BDOUHeaW.mjs.map +1 -0
  43. package/dist/_chunks/Preview-CS2aV-BU.js +286 -0
  44. package/dist/_chunks/Preview-CS2aV-BU.js.map +1 -0
  45. package/dist/_chunks/{Relations-CznVF6LS.js → Relations-DEIQO39t.js} +71 -35
  46. package/dist/_chunks/Relations-DEIQO39t.js.map +1 -0
  47. package/dist/_chunks/{Relations-C7fPyh5P.mjs → Relations-J-8HC3zX.mjs} +72 -36
  48. package/dist/_chunks/Relations-J-8HC3zX.mjs.map +1 -0
  49. package/dist/_chunks/{en-CbaIuYoB.mjs → en-CfIXaZf9.mjs} +25 -13
  50. package/dist/_chunks/{en-CbaIuYoB.mjs.map → en-CfIXaZf9.mjs.map} +1 -1
  51. package/dist/_chunks/{en-otD_UBJi.js → en-DTWPCdTS.js} +25 -13
  52. package/dist/_chunks/{en-otD_UBJi.js.map → en-DTWPCdTS.js.map} +1 -1
  53. package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
  54. package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
  55. package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
  56. package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
  57. package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
  58. package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
  59. package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
  60. package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
  61. package/dist/_chunks/{index-BJ6uTqLL.mjs → index-DzTs9ga-.mjs} +1122 -911
  62. package/dist/_chunks/index-DzTs9ga-.mjs.map +1 -0
  63. package/dist/_chunks/{index-D9UmmBcM.js → index-uXHSvmlw.js} +1118 -906
  64. package/dist/_chunks/index-uXHSvmlw.js.map +1 -0
  65. package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
  66. package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
  67. package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
  68. package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
  69. package/dist/_chunks/{layout-uomiIGbG.mjs → layout-BhIZkPuB.mjs} +5 -4
  70. package/dist/_chunks/{layout-uomiIGbG.mjs.map → layout-BhIZkPuB.mjs.map} +1 -1
  71. package/dist/_chunks/{layout-kfu5Wtix.js → layout-zA_F2rU4.js} +5 -4
  72. package/dist/_chunks/{layout-kfu5Wtix.js.map → layout-zA_F2rU4.js.map} +1 -1
  73. package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
  74. package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
  75. package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
  76. package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
  77. package/dist/_chunks/{relations-DiDufGSA.mjs → relations-BoCufH_z.mjs} +6 -7
  78. package/dist/_chunks/relations-BoCufH_z.mjs.map +1 -0
  79. package/dist/_chunks/{relations-DKENrxko.js → relations-DnUyZQaL.js} +6 -7
  80. package/dist/_chunks/relations-DnUyZQaL.js.map +1 -0
  81. package/dist/_chunks/{usePrev-B9w_-eYc.js → useDebounce-CtcjDB3L.js} +14 -1
  82. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -0
  83. package/dist/_chunks/useDebounce-DmuSJIF3.mjs +29 -0
  84. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -0
  85. package/dist/admin/index.js +2 -1
  86. package/dist/admin/index.js.map +1 -1
  87. package/dist/admin/index.mjs +4 -3
  88. package/dist/admin/src/exports.d.ts +1 -1
  89. package/dist/admin/src/hooks/useDocument.d.ts +32 -1
  90. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  91. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
  92. package/dist/admin/src/pages/EditView/components/Header.d.ts +11 -11
  93. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  94. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  95. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
  96. package/dist/admin/src/preview/constants.d.ts +1 -0
  97. package/dist/admin/src/preview/index.d.ts +4 -0
  98. package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
  99. package/dist/admin/src/preview/routes.d.ts +3 -0
  100. package/dist/admin/src/preview/services/preview.d.ts +3 -0
  101. package/dist/admin/src/router.d.ts +1 -1
  102. package/dist/admin/src/services/documents.d.ts +3 -1
  103. package/dist/server/index.js +378 -162
  104. package/dist/server/index.js.map +1 -1
  105. package/dist/server/index.mjs +378 -162
  106. package/dist/server/index.mjs.map +1 -1
  107. package/dist/server/src/bootstrap.d.ts.map +1 -1
  108. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  109. package/dist/server/src/controllers/index.d.ts.map +1 -1
  110. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  111. package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
  112. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  113. package/dist/server/src/history/services/history.d.ts.map +1 -1
  114. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  115. package/dist/server/src/history/services/utils.d.ts +2 -3
  116. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  117. package/dist/server/src/index.d.ts +4 -4
  118. package/dist/server/src/preview/constants.d.ts +2 -0
  119. package/dist/server/src/preview/constants.d.ts.map +1 -0
  120. package/dist/server/src/preview/controllers/index.d.ts +2 -0
  121. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  122. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  123. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  124. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  125. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  126. package/dist/server/src/preview/index.d.ts +4 -0
  127. package/dist/server/src/preview/index.d.ts.map +1 -0
  128. package/dist/server/src/preview/routes/index.d.ts +8 -0
  129. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  130. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  131. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  132. package/dist/server/src/preview/services/index.d.ts +15 -0
  133. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  134. package/dist/server/src/preview/services/preview-config.d.ts +30 -0
  135. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  136. package/dist/server/src/preview/services/preview.d.ts +12 -0
  137. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  138. package/dist/server/src/preview/utils.d.ts +18 -0
  139. package/dist/server/src/preview/utils.d.ts.map +1 -0
  140. package/dist/server/src/routes/index.d.ts.map +1 -1
  141. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  142. package/dist/server/src/services/document-metadata.d.ts +8 -8
  143. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  144. package/dist/server/src/services/index.d.ts +4 -4
  145. package/dist/server/src/services/index.d.ts.map +1 -1
  146. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  147. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  148. package/dist/server/src/utils/index.d.ts +2 -0
  149. package/dist/server/src/utils/index.d.ts.map +1 -1
  150. package/dist/shared/contracts/collection-types.d.ts +3 -1
  151. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  152. package/dist/shared/contracts/index.d.ts +1 -0
  153. package/dist/shared/contracts/index.d.ts.map +1 -1
  154. package/dist/shared/contracts/preview.d.ts +27 -0
  155. package/dist/shared/contracts/preview.d.ts.map +1 -0
  156. package/dist/shared/index.js +4 -0
  157. package/dist/shared/index.js.map +1 -1
  158. package/dist/shared/index.mjs +4 -0
  159. package/dist/shared/index.mjs.map +1 -1
  160. package/package.json +14 -14
  161. package/dist/_chunks/EditViewPage-DiNFdFqP.mjs.map +0 -1
  162. package/dist/_chunks/EditViewPage-Dk7Eaft4.js.map +0 -1
  163. package/dist/_chunks/Field-DH2OaqUP.js.map +0 -1
  164. package/dist/_chunks/Field-Dv_HTFTa.mjs.map +0 -1
  165. package/dist/_chunks/Form-B_dUDizM.js.map +0 -1
  166. package/dist/_chunks/Form-Dy6P4HgH.mjs.map +0 -1
  167. package/dist/_chunks/History-BT4w83Oa.js.map +0 -1
  168. package/dist/_chunks/History-DrwsD1Vc.mjs.map +0 -1
  169. package/dist/_chunks/ListConfigurationPage-BxIP0jRy.mjs.map +0 -1
  170. package/dist/_chunks/ListConfigurationPage-CuYrMcW3.js.map +0 -1
  171. package/dist/_chunks/ListViewPage-5a1vw-OK.mjs.map +0 -1
  172. package/dist/_chunks/ListViewPage-BvpwNur7.js.map +0 -1
  173. package/dist/_chunks/Relations-C7fPyh5P.mjs.map +0 -1
  174. package/dist/_chunks/Relations-CznVF6LS.js.map +0 -1
  175. package/dist/_chunks/index-BJ6uTqLL.mjs.map +0 -1
  176. package/dist/_chunks/index-D9UmmBcM.js.map +0 -1
  177. package/dist/_chunks/relations-DKENrxko.js.map +0 -1
  178. package/dist/_chunks/relations-DiDufGSA.mjs.map +0 -1
  179. package/dist/_chunks/usePrev-B9w_-eYc.js.map +0 -1
  180. package/dist/_chunks/usePrev-DH6iah0A.mjs +0 -16
  181. package/dist/_chunks/usePrev-DH6iah0A.mjs.map +0 -1
  182. package/strapi-server.js +0 -3
@@ -7,8 +7,8 @@ const designSystem = require("@strapi/design-system");
7
7
  const reactIntl = require("react-intl");
8
8
  const reactRouterDom = require("react-router-dom");
9
9
  const styledComponents = require("styled-components");
10
- const index = require("./index-D9UmmBcM.js");
11
- const Field = require("./Field-DH2OaqUP.js");
10
+ const index = require("./index-uXHSvmlw.js");
11
+ const Field = require("./Field-0AdG2t0D.js");
12
12
  function _interopNamespace(e) {
13
13
  if (e && e.__esModule)
14
14
  return e;
@@ -31,11 +31,20 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
31
31
  const useOnce = (effect) => React__namespace.useEffect(effect, emptyDeps);
32
32
  const emptyDeps = [];
33
33
  const FormLayout = ({ layout }) => {
34
+ const { formatMessage } = reactIntl.useIntl();
35
+ const { model } = index.useDoc();
34
36
  return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: layout.map((panel, index2) => {
35
37
  if (panel.some((row) => row.some((field) => field.type === "dynamiczone"))) {
36
38
  const [row] = panel;
37
39
  const [field] = row;
38
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 12, s: 12, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsx(Field.MemoizedInputRenderer, { ...field }) }) }, field.name);
40
+ const fieldWithTranslatedLabel = {
41
+ ...field,
42
+ label: formatMessage({
43
+ id: `content-manager.content-types.${model}.${field.name}`,
44
+ defaultMessage: field.label
45
+ })
46
+ };
47
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 12, s: 12, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsx(Field.MemoizedInputRenderer, { ...fieldWithTranslatedLabel }) }) }, field.name);
39
48
  }
40
49
  return /* @__PURE__ */ jsxRuntime.jsx(
41
50
  designSystem.Box,
@@ -49,6 +58,13 @@ const FormLayout = ({ layout }) => {
49
58
  paddingBottom: 6,
50
59
  borderColor: "neutral150",
51
60
  children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: panel.map((row, gridRowIndex) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
61
+ const fieldWithTranslatedLabel = {
62
+ ...field,
63
+ label: formatMessage({
64
+ id: `content-manager.content-types.${model}.${field.name}`,
65
+ defaultMessage: field.label
66
+ })
67
+ };
52
68
  return /* @__PURE__ */ jsxRuntime.jsx(
53
69
  designSystem.Grid.Item,
54
70
  {
@@ -57,7 +73,7 @@ const FormLayout = ({ layout }) => {
57
73
  xs: 12,
58
74
  direction: "column",
59
75
  alignItems: "stretch",
60
- children: /* @__PURE__ */ jsxRuntime.jsx(Field.MemoizedInputRenderer, { ...field })
76
+ children: /* @__PURE__ */ jsxRuntime.jsx(Field.MemoizedInputRenderer, { ...fieldWithTranslatedLabel })
61
77
  },
62
78
  field.name
63
79
  );
@@ -87,7 +103,8 @@ const EditViewPage = () => {
87
103
  components,
88
104
  collectionType,
89
105
  id,
90
- model
106
+ model,
107
+ hasError
91
108
  } = index.useDoc();
92
109
  const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;
93
110
  useOnce(() => {
@@ -118,6 +135,9 @@ const EditViewPage = () => {
118
135
  const form = document?.id ? document : Field.createDefaultForm(schema, components);
119
136
  return Field.transformDocument(schema, components)(form);
120
137
  }, [document, isCreatingDocument, isSingleType, schema, components]);
138
+ if (hasError) {
139
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
140
+ }
121
141
  if (isLoading && !document?.documentId) {
122
142
  return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
123
143
  }
@@ -129,16 +149,35 @@ const EditViewPage = () => {
129
149
  setQuery({ status: status2 }, "push", true);
130
150
  }
131
151
  };
132
- const documentTitle = mainField !== "id" && document?.[mainField] ? document[mainField] : "Untitled";
152
+ let documentTitle = "Untitled";
153
+ if (mainField !== "id" && document?.[mainField]) {
154
+ documentTitle = document[mainField];
155
+ } else if (isSingleType && schema?.info.displayName) {
156
+ documentTitle = schema.info.displayName;
157
+ }
158
+ const validateSync = (values, options) => {
159
+ const yupSchema = index.createYupSchema(schema?.attributes, components, {
160
+ status,
161
+ ...options
162
+ });
163
+ return yupSchema.validateSync(values, { abortEarly: false });
164
+ };
133
165
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { paddingLeft: 10, paddingRight: 10, children: [
134
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Title, { children: `${documentTitle}` }),
166
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Title, { children: documentTitle }),
135
167
  /* @__PURE__ */ jsxRuntime.jsx(
136
168
  strapiAdmin.Form,
137
169
  {
138
170
  disabled: hasDraftAndPublished && status === "published",
139
171
  initialValues,
140
172
  method: isCreatingDocument ? "POST" : "PUT",
141
- validationSchema: index.createYupSchema(schema?.attributes, components, { status }),
173
+ validate: (values, options) => {
174
+ const yupSchema = index.createYupSchema(schema?.attributes, components, {
175
+ status,
176
+ ...options
177
+ });
178
+ return yupSchema.validate(values, { abortEarly: false });
179
+ },
180
+ initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
142
181
  children: ({ resetForm }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
143
182
  /* @__PURE__ */ jsxRuntime.jsx(
144
183
  index.Header,
@@ -230,4 +269,5 @@ const ProtectedEditViewPage = () => {
230
269
  };
231
270
  exports.EditViewPage = EditViewPage;
232
271
  exports.ProtectedEditViewPage = ProtectedEditViewPage;
233
- //# sourceMappingURL=EditViewPage-Dk7Eaft4.js.map
272
+ exports.getDocumentStatus = getDocumentStatus;
273
+ //# sourceMappingURL=EditViewPage-s_qVLiC6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditViewPage-s_qVLiC6.js","sources":["../../admin/src/hooks/useOnce.ts","../../admin/src/pages/EditView/components/FormLayout.tsx","../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\nexport const useOnce = (effect: React.EffectCallback) => React.useEffect(effect, emptyDeps);\n\nconst emptyDeps: React.DependencyList = [];\n","import { Box, Flex, Grid } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { EditLayout } from '../../../hooks/useDocumentLayout';\n\nimport { InputRenderer } from './InputRenderer';\n\ninterface FormLayoutProps extends Pick<EditLayout, 'layout'> {}\n\nconst FormLayout = ({ layout }: FormLayoutProps) => {\n const { formatMessage } = useIntl();\n const { model } = useDoc();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((panel, index) => {\n if (panel.some((row) => row.some((field) => field.type === 'dynamiczone'))) {\n const [row] = panel;\n const [field] = row;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <Grid.Root key={field.name} gap={4}>\n <Grid.Item col={12} s={12} xs={12} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...fieldWithTranslatedLabel} />\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <Box\n key={index}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n borderColor=\"neutral150\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {panel.map((row, gridRowIndex) => (\n <Grid.Root key={gridRowIndex} gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n return (\n <Grid.Item\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...fieldWithTranslatedLabel} />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n ))}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n );\n};\n\nexport { FormLayout, FormLayoutProps };\n","import * as React from 'react';\n\nimport {\n Page,\n Blocker,\n Form,\n useRBAC,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Grid, Main, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { SINGLE_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDoc } from '../../hooks/useDocument';\nimport { useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useOnce } from '../../hooks/useOnce';\nimport { getTranslation } from '../../utils/translations';\nimport { createYupSchema } from '../../utils/validation';\n\nimport { FormLayout } from './components/FormLayout';\nimport { Header } from './components/Header';\nimport { Panels } from './components/Panels';\nimport { transformDocument } from './utils/data';\nimport { createDefaultForm } from './utils/forms';\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditViewPage = () => {\n const location = useLocation();\n const [\n {\n query: { status },\n },\n setQuery,\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const {\n document,\n meta,\n isLoading: isLoadingDocument,\n schema,\n components,\n collectionType,\n id,\n model,\n hasError,\n } = useDoc();\n\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'danger',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const isLoadingActionsRBAC = useDocumentRBAC('EditViewPage', (state) => state.isLoading);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n\n /**\n * single-types don't current have an id, but because they're a singleton\n * we can simply use the update operation to continuously update the same\n * document with varying params.\n */\n const isCreatingDocument = !id && !isSingleType;\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { mainField },\n },\n } = useDocumentLayout(model);\n\n const { isLazyLoading } = useLazyComponents([]);\n\n const isLoading = isLoadingActionsRBAC || isLoadingDocument || isLoadingLayout || isLazyLoading;\n\n /**\n * Here we prepare the form for editing, we need to:\n * - remove prohibited fields from the document (passwords | ADD YOURS WHEN THERES A NEW ONE)\n * - swap out count objects on relations for empty arrays\n * - set __temp_key__ on array objects for drag & drop\n *\n * We also prepare the form for new documents, so we need to:\n * - set default values on fields\n */\n const initialValues = React.useMemo(() => {\n if ((!document && !isCreatingDocument && !isSingleType) || !schema) {\n return undefined;\n }\n\n /**\n * Check that we have an ID so we know the\n * document has been created in some way.\n */\n const form = document?.id ? document : createDefaultForm(schema, components);\n\n return transformDocument(schema, components)(form);\n }, [document, isCreatingDocument, isSingleType, schema, components]);\n\n if (hasError) {\n return <Page.Error />;\n }\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues) {\n return <Page.Error />;\n }\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n /**\n * We look to see what the mainField is from the configuration, if it's an id\n * we don't use it because it's a uuid format and not very user friendly.\n * Instead, we display the schema name for single-type documents\n * or \"Untitled\".\n */\n let documentTitle = 'Untitled';\n if (mainField !== 'id' && document?.[mainField]) {\n documentTitle = document[mainField];\n } else if (isSingleType && schema?.info.displayName) {\n documentTitle = schema.info.displayName;\n }\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n return (\n <Main paddingLeft={10} paddingRight={10}>\n <Page.Title>{documentTitle}</Page.Title>\n <Form\n disabled={hasDraftAndPublished && status === 'published'}\n initialValues={initialValues}\n method={isCreatingDocument ? 'POST' : 'PUT'}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n >\n {({ resetForm }) => (\n <>\n <Header\n isCreating={isCreatingDocument}\n status={hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined}\n title={documentTitle}\n />\n <Tabs.Root variant=\"simple\" value={status} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: getTranslation('containers.edit.tabs.label'),\n defaultMessage: 'Document status',\n })}\n >\n {hasDraftAndPublished ? (\n <>\n <StatusTab value=\"draft\">\n {formatMessage({\n id: getTranslation('containers.edit.tabs.draft'),\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab\n disabled={!meta || meta.availableStatus.length === 0}\n value=\"published\"\n >\n {formatMessage({\n id: getTranslation('containers.edit.tabs.published'),\n defaultMessage: 'published',\n })}\n </StatusTab>\n </>\n ) : null}\n </Tabs.List>\n <Grid.Root paddingTop={8} gap={4}>\n <Grid.Item col={9} s={12} direction=\"column\" alignItems=\"stretch\">\n <Tabs.Content value=\"draft\">\n <FormLayout layout={layout} />\n </Tabs.Content>\n <Tabs.Content value=\"published\">\n <FormLayout layout={layout} />\n </Tabs.Content>\n </Grid.Item>\n <Grid.Item col={3} s={12} direction=\"column\" alignItems=\"stretch\">\n <Panels />\n </Grid.Item>\n </Grid.Root>\n </Tabs.Root>\n <Blocker\n // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284\n onProceed={resetForm}\n />\n </>\n )}\n </Form>\n </Main>\n );\n};\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\n/**\n * @internal\n * @description Returns the status of the document where its latest state takes priority,\n * this typically will be \"published\" unless a user has edited their draft in which we should\n * display \"modified\".\n */\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <EditViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { EditViewPage, ProtectedEditViewPage, getDocumentStatus };\n"],"names":["React","useIntl","useDoc","jsx","Flex","index","Grid","InputRenderer","Box","useLocation","useQueryParams","useNotification","useDocumentRBAC","SINGLE_TYPES","useDocumentLayout","useLazyComponents","createDefaultForm","transformDocument","Page","status","createYupSchema","jsxs","Main","Form","Fragment","Header","Tabs","getTranslation","Panels","Blocker","styled","useParams","useRBAC","PERMISSIONS","permissions","DocumentRBAC"],"mappings":"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"}
@@ -5,19 +5,19 @@ const strapiAdmin = require("@strapi/admin/strapi-admin");
5
5
  const designSystem = require("@strapi/design-system");
6
6
  const pipe$1 = require("lodash/fp/pipe");
7
7
  const reactIntl = require("react-intl");
8
- const index = require("./index-D9UmmBcM.js");
8
+ const index = require("./index-uXHSvmlw.js");
9
9
  const fractionalIndexing = require("fractional-indexing");
10
- const Relations = require("./Relations-CznVF6LS.js");
10
+ const Relations = require("./Relations-DEIQO39t.js");
11
11
  const Icons = require("@strapi/icons");
12
12
  const styledComponents = require("styled-components");
13
13
  const ComponentIcon = require("./ComponentIcon-BXdiCGQp.js");
14
14
  const reactDndHtml5Backend = require("react-dnd-html5-backend");
15
15
  const useDragAndDrop = require("./useDragAndDrop-J0TUUbR6.js");
16
- const objects = require("./objects-gigeqt7s.js");
16
+ const objects = require("./objects-BcXOv6_9.js");
17
17
  const slate = require("slate");
18
18
  const slateHistory = require("slate-history");
19
19
  const slateReact = require("slate-react");
20
- const usePrev = require("./usePrev-B9w_-eYc.js");
20
+ const useDebounce = require("./useDebounce-CtcjDB3L.js");
21
21
  const Toolbar = require("@radix-ui/react-toolbar");
22
22
  const reactRouterDom = require("react-router-dom");
23
23
  const CodeMirror = require("codemirror5");
@@ -768,7 +768,7 @@ const ImageDialog = () => {
768
768
  const nodeImage = {
769
769
  ...expectedImage,
770
770
  alternativeText: expectedImage.alternativeText || expectedImage.name,
771
- url: usePrev.prefixFileUrlWithBackendUrl(image.url)
771
+ url: useDebounce.prefixFileUrlWithBackendUrl(image.url)
772
772
  };
773
773
  return nodeImage;
774
774
  });
@@ -1783,6 +1783,7 @@ const DragItem = styledComponents.styled(designSystem.Flex)`
1783
1783
  }
1784
1784
  `;
1785
1785
  const DragIconButton = styledComponents.styled(designSystem.IconButton)`
1786
+ user-select: none;
1786
1787
  display: flex;
1787
1788
  align-items: center;
1788
1789
  justify-content: center;
@@ -1911,6 +1912,7 @@ const DragAndDropElement = ({
1911
1912
  DragIconButton,
1912
1913
  {
1913
1914
  tag: "div",
1915
+ contentEditable: false,
1914
1916
  role: "button",
1915
1917
  tabIndex: 0,
1916
1918
  withTooltip: false,
@@ -2668,7 +2670,7 @@ const Initializer = ({ disabled, name: name2, onClick }) => {
2668
2670
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(CircleIcon, {}) }),
2669
2671
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "primary600", variant: "pi", fontWeight: "bold", children: formatMessage({
2670
2672
  id: index.getTranslation("components.empty-repeatable"),
2671
- defaultMessage: "No entry yet. Click on the button below to add one."
2673
+ defaultMessage: "No entry yet. Click to add one."
2672
2674
  }) }) })
2673
2675
  ] })
2674
2676
  }
@@ -2690,6 +2692,7 @@ const NonRepeatableComponent = ({
2690
2692
  children,
2691
2693
  layout
2692
2694
  }) => {
2695
+ const { formatMessage } = reactIntl.useIntl();
2693
2696
  const { value } = strapiAdmin.useField(name2);
2694
2697
  const level = Relations.useComponent("NonRepeatableComponent", (state) => state.level);
2695
2698
  const isNested = level > 0;
@@ -2706,6 +2709,10 @@ const NonRepeatableComponent = ({
2706
2709
  children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: layout.map((row, index2) => {
2707
2710
  return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
2708
2711
  const completeFieldName = `${name2}.${field.name}`;
2712
+ const translatedLabel = formatMessage({
2713
+ id: `content-manager.components.${attribute.component}.${field.name}`,
2714
+ defaultMessage: field.label
2715
+ });
2709
2716
  return /* @__PURE__ */ jsxRuntime.jsx(
2710
2717
  designSystem.Grid.Item,
2711
2718
  {
@@ -2714,7 +2721,7 @@ const NonRepeatableComponent = ({
2714
2721
  xs: 12,
2715
2722
  direction: "column",
2716
2723
  alignItems: "stretch",
2717
- children: children({ ...field, name: completeFieldName })
2724
+ children: children({ ...field, label: translatedLabel, name: completeFieldName })
2718
2725
  },
2719
2726
  completeFieldName
2720
2727
  );
@@ -2736,13 +2743,34 @@ const RepeatableComponent = ({
2736
2743
  const { search: searchString } = reactRouterDom.useLocation();
2737
2744
  const search = React__namespace.useMemo(() => new URLSearchParams(searchString), [searchString]);
2738
2745
  const { components } = index.useDoc();
2739
- const { value = [], error } = strapiAdmin.useField(name2);
2746
+ const {
2747
+ value = [],
2748
+ error,
2749
+ rawError
2750
+ } = strapiAdmin.useField(name2);
2740
2751
  const addFieldRow = strapiAdmin.useForm("RepeatableComponent", (state) => state.addFieldRow);
2741
2752
  const moveFieldRow = strapiAdmin.useForm("RepeatableComponent", (state) => state.moveFieldRow);
2742
2753
  const removeFieldRow = strapiAdmin.useForm("RepeatableComponent", (state) => state.removeFieldRow);
2743
2754
  const { max = Infinity } = attribute;
2744
2755
  const [collapseToOpen, setCollapseToOpen] = React__namespace.useState("");
2745
2756
  const [liveText, setLiveText] = React__namespace.useState("");
2757
+ React__namespace.useEffect(() => {
2758
+ const hasNestedErrors = rawError && Array.isArray(rawError) && rawError.length > 0;
2759
+ const hasNestedValue = value && Array.isArray(value) && value.length > 0;
2760
+ if (hasNestedErrors && hasNestedValue) {
2761
+ const errorOpenItems = rawError.map((_, idx) => {
2762
+ return value[idx] ? value[idx].__temp_key__ : null;
2763
+ }).filter((value2) => !!value2);
2764
+ if (errorOpenItems && errorOpenItems.length > 0) {
2765
+ setCollapseToOpen((collapseToOpen2) => {
2766
+ if (!errorOpenItems.includes(collapseToOpen2)) {
2767
+ return errorOpenItems[0];
2768
+ }
2769
+ return collapseToOpen2;
2770
+ });
2771
+ }
2772
+ }
2773
+ }, [rawError, value]);
2746
2774
  const componentTmpKeyWithFocussedField = React__namespace.useMemo(() => {
2747
2775
  if (search.has("field")) {
2748
2776
  const fieldParam = search.get("field");
@@ -2757,7 +2785,7 @@ const RepeatableComponent = ({
2757
2785
  }
2758
2786
  return void 0;
2759
2787
  }, [search, name2, value]);
2760
- const prevValue = usePrev.usePrev(value);
2788
+ const prevValue = useDebounce.usePrev(value);
2761
2789
  React__namespace.useEffect(() => {
2762
2790
  if (prevValue && prevValue.length < value.length) {
2763
2791
  setCollapseToOpen(value[value.length - 1].__temp_key__);
@@ -2895,6 +2923,10 @@ const RepeatableComponent = ({
2895
2923
  children: layout.map((row, index22) => {
2896
2924
  return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
2897
2925
  const completeFieldName = `${nameWithIndex}.${field.name}`;
2926
+ const translatedLabel = formatMessage({
2927
+ id: `content-manager.components.${attribute.component}.${field.name}`,
2928
+ defaultMessage: field.label
2929
+ });
2898
2930
  return /* @__PURE__ */ jsxRuntime.jsx(
2899
2931
  designSystem.Grid.Item,
2900
2932
  {
@@ -2903,7 +2935,11 @@ const RepeatableComponent = ({
2903
2935
  xs: 12,
2904
2936
  direction: "column",
2905
2937
  alignItems: "stretch",
2906
- children: children({ ...field, name: completeFieldName })
2938
+ children: children({
2939
+ ...field,
2940
+ label: translatedLabel,
2941
+ name: completeFieldName
2942
+ })
2907
2943
  },
2908
2944
  completeFieldName
2909
2945
  );
@@ -3290,18 +3326,6 @@ const NotAllowedInput = ({ hint, label, required, name: name2 }) => {
3290
3326
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Hint, {})
3291
3327
  ] });
3292
3328
  };
3293
- function useDebounce(value, delay) {
3294
- const [debouncedValue, setDebouncedValue] = React.useState(value);
3295
- React.useEffect(() => {
3296
- const handler = setTimeout(() => {
3297
- setDebouncedValue(value);
3298
- }, delay);
3299
- return () => {
3300
- clearTimeout(handler);
3301
- };
3302
- }, [value, delay]);
3303
- return debouncedValue;
3304
- }
3305
3329
  const uidApi = index.contentManagerApi.injectEndpoints({
3306
3330
  endpoints: (builder) => ({
3307
3331
  getDefaultUID: builder.query({
@@ -3353,7 +3377,7 @@ const UIDInput = React__namespace.forwardRef(
3353
3377
  const [showRegenerate, setShowRegenerate] = React__namespace.useState(false);
3354
3378
  const isCloning = reactRouterDom.useMatch(index.CLONE_PATH) !== null;
3355
3379
  const field = strapiAdmin.useField(name2);
3356
- const debouncedValue = useDebounce(field.value, 300);
3380
+ const debouncedValue = useDebounce.useDebounce(field.value, 300);
3357
3381
  const hasChanged = debouncedValue !== field.initialValue;
3358
3382
  const { toggleNotification } = strapiAdmin.useNotification();
3359
3383
  const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
@@ -4910,7 +4934,7 @@ const Wysiwyg = React__namespace.forwardRef(
4910
4934
  const handleSelectAssets = (files) => {
4911
4935
  const formattedFiles = files.map((f) => ({
4912
4936
  alt: f.alternativeText || f.name,
4913
- url: usePrev.prefixFileUrlWithBackendUrl(f.url),
4937
+ url: useDebounce.prefixFileUrlWithBackendUrl(f.url),
4914
4938
  mime: f.mime
4915
4939
  }));
4916
4940
  insertFile(editorRef, formattedFiles);
@@ -4969,15 +4993,19 @@ const Wysiwyg = React__namespace.forwardRef(
4969
4993
  );
4970
4994
  const MemoizedWysiwyg = React__namespace.memo(Wysiwyg);
4971
4995
  const InputRenderer = ({ visible, hint: providedHint, ...props }) => {
4972
- const { id } = index.useDoc();
4996
+ const { id, document: document2, collectionType } = index.useDoc();
4973
4997
  const isFormDisabled = strapiAdmin.useForm("InputRenderer", (state) => state.disabled);
4974
4998
  const isInDynamicZone = useDynamicZone("isInDynamicZone", (state) => state.isInDynamicZone);
4975
4999
  const canCreateFields = index.useDocumentRBAC("InputRenderer", (rbac) => rbac.canCreateFields);
4976
5000
  const canReadFields = index.useDocumentRBAC("InputRenderer", (rbac) => rbac.canReadFields);
4977
5001
  const canUpdateFields = index.useDocumentRBAC("InputRenderer", (rbac) => rbac.canUpdateFields);
4978
5002
  const canUserAction = index.useDocumentRBAC("InputRenderer", (rbac) => rbac.canUserAction);
4979
- const editableFields = id ? canUpdateFields : canCreateFields;
4980
- const readableFields = id ? canReadFields : canCreateFields;
5003
+ let idToCheck = id;
5004
+ if (collectionType === index.SINGLE_TYPES) {
5005
+ idToCheck = document2?.documentId;
5006
+ }
5007
+ const editableFields = idToCheck ? canUpdateFields : canCreateFields;
5008
+ const readableFields = idToCheck ? canReadFields : canCreateFields;
4981
5009
  const canUserReadField = canUserAction(props.name, readableFields, props.type);
4982
5010
  const canUserEditField = canUserAction(props.name, editableFields, props.type);
4983
5011
  const fields = strapiAdmin.useStrapiApp("InputRenderer", (app) => app.fields);
@@ -4988,6 +5016,7 @@ const InputRenderer = ({ visible, hint: providedHint, ...props }) => {
4988
5016
  const {
4989
5017
  edit: { components }
4990
5018
  } = index.useDocLayout();
5019
+ const field = strapiAdmin.useField(props.name);
4991
5020
  if (!visible) {
4992
5021
  return null;
4993
5022
  }
@@ -4998,7 +5027,7 @@ const InputRenderer = ({ visible, hint: providedHint, ...props }) => {
4998
5027
  if (attributeHasCustomFieldProperty(props.attribute)) {
4999
5028
  const CustomInput = lazyComponentStore[props.attribute.customField];
5000
5029
  if (CustomInput) {
5001
- return /* @__PURE__ */ jsxRuntime.jsx(CustomInput, { ...props, hint, disabled: fieldIsDisabled });
5030
+ return /* @__PURE__ */ jsxRuntime.jsx(CustomInput, { ...props, ...field, hint, disabled: fieldIsDisabled });
5002
5031
  }
5003
5032
  return /* @__PURE__ */ jsxRuntime.jsx(
5004
5033
  strapiAdmin.InputRenderer,
@@ -5159,6 +5188,14 @@ const DynamicComponent = ({
5159
5188
  React__namespace.useEffect(() => {
5160
5189
  dragPreviewRef(reactDndHtml5Backend.getEmptyImage(), { captureDraggingState: false });
5161
5190
  }, [dragPreviewRef, index$1]);
5191
+ const accordionValue = React__namespace.useId();
5192
+ const { value = [], rawError } = strapiAdmin.useField(`${name2}.${index$1}`);
5193
+ const [collapseToOpen, setCollapseToOpen] = React__namespace.useState("");
5194
+ React__namespace.useEffect(() => {
5195
+ if (rawError && value) {
5196
+ setCollapseToOpen(accordionValue);
5197
+ }
5198
+ }, [rawError, value, accordionValue]);
5162
5199
  const composedBoxRefs = designSystem.useComposedRefs(boxRef, dropRef);
5163
5200
  const accordionActions = disabled ? null : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5164
5201
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -5224,10 +5261,9 @@ const DynamicComponent = ({
5224
5261
  ] })
5225
5262
  ] });
5226
5263
  const accordionTitle = title ? `${displayName} ${title}` : displayName;
5227
- const accordionValue = React__namespace.useId();
5228
5264
  return /* @__PURE__ */ jsxRuntime.jsxs(ComponentContainer, { tag: "li", width: "100%", children: [
5229
5265
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Rectangle, { background: "neutral200" }) }),
5230
- /* @__PURE__ */ jsxRuntime.jsx(StyledBox, { ref: composedBoxRefs, hasRadius: true, children: isDragging ? /* @__PURE__ */ jsxRuntime.jsx(Preview, {}) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Root, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: accordionValue, children: [
5266
+ /* @__PURE__ */ jsxRuntime.jsx(StyledBox, { ref: composedBoxRefs, hasRadius: true, children: isDragging ? /* @__PURE__ */ jsxRuntime.jsx(Preview, {}) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Root, { value: collapseToOpen, onValueChange: setCollapseToOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: accordionValue, children: [
5231
5267
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Header, { children: [
5232
5268
  /* @__PURE__ */ jsxRuntime.jsx(
5233
5269
  designSystem.Accordion.Trigger,
@@ -5238,21 +5274,39 @@ const DynamicComponent = ({
5238
5274
  ),
5239
5275
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Actions, { children: accordionActions })
5240
5276
  ] }),
5241
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(AccordionContentRadius, { background: "neutral0", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 6, paddingRight: 6, paddingTop: 6, paddingBottom: 6, children: components[componentUid]?.layout?.map((row, rowInd) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
5242
- const fieldName = `${name2}.${index$1}.${field.name}`;
5243
- return /* @__PURE__ */ jsxRuntime.jsx(
5244
- designSystem.Grid.Item,
5245
- {
5246
- col: size,
5247
- s: 12,
5248
- xs: 12,
5249
- direction: "column",
5250
- alignItems: "stretch",
5251
- children: /* @__PURE__ */ jsxRuntime.jsx(MemoizedInputRenderer, { ...field, name: fieldName })
5252
- },
5253
- fieldName
5254
- );
5255
- }) }, rowInd)) }) }) })
5277
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(AccordionContentRadius, { background: "neutral0", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 6, paddingRight: 6, paddingTop: 6, paddingBottom: 6, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: components[componentUid]?.layout?.map((row, rowInd) => /* @__PURE__ */ jsxRuntime.jsx(
5278
+ designSystem.Grid.Item,
5279
+ {
5280
+ col: 12,
5281
+ s: 12,
5282
+ xs: 12,
5283
+ direction: "column",
5284
+ alignItems: "stretch",
5285
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
5286
+ const fieldName = `${name2}.${index$1}.${field.name}`;
5287
+ const fieldWithTranslatedLabel = {
5288
+ ...field,
5289
+ label: formatMessage({
5290
+ id: `content-manager.components.${componentUid}.${field.name}`,
5291
+ defaultMessage: field.label
5292
+ })
5293
+ };
5294
+ return /* @__PURE__ */ jsxRuntime.jsx(
5295
+ designSystem.Grid.Item,
5296
+ {
5297
+ col: size,
5298
+ s: 12,
5299
+ xs: 12,
5300
+ direction: "column",
5301
+ alignItems: "stretch",
5302
+ children: /* @__PURE__ */ jsxRuntime.jsx(MemoizedInputRenderer, { ...fieldWithTranslatedLabel, name: fieldName })
5303
+ },
5304
+ fieldName
5305
+ );
5306
+ }) })
5307
+ },
5308
+ rowInd
5309
+ )) }) }) }) })
5256
5310
  ] }) }) })
5257
5311
  ] });
5258
5312
  };
@@ -5558,4 +5612,4 @@ exports.transformDocument = transformDocument;
5558
5612
  exports.useDynamicZone = useDynamicZone;
5559
5613
  exports.useFieldHint = useFieldHint;
5560
5614
  exports.useLazyComponents = useLazyComponents;
5561
- //# sourceMappingURL=Field-DH2OaqUP.js.map
5615
+ //# sourceMappingURL=Field-0AdG2t0D.js.map