@strapi/content-manager 0.0.0-experimental.c23f51fc41b3ef5de081f427d07e87af93cdcb2c → 0.0.0-experimental.c2b08ee20b017fc174cccf35c56c39438b0237b0

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