@strapi/content-manager 0.0.0-experimental.e100737b0ed96d0d80a5c6f4925c7374e63a342a → 0.0.0-experimental.e109058915a8a666fe344c3d221c5271225a1080

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 (328) 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 +161 -0
  10. package/dist/admin/components/Widgets.js.map +1 -0
  11. package/dist/admin/components/Widgets.mjs +158 -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 -5
  28. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  29. package/dist/admin/hooks/useDocumentActions.mjs +20 -5
  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 +42 -5
  36. package/dist/admin/index.js.map +1 -1
  37. package/dist/admin/index.mjs +42 -3
  38. package/dist/admin/index.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/EditViewPage.js +100 -89
  40. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  41. package/dist/admin/pages/EditView/EditViewPage.mjs +102 -91
  42. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/DocumentActions.js +309 -120
  44. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/DocumentActions.mjs +316 -127
  46. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +61 -26
  52. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
  54. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  56. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  58. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  60. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  62. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  64. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  66. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +14 -3
  68. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +15 -4
  70. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +17 -4
  72. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +18 -5
  74. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +23 -21
  76. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +25 -23
  78. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  80. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  82. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +506 -345
  84. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +506 -347
  86. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +174 -68
  88. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +178 -72
  90. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/UID.js +11 -9
  92. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +11 -9
  94. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  96. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  98. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  100. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  102. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  104. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  106. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormLayout.js +47 -27
  108. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormLayout.mjs +47 -27
  110. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  111. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -10
  112. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -10
  114. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  115. package/dist/admin/pages/EditView/utils/data.js +103 -0
  116. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  117. package/dist/admin/pages/EditView/utils/data.mjs +103 -1
  118. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  119. package/dist/admin/pages/ListView/ListViewPage.js +86 -0
  120. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  121. package/dist/admin/pages/ListView/ListViewPage.mjs +88 -2
  122. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  123. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  124. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  125. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  126. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  127. package/dist/admin/pages/ListView/components/Filters.js +1 -0
  128. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  129. package/dist/admin/pages/ListView/components/Filters.mjs +1 -0
  130. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  131. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  132. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  133. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  134. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  135. package/dist/admin/preview/components/PreviewHeader.js +3 -6
  136. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  137. package/dist/admin/preview/components/PreviewHeader.mjs +3 -6
  138. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  139. package/dist/admin/preview/pages/Preview.js +94 -102
  140. package/dist/admin/preview/pages/Preview.js.map +1 -1
  141. package/dist/admin/preview/pages/Preview.mjs +94 -102
  142. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  143. package/dist/admin/services/api.js +2 -1
  144. package/dist/admin/services/api.js.map +1 -1
  145. package/dist/admin/services/api.mjs +2 -1
  146. package/dist/admin/services/api.mjs.map +1 -1
  147. package/dist/admin/services/documents.js +4 -3
  148. package/dist/admin/services/documents.js.map +1 -1
  149. package/dist/admin/services/documents.mjs +4 -3
  150. package/dist/admin/services/documents.mjs.map +1 -1
  151. package/dist/admin/services/homepage.js +30 -0
  152. package/dist/admin/services/homepage.js.map +1 -0
  153. package/dist/admin/services/homepage.mjs +28 -0
  154. package/dist/admin/services/homepage.mjs.map +1 -0
  155. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  156. package/dist/admin/src/components/Widgets.d.ts +3 -0
  157. package/dist/admin/src/content-manager.d.ts +0 -3
  158. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  159. package/dist/admin/src/history/pages/History.d.ts +1 -1
  160. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  161. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  162. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  163. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  164. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  165. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  166. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +73 -7
  167. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  168. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  169. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -8
  170. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  171. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  172. package/dist/admin/src/preview/pages/Preview.d.ts +2 -1
  173. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  174. package/dist/admin/src/services/api.d.ts +1 -1
  175. package/dist/admin/src/services/components.d.ts +2 -2
  176. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  177. package/dist/admin/src/services/documents.d.ts +23 -17
  178. package/dist/admin/src/services/homepage.d.ts +5 -0
  179. package/dist/admin/src/services/init.d.ts +1 -1
  180. package/dist/admin/src/services/relations.d.ts +2 -2
  181. package/dist/admin/src/services/uid.d.ts +3 -3
  182. package/dist/admin/src/utils/validation.d.ts +1 -0
  183. package/dist/admin/translations/en.json.js +3 -1
  184. package/dist/admin/translations/en.json.js.map +1 -1
  185. package/dist/admin/translations/en.json.mjs +3 -1
  186. package/dist/admin/translations/en.json.mjs.map +1 -1
  187. package/dist/admin/translations/fr.json.js +6 -1
  188. package/dist/admin/translations/fr.json.js.map +1 -1
  189. package/dist/admin/translations/fr.json.mjs +6 -1
  190. package/dist/admin/translations/fr.json.mjs.map +1 -1
  191. package/dist/admin/translations/ru.json.js +235 -226
  192. package/dist/admin/translations/ru.json.js.map +1 -1
  193. package/dist/admin/translations/ru.json.mjs +230 -226
  194. package/dist/admin/translations/ru.json.mjs.map +1 -1
  195. package/dist/admin/utils/validation.js +17 -6
  196. package/dist/admin/utils/validation.js.map +1 -1
  197. package/dist/admin/utils/validation.mjs +17 -6
  198. package/dist/admin/utils/validation.mjs.map +1 -1
  199. package/dist/server/controllers/content-types.js +11 -1
  200. package/dist/server/controllers/content-types.js.map +1 -1
  201. package/dist/server/controllers/content-types.mjs +11 -1
  202. package/dist/server/controllers/content-types.mjs.map +1 -1
  203. package/dist/server/controllers/index.js +3 -1
  204. package/dist/server/controllers/index.js.map +1 -1
  205. package/dist/server/controllers/index.mjs +3 -1
  206. package/dist/server/controllers/index.mjs.map +1 -1
  207. package/dist/server/controllers/relations.js +2 -2
  208. package/dist/server/controllers/relations.js.map +1 -1
  209. package/dist/server/controllers/relations.mjs +2 -2
  210. package/dist/server/controllers/relations.mjs.map +1 -1
  211. package/dist/server/controllers/validation/index.js +14 -2
  212. package/dist/server/controllers/validation/index.js.map +1 -1
  213. package/dist/server/controllers/validation/index.mjs +14 -2
  214. package/dist/server/controllers/validation/index.mjs.map +1 -1
  215. package/dist/server/history/services/lifecycles.js +3 -0
  216. package/dist/server/history/services/lifecycles.js.map +1 -1
  217. package/dist/server/history/services/lifecycles.mjs +3 -0
  218. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  219. package/dist/server/homepage/controllers/homepage.js +57 -0
  220. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  221. package/dist/server/homepage/controllers/homepage.mjs +36 -0
  222. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  223. package/dist/server/homepage/controllers/index.js +10 -0
  224. package/dist/server/homepage/controllers/index.js.map +1 -0
  225. package/dist/server/homepage/controllers/index.mjs +8 -0
  226. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  227. package/dist/server/homepage/index.js +14 -0
  228. package/dist/server/homepage/index.js.map +1 -0
  229. package/dist/server/homepage/index.mjs +12 -0
  230. package/dist/server/homepage/index.mjs.map +1 -0
  231. package/dist/server/homepage/routes/homepage.js +25 -0
  232. package/dist/server/homepage/routes/homepage.js.map +1 -0
  233. package/dist/server/homepage/routes/homepage.mjs +23 -0
  234. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  235. package/dist/server/homepage/routes/index.js +13 -0
  236. package/dist/server/homepage/routes/index.js.map +1 -0
  237. package/dist/server/homepage/routes/index.mjs +11 -0
  238. package/dist/server/homepage/routes/index.mjs.map +1 -0
  239. package/dist/server/homepage/services/homepage.js +157 -0
  240. package/dist/server/homepage/services/homepage.js.map +1 -0
  241. package/dist/server/homepage/services/homepage.mjs +155 -0
  242. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  243. package/dist/server/homepage/services/index.js +10 -0
  244. package/dist/server/homepage/services/index.js.map +1 -0
  245. package/dist/server/homepage/services/index.mjs +8 -0
  246. package/dist/server/homepage/services/index.mjs.map +1 -0
  247. package/dist/server/preview/services/preview.js +0 -1
  248. package/dist/server/preview/services/preview.js.map +1 -1
  249. package/dist/server/preview/services/preview.mjs +0 -1
  250. package/dist/server/preview/services/preview.mjs.map +1 -1
  251. package/dist/server/routes/index.js +3 -1
  252. package/dist/server/routes/index.js.map +1 -1
  253. package/dist/server/routes/index.mjs +3 -1
  254. package/dist/server/routes/index.mjs.map +1 -1
  255. package/dist/server/services/data-mapper.js +4 -1
  256. package/dist/server/services/data-mapper.js.map +1 -1
  257. package/dist/server/services/data-mapper.mjs +4 -1
  258. package/dist/server/services/data-mapper.mjs.map +1 -1
  259. package/dist/server/services/document-manager.js +8 -1
  260. package/dist/server/services/document-manager.js.map +1 -1
  261. package/dist/server/services/document-manager.mjs +8 -1
  262. package/dist/server/services/document-manager.mjs.map +1 -1
  263. package/dist/server/services/document-metadata.js +3 -1
  264. package/dist/server/services/document-metadata.js.map +1 -1
  265. package/dist/server/services/document-metadata.mjs +3 -1
  266. package/dist/server/services/document-metadata.mjs.map +1 -1
  267. package/dist/server/services/index.js +3 -1
  268. package/dist/server/services/index.js.map +1 -1
  269. package/dist/server/services/index.mjs +3 -1
  270. package/dist/server/services/index.mjs.map +1 -1
  271. package/dist/server/services/utils/configuration/attributes.js +1 -1
  272. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  273. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  274. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  275. package/dist/server/services/utils/configuration/layouts.js +1 -1
  276. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  277. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  278. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  279. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  280. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  281. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  282. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  283. package/dist/server/services/utils/populate.js +11 -0
  284. package/dist/server/services/utils/populate.js.map +1 -1
  285. package/dist/server/services/utils/populate.mjs +11 -0
  286. package/dist/server/services/utils/populate.mjs.map +1 -1
  287. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  288. package/dist/server/src/controllers/index.d.ts.map +1 -1
  289. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  290. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  291. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  292. package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
  293. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  294. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  295. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  296. package/dist/server/src/homepage/index.d.ts +16 -0
  297. package/dist/server/src/homepage/index.d.ts.map +1 -0
  298. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  299. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  300. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  301. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  302. package/dist/server/src/homepage/services/homepage.d.ts +11 -0
  303. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  304. package/dist/server/src/homepage/services/index.d.ts +9 -0
  305. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  306. package/dist/server/src/index.d.ts +8 -0
  307. package/dist/server/src/index.d.ts.map +1 -1
  308. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  309. package/dist/server/src/routes/index.d.ts +1 -0
  310. package/dist/server/src/routes/index.d.ts.map +1 -1
  311. package/dist/server/src/services/data-mapper.d.ts +1 -0
  312. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  313. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  314. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  315. package/dist/server/src/services/index.d.ts +7 -0
  316. package/dist/server/src/services/index.d.ts.map +1 -1
  317. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  318. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  319. package/dist/shared/contracts/collection-types.d.ts +0 -1
  320. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  321. package/dist/shared/contracts/homepage.d.ts +25 -0
  322. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  323. package/package.json +12 -9
  324. package/dist/admin/features/DocumentContext.js +0 -71
  325. package/dist/admin/features/DocumentContext.js.map +0 -1
  326. package/dist/admin/features/DocumentContext.mjs +0 -49
  327. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  328. 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 { unstable_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(unstable_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(unstable_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,19 @@ 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 { currentDocumentMeta } = useDocumentContext('PublishAction');
399
+ const [updateDocumentMutation] = useUpdateDocumentMutation();
400
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
401
+ const idToPublish = currentDocumentMeta.documentId || id;
380
402
  React.useEffect(()=>{
381
403
  if (isErrorDraftRelations) {
382
404
  toggleNotification({
@@ -440,7 +462,7 @@ const transformData = (data)=>{
440
462
  collectionType,
441
463
  model,
442
464
  documentId,
443
- params
465
+ params: currentDocumentMeta.params
444
466
  });
445
467
  if (error) {
446
468
  throw error;
@@ -457,8 +479,18 @@ const transformData = (data)=>{
457
479
  countDraftRelations,
458
480
  collectionType,
459
481
  model,
460
- params
482
+ currentDocumentMeta.params
461
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();
462
494
  const isDocumentPublished = (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
463
495
  if (!schema?.options?.draftAndPublish) {
464
496
  return null;
@@ -470,22 +502,39 @@ const transformData = (data)=>{
470
502
  status: 'published'
471
503
  });
472
504
  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
- })
505
+ const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
506
+ const attribute = schema.attributes[fieldName];
507
+ return attribute?.required && !(canReadFields ?? []).includes(fieldName);
479
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
+ }
480
526
  return;
481
527
  }
482
- const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
528
+ const { data } = handleInvisibleAttributes(transformData(formValues), {
529
+ schema,
530
+ components
531
+ });
483
532
  const res = await publish({
484
533
  collectionType,
485
534
  model,
486
535
  documentId,
487
- params: isPublishingRelation ? currentDocumentMeta.params : params
488
- }, transformData(formValues));
536
+ params: currentDocumentMeta.params
537
+ }, data);
489
538
  // Reset form if successful
490
539
  if ('data' in res) {
491
540
  resetForm();
@@ -493,11 +542,59 @@ const transformData = (data)=>{
493
542
  if ('data' in res && collectionType !== SINGLE_TYPES) {
494
543
  /**
495
544
  * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
496
- */ if (id === 'create') {
545
+ */ if (idToPublish === 'create' && !fromRelationModal) {
497
546
  navigate({
498
547
  pathname: `../${collectionType}/${model}/${res.data.documentId}`,
499
548
  search: rawQuery
500
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
+ });
501
598
  }
502
599
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
503
600
  setErrors(formatValidationErrors(res.error));
@@ -563,27 +660,48 @@ PublishAction.position = [
563
660
  'preview',
564
661
  'relation-modal'
565
662
  ];
566
- const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview, fromPreview = false, fromRelationModal = false })=>{
663
+ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
567
664
  const navigate = useNavigate();
568
665
  const { toggleNotification } = useNotification();
569
666
  const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
570
667
  const cloneMatch = useMatch(CLONE_PATH);
571
668
  const isCloning = cloneMatch !== null;
572
669
  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
- ]);
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();
578
675
  const isSubmitting = useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
579
676
  const modified = useForm('UpdateAction', ({ modified })=>modified);
580
677
  const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
678
+ const initialValues = useForm('UpdateAction', ({ initialValues })=>initialValues);
581
679
  const document = useForm('UpdateAction', ({ values })=>values);
582
680
  const validate = useForm('UpdateAction', (state)=>state.validate);
583
681
  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);
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();
587
705
  const handleUpdate = React.useCallback(async ()=>{
588
706
  setSubmitting(true);
589
707
  try {
@@ -607,7 +725,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
607
725
  const res = await clone({
608
726
  model,
609
727
  documentId: cloneMatch.params.origin,
610
- params
728
+ params: currentDocumentMeta.params
611
729
  }, transformData(document));
612
730
  if ('data' in res) {
613
731
  navigate({
@@ -620,31 +738,91 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
620
738
  setErrors(formatValidationErrors(res.error));
621
739
  }
622
740
  } else if (documentId || collectionType === SINGLE_TYPES) {
623
- const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
741
+ const { data } = handleInvisibleAttributes(transformData(document), {
742
+ schema: fromRelationModal ? relationalModalSchema : schema,
743
+ initialValues,
744
+ components
745
+ });
624
746
  const res = await update({
625
747
  collectionType,
626
748
  model,
627
749
  documentId,
628
- params: isEditingRelation ? currentDocumentMeta.params : params
629
- }, transformData(document));
750
+ params: currentDocumentMeta.params
751
+ }, data);
630
752
  if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
631
753
  setErrors(formatValidationErrors(res.error));
632
754
  } else {
633
755
  resetForm();
634
756
  }
635
757
  } else {
758
+ const { data } = handleInvisibleAttributes(transformData(document), {
759
+ schema: fromRelationModal ? relationalModalSchema : schema,
760
+ initialValues,
761
+ components
762
+ });
636
763
  const res = await create({
637
764
  model,
638
- params
639
- }, transformData(document));
765
+ params: currentDocumentMeta.params
766
+ }, data);
640
767
  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
- });
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
+ }
648
826
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
649
827
  setErrors(formatValidationErrors(res.error));
650
828
  }
@@ -656,30 +834,41 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
656
834
  }
657
835
  }
658
836
  }, [
837
+ setSubmitting,
838
+ modified,
839
+ validate,
840
+ isCloning,
841
+ documentId,
842
+ collectionType,
843
+ toggleNotification,
844
+ formatMessage,
659
845
  clone,
846
+ model,
660
847
  cloneMatch?.params.origin,
661
- collectionType,
662
- create,
663
- currentDocumentMeta.documentId,
664
848
  currentDocumentMeta.params,
665
849
  document,
666
- documentId,
667
- formatMessage,
668
- formatValidationErrors,
669
- isCloning,
670
- model,
671
- modified,
672
850
  navigate,
673
- onPreview,
674
- params,
675
851
  rawQuery,
676
- resetForm,
677
- rootDocumentMeta.documentId,
678
852
  setErrors,
679
- setSubmitting,
680
- toggleNotification,
853
+ formatValidationErrors,
681
854
  update,
682
- 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
683
872
  ]);
684
873
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
685
874
  React.useEffect(()=>{