@strapi/content-manager 0.0.0-next.8c98bb4ad3e89fc5a3f45b1925795444d17042d6 → 0.0.0-next.8f0cdd4f9e4697ffed86c783465297fe532713f8

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 (356) 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 +34 -30
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +36 -32
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/components/Widgets.js +414 -0
  10. package/dist/admin/components/Widgets.js.map +1 -0
  11. package/dist/admin/components/Widgets.mjs +391 -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 +105 -89
  44. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  45. package/dist/admin/pages/EditView/EditViewPage.mjs +107 -91
  46. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/DocumentActions.js +314 -120
  48. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/DocumentActions.mjs +321 -127
  50. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  52. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  54. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +61 -26
  56. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
  58. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  60. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  62. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  64. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  66. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  68. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  70. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +14 -3
  72. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +15 -4
  74. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +17 -4
  76. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +18 -5
  78. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +23 -21
  80. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +25 -23
  82. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  84. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  86. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +507 -345
  88. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +507 -347
  90. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +178 -69
  92. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +182 -73
  94. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/UID.js +11 -9
  96. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +11 -9
  98. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  100. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  102. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  104. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  106. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  108. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  110. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormLayout.js +47 -27
  112. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormLayout.mjs +47 -27
  114. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  115. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -10
  116. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  117. package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -10
  118. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  119. package/dist/admin/pages/EditView/utils/data.js +103 -0
  120. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  121. package/dist/admin/pages/EditView/utils/data.mjs +103 -1
  122. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  123. package/dist/admin/pages/ListView/ListViewPage.js +227 -132
  124. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  125. package/dist/admin/pages/ListView/ListViewPage.mjs +229 -134
  126. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  127. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  128. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  129. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  130. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  131. package/dist/admin/pages/ListView/components/Filters.js +4 -1
  132. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  133. package/dist/admin/pages/ListView/components/Filters.mjs +4 -1
  134. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  135. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  136. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  137. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  138. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  139. package/dist/admin/preview/components/PreviewHeader.js +3 -6
  140. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  141. package/dist/admin/preview/components/PreviewHeader.mjs +3 -6
  142. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  143. package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
  144. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  145. package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
  146. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  147. package/dist/admin/preview/pages/Preview.js +155 -97
  148. package/dist/admin/preview/pages/Preview.js.map +1 -1
  149. package/dist/admin/preview/pages/Preview.mjs +156 -98
  150. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  151. package/dist/admin/services/api.js +3 -1
  152. package/dist/admin/services/api.js.map +1 -1
  153. package/dist/admin/services/api.mjs +3 -1
  154. package/dist/admin/services/api.mjs.map +1 -1
  155. package/dist/admin/services/documents.js +32 -16
  156. package/dist/admin/services/documents.js.map +1 -1
  157. package/dist/admin/services/documents.mjs +32 -16
  158. package/dist/admin/services/documents.mjs.map +1 -1
  159. package/dist/admin/services/homepage.js +39 -0
  160. package/dist/admin/services/homepage.js.map +1 -0
  161. package/dist/admin/services/homepage.mjs +36 -0
  162. package/dist/admin/services/homepage.mjs.map +1 -0
  163. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  164. package/dist/admin/src/components/Widgets.d.ts +4 -0
  165. package/dist/admin/src/content-manager.d.ts +0 -3
  166. package/dist/admin/src/exports.d.ts +1 -0
  167. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  168. package/dist/admin/src/history/pages/History.d.ts +1 -1
  169. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  170. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  171. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  172. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  173. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  174. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  175. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +73 -7
  176. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  177. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  178. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -8
  179. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  180. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  181. package/dist/admin/src/preview/pages/Preview.d.ts +2 -1
  182. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  183. package/dist/admin/src/services/api.d.ts +1 -1
  184. package/dist/admin/src/services/components.d.ts +2 -2
  185. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  186. package/dist/admin/src/services/documents.d.ts +23 -17
  187. package/dist/admin/src/services/homepage.d.ts +9 -0
  188. package/dist/admin/src/services/init.d.ts +1 -1
  189. package/dist/admin/src/services/relations.d.ts +2 -2
  190. package/dist/admin/src/services/uid.d.ts +3 -3
  191. package/dist/admin/src/utils/api.d.ts +1 -1
  192. package/dist/admin/src/utils/validation.d.ts +1 -0
  193. package/dist/admin/translations/en.json.js +9 -1
  194. package/dist/admin/translations/en.json.js.map +1 -1
  195. package/dist/admin/translations/en.json.mjs +9 -1
  196. package/dist/admin/translations/en.json.mjs.map +1 -1
  197. package/dist/admin/translations/es.json.js +5 -2
  198. package/dist/admin/translations/es.json.js.map +1 -1
  199. package/dist/admin/translations/es.json.mjs +5 -2
  200. package/dist/admin/translations/es.json.mjs.map +1 -1
  201. package/dist/admin/translations/fr.json.js +10 -2
  202. package/dist/admin/translations/fr.json.js.map +1 -1
  203. package/dist/admin/translations/fr.json.mjs +10 -2
  204. package/dist/admin/translations/fr.json.mjs.map +1 -1
  205. package/dist/admin/translations/ru.json.js +235 -226
  206. package/dist/admin/translations/ru.json.js.map +1 -1
  207. package/dist/admin/translations/ru.json.mjs +230 -226
  208. package/dist/admin/translations/ru.json.mjs.map +1 -1
  209. package/dist/admin/utils/api.js +1 -1
  210. package/dist/admin/utils/api.js.map +1 -1
  211. package/dist/admin/utils/api.mjs +1 -1
  212. package/dist/admin/utils/api.mjs.map +1 -1
  213. package/dist/admin/utils/validation.js +19 -7
  214. package/dist/admin/utils/validation.js.map +1 -1
  215. package/dist/admin/utils/validation.mjs +19 -7
  216. package/dist/admin/utils/validation.mjs.map +1 -1
  217. package/dist/server/controllers/content-types.js +11 -1
  218. package/dist/server/controllers/content-types.js.map +1 -1
  219. package/dist/server/controllers/content-types.mjs +11 -1
  220. package/dist/server/controllers/content-types.mjs.map +1 -1
  221. package/dist/server/controllers/index.js +3 -1
  222. package/dist/server/controllers/index.js.map +1 -1
  223. package/dist/server/controllers/index.mjs +3 -1
  224. package/dist/server/controllers/index.mjs.map +1 -1
  225. package/dist/server/controllers/relations.js +2 -2
  226. package/dist/server/controllers/relations.js.map +1 -1
  227. package/dist/server/controllers/relations.mjs +2 -2
  228. package/dist/server/controllers/relations.mjs.map +1 -1
  229. package/dist/server/controllers/validation/index.js +14 -2
  230. package/dist/server/controllers/validation/index.js.map +1 -1
  231. package/dist/server/controllers/validation/index.mjs +14 -2
  232. package/dist/server/controllers/validation/index.mjs.map +1 -1
  233. package/dist/server/history/services/lifecycles.js +23 -19
  234. package/dist/server/history/services/lifecycles.js.map +1 -1
  235. package/dist/server/history/services/lifecycles.mjs +23 -19
  236. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  237. package/dist/server/homepage/controllers/homepage.js +62 -0
  238. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  239. package/dist/server/homepage/controllers/homepage.mjs +41 -0
  240. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  241. package/dist/server/homepage/controllers/index.js +10 -0
  242. package/dist/server/homepage/controllers/index.js.map +1 -0
  243. package/dist/server/homepage/controllers/index.mjs +8 -0
  244. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  245. package/dist/server/homepage/index.js +14 -0
  246. package/dist/server/homepage/index.js.map +1 -0
  247. package/dist/server/homepage/index.mjs +12 -0
  248. package/dist/server/homepage/index.mjs.map +1 -0
  249. package/dist/server/homepage/routes/homepage.js +36 -0
  250. package/dist/server/homepage/routes/homepage.js.map +1 -0
  251. package/dist/server/homepage/routes/homepage.mjs +34 -0
  252. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  253. package/dist/server/homepage/routes/index.js +13 -0
  254. package/dist/server/homepage/routes/index.js.map +1 -0
  255. package/dist/server/homepage/routes/index.mjs +11 -0
  256. package/dist/server/homepage/routes/index.mjs.map +1 -0
  257. package/dist/server/homepage/services/homepage.js +197 -0
  258. package/dist/server/homepage/services/homepage.js.map +1 -0
  259. package/dist/server/homepage/services/homepage.mjs +195 -0
  260. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  261. package/dist/server/homepage/services/index.js +10 -0
  262. package/dist/server/homepage/services/index.js.map +1 -0
  263. package/dist/server/homepage/services/index.mjs +8 -0
  264. package/dist/server/homepage/services/index.mjs.map +1 -0
  265. package/dist/server/preview/services/preview-config.js +5 -1
  266. package/dist/server/preview/services/preview-config.js.map +1 -1
  267. package/dist/server/preview/services/preview-config.mjs +5 -1
  268. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  269. package/dist/server/preview/services/preview.js +4 -1
  270. package/dist/server/preview/services/preview.js.map +1 -1
  271. package/dist/server/preview/services/preview.mjs +4 -1
  272. package/dist/server/preview/services/preview.mjs.map +1 -1
  273. package/dist/server/routes/index.js +3 -1
  274. package/dist/server/routes/index.js.map +1 -1
  275. package/dist/server/routes/index.mjs +3 -1
  276. package/dist/server/routes/index.mjs.map +1 -1
  277. package/dist/server/services/data-mapper.js +4 -1
  278. package/dist/server/services/data-mapper.js.map +1 -1
  279. package/dist/server/services/data-mapper.mjs +4 -1
  280. package/dist/server/services/data-mapper.mjs.map +1 -1
  281. package/dist/server/services/document-manager.js +8 -1
  282. package/dist/server/services/document-manager.js.map +1 -1
  283. package/dist/server/services/document-manager.mjs +8 -1
  284. package/dist/server/services/document-manager.mjs.map +1 -1
  285. package/dist/server/services/document-metadata.js +3 -1
  286. package/dist/server/services/document-metadata.js.map +1 -1
  287. package/dist/server/services/document-metadata.mjs +3 -1
  288. package/dist/server/services/document-metadata.mjs.map +1 -1
  289. package/dist/server/services/index.js +3 -1
  290. package/dist/server/services/index.js.map +1 -1
  291. package/dist/server/services/index.mjs +3 -1
  292. package/dist/server/services/index.mjs.map +1 -1
  293. package/dist/server/services/utils/configuration/attributes.js +1 -1
  294. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  295. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  296. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  297. package/dist/server/services/utils/configuration/layouts.js +1 -1
  298. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  299. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  300. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  301. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  302. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  303. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  304. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  305. package/dist/server/services/utils/populate.js +11 -0
  306. package/dist/server/services/utils/populate.js.map +1 -1
  307. package/dist/server/services/utils/populate.mjs +11 -0
  308. package/dist/server/services/utils/populate.mjs.map +1 -1
  309. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  310. package/dist/server/src/controllers/index.d.ts.map +1 -1
  311. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  312. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  313. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  314. package/dist/server/src/homepage/controllers/homepage.d.ts +8 -0
  315. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  316. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  317. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  318. package/dist/server/src/homepage/index.d.ts +23 -0
  319. package/dist/server/src/homepage/index.d.ts.map +1 -0
  320. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  321. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  322. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  323. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  324. package/dist/server/src/homepage/services/homepage.d.ts +14 -0
  325. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  326. package/dist/server/src/homepage/services/index.d.ts +16 -0
  327. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  328. package/dist/server/src/index.d.ts +15 -0
  329. package/dist/server/src/index.d.ts.map +1 -1
  330. package/dist/server/src/preview/services/index.d.ts +1 -0
  331. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  332. package/dist/server/src/preview/services/preview-config.d.ts +1 -0
  333. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  334. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  335. package/dist/server/src/preview/utils.d.ts +1 -0
  336. package/dist/server/src/preview/utils.d.ts.map +1 -1
  337. package/dist/server/src/routes/index.d.ts +1 -0
  338. package/dist/server/src/routes/index.d.ts.map +1 -1
  339. package/dist/server/src/services/data-mapper.d.ts +1 -0
  340. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  341. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  342. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  343. package/dist/server/src/services/index.d.ts +14 -0
  344. package/dist/server/src/services/index.d.ts.map +1 -1
  345. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  346. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  347. package/dist/shared/contracts/collection-types.d.ts +0 -1
  348. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  349. package/dist/shared/contracts/homepage.d.ts +38 -0
  350. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  351. package/package.json +12 -10
  352. package/dist/admin/features/DocumentContext.js +0 -71
  353. package/dist/admin/features/DocumentContext.js.map +0 -1
  354. package/dist/admin/features/DocumentContext.mjs +0 -49
  355. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  356. 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 } 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,23 +369,36 @@ 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);
374
385
  const validate = useForm('PublishAction', (state)=>state.validate);
375
386
  const setErrors = useForm('PublishAction', (state)=>state.setErrors);
376
387
  const formValues = useForm('PublishAction', ({ values })=>values);
377
- const rootDocumentMeta = useDocumentContext('PublishAction', (state)=>state.rootDocumentMeta);
378
- const currentDocumentMeta = useDocumentContext('PublishAction', (state)=>state.meta);
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 { currentDocumentMeta } = useDocumentContext('PublishAction');
399
+ const [updateDocumentMutation] = useUpdateDocumentMutation();
400
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
401
+ const idToPublish = currentDocumentMeta.documentId || id;
379
402
  React.useEffect(()=>{
380
403
  if (isErrorDraftRelations) {
381
404
  toggleNotification({
@@ -439,7 +462,7 @@ const transformData = (data)=>{
439
462
  collectionType,
440
463
  model,
441
464
  documentId,
442
- params
465
+ params: currentDocumentMeta.params
443
466
  });
444
467
  if (error) {
445
468
  throw error;
@@ -456,8 +479,18 @@ const transformData = (data)=>{
456
479
  countDraftRelations,
457
480
  collectionType,
458
481
  model,
459
- params
482
+ currentDocumentMeta.params
460
483
  ]);
484
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
485
+ const parentDocumentData = useDocument({
486
+ documentId: parentDocumentMetaToUpdate?.documentId,
487
+ model: parentDocumentMetaToUpdate?.model,
488
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
489
+ params: parentDocumentMetaToUpdate?.params
490
+ }, {
491
+ skip: !parentDocumentMetaToUpdate
492
+ });
493
+ const { getInitialFormValues } = useDoc();
461
494
  const isDocumentPublished = (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
462
495
  if (!schema?.options?.draftAndPublish) {
463
496
  return null;
@@ -469,30 +502,99 @@ const transformData = (data)=>{
469
502
  status: 'published'
470
503
  });
471
504
  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
- })
505
+ const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
506
+ const attribute = schema.attributes[fieldName];
507
+ return attribute?.required && !(canReadFields ?? []).includes(fieldName);
478
508
  });
509
+ if (hasUnreadableRequiredField) {
510
+ toggleNotification({
511
+ type: 'danger',
512
+ message: formatMessage({
513
+ id: 'content-manager.validation.error.unreadable-required-field',
514
+ defaultMessage: 'Your current permissions prevent access to certain required fields. Please request access from an administrator to proceed.'
515
+ })
516
+ });
517
+ } else {
518
+ toggleNotification({
519
+ type: 'danger',
520
+ message: formatMessage({
521
+ id: 'content-manager.validation.error',
522
+ defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
523
+ })
524
+ });
525
+ }
479
526
  return;
480
527
  }
481
- const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
528
+ const { data } = handleInvisibleAttributes(transformData(formValues), {
529
+ schema,
530
+ components
531
+ });
482
532
  const res = await publish({
483
533
  collectionType,
484
534
  model,
485
535
  documentId,
486
- params: isPublishingRelation ? currentDocumentMeta.params : params
487
- }, transformData(formValues));
536
+ params: currentDocumentMeta.params
537
+ }, data);
538
+ // Reset form if successful
539
+ if ('data' in res) {
540
+ resetForm();
541
+ }
488
542
  if ('data' in res && collectionType !== SINGLE_TYPES) {
489
543
  /**
490
544
  * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
491
- */ if (id === 'create') {
545
+ */ if (idToPublish === 'create' && !fromRelationModal) {
492
546
  navigate({
493
547
  pathname: `../${collectionType}/${model}/${res.data.documentId}`,
494
548
  search: rawQuery
495
549
  });
550
+ } else if (fromRelationModal) {
551
+ const newRelation = {
552
+ documentId: res.data.documentId,
553
+ collectionType,
554
+ model,
555
+ params: currentDocumentMeta.params
556
+ };
557
+ /*
558
+ * Update, if needed, the parent relation with the newly published document.
559
+ * Check if in history we have the parent relation otherwise use the
560
+ * rootDocument
561
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
562
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
563
+ const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;
564
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
565
+ try {
566
+ const updateRes = await updateDocumentMutation({
567
+ collectionType: metaDocumentToUpdate.collectionType,
568
+ model: metaDocumentToUpdate.model,
569
+ documentId: metaDocumentToUpdate.collectionType !== SINGLE_TYPES ? metaDocumentToUpdate.documentId : undefined,
570
+ params: metaDocumentToUpdate.params,
571
+ data: dataToUpdate
572
+ });
573
+ if ('error' in updateRes) {
574
+ toggleNotification({
575
+ type: 'danger',
576
+ message: formatAPIError(updateRes.error)
577
+ });
578
+ return;
579
+ }
580
+ } catch (err) {
581
+ toggleNotification({
582
+ type: 'danger',
583
+ message: formatMessage({
584
+ id: 'notification.error',
585
+ defaultMessage: 'An error occurred'
586
+ })
587
+ });
588
+ throw err;
589
+ }
590
+ }
591
+ dispatch({
592
+ type: 'GO_TO_CREATED_RELATION',
593
+ payload: {
594
+ document: newRelation,
595
+ shouldBypassConfirmation: true
596
+ }
597
+ });
496
598
  }
497
599
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
498
600
  setErrors(formatValidationErrors(res.error));
@@ -558,27 +660,48 @@ PublishAction.position = [
558
660
  'preview',
559
661
  'relation-modal'
560
662
  ];
561
- const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview, fromPreview = false, fromRelationModal = false })=>{
663
+ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
562
664
  const navigate = useNavigate();
563
665
  const { toggleNotification } = useNotification();
564
666
  const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
565
667
  const cloneMatch = useMatch(CLONE_PATH);
566
668
  const isCloning = cloneMatch !== null;
567
669
  const { formatMessage } = useIntl();
568
- const { create, update, clone, isLoading } = useDocumentActions(fromPreview, fromRelationModal);
569
- const [{ query, rawQuery }] = useQueryParams();
570
- const params = React.useMemo(()=>buildValidParams(query), [
571
- query
572
- ]);
670
+ const { create, update, clone, isLoading } = useDocumentActions();
671
+ const { currentDocument: { components } } = useDocumentContext('UpdateAction');
672
+ const [{ rawQuery }] = useQueryParams();
673
+ const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
674
+ const { getInitialFormValues } = useDoc();
573
675
  const isSubmitting = useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
574
676
  const modified = useForm('UpdateAction', ({ modified })=>modified);
575
677
  const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
678
+ const initialValues = useForm('UpdateAction', ({ initialValues })=>initialValues);
576
679
  const document = useForm('UpdateAction', ({ values })=>values);
577
680
  const validate = useForm('UpdateAction', (state)=>state.validate);
578
681
  const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
579
- const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
580
- const rootDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.rootDocumentMeta);
581
- const currentDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.meta);
682
+ const resetForm = useForm('UpdateAction', ({ resetForm })=>resetForm);
683
+ const dispatch = useRelationModal('UpdateAction', (state)=>state.dispatch);
684
+ // need to discriminate if the update is coming from a relation modal or in the edit view
685
+ const relationContext = useRelationModal('UpdateAction', ()=>true, false);
686
+ const relationalModalSchema = useRelationModal('UpdateAction', (state)=>state.currentDocument.schema, false);
687
+ const fieldToConnect = useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
688
+ const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
689
+ const documentHistory = useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
690
+ const rootDocumentMeta = useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
691
+ const fromRelationModal = relationContext != undefined;
692
+ const { currentDocumentMeta } = useDocumentContext('UpdateAction');
693
+ const [updateDocumentMutation] = useUpdateDocumentMutation();
694
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
695
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
696
+ const parentDocumentData = useDocument({
697
+ documentId: parentDocumentMetaToUpdate?.documentId,
698
+ model: parentDocumentMetaToUpdate?.model,
699
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
700
+ params: parentDocumentMetaToUpdate?.params
701
+ }, {
702
+ skip: !parentDocumentMetaToUpdate
703
+ });
704
+ const { schema } = useDoc();
582
705
  const handleUpdate = React.useCallback(async ()=>{
583
706
  setSubmitting(true);
584
707
  try {
@@ -602,7 +725,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
602
725
  const res = await clone({
603
726
  model,
604
727
  documentId: cloneMatch.params.origin,
605
- params
728
+ params: currentDocumentMeta.params
606
729
  }, transformData(document));
607
730
  if ('data' in res) {
608
731
  navigate({
@@ -615,31 +738,91 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
615
738
  setErrors(formatValidationErrors(res.error));
616
739
  }
617
740
  } else if (documentId || collectionType === SINGLE_TYPES) {
618
- const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
741
+ const { data } = handleInvisibleAttributes(transformData(document), {
742
+ schema: fromRelationModal ? relationalModalSchema : schema,
743
+ initialValues,
744
+ components
745
+ });
619
746
  const res = await update({
620
747
  collectionType,
621
748
  model,
622
749
  documentId,
623
- params: isEditingRelation ? currentDocumentMeta.params : params
624
- }, transformData(document));
750
+ params: currentDocumentMeta.params
751
+ }, data);
625
752
  if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
626
753
  setErrors(formatValidationErrors(res.error));
627
754
  } else {
628
755
  resetForm();
629
756
  }
630
757
  } else {
758
+ const { data } = handleInvisibleAttributes(transformData(document), {
759
+ schema: fromRelationModal ? relationalModalSchema : schema,
760
+ initialValues,
761
+ components
762
+ });
631
763
  const res = await create({
632
764
  model,
633
- params
634
- }, transformData(document));
765
+ params: currentDocumentMeta.params
766
+ }, data);
635
767
  if ('data' in res && collectionType !== SINGLE_TYPES) {
636
- navigate({
637
- pathname: `../${res.data.documentId}`,
638
- search: rawQuery
639
- }, {
640
- replace: true,
641
- relative: 'path'
642
- });
768
+ if (fromRelationModal) {
769
+ const createdRelation = {
770
+ documentId: res.data.documentId,
771
+ collectionType,
772
+ model,
773
+ params: currentDocumentMeta.params
774
+ };
775
+ /*
776
+ * Update, if needed, the parent relation with the newly published document.
777
+ * Check if in history we have the parent relation otherwise use the
778
+ * rootDocument
779
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
780
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
781
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
782
+ try {
783
+ const updateRes = await updateDocumentMutation({
784
+ collectionType: parentDocumentMetaToUpdate.collectionType,
785
+ model: parentDocumentMetaToUpdate.model,
786
+ documentId: parentDocumentMetaToUpdate.collectionType !== SINGLE_TYPES ? parentDocumentMetaToUpdate.documentId : undefined,
787
+ params: parentDocumentMetaToUpdate.params,
788
+ data: {
789
+ ...dataToUpdate
790
+ }
791
+ });
792
+ if ('error' in updateRes) {
793
+ toggleNotification({
794
+ type: 'danger',
795
+ message: formatAPIError(updateRes.error)
796
+ });
797
+ return;
798
+ }
799
+ } catch (err) {
800
+ toggleNotification({
801
+ type: 'danger',
802
+ message: formatMessage({
803
+ id: 'notification.error',
804
+ defaultMessage: 'An error occurred'
805
+ })
806
+ });
807
+ throw err;
808
+ }
809
+ }
810
+ dispatch({
811
+ type: 'GO_TO_CREATED_RELATION',
812
+ payload: {
813
+ document: createdRelation,
814
+ shouldBypassConfirmation: true
815
+ }
816
+ });
817
+ } else {
818
+ navigate({
819
+ pathname: `../${res.data.documentId}`,
820
+ search: rawQuery
821
+ }, {
822
+ replace: true,
823
+ relative: 'path'
824
+ });
825
+ }
643
826
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
644
827
  setErrors(formatValidationErrors(res.error));
645
828
  }
@@ -651,30 +834,41 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
651
834
  }
652
835
  }
653
836
  }, [
837
+ setSubmitting,
838
+ modified,
839
+ validate,
840
+ isCloning,
841
+ documentId,
842
+ collectionType,
843
+ toggleNotification,
844
+ formatMessage,
654
845
  clone,
846
+ model,
655
847
  cloneMatch?.params.origin,
656
- collectionType,
657
- create,
658
- currentDocumentMeta.documentId,
659
848
  currentDocumentMeta.params,
660
849
  document,
661
- documentId,
662
- formatMessage,
663
- formatValidationErrors,
664
- isCloning,
665
- model,
666
- modified,
667
850
  navigate,
668
- onPreview,
669
- params,
670
851
  rawQuery,
671
- resetForm,
672
- rootDocumentMeta.documentId,
673
852
  setErrors,
674
- setSubmitting,
675
- toggleNotification,
853
+ formatValidationErrors,
676
854
  update,
677
- validate
855
+ resetForm,
856
+ create,
857
+ fromRelationModal,
858
+ fieldToConnect,
859
+ documentHistory,
860
+ parentDocumentMetaToUpdate,
861
+ dispatch,
862
+ getInitialFormValues,
863
+ parentDocumentData,
864
+ fieldToConnectUID,
865
+ updateDocumentMutation,
866
+ formatAPIError,
867
+ onPreview,
868
+ initialValues,
869
+ schema,
870
+ components,
871
+ relationalModalSchema
678
872
  ]);
679
873
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
680
874
  React.useEffect(()=>{