@strapi/content-manager 0.0.0-next.e21fe90bf2ab9906267ea6e6ca620bdcc729906c → 0.0.0-next.e326c69a49373b420f6566c30aca26f4b6274c6a

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 (407) hide show
  1. package/dist/admin/components/ConfigurationForm/Fields.js +304 -205
  2. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.mjs +309 -211
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/Form.js +1 -1
  6. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
  7. package/dist/admin/components/ConfigurationForm/Form.mjs +3 -3
  8. package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
  9. package/dist/admin/components/DragPreviews/CardDragPreview.js +3 -1
  10. package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -1
  11. package/dist/admin/components/DragPreviews/CardDragPreview.mjs +3 -1
  12. package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -1
  13. package/dist/admin/components/DragPreviews/ComponentDragPreview.js +3 -1
  14. package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -1
  15. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs +3 -1
  16. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -1
  17. package/dist/admin/components/DragPreviews/RelationDragPreview.js +3 -1
  18. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
  19. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +3 -1
  20. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
  21. package/dist/admin/components/LeftMenu.js +92 -48
  22. package/dist/admin/components/LeftMenu.js.map +1 -1
  23. package/dist/admin/components/LeftMenu.mjs +95 -51
  24. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  25. package/dist/admin/components/Widgets.js +269 -9
  26. package/dist/admin/components/Widgets.js.map +1 -1
  27. package/dist/admin/components/Widgets.mjs +252 -12
  28. package/dist/admin/components/Widgets.mjs.map +1 -1
  29. package/dist/admin/history/components/VersionContent.js +24 -3
  30. package/dist/admin/history/components/VersionContent.js.map +1 -1
  31. package/dist/admin/history/components/VersionContent.mjs +25 -4
  32. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  33. package/dist/admin/history/components/VersionHeader.js +7 -0
  34. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  35. package/dist/admin/history/components/VersionHeader.mjs +8 -1
  36. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  37. package/dist/admin/history/components/VersionsList.js +1 -1
  38. package/dist/admin/history/components/VersionsList.js.map +1 -1
  39. package/dist/admin/history/components/VersionsList.mjs +1 -1
  40. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  41. package/dist/admin/history/pages/History.js +7 -7
  42. package/dist/admin/history/pages/History.js.map +1 -1
  43. package/dist/admin/history/pages/History.mjs +7 -7
  44. package/dist/admin/history/pages/History.mjs.map +1 -1
  45. package/dist/admin/hooks/useDocumentActions.js +12 -7
  46. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  47. package/dist/admin/hooks/useDocumentActions.mjs +13 -8
  48. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  49. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  50. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  51. package/dist/admin/index.js +48 -11
  52. package/dist/admin/index.js.map +1 -1
  53. package/dist/admin/index.mjs +47 -9
  54. package/dist/admin/index.mjs.map +1 -1
  55. package/dist/admin/layout.js +28 -33
  56. package/dist/admin/layout.js.map +1 -1
  57. package/dist/admin/layout.mjs +29 -15
  58. package/dist/admin/layout.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/EditViewPage.js +98 -77
  60. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  61. package/dist/admin/pages/EditView/EditViewPage.mjs +100 -79
  62. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/Blocker.js +18 -0
  64. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
  65. package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
  66. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
  67. package/dist/admin/pages/EditView/components/DocumentActions.js +304 -91
  68. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/DocumentActions.mjs +308 -95
  70. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  72. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  74. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +61 -26
  76. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
  78. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  80. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  82. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  84. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  86. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
  88. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
  90. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +17 -3
  92. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +18 -4
  94. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +1 -2
  96. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +1 -2
  98. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +20 -6
  100. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +22 -8
  102. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +129 -55
  104. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +129 -55
  106. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +126 -34
  108. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +130 -38
  110. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormInputs/UID.js +4 -2
  112. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +4 -2
  114. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  115. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  116. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  117. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  118. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  119. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  120. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  121. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  122. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  123. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  124. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  125. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  126. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  127. package/dist/admin/pages/EditView/components/FormLayout.js +59 -34
  128. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  129. package/dist/admin/pages/EditView/components/FormLayout.mjs +60 -34
  130. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  131. package/dist/admin/pages/EditView/components/Header.js +22 -7
  132. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  133. package/dist/admin/pages/EditView/components/Header.mjs +23 -8
  134. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  135. package/dist/admin/pages/EditView/components/InputRenderer.js +20 -7
  136. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  137. package/dist/admin/pages/EditView/components/InputRenderer.mjs +20 -7
  138. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  139. package/dist/admin/pages/EditView/utils/data.js +128 -0
  140. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  141. package/dist/admin/pages/EditView/utils/data.mjs +128 -1
  142. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  143. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +1 -0
  144. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  145. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -0
  146. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  147. package/dist/admin/pages/ListView/ListViewPage.js +227 -132
  148. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  149. package/dist/admin/pages/ListView/ListViewPage.mjs +229 -134
  150. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  151. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  152. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  153. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  154. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  155. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +12 -2
  156. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  157. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +12 -2
  158. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  159. package/dist/admin/pages/ListView/components/Filters.js +4 -1
  160. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  161. package/dist/admin/pages/ListView/components/Filters.mjs +4 -1
  162. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  163. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  164. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  165. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  166. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  167. package/dist/admin/preview/components/InputPopover.js +189 -0
  168. package/dist/admin/preview/components/InputPopover.js.map +1 -0
  169. package/dist/admin/preview/components/InputPopover.mjs +167 -0
  170. package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
  171. package/dist/admin/preview/components/PreviewHeader.js +1 -2
  172. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  173. package/dist/admin/preview/components/PreviewHeader.mjs +1 -2
  174. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  175. package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
  176. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  177. package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
  178. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  179. package/dist/admin/preview/hooks/usePreviewInputManager.js +77 -0
  180. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  181. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +56 -0
  182. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  183. package/dist/admin/preview/pages/Preview.js +178 -74
  184. package/dist/admin/preview/pages/Preview.js.map +1 -1
  185. package/dist/admin/preview/pages/Preview.mjs +180 -76
  186. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  187. package/dist/admin/preview/utils/constants.js +56 -0
  188. package/dist/admin/preview/utils/constants.js.map +1 -0
  189. package/dist/admin/preview/utils/constants.mjs +52 -0
  190. package/dist/admin/preview/utils/constants.mjs.map +1 -0
  191. package/dist/admin/preview/utils/fieldUtils.js +107 -0
  192. package/dist/admin/preview/utils/fieldUtils.js.map +1 -0
  193. package/dist/admin/preview/utils/fieldUtils.mjs +102 -0
  194. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -0
  195. package/dist/admin/preview/utils/getSendMessage.js +22 -0
  196. package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
  197. package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
  198. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
  199. package/dist/admin/preview/utils/previewScript.js +534 -0
  200. package/dist/admin/preview/utils/previewScript.js.map +1 -0
  201. package/dist/admin/preview/utils/previewScript.mjs +532 -0
  202. package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
  203. package/dist/admin/services/api.js +4 -1
  204. package/dist/admin/services/api.js.map +1 -1
  205. package/dist/admin/services/api.mjs +4 -1
  206. package/dist/admin/services/api.mjs.map +1 -1
  207. package/dist/admin/services/documents.js +42 -16
  208. package/dist/admin/services/documents.js.map +1 -1
  209. package/dist/admin/services/documents.mjs +42 -16
  210. package/dist/admin/services/documents.mjs.map +1 -1
  211. package/dist/admin/services/homepage.js +9 -5
  212. package/dist/admin/services/homepage.js.map +1 -1
  213. package/dist/admin/services/homepage.mjs +9 -5
  214. package/dist/admin/services/homepage.mjs.map +1 -1
  215. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  216. package/dist/admin/src/components/LeftMenu.d.ts +3 -1
  217. package/dist/admin/src/components/Widgets.d.ts +2 -1
  218. package/dist/admin/src/exports.d.ts +1 -0
  219. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  220. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  221. package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
  222. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
  223. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  224. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +26 -5
  225. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  226. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -11
  227. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  228. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  229. package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
  230. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +5 -0
  231. package/dist/admin/src/preview/pages/Preview.d.ts +12 -0
  232. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  233. package/dist/admin/src/preview/utils/constants.d.ts +55 -0
  234. package/dist/admin/src/preview/utils/fieldUtils.d.ts +22 -0
  235. package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
  236. package/dist/admin/src/preview/utils/previewScript.d.ts +24 -0
  237. package/dist/admin/src/services/api.d.ts +1 -1
  238. package/dist/admin/src/services/components.d.ts +2 -2
  239. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  240. package/dist/admin/src/services/documents.d.ts +23 -17
  241. package/dist/admin/src/services/homepage.d.ts +1 -1
  242. package/dist/admin/src/services/init.d.ts +1 -1
  243. package/dist/admin/src/services/relations.d.ts +2 -2
  244. package/dist/admin/src/services/uid.d.ts +3 -3
  245. package/dist/admin/src/utils/api.d.ts +1 -1
  246. package/dist/admin/src/utils/validation.d.ts +1 -0
  247. package/dist/admin/translations/en.json.js +15 -1
  248. package/dist/admin/translations/en.json.js.map +1 -1
  249. package/dist/admin/translations/en.json.mjs +15 -1
  250. package/dist/admin/translations/en.json.mjs.map +1 -1
  251. package/dist/admin/translations/es.json.js +6 -2
  252. package/dist/admin/translations/es.json.js.map +1 -1
  253. package/dist/admin/translations/es.json.mjs +6 -2
  254. package/dist/admin/translations/es.json.mjs.map +1 -1
  255. package/dist/admin/translations/fr.json.js +11 -2
  256. package/dist/admin/translations/fr.json.js.map +1 -1
  257. package/dist/admin/translations/fr.json.mjs +11 -2
  258. package/dist/admin/translations/fr.json.mjs.map +1 -1
  259. package/dist/admin/translations/ru.json.js +235 -226
  260. package/dist/admin/translations/ru.json.js.map +1 -1
  261. package/dist/admin/translations/ru.json.mjs +230 -226
  262. package/dist/admin/translations/ru.json.mjs.map +1 -1
  263. package/dist/admin/utils/api.js +1 -1
  264. package/dist/admin/utils/api.js.map +1 -1
  265. package/dist/admin/utils/api.mjs +1 -1
  266. package/dist/admin/utils/api.mjs.map +1 -1
  267. package/dist/admin/utils/validation.js +19 -7
  268. package/dist/admin/utils/validation.js.map +1 -1
  269. package/dist/admin/utils/validation.mjs +19 -7
  270. package/dist/admin/utils/validation.mjs.map +1 -1
  271. package/dist/server/controllers/content-types.js +11 -1
  272. package/dist/server/controllers/content-types.js.map +1 -1
  273. package/dist/server/controllers/content-types.mjs +11 -1
  274. package/dist/server/controllers/content-types.mjs.map +1 -1
  275. package/dist/server/controllers/index.js +3 -1
  276. package/dist/server/controllers/index.js.map +1 -1
  277. package/dist/server/controllers/index.mjs +3 -1
  278. package/dist/server/controllers/index.mjs.map +1 -1
  279. package/dist/server/controllers/relations.js +2 -2
  280. package/dist/server/controllers/relations.js.map +1 -1
  281. package/dist/server/controllers/relations.mjs +2 -2
  282. package/dist/server/controllers/relations.mjs.map +1 -1
  283. package/dist/server/controllers/validation/index.js +14 -2
  284. package/dist/server/controllers/validation/index.js.map +1 -1
  285. package/dist/server/controllers/validation/index.mjs +14 -2
  286. package/dist/server/controllers/validation/index.mjs.map +1 -1
  287. package/dist/server/history/services/lifecycles.js +23 -19
  288. package/dist/server/history/services/lifecycles.js.map +1 -1
  289. package/dist/server/history/services/lifecycles.mjs +23 -19
  290. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  291. package/dist/server/homepage/controllers/homepage.js +62 -0
  292. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  293. package/dist/server/homepage/controllers/homepage.mjs +41 -0
  294. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  295. package/dist/server/homepage/controllers/index.js +10 -0
  296. package/dist/server/homepage/controllers/index.js.map +1 -0
  297. package/dist/server/homepage/controllers/index.mjs +8 -0
  298. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  299. package/dist/server/homepage/index.js +14 -0
  300. package/dist/server/homepage/index.js.map +1 -0
  301. package/dist/server/homepage/index.mjs +12 -0
  302. package/dist/server/homepage/index.mjs.map +1 -0
  303. package/dist/server/homepage/routes/homepage.js +36 -0
  304. package/dist/server/homepage/routes/homepage.js.map +1 -0
  305. package/dist/server/homepage/routes/homepage.mjs +34 -0
  306. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  307. package/dist/server/homepage/routes/index.js +13 -0
  308. package/dist/server/homepage/routes/index.js.map +1 -0
  309. package/dist/server/homepage/routes/index.mjs +11 -0
  310. package/dist/server/homepage/routes/index.mjs.map +1 -0
  311. package/dist/server/homepage/services/homepage.js +197 -0
  312. package/dist/server/homepage/services/homepage.js.map +1 -0
  313. package/dist/server/homepage/services/homepage.mjs +195 -0
  314. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  315. package/dist/server/homepage/services/index.js +10 -0
  316. package/dist/server/homepage/services/index.js.map +1 -0
  317. package/dist/server/homepage/services/index.mjs +8 -0
  318. package/dist/server/homepage/services/index.mjs.map +1 -0
  319. package/dist/server/preview/services/preview-config.js +5 -1
  320. package/dist/server/preview/services/preview-config.js.map +1 -1
  321. package/dist/server/preview/services/preview-config.mjs +5 -1
  322. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  323. package/dist/server/preview/services/preview.js +4 -1
  324. package/dist/server/preview/services/preview.js.map +1 -1
  325. package/dist/server/preview/services/preview.mjs +4 -1
  326. package/dist/server/preview/services/preview.mjs.map +1 -1
  327. package/dist/server/routes/index.js +3 -1
  328. package/dist/server/routes/index.js.map +1 -1
  329. package/dist/server/routes/index.mjs +3 -1
  330. package/dist/server/routes/index.mjs.map +1 -1
  331. package/dist/server/services/data-mapper.js +4 -1
  332. package/dist/server/services/data-mapper.js.map +1 -1
  333. package/dist/server/services/data-mapper.mjs +4 -1
  334. package/dist/server/services/data-mapper.mjs.map +1 -1
  335. package/dist/server/services/document-manager.js +8 -1
  336. package/dist/server/services/document-manager.js.map +1 -1
  337. package/dist/server/services/document-manager.mjs +8 -1
  338. package/dist/server/services/document-manager.mjs.map +1 -1
  339. package/dist/server/services/document-metadata.js +3 -1
  340. package/dist/server/services/document-metadata.js.map +1 -1
  341. package/dist/server/services/document-metadata.mjs +3 -1
  342. package/dist/server/services/document-metadata.mjs.map +1 -1
  343. package/dist/server/services/index.js +3 -1
  344. package/dist/server/services/index.js.map +1 -1
  345. package/dist/server/services/index.mjs +3 -1
  346. package/dist/server/services/index.mjs.map +1 -1
  347. package/dist/server/services/utils/configuration/attributes.js +1 -1
  348. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  349. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  350. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  351. package/dist/server/services/utils/configuration/layouts.js +1 -1
  352. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  353. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  354. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  355. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  356. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  357. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  358. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  359. package/dist/server/services/utils/populate.js +11 -0
  360. package/dist/server/services/utils/populate.js.map +1 -1
  361. package/dist/server/services/utils/populate.mjs +11 -0
  362. package/dist/server/services/utils/populate.mjs.map +1 -1
  363. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  364. package/dist/server/src/controllers/index.d.ts.map +1 -1
  365. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  366. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  367. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  368. package/dist/server/src/homepage/controllers/homepage.d.ts +8 -0
  369. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  370. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  371. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  372. package/dist/server/src/homepage/index.d.ts +23 -0
  373. package/dist/server/src/homepage/index.d.ts.map +1 -0
  374. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  375. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  376. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  377. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  378. package/dist/server/src/homepage/services/homepage.d.ts +14 -0
  379. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  380. package/dist/server/src/homepage/services/index.d.ts +16 -0
  381. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  382. package/dist/server/src/index.d.ts +15 -0
  383. package/dist/server/src/index.d.ts.map +1 -1
  384. package/dist/server/src/preview/services/index.d.ts +1 -0
  385. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  386. package/dist/server/src/preview/services/preview-config.d.ts +1 -0
  387. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  388. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  389. package/dist/server/src/preview/utils.d.ts +1 -0
  390. package/dist/server/src/preview/utils.d.ts.map +1 -1
  391. package/dist/server/src/routes/index.d.ts +1 -0
  392. package/dist/server/src/routes/index.d.ts.map +1 -1
  393. package/dist/server/src/services/data-mapper.d.ts +1 -0
  394. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  395. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  396. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  397. package/dist/server/src/services/index.d.ts +14 -0
  398. package/dist/server/src/services/index.d.ts.map +1 -1
  399. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  400. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  401. package/dist/shared/contracts/collection-types.d.ts +0 -1
  402. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  403. package/dist/shared/contracts/homepage.d.ts +13 -0
  404. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  405. package/package.json +11 -9
  406. package/dist/server/src/services/homepage.d.ts +0 -11
  407. package/dist/server/src/services/homepage.d.ts.map +0 -1
@@ -1,24 +1,60 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useNotification, useAPIErrorHandler, useQueryParams, useForm } from '@strapi/admin/strapi-admin';
4
- import { Menu, Flex, Button, VisuallyHidden, Dialog, Modal, Typography, Radio } from '@strapi/design-system';
3
+ import { tours, useNotification, useAPIErrorHandler, useQueryParams, useForm, useGuidedTour, GUIDED_TOUR_REQUIRED_ACTIONS } from '@strapi/admin/strapi-admin';
4
+ import { Flex, Button, Menu, VisuallyHidden, Dialog, Modal, Typography, Radio } from '@strapi/design-system';
5
5
  import { More, Cross, WarningCircle } from '@strapi/icons';
6
6
  import mapValues from 'lodash/fp/mapValues';
7
+ import get from 'lodash/get';
8
+ import merge from 'lodash/merge';
9
+ import set from 'lodash/set';
7
10
  import { useIntl } from 'react-intl';
8
11
  import { useNavigate, useMatch, useParams } from 'react-router-dom';
9
- import { styled } from 'styled-components';
10
12
  import { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes.mjs';
11
13
  import { SINGLE_TYPES } from '../../../constants/collections.mjs';
12
14
  import { useDocumentRBAC } from '../../../features/DocumentRBAC.mjs';
13
- import { useDoc } from '../../../hooks/useDocument.mjs';
15
+ import { useDocument, useDoc } from '../../../hooks/useDocument.mjs';
14
16
  import { useDocumentActions } from '../../../hooks/useDocumentActions.mjs';
15
17
  import { useDocumentContext } from '../../../hooks/useDocumentContext.mjs';
16
18
  import { usePreviewContext } from '../../../preview/pages/Preview.mjs';
17
19
  import { LIST_PATH, CLONE_PATH } from '../../../router.mjs';
18
- import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery } from '../../../services/documents.mjs';
20
+ import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery, useUpdateDocumentMutation } from '../../../services/documents.mjs';
19
21
  import { isBaseQueryError, buildValidParams } from '../../../utils/api.mjs';
20
22
  import { getTranslation } from '../../../utils/translations.mjs';
23
+ import { handleInvisibleAttributes } from '../utils/data.mjs';
24
+ import { useRelationModal } from './FormInputs/Relations/RelationModal.mjs';
21
25
 
26
+ const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
27
+ /*
28
+ * Check if the fieldToConnect is already present in the parentDataToUpdate.
29
+ * This happens in particular when in the parentDocument you have created
30
+ * a new component without saving.
31
+ */ const isFieldPresent = !!get(parentDataToUpdate, fieldToConnect);
32
+ const fieldToConnectPath = isFieldPresent ? fieldToConnect : fieldToConnect.split('.').slice(0, -1).join('.');
33
+ const fieldToConnectValue = isFieldPresent ? {
34
+ connect: [
35
+ {
36
+ id: data.documentId,
37
+ documentId: data.documentId,
38
+ locale: data.locale
39
+ }
40
+ ]
41
+ } : {
42
+ [fieldToConnect.split('.').pop()]: {
43
+ connect: [
44
+ {
45
+ id: data.documentId,
46
+ documentId: data.documentId,
47
+ locale: data.locale
48
+ }
49
+ ],
50
+ disconnect: []
51
+ },
52
+ // In case the object was not present you need to pass the componentUID of the parent document
53
+ __component: fieldToConnectUID
54
+ };
55
+ const objectToConnect = set({}, fieldToConnectPath, fieldToConnectValue);
56
+ return merge(parentDataToUpdate, objectToConnect);
57
+ };
22
58
  const DocumentActions = ({ actions })=>{
23
59
  const { formatMessage } = useIntl();
24
60
  const [primaryAction, secondaryAction, ...restActions] = actions.filter((action)=>{
@@ -39,23 +75,33 @@ const DocumentActions = ({ actions })=>{
39
75
  alignItems: "stretch",
40
76
  width: "100%",
41
77
  children: [
42
- /*#__PURE__*/ jsxs(Flex, {
43
- gap: 2,
44
- children: [
45
- /*#__PURE__*/ jsx(DocumentActionButton, {
46
- ...primaryAction,
47
- variant: primaryAction.variant || 'default'
48
- }),
49
- restActions.length > 0 ? /*#__PURE__*/ jsx(DocumentActionsMenu, {
50
- actions: restActions,
51
- label: formatMessage({
52
- id: 'content-manager.containers.edit.panels.default.more-actions',
53
- defaultMessage: 'More document actions'
54
- })
55
- }) : null
56
- ]
78
+ /*#__PURE__*/ jsx(tours.contentManager.Publish, {
79
+ children: /*#__PURE__*/ jsxs(Flex, {
80
+ gap: 2,
81
+ children: [
82
+ primaryAction.label === 'Publish' ? /*#__PURE__*/ jsx(DocumentActionButton, {
83
+ ...primaryAction,
84
+ variant: primaryAction.variant || 'default'
85
+ }) : /*#__PURE__*/ jsx(DocumentActionButton, {
86
+ ...primaryAction,
87
+ variant: primaryAction.variant || 'default'
88
+ }),
89
+ restActions.length > 0 ? /*#__PURE__*/ jsx(DocumentActionsMenu, {
90
+ actions: restActions,
91
+ label: formatMessage({
92
+ id: 'content-manager.containers.edit.panels.default.more-actions',
93
+ defaultMessage: 'More document actions'
94
+ })
95
+ }) : null
96
+ ]
97
+ })
57
98
  }),
58
- secondaryAction ? /*#__PURE__*/ jsx(DocumentActionButton, {
99
+ secondaryAction ? secondaryAction.label === 'Publish' ? /*#__PURE__*/ jsx(tours.contentManager.Publish, {
100
+ children: /*#__PURE__*/ jsx(DocumentActionButton, {
101
+ ...secondaryAction,
102
+ variant: secondaryAction.variant || 'secondary'
103
+ })
104
+ }) : /*#__PURE__*/ jsx(DocumentActionButton, {
59
105
  ...secondaryAction,
60
106
  variant: secondaryAction.variant || 'secondary'
61
107
  }) : null
@@ -117,11 +163,6 @@ const DocumentActionButton = (action)=>{
117
163
  ]
118
164
  });
119
165
  };
120
- const MenuItem = styled(Menu.Item)`
121
- &:hover {
122
- background: ${({ theme, isVariantDanger, isDisabled })=>isVariantDanger && !isDisabled ? theme.colors.danger100 : 'neutral'};
123
- }
124
- `;
125
166
  const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })=>{
126
167
  const [isOpen, setIsOpen] = React.useState(false);
127
168
  const [dialogId, setDialogId] = React.useState(null);
@@ -183,27 +224,19 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
183
224
  popoverPlacement: "bottom-end",
184
225
  children: [
185
226
  actions.map((action)=>{
186
- return /*#__PURE__*/ jsx(MenuItem, {
227
+ return /*#__PURE__*/ jsx(Menu.Item, {
187
228
  disabled: action.disabled,
188
229
  /* @ts-expect-error – TODO: this is an error in the DS where it is most likely a synthetic event, not regular. */ onSelect: handleClick(action),
189
230
  display: "block",
190
- isVariantDanger: action.variant === 'danger',
191
- isDisabled: action.disabled,
231
+ variant: action.variant === 'danger' ? action.variant : 'default',
232
+ startIcon: action.icon,
192
233
  children: /*#__PURE__*/ jsx(Flex, {
193
234
  justifyContent: "space-between",
194
235
  gap: 4,
195
- children: /*#__PURE__*/ jsxs(Flex, {
196
- color: !action.disabled ? convertActionVariantToColor(action.variant) : 'inherit',
236
+ children: /*#__PURE__*/ jsx(Flex, {
197
237
  gap: 2,
198
238
  tag: "span",
199
- children: [
200
- /*#__PURE__*/ jsx(Flex, {
201
- tag: "span",
202
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : 'inherit',
203
- children: action.icon
204
- }),
205
- action.label
206
- ]
239
+ children: action.label
207
240
  })
208
241
  })
209
242
  }, action.id);
@@ -231,30 +264,6 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
231
264
  ]
232
265
  });
233
266
  };
234
- const convertActionVariantToColor = (variant = 'secondary')=>{
235
- switch(variant){
236
- case 'danger':
237
- return 'danger600';
238
- case 'secondary':
239
- return undefined;
240
- case 'success':
241
- return 'success600';
242
- default:
243
- return 'primary600';
244
- }
245
- };
246
- const convertActionVariantToIconColor = (variant = 'secondary')=>{
247
- switch(variant){
248
- case 'danger':
249
- return 'danger600';
250
- case 'secondary':
251
- return 'neutral500';
252
- case 'success':
253
- return 'success600';
254
- default:
255
- return 'primary600';
256
- }
257
- };
258
267
  const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, isOpen, variant = 'secondary', loading })=>{
259
268
  const { formatMessage } = useIntl();
260
269
  const handleClose = async ()=>{
@@ -360,7 +369,10 @@ const transformData = (data)=>{
360
369
  const isCloning = useMatch(CLONE_PATH) !== null;
361
370
  const { id } = useParams();
362
371
  const { formatMessage } = useIntl();
363
- const canPublish = useDocumentRBAC('PublishAction', ({ canPublish })=>canPublish);
372
+ const { canPublish, canReadFields } = useDocumentRBAC('PublishAction', ({ canPublish, canReadFields })=>({
373
+ canPublish,
374
+ canReadFields
375
+ }));
364
376
  const { publish, isLoading } = useDocumentActions();
365
377
  const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
366
378
  const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = useLazyGetDraftRelationCountQuery();
@@ -374,7 +386,19 @@ const transformData = (data)=>{
374
386
  const setErrors = useForm('PublishAction', (state)=>state.setErrors);
375
387
  const formValues = useForm('PublishAction', ({ values })=>values);
376
388
  const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
389
+ const { currentDocument: { components } } = useDocumentContext('PublishAction');
390
+ // need to discriminate if the publish is coming from a relation modal or in the edit view
391
+ const relationContext = useRelationModal('PublishAction', ()=>true, false);
392
+ const fromRelationModal = relationContext != undefined;
393
+ const dispatch = useRelationModal('PublishAction', (state)=>state.dispatch);
394
+ const fieldToConnect = useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
395
+ const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
396
+ const documentHistory = useRelationModal('PublishAction', (state)=>state.state.documentHistory, false);
397
+ const rootDocumentMeta = useRelationModal('PublishAction', (state)=>state.rootDocumentMeta);
398
+ const dispatchGuidedTour = useGuidedTour('PublishAction', (s)=>s.dispatch);
377
399
  const { currentDocumentMeta } = useDocumentContext('PublishAction');
400
+ const [updateDocumentMutation] = useUpdateDocumentMutation();
401
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
378
402
  const idToPublish = currentDocumentMeta.documentId || id;
379
403
  React.useEffect(()=>{
380
404
  if (isErrorDraftRelations) {
@@ -458,6 +482,16 @@ const transformData = (data)=>{
458
482
  model,
459
483
  currentDocumentMeta.params
460
484
  ]);
485
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
486
+ const parentDocumentData = useDocument({
487
+ documentId: parentDocumentMetaToUpdate?.documentId,
488
+ model: parentDocumentMetaToUpdate?.model,
489
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
490
+ params: parentDocumentMetaToUpdate?.params
491
+ }, {
492
+ skip: !parentDocumentMetaToUpdate
493
+ });
494
+ const { getInitialFormValues } = useDoc();
461
495
  const isDocumentPublished = (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
462
496
  if (!schema?.options?.draftAndPublish) {
463
497
  return null;
@@ -469,33 +503,105 @@ const transformData = (data)=>{
469
503
  status: 'published'
470
504
  });
471
505
  if (errors) {
472
- toggleNotification({
473
- type: 'danger',
474
- message: formatMessage({
475
- id: 'content-manager.validation.error',
476
- defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
477
- })
506
+ const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
507
+ const attribute = schema.attributes[fieldName];
508
+ return attribute?.required && !(canReadFields ?? []).includes(fieldName);
478
509
  });
510
+ if (hasUnreadableRequiredField) {
511
+ toggleNotification({
512
+ type: 'danger',
513
+ message: formatMessage({
514
+ id: 'content-manager.validation.error.unreadable-required-field',
515
+ defaultMessage: 'Your current permissions prevent access to certain required fields. Please request access from an administrator to proceed.'
516
+ })
517
+ });
518
+ } else {
519
+ toggleNotification({
520
+ type: 'danger',
521
+ message: formatMessage({
522
+ id: 'content-manager.validation.error',
523
+ defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
524
+ })
525
+ });
526
+ }
479
527
  return;
480
528
  }
529
+ const { data } = handleInvisibleAttributes(transformData(formValues), {
530
+ schema,
531
+ components
532
+ });
481
533
  const res = await publish({
482
534
  collectionType,
483
535
  model,
484
536
  documentId,
485
537
  params: currentDocumentMeta.params
486
- }, transformData(formValues));
538
+ }, data);
487
539
  // Reset form if successful
488
540
  if ('data' in res) {
489
541
  resetForm();
542
+ dispatchGuidedTour({
543
+ type: 'set_completed_actions',
544
+ payload: [
545
+ GUIDED_TOUR_REQUIRED_ACTIONS.contentManager.createContent
546
+ ]
547
+ });
490
548
  }
491
549
  if ('data' in res && collectionType !== SINGLE_TYPES) {
492
550
  /**
493
551
  * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
494
- */ if (idToPublish === 'create') {
552
+ */ if (idToPublish === 'create' && !fromRelationModal) {
495
553
  navigate({
496
554
  pathname: `../${collectionType}/${model}/${res.data.documentId}`,
497
555
  search: rawQuery
498
556
  });
557
+ } else if (fromRelationModal) {
558
+ const newRelation = {
559
+ documentId: res.data.documentId,
560
+ collectionType,
561
+ model,
562
+ params: currentDocumentMeta.params
563
+ };
564
+ /*
565
+ * Update, if needed, the parent relation with the newly published document.
566
+ * Check if in history we have the parent relation otherwise use the
567
+ * rootDocument
568
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
569
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
570
+ const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;
571
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
572
+ try {
573
+ const updateRes = await updateDocumentMutation({
574
+ collectionType: metaDocumentToUpdate.collectionType,
575
+ model: metaDocumentToUpdate.model,
576
+ documentId: metaDocumentToUpdate.collectionType !== SINGLE_TYPES ? metaDocumentToUpdate.documentId : undefined,
577
+ params: metaDocumentToUpdate.params,
578
+ data: dataToUpdate
579
+ });
580
+ if ('error' in updateRes) {
581
+ toggleNotification({
582
+ type: 'danger',
583
+ message: formatAPIError(updateRes.error)
584
+ });
585
+ return;
586
+ }
587
+ } catch (err) {
588
+ toggleNotification({
589
+ type: 'danger',
590
+ message: formatMessage({
591
+ id: 'notification.error',
592
+ defaultMessage: 'An error occurred'
593
+ })
594
+ });
595
+ throw err;
596
+ }
597
+ }
598
+ dispatch({
599
+ type: 'GO_TO_CREATED_RELATION',
600
+ payload: {
601
+ document: newRelation,
602
+ shouldBypassConfirmation: true
603
+ }
604
+ });
499
605
  }
500
606
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
501
607
  setErrors(formatValidationErrors(res.error));
@@ -562,6 +668,7 @@ PublishAction.position = [
562
668
  'relation-modal'
563
669
  ];
564
670
  const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
671
+ const dispatchGuidedTour = useGuidedTour('UpdateAction', (s)=>s.dispatch);
565
672
  const navigate = useNavigate();
566
673
  const { toggleNotification } = useNotification();
567
674
  const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
@@ -569,16 +676,40 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
569
676
  const isCloning = cloneMatch !== null;
570
677
  const { formatMessage } = useIntl();
571
678
  const { create, update, clone, isLoading } = useDocumentActions();
679
+ const { currentDocument: { components } } = useDocumentContext('UpdateAction');
572
680
  const [{ rawQuery }] = useQueryParams();
573
681
  const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
682
+ const { getInitialFormValues } = useDoc();
574
683
  const isSubmitting = useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
575
684
  const modified = useForm('UpdateAction', ({ modified })=>modified);
576
685
  const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
686
+ const initialValues = useForm('UpdateAction', ({ initialValues })=>initialValues);
577
687
  const document = useForm('UpdateAction', ({ values })=>values);
578
688
  const validate = useForm('UpdateAction', (state)=>state.validate);
579
689
  const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
580
- const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
690
+ const resetForm = useForm('UpdateAction', ({ resetForm })=>resetForm);
691
+ const dispatch = useRelationModal('UpdateAction', (state)=>state.dispatch);
692
+ // need to discriminate if the update is coming from a relation modal or in the edit view
693
+ const relationContext = useRelationModal('UpdateAction', ()=>true, false);
694
+ const relationalModalSchema = useRelationModal('UpdateAction', (state)=>state.currentDocument.schema, false);
695
+ const fieldToConnect = useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
696
+ const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
697
+ const documentHistory = useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
698
+ const rootDocumentMeta = useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
699
+ const fromRelationModal = relationContext != undefined;
581
700
  const { currentDocumentMeta } = useDocumentContext('UpdateAction');
701
+ const [updateDocumentMutation] = useUpdateDocumentMutation();
702
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
703
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
704
+ const parentDocumentData = useDocument({
705
+ documentId: parentDocumentMetaToUpdate?.documentId,
706
+ model: parentDocumentMetaToUpdate?.model,
707
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
708
+ params: parentDocumentMetaToUpdate?.params
709
+ }, {
710
+ skip: !parentDocumentMetaToUpdate
711
+ });
712
+ const { schema } = useDoc();
582
713
  const handleUpdate = React.useCallback(async ()=>{
583
714
  setSubmitting(true);
584
715
  try {
@@ -615,62 +746,144 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
615
746
  setErrors(formatValidationErrors(res.error));
616
747
  }
617
748
  } else if (documentId || collectionType === SINGLE_TYPES) {
749
+ const { data } = handleInvisibleAttributes(transformData(document), {
750
+ schema: fromRelationModal ? relationalModalSchema : schema,
751
+ initialValues,
752
+ components
753
+ });
618
754
  const res = await update({
619
755
  collectionType,
620
756
  model,
621
757
  documentId,
622
758
  params: currentDocumentMeta.params
623
- }, transformData(document));
759
+ }, data);
624
760
  if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
625
761
  setErrors(formatValidationErrors(res.error));
626
762
  } else {
627
763
  resetForm();
628
764
  }
629
765
  } else {
766
+ const { data } = handleInvisibleAttributes(transformData(document), {
767
+ schema: fromRelationModal ? relationalModalSchema : schema,
768
+ initialValues,
769
+ components
770
+ });
630
771
  const res = await create({
631
772
  model,
632
773
  params: currentDocumentMeta.params
633
- }, transformData(document));
774
+ }, data);
634
775
  if ('data' in res && collectionType !== SINGLE_TYPES) {
635
- navigate({
636
- pathname: `../${res.data.documentId}`,
637
- search: rawQuery
638
- }, {
639
- replace: true,
640
- relative: 'path'
641
- });
776
+ if (fromRelationModal) {
777
+ const createdRelation = {
778
+ documentId: res.data.documentId,
779
+ collectionType,
780
+ model,
781
+ params: currentDocumentMeta.params
782
+ };
783
+ /*
784
+ * Update, if needed, the parent relation with the newly published document.
785
+ * Check if in history we have the parent relation otherwise use the
786
+ * rootDocument
787
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
788
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
789
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
790
+ try {
791
+ const updateRes = await updateDocumentMutation({
792
+ collectionType: parentDocumentMetaToUpdate.collectionType,
793
+ model: parentDocumentMetaToUpdate.model,
794
+ documentId: parentDocumentMetaToUpdate.collectionType !== SINGLE_TYPES ? parentDocumentMetaToUpdate.documentId : undefined,
795
+ params: parentDocumentMetaToUpdate.params,
796
+ data: {
797
+ ...dataToUpdate
798
+ }
799
+ });
800
+ if ('error' in updateRes) {
801
+ toggleNotification({
802
+ type: 'danger',
803
+ message: formatAPIError(updateRes.error)
804
+ });
805
+ return;
806
+ }
807
+ } catch (err) {
808
+ toggleNotification({
809
+ type: 'danger',
810
+ message: formatMessage({
811
+ id: 'notification.error',
812
+ defaultMessage: 'An error occurred'
813
+ })
814
+ });
815
+ throw err;
816
+ }
817
+ }
818
+ dispatch({
819
+ type: 'GO_TO_CREATED_RELATION',
820
+ payload: {
821
+ document: createdRelation,
822
+ shouldBypassConfirmation: true
823
+ }
824
+ });
825
+ } else {
826
+ navigate({
827
+ pathname: `../${res.data.documentId}`,
828
+ search: rawQuery
829
+ }, {
830
+ replace: true,
831
+ relative: 'path'
832
+ });
833
+ }
642
834
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
643
835
  setErrors(formatValidationErrors(res.error));
644
836
  }
645
837
  }
646
838
  } finally{
839
+ dispatchGuidedTour({
840
+ type: 'set_completed_actions',
841
+ payload: [
842
+ GUIDED_TOUR_REQUIRED_ACTIONS.contentManager.createContent
843
+ ]
844
+ });
647
845
  setSubmitting(false);
648
846
  if (onPreview) {
649
847
  onPreview();
650
848
  }
651
849
  }
652
850
  }, [
851
+ setSubmitting,
852
+ modified,
853
+ validate,
854
+ isCloning,
855
+ documentId,
856
+ collectionType,
857
+ toggleNotification,
858
+ formatMessage,
653
859
  clone,
860
+ model,
654
861
  cloneMatch?.params.origin,
655
- collectionType,
656
- create,
657
862
  currentDocumentMeta.params,
658
863
  document,
659
- documentId,
660
- formatMessage,
661
- formatValidationErrors,
662
- isCloning,
663
- model,
664
- modified,
665
864
  navigate,
666
865
  rawQuery,
667
- resetForm,
668
866
  setErrors,
669
- setSubmitting,
670
- toggleNotification,
867
+ formatValidationErrors,
671
868
  update,
672
- validate,
673
- onPreview
869
+ resetForm,
870
+ create,
871
+ fromRelationModal,
872
+ fieldToConnect,
873
+ documentHistory,
874
+ parentDocumentMetaToUpdate,
875
+ dispatch,
876
+ getInitialFormValues,
877
+ parentDocumentData,
878
+ fieldToConnectUID,
879
+ updateDocumentMutation,
880
+ formatAPIError,
881
+ onPreview,
882
+ initialValues,
883
+ schema,
884
+ components,
885
+ relationalModalSchema,
886
+ dispatchGuidedTour
674
887
  ]);
675
888
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
676
889
  React.useEffect(()=>{