@strapi/content-manager 0.0.0-next.929f36e7cd2888f97e66b5159baa15234a283fca → 0.0.0-next.965570e6e12a33ad098ddb3174a9750fddb03be2

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 (390) 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/LeftMenu.js +35 -33
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +37 -35
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/components/Widgets.js +421 -0
  10. package/dist/admin/components/Widgets.js.map +1 -0
  11. package/dist/admin/components/Widgets.mjs +398 -0
  12. package/dist/admin/components/Widgets.mjs.map +1 -0
  13. package/dist/admin/content-manager.js.map +1 -1
  14. package/dist/admin/content-manager.mjs.map +1 -1
  15. package/dist/admin/history/components/VersionContent.js +24 -3
  16. package/dist/admin/history/components/VersionContent.js.map +1 -1
  17. package/dist/admin/history/components/VersionContent.mjs +25 -4
  18. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  19. package/dist/admin/history/components/VersionHeader.js +6 -0
  20. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  21. package/dist/admin/history/components/VersionHeader.mjs +7 -1
  22. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  23. package/dist/admin/history/pages/History.js +1 -9
  24. package/dist/admin/history/pages/History.js.map +1 -1
  25. package/dist/admin/history/pages/History.mjs +1 -9
  26. package/dist/admin/history/pages/History.mjs.map +1 -1
  27. package/dist/admin/hooks/useDocumentActions.js +20 -8
  28. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  29. package/dist/admin/hooks/useDocumentActions.mjs +21 -9
  30. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  31. package/dist/admin/hooks/useDocumentContext.js +57 -0
  32. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  33. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  34. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  35. package/dist/admin/index.js +81 -5
  36. package/dist/admin/index.js.map +1 -1
  37. package/dist/admin/index.mjs +80 -3
  38. package/dist/admin/index.mjs.map +1 -1
  39. package/dist/admin/layout.js +1 -27
  40. package/dist/admin/layout.js.map +1 -1
  41. package/dist/admin/layout.mjs +2 -9
  42. package/dist/admin/layout.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/EditViewPage.js +95 -86
  44. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  45. package/dist/admin/pages/EditView/EditViewPage.mjs +97 -88
  46. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/Blocker.js +18 -0
  48. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
  49. package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
  50. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
  51. package/dist/admin/pages/EditView/components/DocumentActions.js +324 -120
  52. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/DocumentActions.mjs +331 -127
  54. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  56. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  58. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +61 -26
  60. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
  62. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  64. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  66. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  68. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  70. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  72. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  74. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +14 -3
  76. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +15 -4
  78. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +17 -4
  80. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +18 -5
  82. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +23 -21
  84. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +25 -23
  86. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  88. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  90. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +507 -345
  92. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +507 -347
  94. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +178 -69
  96. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +182 -73
  98. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/UID.js +11 -9
  100. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +11 -9
  102. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  104. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  106. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  108. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  110. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  112. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  114. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  115. package/dist/admin/pages/EditView/components/FormLayout.js +47 -27
  116. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  117. package/dist/admin/pages/EditView/components/FormLayout.mjs +47 -27
  118. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  119. package/dist/admin/pages/EditView/components/InputRenderer.js +18 -15
  120. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  121. package/dist/admin/pages/EditView/components/InputRenderer.mjs +18 -15
  122. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  123. package/dist/admin/pages/EditView/utils/data.js +128 -0
  124. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  125. package/dist/admin/pages/EditView/utils/data.mjs +128 -1
  126. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  127. package/dist/admin/pages/ListView/ListViewPage.js +227 -132
  128. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  129. package/dist/admin/pages/ListView/ListViewPage.mjs +229 -134
  130. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  131. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  132. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  133. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  134. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  135. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +12 -2
  136. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  137. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +12 -2
  138. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  139. package/dist/admin/pages/ListView/components/Filters.js +4 -1
  140. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  141. package/dist/admin/pages/ListView/components/Filters.mjs +4 -1
  142. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  143. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  144. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  145. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  146. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  147. package/dist/admin/preview/components/InputPopover.js +73 -0
  148. package/dist/admin/preview/components/InputPopover.js.map +1 -0
  149. package/dist/admin/preview/components/InputPopover.mjs +70 -0
  150. package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
  151. package/dist/admin/preview/components/PreviewHeader.js +3 -6
  152. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  153. package/dist/admin/preview/components/PreviewHeader.mjs +3 -6
  154. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  155. package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
  156. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  157. package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
  158. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  159. package/dist/admin/preview/hooks/usePreviewInputManager.js +67 -0
  160. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  161. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +46 -0
  162. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  163. package/dist/admin/preview/pages/Preview.js +172 -78
  164. package/dist/admin/preview/pages/Preview.js.map +1 -1
  165. package/dist/admin/preview/pages/Preview.mjs +174 -80
  166. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  167. package/dist/admin/preview/utils/constants.js +22 -0
  168. package/dist/admin/preview/utils/constants.js.map +1 -0
  169. package/dist/admin/preview/utils/constants.mjs +19 -0
  170. package/dist/admin/preview/utils/constants.mjs.map +1 -0
  171. package/dist/admin/preview/utils/getSendMessage.js +22 -0
  172. package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
  173. package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
  174. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
  175. package/dist/admin/preview/utils/previewScript.js +450 -0
  176. package/dist/admin/preview/utils/previewScript.js.map +1 -0
  177. package/dist/admin/preview/utils/previewScript.mjs +448 -0
  178. package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
  179. package/dist/admin/services/api.js +4 -1
  180. package/dist/admin/services/api.js.map +1 -1
  181. package/dist/admin/services/api.mjs +4 -1
  182. package/dist/admin/services/api.mjs.map +1 -1
  183. package/dist/admin/services/documents.js +42 -16
  184. package/dist/admin/services/documents.js.map +1 -1
  185. package/dist/admin/services/documents.mjs +42 -16
  186. package/dist/admin/services/documents.mjs.map +1 -1
  187. package/dist/admin/services/homepage.js +30 -0
  188. package/dist/admin/services/homepage.js.map +1 -0
  189. package/dist/admin/services/homepage.mjs +28 -0
  190. package/dist/admin/services/homepage.mjs.map +1 -0
  191. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  192. package/dist/admin/src/components/Widgets.d.ts +4 -0
  193. package/dist/admin/src/content-manager.d.ts +0 -3
  194. package/dist/admin/src/exports.d.ts +1 -0
  195. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  196. package/dist/admin/src/history/pages/History.d.ts +1 -1
  197. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  198. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  199. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  200. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
  201. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  202. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  203. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  204. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +73 -7
  205. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  206. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  207. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -8
  208. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +2 -2
  209. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  210. package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
  211. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +4 -0
  212. package/dist/admin/src/preview/pages/Preview.d.ts +10 -1
  213. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  214. package/dist/admin/src/preview/utils/constants.d.ts +20 -0
  215. package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
  216. package/dist/admin/src/preview/utils/previewScript.d.ts +23 -0
  217. package/dist/admin/src/services/api.d.ts +1 -1
  218. package/dist/admin/src/services/components.d.ts +2 -2
  219. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  220. package/dist/admin/src/services/documents.d.ts +23 -17
  221. package/dist/admin/src/services/homepage.d.ts +5 -0
  222. package/dist/admin/src/services/init.d.ts +1 -1
  223. package/dist/admin/src/services/relations.d.ts +2 -2
  224. package/dist/admin/src/services/uid.d.ts +3 -3
  225. package/dist/admin/src/utils/api.d.ts +1 -1
  226. package/dist/admin/src/utils/validation.d.ts +1 -0
  227. package/dist/admin/translations/en.json.js +10 -1
  228. package/dist/admin/translations/en.json.js.map +1 -1
  229. package/dist/admin/translations/en.json.mjs +10 -1
  230. package/dist/admin/translations/en.json.mjs.map +1 -1
  231. package/dist/admin/translations/es.json.js +6 -2
  232. package/dist/admin/translations/es.json.js.map +1 -1
  233. package/dist/admin/translations/es.json.mjs +6 -2
  234. package/dist/admin/translations/es.json.mjs.map +1 -1
  235. package/dist/admin/translations/fr.json.js +11 -2
  236. package/dist/admin/translations/fr.json.js.map +1 -1
  237. package/dist/admin/translations/fr.json.mjs +11 -2
  238. package/dist/admin/translations/fr.json.mjs.map +1 -1
  239. package/dist/admin/translations/ru.json.js +235 -226
  240. package/dist/admin/translations/ru.json.js.map +1 -1
  241. package/dist/admin/translations/ru.json.mjs +230 -226
  242. package/dist/admin/translations/ru.json.mjs.map +1 -1
  243. package/dist/admin/utils/api.js +1 -1
  244. package/dist/admin/utils/api.js.map +1 -1
  245. package/dist/admin/utils/api.mjs +1 -1
  246. package/dist/admin/utils/api.mjs.map +1 -1
  247. package/dist/admin/utils/validation.js +19 -7
  248. package/dist/admin/utils/validation.js.map +1 -1
  249. package/dist/admin/utils/validation.mjs +19 -7
  250. package/dist/admin/utils/validation.mjs.map +1 -1
  251. package/dist/server/controllers/content-types.js +11 -1
  252. package/dist/server/controllers/content-types.js.map +1 -1
  253. package/dist/server/controllers/content-types.mjs +11 -1
  254. package/dist/server/controllers/content-types.mjs.map +1 -1
  255. package/dist/server/controllers/index.js +3 -1
  256. package/dist/server/controllers/index.js.map +1 -1
  257. package/dist/server/controllers/index.mjs +3 -1
  258. package/dist/server/controllers/index.mjs.map +1 -1
  259. package/dist/server/controllers/relations.js +2 -2
  260. package/dist/server/controllers/relations.js.map +1 -1
  261. package/dist/server/controllers/relations.mjs +2 -2
  262. package/dist/server/controllers/relations.mjs.map +1 -1
  263. package/dist/server/controllers/validation/index.js +14 -2
  264. package/dist/server/controllers/validation/index.js.map +1 -1
  265. package/dist/server/controllers/validation/index.mjs +14 -2
  266. package/dist/server/controllers/validation/index.mjs.map +1 -1
  267. package/dist/server/history/services/lifecycles.js +23 -19
  268. package/dist/server/history/services/lifecycles.js.map +1 -1
  269. package/dist/server/history/services/lifecycles.mjs +23 -19
  270. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  271. package/dist/server/homepage/controllers/homepage.js +62 -0
  272. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  273. package/dist/server/homepage/controllers/homepage.mjs +41 -0
  274. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  275. package/dist/server/homepage/controllers/index.js +10 -0
  276. package/dist/server/homepage/controllers/index.js.map +1 -0
  277. package/dist/server/homepage/controllers/index.mjs +8 -0
  278. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  279. package/dist/server/homepage/index.js +14 -0
  280. package/dist/server/homepage/index.js.map +1 -0
  281. package/dist/server/homepage/index.mjs +12 -0
  282. package/dist/server/homepage/index.mjs.map +1 -0
  283. package/dist/server/homepage/routes/homepage.js +36 -0
  284. package/dist/server/homepage/routes/homepage.js.map +1 -0
  285. package/dist/server/homepage/routes/homepage.mjs +34 -0
  286. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  287. package/dist/server/homepage/routes/index.js +13 -0
  288. package/dist/server/homepage/routes/index.js.map +1 -0
  289. package/dist/server/homepage/routes/index.mjs +11 -0
  290. package/dist/server/homepage/routes/index.mjs.map +1 -0
  291. package/dist/server/homepage/services/homepage.js +197 -0
  292. package/dist/server/homepage/services/homepage.js.map +1 -0
  293. package/dist/server/homepage/services/homepage.mjs +195 -0
  294. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  295. package/dist/server/homepage/services/index.js +10 -0
  296. package/dist/server/homepage/services/index.js.map +1 -0
  297. package/dist/server/homepage/services/index.mjs +8 -0
  298. package/dist/server/homepage/services/index.mjs.map +1 -0
  299. package/dist/server/preview/services/preview-config.js +5 -1
  300. package/dist/server/preview/services/preview-config.js.map +1 -1
  301. package/dist/server/preview/services/preview-config.mjs +5 -1
  302. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  303. package/dist/server/preview/services/preview.js +4 -1
  304. package/dist/server/preview/services/preview.js.map +1 -1
  305. package/dist/server/preview/services/preview.mjs +4 -1
  306. package/dist/server/preview/services/preview.mjs.map +1 -1
  307. package/dist/server/routes/index.js +3 -1
  308. package/dist/server/routes/index.js.map +1 -1
  309. package/dist/server/routes/index.mjs +3 -1
  310. package/dist/server/routes/index.mjs.map +1 -1
  311. package/dist/server/services/data-mapper.js +4 -1
  312. package/dist/server/services/data-mapper.js.map +1 -1
  313. package/dist/server/services/data-mapper.mjs +4 -1
  314. package/dist/server/services/data-mapper.mjs.map +1 -1
  315. package/dist/server/services/document-manager.js +8 -1
  316. package/dist/server/services/document-manager.js.map +1 -1
  317. package/dist/server/services/document-manager.mjs +8 -1
  318. package/dist/server/services/document-manager.mjs.map +1 -1
  319. package/dist/server/services/document-metadata.js +3 -1
  320. package/dist/server/services/document-metadata.js.map +1 -1
  321. package/dist/server/services/document-metadata.mjs +3 -1
  322. package/dist/server/services/document-metadata.mjs.map +1 -1
  323. package/dist/server/services/index.js +3 -1
  324. package/dist/server/services/index.js.map +1 -1
  325. package/dist/server/services/index.mjs +3 -1
  326. package/dist/server/services/index.mjs.map +1 -1
  327. package/dist/server/services/utils/configuration/attributes.js +1 -1
  328. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  329. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  330. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  331. package/dist/server/services/utils/configuration/layouts.js +1 -1
  332. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  333. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  334. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  335. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  336. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  337. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  338. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  339. package/dist/server/services/utils/populate.js +11 -0
  340. package/dist/server/services/utils/populate.js.map +1 -1
  341. package/dist/server/services/utils/populate.mjs +11 -0
  342. package/dist/server/services/utils/populate.mjs.map +1 -1
  343. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  344. package/dist/server/src/controllers/index.d.ts.map +1 -1
  345. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  346. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  347. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  348. package/dist/server/src/homepage/controllers/homepage.d.ts +8 -0
  349. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  350. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  351. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  352. package/dist/server/src/homepage/index.d.ts +23 -0
  353. package/dist/server/src/homepage/index.d.ts.map +1 -0
  354. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  355. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  356. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  357. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  358. package/dist/server/src/homepage/services/homepage.d.ts +14 -0
  359. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  360. package/dist/server/src/homepage/services/index.d.ts +16 -0
  361. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  362. package/dist/server/src/index.d.ts +15 -0
  363. package/dist/server/src/index.d.ts.map +1 -1
  364. package/dist/server/src/preview/services/index.d.ts +1 -0
  365. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  366. package/dist/server/src/preview/services/preview-config.d.ts +1 -0
  367. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  368. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  369. package/dist/server/src/preview/utils.d.ts +1 -0
  370. package/dist/server/src/preview/utils.d.ts.map +1 -1
  371. package/dist/server/src/routes/index.d.ts +1 -0
  372. package/dist/server/src/routes/index.d.ts.map +1 -1
  373. package/dist/server/src/services/data-mapper.d.ts +1 -0
  374. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  375. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  376. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  377. package/dist/server/src/services/index.d.ts +14 -0
  378. package/dist/server/src/services/index.d.ts.map +1 -1
  379. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  380. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  381. package/dist/shared/contracts/collection-types.d.ts +0 -1
  382. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  383. package/dist/shared/contracts/homepage.d.ts +38 -0
  384. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  385. package/package.json +12 -10
  386. package/dist/admin/features/DocumentContext.js +0 -71
  387. package/dist/admin/features/DocumentContext.js.map +0 -1
  388. package/dist/admin/features/DocumentContext.mjs +0 -49
  389. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  390. package/dist/admin/src/features/DocumentContext.d.ts +0 -53
@@ -1,23 +1,60 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
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, Typography, Radio, Button, VisuallyHidden, Dialog, Modal } from '@strapi/design-system';
5
- import { Cross, WarningCircle, More } from '@strapi/icons';
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
+ 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
- import { useDocumentContext } from '../../../features/DocumentContext.mjs';
13
14
  import { useDocumentRBAC } from '../../../features/DocumentRBAC.mjs';
14
- import { useDoc } from '../../../hooks/useDocument.mjs';
15
+ import { useDocument, useDoc } from '../../../hooks/useDocument.mjs';
15
16
  import { useDocumentActions } from '../../../hooks/useDocumentActions.mjs';
17
+ import { useDocumentContext } from '../../../hooks/useDocumentContext.mjs';
18
+ import { usePreviewContext } from '../../../preview/pages/Preview.mjs';
16
19
  import { LIST_PATH, CLONE_PATH } from '../../../router.mjs';
17
- import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery } from '../../../services/documents.mjs';
18
- import { buildValidParams, isBaseQueryError } from '../../../utils/api.mjs';
20
+ import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery, useUpdateDocumentMutation } from '../../../services/documents.mjs';
21
+ import { isBaseQueryError, buildValidParams } from '../../../utils/api.mjs';
19
22
  import { getTranslation } from '../../../utils/translations.mjs';
23
+ import { handleInvisibleAttributes } from '../utils/data.mjs';
24
+ import { useRelationModal } from './FormInputs/Relations/RelationModal.mjs';
20
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
+ };
21
58
  const DocumentActions = ({ actions })=>{
22
59
  const { formatMessage } = useIntl();
23
60
  const [primaryAction, secondaryAction, ...restActions] = actions.filter((action)=>{
@@ -38,23 +75,33 @@ const DocumentActions = ({ actions })=>{
38
75
  alignItems: "stretch",
39
76
  width: "100%",
40
77
  children: [
41
- /*#__PURE__*/ jsxs(Flex, {
42
- gap: 2,
43
- children: [
44
- /*#__PURE__*/ jsx(DocumentActionButton, {
45
- ...primaryAction,
46
- variant: primaryAction.variant || 'default'
47
- }),
48
- restActions.length > 0 ? /*#__PURE__*/ jsx(DocumentActionsMenu, {
49
- actions: restActions,
50
- label: formatMessage({
51
- id: 'content-manager.containers.edit.panels.default.more-actions',
52
- defaultMessage: 'More document actions'
53
- })
54
- }) : null
55
- ]
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
+ })
56
98
  }),
57
- 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, {
58
105
  ...secondaryAction,
59
106
  variant: secondaryAction.variant || 'secondary'
60
107
  }) : null
@@ -116,11 +163,6 @@ const DocumentActionButton = (action)=>{
116
163
  ]
117
164
  });
118
165
  };
119
- const MenuItem = styled(Menu.Item)`
120
- &:hover {
121
- background: ${({ theme, isVariantDanger, isDisabled })=>isVariantDanger && !isDisabled ? theme.colors.danger100 : 'neutral'};
122
- }
123
- `;
124
166
  const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })=>{
125
167
  const [isOpen, setIsOpen] = React.useState(false);
126
168
  const [dialogId, setDialogId] = React.useState(null);
@@ -182,27 +224,19 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
182
224
  popoverPlacement: "bottom-end",
183
225
  children: [
184
226
  actions.map((action)=>{
185
- return /*#__PURE__*/ jsx(MenuItem, {
227
+ return /*#__PURE__*/ jsx(Menu.Item, {
186
228
  disabled: action.disabled,
187
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),
188
230
  display: "block",
189
- isVariantDanger: action.variant === 'danger',
190
- isDisabled: action.disabled,
231
+ variant: action.variant === 'danger' ? action.variant : 'default',
232
+ startIcon: action.icon,
191
233
  children: /*#__PURE__*/ jsx(Flex, {
192
234
  justifyContent: "space-between",
193
235
  gap: 4,
194
- children: /*#__PURE__*/ jsxs(Flex, {
195
- color: !action.disabled ? convertActionVariantToColor(action.variant) : 'inherit',
236
+ children: /*#__PURE__*/ jsx(Flex, {
196
237
  gap: 2,
197
238
  tag: "span",
198
- children: [
199
- /*#__PURE__*/ jsx(Flex, {
200
- tag: "span",
201
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : 'inherit',
202
- children: action.icon
203
- }),
204
- action.label
205
- ]
239
+ children: action.label
206
240
  })
207
241
  })
208
242
  }, action.id);
@@ -230,30 +264,6 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
230
264
  ]
231
265
  });
232
266
  };
233
- const convertActionVariantToColor = (variant = 'secondary')=>{
234
- switch(variant){
235
- case 'danger':
236
- return 'danger600';
237
- case 'secondary':
238
- return undefined;
239
- case 'success':
240
- return 'success600';
241
- default:
242
- return 'primary600';
243
- }
244
- };
245
- const convertActionVariantToIconColor = (variant = 'secondary')=>{
246
- switch(variant){
247
- case 'danger':
248
- return 'danger600';
249
- case 'secondary':
250
- return 'neutral500';
251
- case 'success':
252
- return 'success600';
253
- default:
254
- return 'primary600';
255
- }
256
- };
257
267
  const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, isOpen, variant = 'secondary', loading })=>{
258
268
  const { formatMessage } = useIntl();
259
269
  const handleClose = async ()=>{
@@ -350,8 +360,8 @@ const transformData = (data)=>{
350
360
  };
351
361
  /* -------------------------------------------------------------------------------------------------
352
362
  * DocumentActionComponents
353
- * -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document, onPreview, fromPreview = false, fromRelationModal = false })=>{
354
- const schema = useDocumentContext('PublishAction', (state)=>state.document.schema);
363
+ * -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document })=>{
364
+ const { currentDocument: { schema } } = useDocumentContext('PublishAction');
355
365
  const navigate = useNavigate();
356
366
  const { toggleNotification } = useNotification();
357
367
  const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
@@ -359,15 +369,16 @@ const transformData = (data)=>{
359
369
  const isCloning = useMatch(CLONE_PATH) !== null;
360
370
  const { id } = useParams();
361
371
  const { formatMessage } = useIntl();
362
- const canPublish = useDocumentRBAC('PublishAction', ({ canPublish })=>canPublish);
363
- const { publish, isLoading } = useDocumentActions(fromPreview, fromRelationModal);
372
+ const { canPublish, canReadFields } = useDocumentRBAC('PublishAction', ({ canPublish, canReadFields })=>({
373
+ canPublish,
374
+ canReadFields
375
+ }));
376
+ const { publish, isLoading } = useDocumentActions();
377
+ const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
364
378
  const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = useLazyGetDraftRelationCountQuery();
365
379
  const [localCountOfDraftRelations, setLocalCountOfDraftRelations] = React.useState(0);
366
380
  const [serverCountOfDraftRelations, setServerCountOfDraftRelations] = React.useState(0);
367
- const [{ query, rawQuery }] = useQueryParams();
368
- const params = React.useMemo(()=>buildValidParams(query), [
369
- query
370
- ]);
381
+ const [{ rawQuery }] = useQueryParams();
371
382
  const modified = useForm('PublishAction', ({ modified })=>modified);
372
383
  const setSubmitting = useForm('PublishAction', ({ setSubmitting })=>setSubmitting);
373
384
  const isSubmitting = useForm('PublishAction', ({ isSubmitting })=>isSubmitting);
@@ -375,8 +386,20 @@ const transformData = (data)=>{
375
386
  const setErrors = useForm('PublishAction', (state)=>state.setErrors);
376
387
  const formValues = useForm('PublishAction', ({ values })=>values);
377
388
  const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
378
- const rootDocumentMeta = useDocumentContext('PublishAction', (state)=>state.rootDocumentMeta);
379
- const currentDocumentMeta = useDocumentContext('PublishAction', (state)=>state.meta);
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);
399
+ const { currentDocumentMeta } = useDocumentContext('PublishAction');
400
+ const [updateDocumentMutation] = useUpdateDocumentMutation();
401
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
402
+ const idToPublish = currentDocumentMeta.documentId || id;
380
403
  React.useEffect(()=>{
381
404
  if (isErrorDraftRelations) {
382
405
  toggleNotification({
@@ -440,7 +463,7 @@ const transformData = (data)=>{
440
463
  collectionType,
441
464
  model,
442
465
  documentId,
443
- params
466
+ params: currentDocumentMeta.params
444
467
  });
445
468
  if (error) {
446
469
  throw error;
@@ -457,8 +480,18 @@ const transformData = (data)=>{
457
480
  countDraftRelations,
458
481
  collectionType,
459
482
  model,
460
- params
483
+ currentDocumentMeta.params
461
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();
462
495
  const isDocumentPublished = (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
463
496
  if (!schema?.options?.draftAndPublish) {
464
497
  return null;
@@ -470,34 +503,105 @@ const transformData = (data)=>{
470
503
  status: 'published'
471
504
  });
472
505
  if (errors) {
473
- toggleNotification({
474
- type: 'danger',
475
- message: formatMessage({
476
- id: 'content-manager.validation.error',
477
- defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
478
- })
506
+ const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
507
+ const attribute = schema.attributes[fieldName];
508
+ return attribute?.required && !(canReadFields ?? []).includes(fieldName);
479
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
+ }
480
527
  return;
481
528
  }
482
- const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
529
+ const { data } = handleInvisibleAttributes(transformData(formValues), {
530
+ schema,
531
+ components
532
+ });
483
533
  const res = await publish({
484
534
  collectionType,
485
535
  model,
486
536
  documentId,
487
- params: isPublishingRelation ? currentDocumentMeta.params : params
488
- }, transformData(formValues));
537
+ params: currentDocumentMeta.params
538
+ }, data);
489
539
  // Reset form if successful
490
540
  if ('data' in res) {
491
541
  resetForm();
542
+ dispatchGuidedTour({
543
+ type: 'set_completed_actions',
544
+ payload: [
545
+ GUIDED_TOUR_REQUIRED_ACTIONS.contentManager.createContent
546
+ ]
547
+ });
492
548
  }
493
549
  if ('data' in res && collectionType !== SINGLE_TYPES) {
494
550
  /**
495
551
  * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
496
- */ if (id === 'create') {
552
+ */ if (idToPublish === 'create' && !fromRelationModal) {
497
553
  navigate({
498
554
  pathname: `../${collectionType}/${model}/${res.data.documentId}`,
499
555
  search: rawQuery
500
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
+ });
501
605
  }
502
606
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
503
607
  setErrors(formatValidationErrors(res.error));
@@ -563,27 +667,49 @@ PublishAction.position = [
563
667
  'preview',
564
668
  'relation-modal'
565
669
  ];
566
- const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview, fromPreview = false, fromRelationModal = false })=>{
670
+ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
671
+ const dispatchGuidedTour = useGuidedTour('UpdateAction', (s)=>s.dispatch);
567
672
  const navigate = useNavigate();
568
673
  const { toggleNotification } = useNotification();
569
674
  const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
570
675
  const cloneMatch = useMatch(CLONE_PATH);
571
676
  const isCloning = cloneMatch !== null;
572
677
  const { formatMessage } = useIntl();
573
- const { create, update, clone, isLoading } = useDocumentActions(fromPreview, fromRelationModal);
574
- const [{ query, rawQuery }] = useQueryParams();
575
- const params = React.useMemo(()=>buildValidParams(query), [
576
- query
577
- ]);
678
+ const { create, update, clone, isLoading } = useDocumentActions();
679
+ const { currentDocument: { components } } = useDocumentContext('UpdateAction');
680
+ const [{ rawQuery }] = useQueryParams();
681
+ const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
682
+ const { getInitialFormValues } = useDoc();
578
683
  const isSubmitting = useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
579
684
  const modified = useForm('UpdateAction', ({ modified })=>modified);
580
685
  const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
686
+ const initialValues = useForm('UpdateAction', ({ initialValues })=>initialValues);
581
687
  const document = useForm('UpdateAction', ({ values })=>values);
582
688
  const validate = useForm('UpdateAction', (state)=>state.validate);
583
689
  const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
584
- const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
585
- const rootDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.rootDocumentMeta);
586
- const currentDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.meta);
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;
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();
587
713
  const handleUpdate = React.useCallback(async ()=>{
588
714
  setSubmitting(true);
589
715
  try {
@@ -607,7 +733,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
607
733
  const res = await clone({
608
734
  model,
609
735
  documentId: cloneMatch.params.origin,
610
- params
736
+ params: currentDocumentMeta.params
611
737
  }, transformData(document));
612
738
  if ('data' in res) {
613
739
  navigate({
@@ -620,66 +746,144 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
620
746
  setErrors(formatValidationErrors(res.error));
621
747
  }
622
748
  } else if (documentId || collectionType === SINGLE_TYPES) {
623
- const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
749
+ const { data } = handleInvisibleAttributes(transformData(document), {
750
+ schema: fromRelationModal ? relationalModalSchema : schema,
751
+ initialValues,
752
+ components
753
+ });
624
754
  const res = await update({
625
755
  collectionType,
626
756
  model,
627
757
  documentId,
628
- params: isEditingRelation ? currentDocumentMeta.params : params
629
- }, transformData(document));
758
+ params: currentDocumentMeta.params
759
+ }, data);
630
760
  if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
631
761
  setErrors(formatValidationErrors(res.error));
632
762
  } else {
633
763
  resetForm();
634
764
  }
635
765
  } else {
766
+ const { data } = handleInvisibleAttributes(transformData(document), {
767
+ schema: fromRelationModal ? relationalModalSchema : schema,
768
+ initialValues,
769
+ components
770
+ });
636
771
  const res = await create({
637
772
  model,
638
- params
639
- }, transformData(document));
773
+ params: currentDocumentMeta.params
774
+ }, data);
640
775
  if ('data' in res && collectionType !== SINGLE_TYPES) {
641
- navigate({
642
- pathname: `../${res.data.documentId}`,
643
- search: rawQuery
644
- }, {
645
- replace: true,
646
- relative: 'path'
647
- });
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
+ }
648
834
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
649
835
  setErrors(formatValidationErrors(res.error));
650
836
  }
651
837
  }
652
838
  } finally{
839
+ dispatchGuidedTour({
840
+ type: 'set_completed_actions',
841
+ payload: [
842
+ GUIDED_TOUR_REQUIRED_ACTIONS.contentManager.createContent
843
+ ]
844
+ });
653
845
  setSubmitting(false);
654
846
  if (onPreview) {
655
847
  onPreview();
656
848
  }
657
849
  }
658
850
  }, [
851
+ setSubmitting,
852
+ modified,
853
+ validate,
854
+ isCloning,
855
+ documentId,
856
+ collectionType,
857
+ toggleNotification,
858
+ formatMessage,
659
859
  clone,
860
+ model,
660
861
  cloneMatch?.params.origin,
661
- collectionType,
662
- create,
663
- currentDocumentMeta.documentId,
664
862
  currentDocumentMeta.params,
665
863
  document,
666
- documentId,
667
- formatMessage,
668
- formatValidationErrors,
669
- isCloning,
670
- model,
671
- modified,
672
864
  navigate,
673
- onPreview,
674
- params,
675
865
  rawQuery,
676
- resetForm,
677
- rootDocumentMeta.documentId,
678
866
  setErrors,
679
- setSubmitting,
680
- toggleNotification,
867
+ formatValidationErrors,
681
868
  update,
682
- validate
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
683
887
  ]);
684
888
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
685
889
  React.useEffect(()=>{