@strapi/content-manager 0.0.0-next.266ff4f8317121b6b17eea7fbfe2461e6171e48a → 0.0.0-next.281b331dc777a6a76694c122f7d1d9bc8c783747

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