@strapi/content-manager 0.0.0-experimental.7d94d6f1299d54c2aa90675f15b27b5c463aacc7 → 0.0.0-experimental.7e6bb2fc6f3829ba115d567243904f12fc9d3cb2

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 (266) hide show
  1. package/dist/admin/components/ConfigurationForm/Fields.js +300 -204
  2. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.mjs +304 -209
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/components/Widgets.js +161 -0
  6. package/dist/admin/components/Widgets.js.map +1 -0
  7. package/dist/admin/components/Widgets.mjs +158 -0
  8. package/dist/admin/components/Widgets.mjs.map +1 -0
  9. package/dist/admin/history/components/VersionContent.js +24 -3
  10. package/dist/admin/history/components/VersionContent.js.map +1 -1
  11. package/dist/admin/history/components/VersionContent.mjs +25 -4
  12. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  13. package/dist/admin/history/components/VersionHeader.js +6 -0
  14. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  15. package/dist/admin/history/components/VersionHeader.mjs +7 -1
  16. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  17. package/dist/admin/hooks/useDocumentActions.js +12 -4
  18. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  19. package/dist/admin/hooks/useDocumentActions.mjs +12 -4
  20. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  21. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  22. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  23. package/dist/admin/index.js +42 -5
  24. package/dist/admin/index.js.map +1 -1
  25. package/dist/admin/index.mjs +42 -3
  26. package/dist/admin/index.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/EditViewPage.js +92 -75
  28. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  29. package/dist/admin/pages/EditView/EditViewPage.mjs +93 -76
  30. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/DocumentActions.js +263 -75
  32. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.mjs +266 -78
  34. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +61 -26
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +15 -2
  56. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +16 -3
  58. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +18 -5
  60. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +20 -7
  62. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +128 -55
  64. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +128 -55
  66. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +120 -32
  68. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +124 -36
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/UID.js +4 -2
  72. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +4 -2
  74. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  78. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  80. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  82. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  84. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  86. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormLayout.js +47 -27
  88. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormLayout.mjs +47 -27
  90. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/utils/data.js +103 -0
  92. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  93. package/dist/admin/pages/EditView/utils/data.mjs +103 -1
  94. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  95. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  96. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  97. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  98. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  99. package/dist/admin/pages/ListView/components/Filters.js +1 -0
  100. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  101. package/dist/admin/pages/ListView/components/Filters.mjs +1 -0
  102. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  103. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  104. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  105. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  106. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  107. package/dist/admin/preview/components/PreviewHeader.js +1 -1
  108. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  109. package/dist/admin/preview/components/PreviewHeader.mjs +1 -1
  110. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  111. package/dist/admin/services/documents.js +2 -2
  112. package/dist/admin/services/documents.js.map +1 -1
  113. package/dist/admin/services/documents.mjs +2 -2
  114. package/dist/admin/services/documents.mjs.map +1 -1
  115. package/dist/admin/services/homepage.js +30 -0
  116. package/dist/admin/services/homepage.js.map +1 -0
  117. package/dist/admin/services/homepage.mjs +28 -0
  118. package/dist/admin/services/homepage.mjs.map +1 -0
  119. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  120. package/dist/admin/src/components/Widgets.d.ts +3 -0
  121. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  122. package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
  123. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  124. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +26 -5
  125. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  126. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -8
  127. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  128. package/dist/admin/src/services/documents.d.ts +7 -1
  129. package/dist/admin/src/services/homepage.d.ts +5 -0
  130. package/dist/admin/src/utils/validation.d.ts +1 -0
  131. package/dist/admin/translations/en.json.js +3 -1
  132. package/dist/admin/translations/en.json.js.map +1 -1
  133. package/dist/admin/translations/en.json.mjs +3 -1
  134. package/dist/admin/translations/en.json.mjs.map +1 -1
  135. package/dist/admin/translations/fr.json.js +6 -1
  136. package/dist/admin/translations/fr.json.js.map +1 -1
  137. package/dist/admin/translations/fr.json.mjs +6 -1
  138. package/dist/admin/translations/fr.json.mjs.map +1 -1
  139. package/dist/admin/translations/ru.json.js +235 -226
  140. package/dist/admin/translations/ru.json.js.map +1 -1
  141. package/dist/admin/translations/ru.json.mjs +230 -226
  142. package/dist/admin/translations/ru.json.mjs.map +1 -1
  143. package/dist/admin/utils/validation.js +17 -6
  144. package/dist/admin/utils/validation.js.map +1 -1
  145. package/dist/admin/utils/validation.mjs +17 -6
  146. package/dist/admin/utils/validation.mjs.map +1 -1
  147. package/dist/server/controllers/content-types.js +11 -1
  148. package/dist/server/controllers/content-types.js.map +1 -1
  149. package/dist/server/controllers/content-types.mjs +11 -1
  150. package/dist/server/controllers/content-types.mjs.map +1 -1
  151. package/dist/server/controllers/index.js +3 -1
  152. package/dist/server/controllers/index.js.map +1 -1
  153. package/dist/server/controllers/index.mjs +3 -1
  154. package/dist/server/controllers/index.mjs.map +1 -1
  155. package/dist/server/controllers/validation/index.js +14 -2
  156. package/dist/server/controllers/validation/index.js.map +1 -1
  157. package/dist/server/controllers/validation/index.mjs +14 -2
  158. package/dist/server/controllers/validation/index.mjs.map +1 -1
  159. package/dist/server/history/services/lifecycles.js +3 -0
  160. package/dist/server/history/services/lifecycles.js.map +1 -1
  161. package/dist/server/history/services/lifecycles.mjs +3 -0
  162. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  163. package/dist/server/homepage/controllers/homepage.js +57 -0
  164. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  165. package/dist/server/homepage/controllers/homepage.mjs +36 -0
  166. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  167. package/dist/server/homepage/controllers/index.js +10 -0
  168. package/dist/server/homepage/controllers/index.js.map +1 -0
  169. package/dist/server/homepage/controllers/index.mjs +8 -0
  170. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  171. package/dist/server/homepage/index.js +14 -0
  172. package/dist/server/homepage/index.js.map +1 -0
  173. package/dist/server/homepage/index.mjs +12 -0
  174. package/dist/server/homepage/index.mjs.map +1 -0
  175. package/dist/server/homepage/routes/homepage.js +25 -0
  176. package/dist/server/homepage/routes/homepage.js.map +1 -0
  177. package/dist/server/homepage/routes/homepage.mjs +23 -0
  178. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  179. package/dist/server/homepage/routes/index.js +13 -0
  180. package/dist/server/homepage/routes/index.js.map +1 -0
  181. package/dist/server/homepage/routes/index.mjs +11 -0
  182. package/dist/server/homepage/routes/index.mjs.map +1 -0
  183. package/dist/server/homepage/services/homepage.js +157 -0
  184. package/dist/server/homepage/services/homepage.js.map +1 -0
  185. package/dist/server/homepage/services/homepage.mjs +155 -0
  186. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  187. package/dist/server/homepage/services/index.js +10 -0
  188. package/dist/server/homepage/services/index.js.map +1 -0
  189. package/dist/server/homepage/services/index.mjs +8 -0
  190. package/dist/server/homepage/services/index.mjs.map +1 -0
  191. package/dist/server/preview/services/preview.js +0 -1
  192. package/dist/server/preview/services/preview.js.map +1 -1
  193. package/dist/server/preview/services/preview.mjs +0 -1
  194. package/dist/server/preview/services/preview.mjs.map +1 -1
  195. package/dist/server/routes/index.js +3 -1
  196. package/dist/server/routes/index.js.map +1 -1
  197. package/dist/server/routes/index.mjs +3 -1
  198. package/dist/server/routes/index.mjs.map +1 -1
  199. package/dist/server/services/data-mapper.js +4 -1
  200. package/dist/server/services/data-mapper.js.map +1 -1
  201. package/dist/server/services/data-mapper.mjs +4 -1
  202. package/dist/server/services/data-mapper.mjs.map +1 -1
  203. package/dist/server/services/document-manager.js +8 -1
  204. package/dist/server/services/document-manager.js.map +1 -1
  205. package/dist/server/services/document-manager.mjs +8 -1
  206. package/dist/server/services/document-manager.mjs.map +1 -1
  207. package/dist/server/services/document-metadata.js +3 -1
  208. package/dist/server/services/document-metadata.js.map +1 -1
  209. package/dist/server/services/document-metadata.mjs +3 -1
  210. package/dist/server/services/document-metadata.mjs.map +1 -1
  211. package/dist/server/services/index.js +3 -1
  212. package/dist/server/services/index.js.map +1 -1
  213. package/dist/server/services/index.mjs +3 -1
  214. package/dist/server/services/index.mjs.map +1 -1
  215. package/dist/server/services/utils/configuration/attributes.js +1 -1
  216. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  217. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  218. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  219. package/dist/server/services/utils/configuration/layouts.js +1 -1
  220. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  221. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  222. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  223. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  224. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  225. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  226. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  227. package/dist/server/services/utils/populate.js +11 -0
  228. package/dist/server/services/utils/populate.js.map +1 -1
  229. package/dist/server/services/utils/populate.mjs +11 -0
  230. package/dist/server/services/utils/populate.mjs.map +1 -1
  231. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  232. package/dist/server/src/controllers/index.d.ts.map +1 -1
  233. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  234. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  235. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  236. package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
  237. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  238. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  239. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  240. package/dist/server/src/homepage/index.d.ts +16 -0
  241. package/dist/server/src/homepage/index.d.ts.map +1 -0
  242. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  243. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  244. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  245. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  246. package/dist/server/src/homepage/services/homepage.d.ts +11 -0
  247. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  248. package/dist/server/src/homepage/services/index.d.ts +9 -0
  249. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  250. package/dist/server/src/index.d.ts +7 -0
  251. package/dist/server/src/index.d.ts.map +1 -1
  252. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  253. package/dist/server/src/routes/index.d.ts +1 -0
  254. package/dist/server/src/routes/index.d.ts.map +1 -1
  255. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  256. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  257. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  258. package/dist/server/src/services/index.d.ts +6 -0
  259. package/dist/server/src/services/index.d.ts.map +1 -1
  260. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  261. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  262. package/dist/shared/contracts/collection-types.d.ts +0 -1
  263. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  264. package/dist/shared/contracts/homepage.d.ts +25 -0
  265. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  266. package/package.json +11 -8
@@ -1,7 +1,7 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useForm, useField } from '@strapi/admin/strapi-admin';
4
- import { Box, useComposedRefs, IconButton, Menu, MenuItem, Flex, Accordion, Grid } from '@strapi/design-system';
3
+ import { useForm, createRulesEngine, useField } from '@strapi/admin/strapi-admin';
4
+ import { Box, useComposedRefs, IconButton, Menu, Flex, Accordion, Grid } from '@strapi/design-system';
5
5
  import { Trash, Drag, More } from '@strapi/icons';
6
6
  import { getEmptyImage } from 'react-dnd-html5-backend';
7
7
  import { useIntl } from 'react-intl';
@@ -20,6 +20,7 @@ const DynamicComponent = ({ componentUid, disabled, index, name, onRemoveCompone
20
20
  const { formatMessage } = useIntl();
21
21
  const formValues = useForm('DynamicComponent', (state)=>state.values);
22
22
  const { currentDocument, currentDocumentMeta } = useDocumentContext('DynamicComponent');
23
+ const rulesEngine = createRulesEngine();
23
24
  const { edit: { components } } = useDocumentLayout(currentDocumentMeta.model);
24
25
  const title = React.useMemo(()=>{
25
26
  const { mainField } = components[componentUid]?.settings ?? {
@@ -148,7 +149,7 @@ const DynamicComponent = ({ componentUid, disabled, index, name, onRemoveCompone
148
149
  /*#__PURE__*/ jsx(Menu.Label, {
149
150
  children: category
150
151
  }),
151
- components.map(({ displayName, uid })=>/*#__PURE__*/ jsx(MenuItem, {
152
+ components.map(({ displayName, uid })=>/*#__PURE__*/ jsx(Menu.Item, {
152
153
  onSelect: ()=>onAddComponent(uid, index),
153
154
  children: displayName
154
155
  }, componentUid))
@@ -171,7 +172,7 @@ const DynamicComponent = ({ componentUid, disabled, index, name, onRemoveCompone
171
172
  /*#__PURE__*/ jsx(Menu.Label, {
172
173
  children: category
173
174
  }),
174
- components.map(({ displayName, uid })=>/*#__PURE__*/ jsx(MenuItem, {
175
+ components.map(({ displayName, uid })=>/*#__PURE__*/ jsx(Menu.Item, {
175
176
  onSelect: ()=>onAddComponent(uid, index + 1),
176
177
  children: displayName
177
178
  }, componentUid))
@@ -227,7 +228,18 @@ const DynamicComponent = ({ componentUid, disabled, index, name, onRemoveCompone
227
228
  paddingBottom: 6,
228
229
  children: /*#__PURE__*/ jsx(Grid.Root, {
229
230
  gap: 4,
230
- children: components[componentUid]?.layout?.map((row, rowInd)=>/*#__PURE__*/ jsx(Grid.Item, {
231
+ children: components[componentUid]?.layout?.map((row, rowInd)=>{
232
+ const visibleFields = row.filter(({ ...field })=>{
233
+ const condition = field.attribute.conditions?.visible;
234
+ if (condition) {
235
+ return rulesEngine.evaluate(condition, value);
236
+ }
237
+ return true;
238
+ });
239
+ if (visibleFields.length === 0) {
240
+ return null; // Skip rendering the entire grid row
241
+ }
242
+ return /*#__PURE__*/ jsx(Grid.Item, {
231
243
  col: 12,
232
244
  s: 12,
233
245
  xs: 12,
@@ -235,7 +247,7 @@ const DynamicComponent = ({ componentUid, disabled, index, name, onRemoveCompone
235
247
  alignItems: "stretch",
236
248
  children: /*#__PURE__*/ jsx(ResponsiveGridRoot, {
237
249
  gap: 4,
238
- children: row.map(({ size, ...field })=>{
250
+ children: visibleFields.map(({ size, ...field })=>{
239
251
  const fieldName = `${name}.${index}.${field.name}`;
240
252
  const fieldWithTranslatedLabel = {
241
253
  ...field,
@@ -262,7 +274,8 @@ const DynamicComponent = ({ componentUid, disabled, index, name, onRemoveCompone
262
274
  }, fieldName);
263
275
  })
264
276
  })
265
- }, rowInd))
277
+ }, rowInd);
278
+ })
266
279
  })
267
280
  })
268
281
  })
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicComponent.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, useField } from '@strapi/admin/strapi-admin';\nimport {\n Accordion,\n Box,\n Flex,\n Grid,\n IconButton,\n useComposedRefs,\n Menu,\n MenuItem,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Drag, More, Trash } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { COMPONENT_ICONS } from '../../../../../components/ComponentIcon';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../../../../hooks/useDragAndDrop';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { InputRenderer, type InputRendererProps } from '../../InputRenderer';\n\nimport type { ComponentPickerProps } from './ComponentPicker';\n\ninterface DynamicComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel'>,\n Pick<ComponentPickerProps, 'dynamicComponentsByCategory'> {\n componentUid: string;\n disabled?: boolean;\n index: number;\n name: string;\n onAddComponent: (componentUid: string, index: number) => void;\n onRemoveComponentClick: () => void;\n onMoveComponent: (dragIndex: number, hoverIndex: number) => void;\n children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicComponent = ({\n componentUid,\n disabled,\n index,\n name,\n onRemoveComponentClick,\n onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n dynamicComponentsByCategory = {},\n onAddComponent,\n children,\n}: DynamicComponentProps) => {\n const { formatMessage } = useIntl();\n const formValues = useForm('DynamicComponent', (state) => state.values);\n const { currentDocument, currentDocumentMeta } = useDocumentContext('DynamicComponent');\n\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const title = React.useMemo(() => {\n const { mainField } = components[componentUid]?.settings ?? { mainField: 'id' };\n\n const mainFieldValue = getIn(formValues, `${name}.${index}.${mainField}`);\n\n const displayedValue =\n mainField === 'id' || !mainFieldValue ? '' : String(mainFieldValue).trim();\n\n const mainValue = displayedValue.length > 0 ? `- ${displayedValue}` : displayedValue;\n\n return mainValue;\n }, [componentUid, components, formValues, name, index]);\n\n const { icon, displayName } = React.useMemo(() => {\n const [category] = componentUid.split('.');\n const { icon, displayName } = (dynamicComponentsByCategory[category] ?? []).find(\n (component) => component.uid === componentUid\n ) ?? { icon: null, displayName: null };\n\n return { icon, displayName };\n }, [componentUid, dynamicComponentsByCategory]);\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.DYNAMIC_ZONE}_${name}`,\n index,\n item: {\n index,\n displayedValue: `${displayName} ${title}`,\n icon,\n },\n onMoveItem: onMoveComponent,\n onDropItem,\n onGrabItem,\n onCancel,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n /**\n * We don't need the accordion's to communicate with each other,\n * so a unique value for their state is enough.\n */\n const accordionValue = React.useId();\n\n const { value = [], rawError } = useField(`${name}.${index}`);\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>('');\n\n React.useEffect(() => {\n if (rawError && value) {\n setCollapseToOpen(accordionValue);\n }\n }, [rawError, value, accordionValue]);\n\n const composedBoxRefs = useComposedRefs(boxRef, dropRef);\n\n const accordionActions = disabled ? null : (\n <>\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n {\n id: getTranslation('components.DynamicZone.delete-label'),\n defaultMessage: 'Delete {name}',\n },\n { name: title }\n )}\n onClick={onRemoveComponentClick}\n >\n <Trash />\n </IconButton>\n <IconButton\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n <Menu.Root>\n <Menu.Trigger size=\"S\" endIcon={null} paddingLeft={0} paddingRight={0}>\n <IconButton\n variant=\"ghost\"\n label={formatMessage({\n id: getTranslation('components.DynamicZone.more-actions'),\n defaultMessage: 'More actions',\n })}\n tag=\"span\"\n >\n <More aria-hidden focusable={false} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-above'),\n defaultMessage: 'Add component above',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>{category}</Menu.Label>\n {components.map(({ displayName, uid }) => (\n <MenuItem key={componentUid} onSelect={() => onAddComponent(uid, index)}>\n {displayName}\n </MenuItem>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-below'),\n defaultMessage: 'Add component below',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>{category}</Menu.Label>\n {components.map(({ displayName, uid }) => (\n <MenuItem key={componentUid} onSelect={() => onAddComponent(uid, index + 1)}>\n {displayName}\n </MenuItem>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n </>\n );\n\n const accordionTitle = title ? `${displayName} ${title}` : displayName;\n\n return (\n <ComponentContainer tag=\"li\" width=\"100%\">\n <Flex justifyContent=\"center\">\n <Rectangle background=\"neutral200\" />\n </Flex>\n <StyledBox ref={composedBoxRefs} hasRadius>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Root value={collapseToOpen} onValueChange={setCollapseToOpen}>\n <Accordion.Item value={accordionValue}>\n <Accordion.Header>\n <Accordion.Trigger\n icon={\n icon && COMPONENT_ICONS[icon]\n ? COMPONENT_ICONS[icon]\n : COMPONENT_ICONS.dashboard\n }\n >\n {accordionTitle}\n </Accordion.Trigger>\n <Accordion.Actions>{accordionActions}</Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <AccordionContentRadius background=\"neutral0\">\n <Box paddingLeft={6} paddingRight={6} paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={4}>\n {components[componentUid]?.layout?.map((row, rowInd) => (\n <Grid.Item\n col={12}\n key={rowInd}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <ResponsiveGridRoot gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldName = `${name}.${index}.${field.name}`;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.components.${componentUid}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <ResponsiveGridItem\n col={size}\n key={fieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children ? (\n children({\n ...fieldWithTranslatedLabel,\n document: currentDocument,\n name: fieldName,\n })\n ) : (\n <InputRenderer\n {...fieldWithTranslatedLabel}\n document={currentDocument}\n name={fieldName}\n />\n )}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n </Grid.Item>\n ))}\n </Grid.Root>\n </Box>\n </AccordionContentRadius>\n </Accordion.Content>\n </Accordion.Item>\n </Accordion.Root>\n )}\n </StyledBox>\n </ComponentContainer>\n );\n};\n\n// TODO: Delete once https://github.com/strapi/design-system/pull/858\n// is merged and released.\nconst StyledBox = styled<BoxComponent>(Box)`\n > div:first-child {\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n }\n`;\n\nconst AccordionContentRadius = styled<BoxComponent>(Box)`\n border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst Rectangle = styled<BoxComponent>(Box)`\n width: ${({ theme }) => theme.spaces[2]};\n height: ${({ theme }) => theme.spaces[4]};\n`;\n\nconst Preview = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst ComponentContainer = styled<BoxComponent<'li'>>(Box)`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport { DynamicComponent };\nexport type { DynamicComponentProps };\n"],"names":["DynamicComponent","componentUid","disabled","index","name","onRemoveComponentClick","onMoveComponent","onGrabItem","onDropItem","onCancel","dynamicComponentsByCategory","onAddComponent","children","formatMessage","useIntl","formValues","useForm","state","values","currentDocument","currentDocumentMeta","useDocumentContext","edit","components","useDocumentLayout","model","title","React","useMemo","mainField","settings","mainFieldValue","getIn","displayedValue","String","trim","mainValue","length","icon","displayName","category","split","find","component","uid","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","type","ItemTypes","DYNAMIC_ZONE","item","onMoveItem","useEffect","getEmptyImage","captureDraggingState","accordionValue","useId","value","rawError","useField","collapseToOpen","setCollapseToOpen","useState","composedBoxRefs","useComposedRefs","accordionActions","_jsxs","_Fragment","_jsx","IconButton","variant","label","id","getTranslation","defaultMessage","onClick","Trash","e","stopPropagation","data-handler-id","ref","onKeyDown","Drag","Menu","Root","Trigger","size","endIcon","paddingLeft","paddingRight","tag","More","aria-hidden","focusable","Content","SubRoot","SubTrigger","SubContent","Object","entries","map","Fragment","Label","MenuItem","onSelect","accordionTitle","ComponentContainer","width","Flex","justifyContent","Rectangle","background","StyledBox","hasRadius","Preview","Accordion","onValueChange","Item","Header","COMPONENT_ICONS","dashboard","Actions","AccordionContentRadius","Box","paddingTop","paddingBottom","Grid","gap","layout","row","rowInd","col","s","xs","direction","alignItems","ResponsiveGridRoot","field","fieldName","fieldWithTranslatedLabel","ResponsiveGridItem","document","InputRenderer","styled","theme","shadows","tableShadow","spaces","span","colors","primary100","primary500"],"mappings":"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"}
1
+ {"version":3,"file":"DynamicComponent.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, useField, createRulesEngine } from '@strapi/admin/strapi-admin';\nimport {\n Accordion,\n Box,\n Flex,\n Grid,\n IconButton,\n useComposedRefs,\n Menu,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Drag, More, Trash } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { COMPONENT_ICONS } from '../../../../../components/ComponentIcon';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../../../../hooks/useDragAndDrop';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { InputRenderer, type InputRendererProps } from '../../InputRenderer';\n\nimport type { ComponentPickerProps } from './ComponentPicker';\n\ninterface DynamicComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel'>,\n Pick<ComponentPickerProps, 'dynamicComponentsByCategory'> {\n componentUid: string;\n disabled?: boolean;\n index: number;\n name: string;\n onAddComponent: (componentUid: string, index: number) => void;\n onRemoveComponentClick: () => void;\n onMoveComponent: (dragIndex: number, hoverIndex: number) => void;\n children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicComponent = ({\n componentUid,\n disabled,\n index,\n name,\n onRemoveComponentClick,\n onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n dynamicComponentsByCategory = {},\n onAddComponent,\n children,\n}: DynamicComponentProps) => {\n const { formatMessage } = useIntl();\n const formValues = useForm('DynamicComponent', (state) => state.values);\n const { currentDocument, currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const rulesEngine = createRulesEngine();\n\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const title = React.useMemo(() => {\n const { mainField } = components[componentUid]?.settings ?? { mainField: 'id' };\n\n const mainFieldValue = getIn(formValues, `${name}.${index}.${mainField}`);\n\n const displayedValue =\n mainField === 'id' || !mainFieldValue ? '' : String(mainFieldValue).trim();\n\n const mainValue = displayedValue.length > 0 ? `- ${displayedValue}` : displayedValue;\n\n return mainValue;\n }, [componentUid, components, formValues, name, index]);\n\n const { icon, displayName } = React.useMemo(() => {\n const [category] = componentUid.split('.');\n const { icon, displayName } = (dynamicComponentsByCategory[category] ?? []).find(\n (component) => component.uid === componentUid\n ) ?? { icon: null, displayName: null };\n\n return { icon, displayName };\n }, [componentUid, dynamicComponentsByCategory]);\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.DYNAMIC_ZONE}_${name}`,\n index,\n item: {\n index,\n displayedValue: `${displayName} ${title}`,\n icon,\n },\n onMoveItem: onMoveComponent,\n onDropItem,\n onGrabItem,\n onCancel,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n /**\n * We don't need the accordion's to communicate with each other,\n * so a unique value for their state is enough.\n */\n const accordionValue = React.useId();\n\n const { value = [], rawError } = useField(`${name}.${index}`);\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>('');\n\n React.useEffect(() => {\n if (rawError && value) {\n setCollapseToOpen(accordionValue);\n }\n }, [rawError, value, accordionValue]);\n\n const composedBoxRefs = useComposedRefs(boxRef, dropRef);\n\n const accordionActions = disabled ? null : (\n <>\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n {\n id: getTranslation('components.DynamicZone.delete-label'),\n defaultMessage: 'Delete {name}',\n },\n { name: title }\n )}\n onClick={onRemoveComponentClick}\n >\n <Trash />\n </IconButton>\n <IconButton\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n <Menu.Root>\n <Menu.Trigger size=\"S\" endIcon={null} paddingLeft={0} paddingRight={0}>\n <IconButton\n variant=\"ghost\"\n label={formatMessage({\n id: getTranslation('components.DynamicZone.more-actions'),\n defaultMessage: 'More actions',\n })}\n tag=\"span\"\n >\n <More aria-hidden focusable={false} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-above'),\n defaultMessage: 'Add component above',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>{category}</Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={componentUid} onSelect={() => onAddComponent(uid, index)}>\n {displayName}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-below'),\n defaultMessage: 'Add component below',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>{category}</Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={componentUid} onSelect={() => onAddComponent(uid, index + 1)}>\n {displayName}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n </>\n );\n\n const accordionTitle = title ? `${displayName} ${title}` : displayName;\n\n return (\n <ComponentContainer tag=\"li\" width=\"100%\">\n <Flex justifyContent=\"center\">\n <Rectangle background=\"neutral200\" />\n </Flex>\n <StyledBox ref={composedBoxRefs} hasRadius>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Root value={collapseToOpen} onValueChange={setCollapseToOpen}>\n <Accordion.Item value={accordionValue}>\n <Accordion.Header>\n <Accordion.Trigger\n icon={\n icon && COMPONENT_ICONS[icon]\n ? COMPONENT_ICONS[icon]\n : COMPONENT_ICONS.dashboard\n }\n >\n {accordionTitle}\n </Accordion.Trigger>\n <Accordion.Actions>{accordionActions}</Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <AccordionContentRadius background=\"neutral0\">\n <Box paddingLeft={6} paddingRight={6} paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={4}>\n {components[componentUid]?.layout?.map((row, rowInd) => {\n const visibleFields = row.filter(({ ...field }) => {\n const condition = field.attribute.conditions?.visible;\n\n if (condition) {\n return rulesEngine.evaluate(condition, value);\n }\n\n return true;\n });\n\n if (visibleFields.length === 0) {\n return null; // Skip rendering the entire grid row\n }\n return (\n <Grid.Item\n col={12}\n key={rowInd}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <ResponsiveGridRoot gap={4}>\n {visibleFields.map(({ size, ...field }) => {\n const fieldName = `${name}.${index}.${field.name}`;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.components.${componentUid}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <ResponsiveGridItem\n col={size}\n key={fieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children ? (\n children({\n ...fieldWithTranslatedLabel,\n document: currentDocument,\n name: fieldName,\n })\n ) : (\n <InputRenderer\n {...fieldWithTranslatedLabel}\n document={currentDocument}\n name={fieldName}\n />\n )}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n </AccordionContentRadius>\n </Accordion.Content>\n </Accordion.Item>\n </Accordion.Root>\n )}\n </StyledBox>\n </ComponentContainer>\n );\n};\n\n// TODO: Delete once https://github.com/strapi/design-system/pull/858\n// is merged and released.\nconst StyledBox = styled<BoxComponent>(Box)`\n > div:first-child {\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n }\n`;\n\nconst AccordionContentRadius = styled<BoxComponent>(Box)`\n border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst Rectangle = styled<BoxComponent>(Box)`\n width: ${({ theme }) => theme.spaces[2]};\n height: ${({ theme }) => theme.spaces[4]};\n`;\n\nconst Preview = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst ComponentContainer = styled<BoxComponent<'li'>>(Box)`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport { DynamicComponent };\nexport type { DynamicComponentProps };\n"],"names":["DynamicComponent","componentUid","disabled","index","name","onRemoveComponentClick","onMoveComponent","onGrabItem","onDropItem","onCancel","dynamicComponentsByCategory","onAddComponent","children","formatMessage","useIntl","formValues","useForm","state","values","currentDocument","currentDocumentMeta","useDocumentContext","rulesEngine","createRulesEngine","edit","components","useDocumentLayout","model","title","React","useMemo","mainField","settings","mainFieldValue","getIn","displayedValue","String","trim","mainValue","length","icon","displayName","category","split","find","component","uid","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","type","ItemTypes","DYNAMIC_ZONE","item","onMoveItem","useEffect","getEmptyImage","captureDraggingState","accordionValue","useId","value","rawError","useField","collapseToOpen","setCollapseToOpen","useState","composedBoxRefs","useComposedRefs","accordionActions","_jsxs","_Fragment","_jsx","IconButton","variant","label","id","getTranslation","defaultMessage","onClick","Trash","e","stopPropagation","data-handler-id","ref","onKeyDown","Drag","Menu","Root","Trigger","size","endIcon","paddingLeft","paddingRight","tag","More","aria-hidden","focusable","Content","SubRoot","SubTrigger","SubContent","Object","entries","map","Fragment","Label","Item","onSelect","accordionTitle","ComponentContainer","width","Flex","justifyContent","Rectangle","background","StyledBox","hasRadius","Preview","Accordion","onValueChange","Header","COMPONENT_ICONS","dashboard","Actions","AccordionContentRadius","Box","paddingTop","paddingBottom","Grid","gap","layout","row","rowInd","visibleFields","filter","field","condition","attribute","conditions","visible","evaluate","col","s","xs","direction","alignItems","ResponsiveGridRoot","fieldName","fieldWithTranslatedLabel","ResponsiveGridItem","document","InputRenderer","styled","theme","shadows","tableShadow","spaces","span","colors","primary100","primary500"],"mappings":"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"}
@@ -20,6 +20,7 @@ var DocumentRBAC = require('../../../../../features/DocumentRBAC.js');
20
20
  var validation = require('../../../../../utils/validation.js');
21
21
  var DocumentActions = require('../../DocumentActions.js');
22
22
  var FormLayout = require('../../FormLayout.js');
23
+ var ComponentContext = require('../ComponentContext.js');
23
24
 
24
25
  function _interopNamespaceDefault(e) {
25
26
  var n = Object.create(null);
@@ -51,23 +52,37 @@ const StyledModalContent = styledComponents.styled(designSystem.Modal.Content)`
51
52
  height: 90%;
52
53
  max-height: 100%;
53
54
  `;
55
+ const getFullPageUrl = (currentDocumentMeta)=>{
56
+ const isSingleType = currentDocumentMeta.collectionType === collections.SINGLE_TYPES;
57
+ const queryParams = currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : '';
58
+ return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;
59
+ };
54
60
  function reducer(state, action) {
55
61
  switch(action.type){
56
62
  case 'GO_TO_RELATION':
57
63
  if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {
58
64
  return {
59
65
  ...state,
60
- confirmDialogIntent: action.payload.document
66
+ confirmDialogIntent: action.payload.document,
67
+ fieldToConnect: action.payload.fieldToConnect,
68
+ fieldToConnectUID: action.payload.fieldToConnectUID
61
69
  };
62
70
  }
71
+ const lastItemDocumentHistory = state.documentHistory.at(-1);
72
+ const hasToResetDocumentHistory = lastItemDocumentHistory && !lastItemDocumentHistory.documentId;
63
73
  return {
64
74
  ...state,
65
- documentHistory: [
75
+ // Reset document history if the last item has documentId undefined
76
+ documentHistory: hasToResetDocumentHistory ? [
77
+ action.payload.document
78
+ ] : [
66
79
  ...state.documentHistory,
67
80
  action.payload.document
68
81
  ],
69
82
  confirmDialogIntent: null,
70
- isModalOpen: true
83
+ isModalOpen: true,
84
+ fieldToConnect: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnect,
85
+ fieldToConnectUID: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnectUID
71
86
  };
72
87
  case 'GO_BACK':
73
88
  if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {
@@ -95,6 +110,21 @@ function reducer(state, action) {
95
110
  isModalOpen: false,
96
111
  confirmDialogIntent: null
97
112
  };
113
+ case 'GO_TO_CREATED_RELATION':
114
+ return {
115
+ ...state,
116
+ // Reset document history if the last item has documentId undefined
117
+ documentHistory: state.documentHistory ? [
118
+ ...state.documentHistory.slice(0, -1),
119
+ action.payload.document
120
+ ] : [
121
+ action.payload.document
122
+ ],
123
+ confirmDialogIntent: null,
124
+ isModalOpen: true,
125
+ fieldToConnect: undefined,
126
+ fieldToConnectUID: undefined
127
+ };
98
128
  case 'CANCEL_CONFIRM_DIALOG':
99
129
  return {
100
130
  ...state,
@@ -124,21 +154,17 @@ function reducer(state, action) {
124
154
  }
125
155
  }
126
156
  const [RelationModalProvider, useRelationModal] = strapiAdmin.createContext('RelationModal');
127
- const getFullPageUrl = (currentDocumentMeta)=>{
128
- const isSingleType = currentDocumentMeta.collectionType === collections.SINGLE_TYPES;
129
- const queryParams = currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : '';
130
- return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;
131
- };
132
- /**
133
- * Component responsible of rendering its children wrapped in a modal, form and context if needed
134
- */ const RelationModalRenderer = ({ children, trigger, relation })=>{
135
- const { formatMessage } = reactIntl.useIntl();
136
- const navigate = reactRouterDom.useNavigate();
157
+ function isRenderProp(children) {
158
+ return typeof children === 'function';
159
+ }
160
+ const RootRelationRenderer = (props)=>{
161
+ const { children } = props;
137
162
  const [state, dispatch] = React__namespace.useReducer(reducer, {
138
163
  documentHistory: [],
139
164
  confirmDialogIntent: null,
140
165
  isModalOpen: false,
141
- hasUnsavedChanges: false
166
+ hasUnsavedChanges: false,
167
+ fieldToConnect: undefined
142
168
  });
143
169
  const rootDocument = useDocument.useDoc();
144
170
  const [{ query }] = strapiAdmin.useQueryParams();
@@ -153,11 +179,9 @@ const getFullPageUrl = (currentDocumentMeta)=>{
153
179
  };
154
180
  const currentDocumentMeta = state.documentHistory.at(-1) ?? rootDocumentMeta;
155
181
  const currentDocument = useDocument.useDocument(currentDocumentMeta);
156
- const parentContextValue = useRelationModal('RelationContextWrapper', (state)=>state, false);
157
- // A parent relation is already rendering a modal. In this case simply render the trigger
158
- if (parentContextValue) {
159
- return trigger;
160
- }
182
+ // TODO: check if we can remove the single type check
183
+ const isSingleType = currentDocumentMeta.collectionType === collections.SINGLE_TYPES;
184
+ const isCreating = !currentDocumentMeta.documentId && !isSingleType;
161
185
  /**
162
186
  * There is no parent relation, so the relation modal doesn't exist. Create it and set up all the
163
187
  * pieces that will be used by potential child relations: the context, header, form, and footer.
@@ -167,18 +191,64 @@ const getFullPageUrl = (currentDocumentMeta)=>{
167
191
  rootDocumentMeta: rootDocumentMeta,
168
192
  currentDocumentMeta: currentDocumentMeta,
169
193
  currentDocument: currentDocument,
194
+ isCreating: isCreating,
195
+ children: /*#__PURE__*/ jsxRuntime.jsx(RelationModal, {
196
+ children: isRenderProp(children) ? children({
197
+ dispatch
198
+ }) : props.relation && /*#__PURE__*/ jsxRuntime.jsx(RelationModalTrigger, {
199
+ relation: props.relation,
200
+ children: children
201
+ })
202
+ })
203
+ });
204
+ };
205
+ const NestedRelationRenderer = (props)=>{
206
+ const { children } = props;
207
+ const dispatch = useRelationModal('NestedRelation', (state)=>state.dispatch);
208
+ return isRenderProp(children) ? children({
209
+ dispatch
210
+ }) : props.relation && /*#__PURE__*/ jsxRuntime.jsx(RelationModalTrigger, {
211
+ relation: props.relation,
212
+ children: children
213
+ }); /* This is the trigger that will be rendered in the parent relation */
214
+ };
215
+ /**
216
+ * Component responsible for rendering its children wrapped in a modal, form and context if needed
217
+ */ const RelationModalRenderer = (props)=>{
218
+ // We're in a nested relation if the relation modal context is not undefined
219
+ const isNested = useRelationModal('RelationContextWrapper', (state)=>state != undefined, false);
220
+ return isNested ? /*#__PURE__*/ jsxRuntime.jsx(NestedRelationRenderer, {
221
+ ...props
222
+ }) : /*#__PURE__*/ jsxRuntime.jsx(RootRelationRenderer, {
223
+ ...props
224
+ });
225
+ };
226
+ /* -------------------------------------------------------------------------------------------------
227
+ * RelationModal
228
+ * -----------------------------------------------------------------------------------------------*/ const generateCreateUrl = (currentDocumentMeta)=>{
229
+ return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}/create${currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : ''}`;
230
+ };
231
+ const RelationModal = ({ children })=>{
232
+ const { formatMessage } = reactIntl.useIntl();
233
+ const navigate = reactRouterDom.useNavigate();
234
+ const state = useRelationModal('RelationModalForm', (state)=>state.state);
235
+ const dispatch = useRelationModal('RelationModalForm', (state)=>state.dispatch);
236
+ const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
237
+ const currentDocument = useRelationModal('RelationModalForm', (state)=>state.currentDocument);
238
+ const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
239
+ /*
240
+ * We must wrap the modal window with Component Provider with reset values
241
+ * to avoid inheriting id and uid from the root document and having weird
242
+ * behaviors with simple relationships..
243
+ */ return /*#__PURE__*/ jsxRuntime.jsx(ComponentContext.ComponentProvider, {
244
+ id: undefined,
245
+ level: -1,
246
+ uid: undefined,
247
+ type: undefined,
170
248
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Root, {
171
249
  open: state.isModalOpen,
172
250
  onOpenChange: (open)=>{
173
- if (open) {
174
- dispatch({
175
- type: 'GO_TO_RELATION',
176
- payload: {
177
- document: relation,
178
- shouldBypassConfirmation: false
179
- }
180
- });
181
- } else {
251
+ if (!open) {
182
252
  dispatch({
183
253
  type: 'CLOSE_MODAL',
184
254
  payload: {
@@ -188,7 +258,7 @@ const getFullPageUrl = (currentDocumentMeta)=>{
188
258
  }
189
259
  },
190
260
  children: [
191
- trigger,
261
+ children,
192
262
  /*#__PURE__*/ jsxRuntime.jsxs(StyledModalContent, {
193
263
  children: [
194
264
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Header, {
@@ -223,7 +293,10 @@ const getFullPageUrl = (currentDocumentMeta)=>{
223
293
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
224
294
  tag: "span",
225
295
  fontWeight: 600,
226
- children: formatMessage({
296
+ children: isCreating ? formatMessage({
297
+ id: 'content-manager.relation.create',
298
+ defaultMessage: 'Create a relation'
299
+ }) : formatMessage({
227
300
  id: 'content-manager.components.RelationInputModal.modal-title',
228
301
  defaultMessage: 'Edit a relation'
229
302
  })
@@ -236,7 +309,11 @@ const getFullPageUrl = (currentDocumentMeta)=>{
236
309
  type: 'GO_FULL_PAGE'
237
310
  });
238
311
  if (!state.hasUnsavedChanges) {
239
- navigate(getFullPageUrl(currentDocumentMeta));
312
+ if (isCreating) {
313
+ navigate(generateCreateUrl(currentDocumentMeta));
314
+ } else {
315
+ navigate(getFullPageUrl(currentDocumentMeta));
316
+ }
240
317
  }
241
318
  },
242
319
  variant: "tertiary",
@@ -251,8 +328,8 @@ const getFullPageUrl = (currentDocumentMeta)=>{
251
328
  }),
252
329
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
253
330
  children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
254
- method: "PUT",
255
- initialValues: currentDocument.getInitialFormValues(),
331
+ method: isCreating ? 'POST' : 'PUT',
332
+ initialValues: currentDocument.getInitialFormValues(isCreating),
256
333
  validate: (values, options)=>{
257
334
  const yupSchema = validation.createYupSchema(currentDocument.schema?.attributes, currentDocument.components, {
258
335
  status: currentDocument.document?.status,
@@ -262,7 +339,7 @@ const getFullPageUrl = (currentDocumentMeta)=>{
262
339
  abortEarly: false
263
340
  });
264
341
  },
265
- children: children
342
+ children: /*#__PURE__*/ jsxRuntime.jsx(RelationModalBody, {})
266
343
  })
267
344
  })
268
345
  ]
@@ -273,7 +350,7 @@ const getFullPageUrl = (currentDocumentMeta)=>{
273
350
  };
274
351
  /**
275
352
  * All the main content (not header and footer) of the relation modal, plus the confirmation dialog.
276
- * Will be wrapped in a Modal.Body by the RelationModalRenderer.
353
+ * Will be wrapped in a Modal.Body by the RelationModal component.
277
354
  * Cannot be moved directly inside RelationModal because it needs access to the context via hooks.
278
355
  */ const RelationModalBody = ()=>{
279
356
  const navigate = reactRouterDom.useNavigate();
@@ -284,6 +361,7 @@ const getFullPageUrl = (currentDocumentMeta)=>{
284
361
  const dispatch = useRelationModal('RelationModalForm', (state)=>state.dispatch);
285
362
  const rootDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.rootDocumentMeta);
286
363
  const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
364
+ const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
287
365
  /**
288
366
  * One-way sync the modified state from the form to the modal state.
289
367
  * It is needed because we need to consume state from the form context in order to lift it up
@@ -325,7 +403,11 @@ const getFullPageUrl = (currentDocumentMeta)=>{
325
403
  if (isRootDocumentUrl) {
326
404
  handleCloseModal(true);
327
405
  } else {
328
- navigate(fullPageUrl);
406
+ if (isCreating) {
407
+ navigate(generateCreateUrl(currentDocumentMeta));
408
+ } else {
409
+ navigate(fullPageUrl);
410
+ }
329
411
  }
330
412
  };
331
413
  const handleConfirm = ()=>{
@@ -355,7 +437,7 @@ const getFullPageUrl = (currentDocumentMeta)=>{
355
437
  };
356
438
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
357
439
  children: [
358
- /*#__PURE__*/ jsxRuntime.jsx(RelationEditView, {}),
440
+ /*#__PURE__*/ jsxRuntime.jsx(RelationModalForm, {}),
359
441
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Root, {
360
442
  open: state.confirmDialogIntent != null,
361
443
  children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
@@ -373,7 +455,7 @@ const getFullPageUrl = (currentDocumentMeta)=>{
373
455
  ]
374
456
  });
375
457
  };
376
- const ModalTrigger = ({ children, relation })=>{
458
+ const RelationModalTrigger = ({ children, relation })=>{
377
459
  const dispatch = useRelationModal('ModalTrigger', (state)=>state.dispatch);
378
460
  return /*#__PURE__*/ jsxRuntime.jsx(StyledTextButton, {
379
461
  onClick: ()=>{
@@ -388,16 +470,6 @@ const ModalTrigger = ({ children, relation })=>{
388
470
  children: children
389
471
  });
390
472
  };
391
- const RelationModal = /*#__PURE__*/ React__namespace.memo(({ relation, children })=>{
392
- return /*#__PURE__*/ jsxRuntime.jsx(RelationModalRenderer, {
393
- relation: relation,
394
- trigger: /*#__PURE__*/ jsxRuntime.jsx(ModalTrigger, {
395
- relation: relation,
396
- children: children
397
- }),
398
- children: /*#__PURE__*/ jsxRuntime.jsx(RelationModalBody, {})
399
- });
400
- });
401
473
  const StyledTextButton = styledComponents.styled(designSystem.TextButton)`
402
474
  max-width: 100%;
403
475
  & > span {
@@ -411,13 +483,14 @@ const StyledTextButton = styledComponents.styled(designSystem.TextButton)`
411
483
  /**
412
484
  * The mini edit view for a relation that is displayed inside a modal.
413
485
  * It's complete with its header, document actions and form layout.
414
- */ const RelationEditView = ()=>{
486
+ */ const RelationModalForm = ()=>{
415
487
  const { formatMessage } = reactIntl.useIntl();
416
- const currentDocumentMeta = useRelationModal('RelationModalBody', (state)=>state.currentDocumentMeta);
417
- const currentDocument = useRelationModal('RelationModalBody', (state)=>state.currentDocument);
488
+ const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
489
+ const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
490
+ const currentDocument = useRelationModal('RelationModalForm', (state)=>state.currentDocument);
418
491
  const documentLayoutResponse = useDocumentLayout.useDocumentLayout(currentDocumentMeta.model);
419
- const plugins = strapiAdmin.useStrapiApp('RelationModalBody', (state)=>state.plugins);
420
- const initialValues = currentDocument.getInitialFormValues();
492
+ const plugins = strapiAdmin.useStrapiApp('RelationModalForm', (state)=>state.plugins);
493
+ const initialValues = isCreating ? currentDocument.getInitialFormValues(isCreating) : currentDocument.getInitialFormValues();
421
494
  const { permissions = [], isLoading: isLoadingPermissions, error } = strapiAdmin.useRBAC(plugin.PERMISSIONS.map((action)=>({
422
495
  action,
423
496
  subject: currentDocumentMeta.model
@@ -432,7 +505,7 @@ const StyledTextButton = styledComponents.styled(designSystem.TextButton)`
432
505
  })
433
506
  });
434
507
  }
435
- if (error || !currentDocumentMeta.model || documentLayoutResponse.error || !currentDocument.document || !currentDocument.meta || !currentDocument.schema || !initialValues) {
508
+ if (error || !currentDocumentMeta.model || documentLayoutResponse.error || !isCreating && !currentDocument.document || !isCreating && !currentDocument.meta || !currentDocument.schema || !initialValues) {
436
509
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
437
510
  alignItems: "center",
438
511
  height: "100%",
@@ -541,7 +614,7 @@ const StyledTextButton = styledComponents.styled(designSystem.TextButton)`
541
614
  });
542
615
  };
543
616
 
544
- exports.RelationModal = RelationModal;
617
+ exports.RelationModalRenderer = RelationModalRenderer;
545
618
  exports.getCollectionType = getCollectionType;
546
619
  exports.reducer = reducer;
547
620
  exports.useRelationModal = useRelationModal;