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

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 (294) hide show
  1. package/dist/admin/components/ConfigurationForm/Fields.js +300 -204
  2. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.mjs +304 -209
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/components/LeftMenu.js +34 -30
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +36 -32
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/components/Widgets.js +161 -0
  10. package/dist/admin/components/Widgets.js.map +1 -0
  11. package/dist/admin/components/Widgets.mjs +158 -0
  12. package/dist/admin/components/Widgets.mjs.map +1 -0
  13. package/dist/admin/content-manager.js.map +1 -1
  14. package/dist/admin/content-manager.mjs.map +1 -1
  15. package/dist/admin/history/components/VersionHeader.js +6 -0
  16. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  17. package/dist/admin/history/components/VersionHeader.mjs +7 -1
  18. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  19. package/dist/admin/history/pages/History.js +1 -9
  20. package/dist/admin/history/pages/History.js.map +1 -1
  21. package/dist/admin/history/pages/History.mjs +1 -9
  22. package/dist/admin/history/pages/History.mjs.map +1 -1
  23. package/dist/admin/hooks/useDocumentActions.js +20 -5
  24. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  25. package/dist/admin/hooks/useDocumentActions.mjs +20 -5
  26. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  27. package/dist/admin/hooks/useDocumentContext.js +57 -0
  28. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  29. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  30. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  31. package/dist/admin/index.js +42 -5
  32. package/dist/admin/index.js.map +1 -1
  33. package/dist/admin/index.mjs +42 -3
  34. package/dist/admin/index.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/EditViewPage.js +90 -91
  36. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  37. package/dist/admin/pages/EditView/EditViewPage.mjs +92 -93
  38. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/DocumentActions.js +256 -58
  40. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/DocumentActions.mjs +262 -64
  42. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +61 -26
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  52. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  54. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  56. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  58. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  60. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  62. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -2
  64. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -2
  66. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +4 -2
  68. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +4 -2
  70. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +5 -16
  72. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -16
  74. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  76. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  78. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +506 -345
  80. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +506 -347
  82. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +145 -87
  84. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +148 -90
  86. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/UID.js +11 -9
  88. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +11 -9
  90. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  92. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  94. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  96. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  98. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormLayout.js +20 -24
  100. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormLayout.mjs +20 -24
  102. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  103. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -10
  104. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -10
  106. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  107. package/dist/admin/pages/ListView/ListViewPage.js +77 -0
  108. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  109. package/dist/admin/pages/ListView/ListViewPage.mjs +78 -1
  110. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  111. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  112. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  113. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  114. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  115. package/dist/admin/pages/ListView/components/Filters.js +1 -0
  116. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  117. package/dist/admin/pages/ListView/components/Filters.mjs +1 -0
  118. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  119. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  120. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  121. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  122. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  123. package/dist/admin/preview/components/PreviewHeader.js +3 -6
  124. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  125. package/dist/admin/preview/components/PreviewHeader.mjs +3 -6
  126. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  127. package/dist/admin/preview/pages/Preview.js +94 -102
  128. package/dist/admin/preview/pages/Preview.js.map +1 -1
  129. package/dist/admin/preview/pages/Preview.mjs +94 -102
  130. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  131. package/dist/admin/services/documents.js +2 -2
  132. package/dist/admin/services/documents.js.map +1 -1
  133. package/dist/admin/services/documents.mjs +2 -2
  134. package/dist/admin/services/documents.mjs.map +1 -1
  135. package/dist/admin/services/homepage.js +30 -0
  136. package/dist/admin/services/homepage.js.map +1 -0
  137. package/dist/admin/services/homepage.mjs +28 -0
  138. package/dist/admin/services/homepage.mjs.map +1 -0
  139. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  140. package/dist/admin/src/components/Widgets.d.ts +3 -0
  141. package/dist/admin/src/content-manager.d.ts +0 -3
  142. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  143. package/dist/admin/src/history/pages/History.d.ts +1 -1
  144. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  145. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  146. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  147. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  148. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  149. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +73 -7
  150. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  151. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  152. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -8
  153. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  154. package/dist/admin/src/preview/pages/Preview.d.ts +2 -1
  155. package/dist/admin/src/services/documents.d.ts +7 -1
  156. package/dist/admin/src/services/homepage.d.ts +5 -0
  157. package/dist/admin/translations/en.json.js +3 -1
  158. package/dist/admin/translations/en.json.js.map +1 -1
  159. package/dist/admin/translations/en.json.mjs +3 -1
  160. package/dist/admin/translations/en.json.mjs.map +1 -1
  161. package/dist/admin/translations/ru.json.js +235 -226
  162. package/dist/admin/translations/ru.json.js.map +1 -1
  163. package/dist/admin/translations/ru.json.mjs +230 -226
  164. package/dist/admin/translations/ru.json.mjs.map +1 -1
  165. package/dist/admin/utils/validation.js +1 -1
  166. package/dist/admin/utils/validation.js.map +1 -1
  167. package/dist/admin/utils/validation.mjs +1 -1
  168. package/dist/admin/utils/validation.mjs.map +1 -1
  169. package/dist/server/controllers/content-types.js +11 -1
  170. package/dist/server/controllers/content-types.js.map +1 -1
  171. package/dist/server/controllers/content-types.mjs +11 -1
  172. package/dist/server/controllers/content-types.mjs.map +1 -1
  173. package/dist/server/controllers/index.js +3 -1
  174. package/dist/server/controllers/index.js.map +1 -1
  175. package/dist/server/controllers/index.mjs +3 -1
  176. package/dist/server/controllers/index.mjs.map +1 -1
  177. package/dist/server/controllers/validation/index.js +14 -2
  178. package/dist/server/controllers/validation/index.js.map +1 -1
  179. package/dist/server/controllers/validation/index.mjs +14 -2
  180. package/dist/server/controllers/validation/index.mjs.map +1 -1
  181. package/dist/server/history/services/lifecycles.js +3 -0
  182. package/dist/server/history/services/lifecycles.js.map +1 -1
  183. package/dist/server/history/services/lifecycles.mjs +3 -0
  184. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  185. package/dist/server/homepage/controllers/homepage.js +57 -0
  186. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  187. package/dist/server/homepage/controllers/homepage.mjs +36 -0
  188. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  189. package/dist/server/homepage/controllers/index.js +10 -0
  190. package/dist/server/homepage/controllers/index.js.map +1 -0
  191. package/dist/server/homepage/controllers/index.mjs +8 -0
  192. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  193. package/dist/server/homepage/index.js +14 -0
  194. package/dist/server/homepage/index.js.map +1 -0
  195. package/dist/server/homepage/index.mjs +12 -0
  196. package/dist/server/homepage/index.mjs.map +1 -0
  197. package/dist/server/homepage/routes/homepage.js +25 -0
  198. package/dist/server/homepage/routes/homepage.js.map +1 -0
  199. package/dist/server/homepage/routes/homepage.mjs +23 -0
  200. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  201. package/dist/server/homepage/routes/index.js +13 -0
  202. package/dist/server/homepage/routes/index.js.map +1 -0
  203. package/dist/server/homepage/routes/index.mjs +11 -0
  204. package/dist/server/homepage/routes/index.mjs.map +1 -0
  205. package/dist/server/homepage/services/homepage.js +157 -0
  206. package/dist/server/homepage/services/homepage.js.map +1 -0
  207. package/dist/server/homepage/services/homepage.mjs +155 -0
  208. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  209. package/dist/server/homepage/services/index.js +10 -0
  210. package/dist/server/homepage/services/index.js.map +1 -0
  211. package/dist/server/homepage/services/index.mjs +8 -0
  212. package/dist/server/homepage/services/index.mjs.map +1 -0
  213. package/dist/server/preview/services/preview.js +0 -1
  214. package/dist/server/preview/services/preview.js.map +1 -1
  215. package/dist/server/preview/services/preview.mjs +0 -1
  216. package/dist/server/preview/services/preview.mjs.map +1 -1
  217. package/dist/server/routes/index.js +3 -1
  218. package/dist/server/routes/index.js.map +1 -1
  219. package/dist/server/routes/index.mjs +3 -1
  220. package/dist/server/routes/index.mjs.map +1 -1
  221. package/dist/server/services/data-mapper.js +4 -1
  222. package/dist/server/services/data-mapper.js.map +1 -1
  223. package/dist/server/services/data-mapper.mjs +4 -1
  224. package/dist/server/services/data-mapper.mjs.map +1 -1
  225. package/dist/server/services/document-manager.js +8 -1
  226. package/dist/server/services/document-manager.js.map +1 -1
  227. package/dist/server/services/document-manager.mjs +8 -1
  228. package/dist/server/services/document-manager.mjs.map +1 -1
  229. package/dist/server/services/document-metadata.js +2 -0
  230. package/dist/server/services/document-metadata.js.map +1 -1
  231. package/dist/server/services/document-metadata.mjs +2 -0
  232. package/dist/server/services/document-metadata.mjs.map +1 -1
  233. package/dist/server/services/index.js +3 -1
  234. package/dist/server/services/index.js.map +1 -1
  235. package/dist/server/services/index.mjs +3 -1
  236. package/dist/server/services/index.mjs.map +1 -1
  237. package/dist/server/services/utils/configuration/attributes.js +1 -1
  238. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  239. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  240. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  241. package/dist/server/services/utils/configuration/layouts.js +1 -1
  242. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  243. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  244. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  245. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  246. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  247. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  248. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  249. package/dist/server/services/utils/populate.js +11 -0
  250. package/dist/server/services/utils/populate.js.map +1 -1
  251. package/dist/server/services/utils/populate.mjs +11 -0
  252. package/dist/server/services/utils/populate.mjs.map +1 -1
  253. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  254. package/dist/server/src/controllers/index.d.ts.map +1 -1
  255. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  256. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  257. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  258. package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
  259. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  260. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  261. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  262. package/dist/server/src/homepage/index.d.ts +16 -0
  263. package/dist/server/src/homepage/index.d.ts.map +1 -0
  264. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  265. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  266. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  267. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  268. package/dist/server/src/homepage/services/homepage.d.ts +11 -0
  269. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  270. package/dist/server/src/homepage/services/index.d.ts +9 -0
  271. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  272. package/dist/server/src/index.d.ts +8 -0
  273. package/dist/server/src/index.d.ts.map +1 -1
  274. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  275. package/dist/server/src/routes/index.d.ts +1 -0
  276. package/dist/server/src/routes/index.d.ts.map +1 -1
  277. package/dist/server/src/services/data-mapper.d.ts +1 -0
  278. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  279. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  280. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  281. package/dist/server/src/services/index.d.ts +7 -0
  282. package/dist/server/src/services/index.d.ts.map +1 -1
  283. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  284. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  285. package/dist/shared/contracts/collection-types.d.ts +0 -1
  286. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  287. package/dist/shared/contracts/homepage.d.ts +25 -0
  288. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  289. package/package.json +12 -9
  290. package/dist/admin/features/DocumentContext.js +0 -71
  291. package/dist/admin/features/DocumentContext.js.map +0 -1
  292. package/dist/admin/features/DocumentContext.mjs +0 -49
  293. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  294. package/dist/admin/src/features/DocumentContext.d.ts +0 -53
@@ -1 +1 @@
1
- {"version":3,"file":"EditViewPage.mjs","sources":["../../../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Blocker,\n Form,\n useRBAC,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Grid, Main, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { SINGLE_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentContextProvider } from '../../features/DocumentContext';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc, type UseDocument } from '../../hooks/useDocument';\nimport { useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useOnce } from '../../hooks/useOnce';\nimport { getTranslation } from '../../utils/translations';\nimport { createYupSchema } from '../../utils/validation';\n\nimport { FormLayout } from './components/FormLayout';\nimport { Header } from './components/Header';\nimport { Panels } from './components/Panels';\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditViewPage = () => {\n const location = useLocation();\n const [\n {\n query: { status },\n },\n setQuery,\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const doc = useDoc();\n const {\n document,\n meta,\n isLoading: isLoadingDocument,\n schema,\n components,\n collectionType,\n id,\n model,\n hasError,\n getTitle,\n getInitialFormValues,\n } = doc;\n\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'danger',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const isLoadingActionsRBAC = useDocumentRBAC('EditViewPage', (state) => state.isLoading);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n\n /**\n * single-types don't current have an id, but because they're a singleton\n * we can simply use the update operation to continuously update the same\n * document with varying params.\n */\n const isCreatingDocument = !id && !isSingleType;\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { mainField },\n },\n } = useDocumentLayout(model);\n\n const { isLazyLoading } = useLazyComponents([]);\n\n const isLoading = isLoadingActionsRBAC || isLoadingDocument || isLoadingLayout || isLazyLoading;\n\n const initialValues = getInitialFormValues(isCreatingDocument);\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues || hasError) {\n return <Page.Error />;\n }\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n return (\n <Main paddingLeft={10} paddingRight={10}>\n <Page.Title>{getTitle(mainField)}</Page.Title>\n <DocumentContextProvider\n initialDocument={{\n documentId: id!,\n model,\n collectionType,\n }}\n >\n <Form\n disabled={hasDraftAndPublished && status === 'published'}\n initialValues={initialValues}\n method={isCreatingDocument ? 'POST' : 'PUT'}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n >\n {({ resetForm }) => (\n <>\n <Header\n isCreating={isCreatingDocument}\n status={hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined}\n title={getTitle(mainField)}\n />\n <Tabs.Root variant=\"simple\" value={status} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: getTranslation('containers.edit.tabs.label'),\n defaultMessage: 'Document status',\n })}\n >\n {hasDraftAndPublished ? (\n <>\n <StatusTab value=\"draft\">\n {formatMessage({\n id: getTranslation('containers.edit.tabs.draft'),\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab\n disabled={!meta || meta.availableStatus.length === 0}\n value=\"published\"\n >\n {formatMessage({\n id: getTranslation('containers.edit.tabs.published'),\n defaultMessage: 'published',\n })}\n </StatusTab>\n </>\n ) : null}\n </Tabs.List>\n <Grid.Root paddingTop={8} gap={4}>\n <Grid.Item col={9} s={12} direction=\"column\" alignItems=\"stretch\">\n <Tabs.Content value=\"draft\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n <Tabs.Content value=\"published\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n </Grid.Item>\n <Grid.Item col={3} s={12} direction=\"column\" alignItems=\"stretch\">\n <Panels />\n </Grid.Item>\n </Grid.Root>\n </Tabs.Root>\n <Blocker\n // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284\n onProceed={resetForm}\n />\n </>\n )}\n </Form>\n </DocumentContextProvider>\n </Main>\n );\n};\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\n/**\n * @internal\n * @description Returns the status of the document where its latest state takes priority,\n * this typically will be \"published\" unless a user has edited their draft in which we should\n * display \"modified\".\n */\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <EditViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { EditViewPage, ProtectedEditViewPage, getDocumentStatus };\n"],"names":["EditViewPage","location","useLocation","query","status","setQuery","useQueryParams","formatMessage","useIntl","toggleNotification","useNotification","doc","useDoc","document","meta","isLoading","isLoadingDocument","schema","components","collectionType","id","model","hasError","getTitle","getInitialFormValues","hasDraftAndPublished","options","draftAndPublish","useOnce","state","type","message","error","timeout","isLoadingActionsRBAC","useDocumentRBAC","isSingleType","SINGLE_TYPES","isCreatingDocument","isLoadingLayout","edit","layout","settings","mainField","useDocumentLayout","isLazyLoading","useLazyComponents","initialValues","documentId","_jsx","Page","Loading","Error","handleTabChange","validateSync","values","yupSchema","createYupSchema","attributes","abortEarly","_jsxs","Main","paddingLeft","paddingRight","Title","DocumentContextProvider","initialDocument","Form","disabled","method","validate","initialErrors","forceValidation","resetForm","_Fragment","Header","isCreating","getDocumentStatus","undefined","title","Tabs","Root","variant","value","onValueChange","List","aria-label","getTranslation","defaultMessage","StatusTab","availableStatus","length","Grid","paddingTop","gap","Item","col","s","direction","alignItems","Content","FormLayout","Panels","Blocker","onProceed","styled","Trigger","docStatus","statuses","find","publishedAt","ProtectedEditViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","map","action","subject","Protect","DocumentRBAC"],"mappings":"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"}
1
+ {"version":3,"file":"EditViewPage.mjs","sources":["../../../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Blocker,\n Form,\n useForm,\n useRBAC,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Grid, Main, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { SINGLE_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc, type UseDocument } from '../../hooks/useDocument';\nimport { useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useOnce } from '../../hooks/useOnce';\nimport { getTranslation } from '../../utils/translations';\nimport { createYupSchema } from '../../utils/validation';\n\nimport { FormLayout } from './components/FormLayout';\nimport { Header } from './components/Header';\nimport { Panels } from './components/Panels';\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\n// Needs to be wrapped in a component to have access to the form context via a hook.\n// Using the Form component's render prop instead would cause unnecessary re-renders of Form children\nconst BlockerWrapper = () => {\n const resetForm = useForm('BlockerWrapper', (state) => state.resetForm);\n\n // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284\n return <Blocker onProceed={resetForm} />;\n};\n\nconst EditViewPage = () => {\n const location = useLocation();\n const [\n {\n query: { status },\n },\n setQuery,\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const doc = useDoc();\n const {\n document,\n meta,\n isLoading: isLoadingDocument,\n schema,\n components,\n collectionType,\n id,\n model,\n hasError,\n getTitle,\n getInitialFormValues,\n } = doc;\n\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'danger',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const isLoadingActionsRBAC = useDocumentRBAC('EditViewPage', (state) => state.isLoading);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n\n /**\n * single-types don't current have an id, but because they're a singleton\n * we can simply use the update operation to continuously update the same\n * document with varying params.\n */\n const isCreatingDocument = !id && !isSingleType;\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { mainField },\n },\n } = useDocumentLayout(model);\n const pageTitle = getTitle(mainField);\n\n const { isLazyLoading } = useLazyComponents([]);\n\n const isLoading = isLoadingActionsRBAC || isLoadingDocument || isLoadingLayout || isLazyLoading;\n\n const initialValues = getInitialFormValues(isCreatingDocument);\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues || hasError) {\n return <Page.Error />;\n }\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n return (\n <Main paddingLeft={10} paddingRight={10}>\n <Page.Title>{pageTitle}</Page.Title>\n <Form\n disabled={hasDraftAndPublished && status === 'published'}\n initialValues={initialValues}\n method={isCreatingDocument ? 'POST' : 'PUT'}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n >\n <>\n <Header\n isCreating={isCreatingDocument}\n status={hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined}\n title={pageTitle}\n />\n <Tabs.Root variant=\"simple\" value={status} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: getTranslation('containers.edit.tabs.label'),\n defaultMessage: 'Document status',\n })}\n >\n {hasDraftAndPublished ? (\n <>\n <StatusTab value=\"draft\">\n {formatMessage({\n id: getTranslation('containers.edit.tabs.draft'),\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab\n disabled={!meta || meta.availableStatus.length === 0}\n value=\"published\"\n >\n {formatMessage({\n id: getTranslation('containers.edit.tabs.published'),\n defaultMessage: 'published',\n })}\n </StatusTab>\n </>\n ) : null}\n </Tabs.List>\n <Grid.Root paddingTop={8} gap={4}>\n <Grid.Item col={9} s={12} direction=\"column\" alignItems=\"stretch\">\n <Tabs.Content value=\"draft\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n <Tabs.Content value=\"published\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n </Grid.Item>\n <Grid.Item col={3} s={12} direction=\"column\" alignItems=\"stretch\">\n <Panels />\n </Grid.Item>\n </Grid.Root>\n </Tabs.Root>\n <BlockerWrapper />\n </>\n </Form>\n </Main>\n );\n};\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\n/**\n * @internal\n * @description Returns the status of the document where its latest state takes priority,\n * this typically will be \"published\" unless a user has edited their draft in which we should\n * display \"modified\".\n */\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <EditViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { EditViewPage, ProtectedEditViewPage, getDocumentStatus };\n"],"names":["BlockerWrapper","resetForm","useForm","state","_jsx","Blocker","onProceed","EditViewPage","location","useLocation","query","status","setQuery","useQueryParams","formatMessage","useIntl","toggleNotification","useNotification","doc","useDoc","document","meta","isLoading","isLoadingDocument","schema","components","collectionType","id","model","hasError","getTitle","getInitialFormValues","hasDraftAndPublished","options","draftAndPublish","useOnce","type","message","error","timeout","isLoadingActionsRBAC","useDocumentRBAC","isSingleType","SINGLE_TYPES","isCreatingDocument","isLoadingLayout","edit","layout","settings","mainField","useDocumentLayout","pageTitle","isLazyLoading","useLazyComponents","initialValues","documentId","Page","Loading","Error","handleTabChange","validateSync","values","yupSchema","createYupSchema","attributes","abortEarly","_jsxs","Main","paddingLeft","paddingRight","Title","Form","disabled","method","validate","initialErrors","forceValidation","_Fragment","Header","isCreating","getDocumentStatus","undefined","title","Tabs","Root","variant","value","onValueChange","List","aria-label","getTranslation","defaultMessage","StatusTab","availableStatus","length","Grid","paddingTop","gap","Item","col","s","direction","alignItems","Content","FormLayout","Panels","styled","Trigger","docStatus","statuses","find","publishedAt","ProtectedEditViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","map","action","subject","Protect","DocumentRBAC"],"mappings":"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"}
@@ -6,19 +6,24 @@ var strapiAdmin = require('@strapi/admin/strapi-admin');
6
6
  var designSystem = require('@strapi/design-system');
7
7
  var Icons = require('@strapi/icons');
8
8
  var mapValues = require('lodash/fp/mapValues');
9
+ var get = require('lodash/get');
10
+ var merge = require('lodash/merge');
11
+ var set = require('lodash/set');
9
12
  var reactIntl = require('react-intl');
10
13
  var reactRouterDom = require('react-router-dom');
11
14
  var styledComponents = require('styled-components');
12
15
  var attributes = require('../../../constants/attributes.js');
13
16
  var collections = require('../../../constants/collections.js');
14
- var DocumentContext = require('../../../features/DocumentContext.js');
15
17
  var DocumentRBAC = require('../../../features/DocumentRBAC.js');
16
18
  var useDocument = require('../../../hooks/useDocument.js');
17
19
  var useDocumentActions = require('../../../hooks/useDocumentActions.js');
20
+ var useDocumentContext = require('../../../hooks/useDocumentContext.js');
21
+ var Preview = require('../../../preview/pages/Preview.js');
18
22
  var router = require('../../../router.js');
19
23
  var documents = require('../../../services/documents.js');
20
24
  var api = require('../../../utils/api.js');
21
25
  var translations = require('../../../utils/translations.js');
26
+ var RelationModal = require('./FormInputs/Relations/RelationModal.js');
22
27
 
23
28
  function _interopNamespaceDefault(e) {
24
29
  var n = Object.create(null);
@@ -39,6 +44,38 @@ function _interopNamespaceDefault(e) {
39
44
 
40
45
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
41
46
 
47
+ const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
48
+ /*
49
+ * Check if the fieldToConnect is already present in the parentDataToUpdate.
50
+ * This happens in particular when in the parentDocument you have created
51
+ * a new component without saving.
52
+ */ const isFieldPresent = !!get(parentDataToUpdate, fieldToConnect);
53
+ const fieldToConnectPath = isFieldPresent ? fieldToConnect : fieldToConnect.split('.').slice(0, -1).join('.');
54
+ const fieldToConnectValue = isFieldPresent ? {
55
+ connect: [
56
+ {
57
+ id: data.documentId,
58
+ documentId: data.documentId,
59
+ locale: data.locale
60
+ }
61
+ ]
62
+ } : {
63
+ [fieldToConnect.split('.').pop()]: {
64
+ connect: [
65
+ {
66
+ id: data.documentId,
67
+ documentId: data.documentId,
68
+ locale: data.locale
69
+ }
70
+ ],
71
+ disconnect: []
72
+ },
73
+ // In case the object was not present you need to pass the componentUID of the parent document
74
+ __component: fieldToConnectUID
75
+ };
76
+ const objectToConnect = set({}, fieldToConnectPath, fieldToConnectValue);
77
+ return merge(parentDataToUpdate, objectToConnect);
78
+ };
42
79
  const DocumentActions = ({ actions })=>{
43
80
  const { formatMessage } = reactIntl.useIntl();
44
81
  const [primaryAction, secondaryAction, ...restActions] = actions.filter((action)=>{
@@ -371,8 +408,8 @@ const transformData = (data)=>{
371
408
  };
372
409
  /* -------------------------------------------------------------------------------------------------
373
410
  * DocumentActionComponents
374
- * -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document, onPreview, fromPreview = false, fromRelationModal = false })=>{
375
- const schema = DocumentContext.useDocumentContext('PublishAction', (state)=>state.document.schema);
411
+ * -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document })=>{
412
+ const { currentDocument: { schema } } = useDocumentContext.useDocumentContext('PublishAction');
376
413
  const navigate = reactRouterDom.useNavigate();
377
414
  const { toggleNotification } = strapiAdmin.useNotification();
378
415
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
@@ -380,23 +417,35 @@ const transformData = (data)=>{
380
417
  const isCloning = reactRouterDom.useMatch(router.CLONE_PATH) !== null;
381
418
  const { id } = reactRouterDom.useParams();
382
419
  const { formatMessage } = reactIntl.useIntl();
383
- const canPublish = DocumentRBAC.useDocumentRBAC('PublishAction', ({ canPublish })=>canPublish);
384
- const { publish, isLoading } = useDocumentActions.useDocumentActions(fromPreview, fromRelationModal);
420
+ const { canPublish, canReadFields } = DocumentRBAC.useDocumentRBAC('PublishAction', ({ canPublish, canReadFields })=>({
421
+ canPublish,
422
+ canReadFields
423
+ }));
424
+ const { publish, isLoading } = useDocumentActions.useDocumentActions();
425
+ const onPreview = Preview.usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
385
426
  const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = documents.useGetDraftRelationCountQuery();
386
427
  const [localCountOfDraftRelations, setLocalCountOfDraftRelations] = React__namespace.useState(0);
387
428
  const [serverCountOfDraftRelations, setServerCountOfDraftRelations] = React__namespace.useState(0);
388
- const [{ query, rawQuery }] = strapiAdmin.useQueryParams();
389
- const params = React__namespace.useMemo(()=>api.buildValidParams(query), [
390
- query
391
- ]);
429
+ const [{ rawQuery }] = strapiAdmin.useQueryParams();
392
430
  const modified = strapiAdmin.useForm('PublishAction', ({ modified })=>modified);
393
431
  const setSubmitting = strapiAdmin.useForm('PublishAction', ({ setSubmitting })=>setSubmitting);
394
432
  const isSubmitting = strapiAdmin.useForm('PublishAction', ({ isSubmitting })=>isSubmitting);
395
433
  const validate = strapiAdmin.useForm('PublishAction', (state)=>state.validate);
396
434
  const setErrors = strapiAdmin.useForm('PublishAction', (state)=>state.setErrors);
397
435
  const formValues = strapiAdmin.useForm('PublishAction', ({ values })=>values);
398
- const rootDocumentMeta = DocumentContext.useDocumentContext('PublishAction', (state)=>state.rootDocumentMeta);
399
- const currentDocumentMeta = DocumentContext.useDocumentContext('PublishAction', (state)=>state.meta);
436
+ const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
437
+ // need to discriminate if the publish is coming from a relation modal or in the edit view
438
+ const relationContext = RelationModal.useRelationModal('PublishAction', ()=>true, false);
439
+ const fromRelationModal = relationContext != undefined;
440
+ const dispatch = RelationModal.useRelationModal('PublishAction', (state)=>state.dispatch);
441
+ const fieldToConnect = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
442
+ const fieldToConnectUID = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
443
+ const documentHistory = RelationModal.useRelationModal('PublishAction', (state)=>state.state.documentHistory, false);
444
+ const rootDocumentMeta = RelationModal.useRelationModal('PublishAction', (state)=>state.rootDocumentMeta);
445
+ const { currentDocumentMeta } = useDocumentContext.useDocumentContext('PublishAction');
446
+ const [updateDocumentMutation] = documents.useUpdateDocumentMutation();
447
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
448
+ const idToPublish = currentDocumentMeta.documentId || id;
400
449
  React__namespace.useEffect(()=>{
401
450
  if (isErrorDraftRelations) {
402
451
  toggleNotification({
@@ -460,7 +509,7 @@ const transformData = (data)=>{
460
509
  collectionType,
461
510
  model,
462
511
  documentId,
463
- params
512
+ params: currentDocumentMeta.params
464
513
  });
465
514
  if (error) {
466
515
  throw error;
@@ -477,8 +526,18 @@ const transformData = (data)=>{
477
526
  countDraftRelations,
478
527
  collectionType,
479
528
  model,
480
- params
529
+ currentDocumentMeta.params
481
530
  ]);
531
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
532
+ const parentDocumentData = useDocument.useDocument({
533
+ documentId: parentDocumentMetaToUpdate?.documentId,
534
+ model: parentDocumentMetaToUpdate?.model,
535
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
536
+ params: parentDocumentMetaToUpdate?.params
537
+ }, {
538
+ skip: !parentDocumentMetaToUpdate
539
+ });
540
+ const { getInitialFormValues } = useDocument.useDoc();
482
541
  const isDocumentPublished = (document?.[attributes.PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[attributes.PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
483
542
  if (!schema?.options?.draftAndPublish) {
484
543
  return null;
@@ -490,30 +549,95 @@ const transformData = (data)=>{
490
549
  status: 'published'
491
550
  });
492
551
  if (errors) {
493
- toggleNotification({
494
- type: 'danger',
495
- message: formatMessage({
496
- id: 'content-manager.validation.error',
497
- defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
498
- })
552
+ const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
553
+ const attribute = schema.attributes[fieldName];
554
+ return attribute?.required && !(canReadFields ?? []).includes(fieldName);
499
555
  });
556
+ if (hasUnreadableRequiredField) {
557
+ toggleNotification({
558
+ type: 'danger',
559
+ message: formatMessage({
560
+ id: 'content-manager.validation.error.unreadable-required-field',
561
+ defaultMessage: 'Your current permissions prevent access to certain required fields. Please request access from an administrator to proceed.'
562
+ })
563
+ });
564
+ } else {
565
+ toggleNotification({
566
+ type: 'danger',
567
+ message: formatMessage({
568
+ id: 'content-manager.validation.error',
569
+ defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
570
+ })
571
+ });
572
+ }
500
573
  return;
501
574
  }
502
- const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
503
575
  const res = await publish({
504
576
  collectionType,
505
577
  model,
506
578
  documentId,
507
- params: isPublishingRelation ? currentDocumentMeta.params : params
579
+ params: currentDocumentMeta.params
508
580
  }, transformData(formValues));
581
+ // Reset form if successful
582
+ if ('data' in res) {
583
+ resetForm();
584
+ }
509
585
  if ('data' in res && collectionType !== collections.SINGLE_TYPES) {
510
586
  /**
511
587
  * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
512
- */ if (id === 'create') {
588
+ */ if (idToPublish === 'create' && !fromRelationModal) {
513
589
  navigate({
514
590
  pathname: `../${collectionType}/${model}/${res.data.documentId}`,
515
591
  search: rawQuery
516
592
  });
593
+ } else if (fromRelationModal) {
594
+ const newRelation = {
595
+ documentId: res.data.documentId,
596
+ collectionType,
597
+ model,
598
+ params: currentDocumentMeta.params
599
+ };
600
+ /*
601
+ * Update, if needed, the parent relation with the newly published document.
602
+ * Check if in history we have the parent relation otherwise use the
603
+ * rootDocument
604
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES)) {
605
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
606
+ const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;
607
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
608
+ try {
609
+ const updateRes = await updateDocumentMutation({
610
+ collectionType: metaDocumentToUpdate.collectionType,
611
+ model: metaDocumentToUpdate.model,
612
+ documentId: metaDocumentToUpdate.collectionType !== collections.SINGLE_TYPES ? metaDocumentToUpdate.documentId : undefined,
613
+ params: metaDocumentToUpdate.params,
614
+ data: dataToUpdate
615
+ });
616
+ if ('error' in updateRes) {
617
+ toggleNotification({
618
+ type: 'danger',
619
+ message: formatAPIError(updateRes.error)
620
+ });
621
+ return;
622
+ }
623
+ } catch (err) {
624
+ toggleNotification({
625
+ type: 'danger',
626
+ message: formatMessage({
627
+ id: 'notification.error',
628
+ defaultMessage: 'An error occurred'
629
+ })
630
+ });
631
+ throw err;
632
+ }
633
+ }
634
+ dispatch({
635
+ type: 'GO_TO_CREATED_RELATION',
636
+ payload: {
637
+ document: newRelation,
638
+ shouldBypassConfirmation: true
639
+ }
640
+ });
517
641
  }
518
642
  } else if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
519
643
  setErrors(formatValidationErrors(res.error));
@@ -579,27 +703,44 @@ PublishAction.position = [
579
703
  'preview',
580
704
  'relation-modal'
581
705
  ];
582
- const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview, fromPreview = false, fromRelationModal = false })=>{
706
+ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
583
707
  const navigate = reactRouterDom.useNavigate();
584
708
  const { toggleNotification } = strapiAdmin.useNotification();
585
709
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
586
710
  const cloneMatch = reactRouterDom.useMatch(router.CLONE_PATH);
587
711
  const isCloning = cloneMatch !== null;
588
712
  const { formatMessage } = reactIntl.useIntl();
589
- const { create, update, clone, isLoading } = useDocumentActions.useDocumentActions(fromPreview, fromRelationModal);
590
- const [{ query, rawQuery }] = strapiAdmin.useQueryParams();
591
- const params = React__namespace.useMemo(()=>api.buildValidParams(query), [
592
- query
593
- ]);
713
+ const { create, update, clone, isLoading } = useDocumentActions.useDocumentActions();
714
+ const [{ rawQuery }] = strapiAdmin.useQueryParams();
715
+ const onPreview = Preview.usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
716
+ const { getInitialFormValues } = useDocument.useDoc();
594
717
  const isSubmitting = strapiAdmin.useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
595
718
  const modified = strapiAdmin.useForm('UpdateAction', ({ modified })=>modified);
596
719
  const setSubmitting = strapiAdmin.useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
597
720
  const document = strapiAdmin.useForm('UpdateAction', ({ values })=>values);
598
721
  const validate = strapiAdmin.useForm('UpdateAction', (state)=>state.validate);
599
722
  const setErrors = strapiAdmin.useForm('UpdateAction', (state)=>state.setErrors);
600
- const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
601
- const rootDocumentMeta = DocumentContext.useDocumentContext('UpdateAction', (state)=>state.rootDocumentMeta);
602
- const currentDocumentMeta = DocumentContext.useDocumentContext('UpdateAction', (state)=>state.meta);
723
+ const resetForm = strapiAdmin.useForm('UpdateAction', ({ resetForm })=>resetForm);
724
+ const dispatch = RelationModal.useRelationModal('UpdateAction', (state)=>state.dispatch);
725
+ // need to discriminate if the update is coming from a relation modal or in the edit view
726
+ const relationContext = RelationModal.useRelationModal('UpdateAction', ()=>true, false);
727
+ const fieldToConnect = RelationModal.useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
728
+ const fieldToConnectUID = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
729
+ const documentHistory = RelationModal.useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
730
+ const rootDocumentMeta = RelationModal.useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
731
+ const fromRelationModal = relationContext != undefined;
732
+ const { currentDocumentMeta } = useDocumentContext.useDocumentContext('UpdateAction');
733
+ const [updateDocumentMutation] = documents.useUpdateDocumentMutation();
734
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
735
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
736
+ const parentDocumentData = useDocument.useDocument({
737
+ documentId: parentDocumentMetaToUpdate?.documentId,
738
+ model: parentDocumentMetaToUpdate?.model,
739
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
740
+ params: parentDocumentMetaToUpdate?.params
741
+ }, {
742
+ skip: !parentDocumentMetaToUpdate
743
+ });
603
744
  const handleUpdate = React__namespace.useCallback(async ()=>{
604
745
  setSubmitting(true);
605
746
  try {
@@ -623,7 +764,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
623
764
  const res = await clone({
624
765
  model,
625
766
  documentId: cloneMatch.params.origin,
626
- params
767
+ params: currentDocumentMeta.params
627
768
  }, transformData(document));
628
769
  if ('data' in res) {
629
770
  navigate({
@@ -636,12 +777,11 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
636
777
  setErrors(formatValidationErrors(res.error));
637
778
  }
638
779
  } else if (documentId || collectionType === collections.SINGLE_TYPES) {
639
- const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
640
780
  const res = await update({
641
781
  collectionType,
642
782
  model,
643
783
  documentId,
644
- params: isEditingRelation ? currentDocumentMeta.params : params
784
+ params: currentDocumentMeta.params
645
785
  }, transformData(document));
646
786
  if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
647
787
  setErrors(formatValidationErrors(res.error));
@@ -651,16 +791,67 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
651
791
  } else {
652
792
  const res = await create({
653
793
  model,
654
- params
794
+ params: currentDocumentMeta.params
655
795
  }, transformData(document));
656
796
  if ('data' in res && collectionType !== collections.SINGLE_TYPES) {
657
- navigate({
658
- pathname: `../${res.data.documentId}`,
659
- search: rawQuery
660
- }, {
661
- replace: true,
662
- relative: 'path'
663
- });
797
+ if (fromRelationModal) {
798
+ const createdRelation = {
799
+ documentId: res.data.documentId,
800
+ collectionType,
801
+ model,
802
+ params: currentDocumentMeta.params
803
+ };
804
+ /*
805
+ * Update, if needed, the parent relation with the newly published document.
806
+ * Check if in history we have the parent relation otherwise use the
807
+ * rootDocument
808
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES)) {
809
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
810
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
811
+ try {
812
+ const updateRes = await updateDocumentMutation({
813
+ collectionType: parentDocumentMetaToUpdate.collectionType,
814
+ model: parentDocumentMetaToUpdate.model,
815
+ documentId: parentDocumentMetaToUpdate.collectionType !== collections.SINGLE_TYPES ? parentDocumentMetaToUpdate.documentId : undefined,
816
+ params: parentDocumentMetaToUpdate.params,
817
+ data: {
818
+ ...dataToUpdate
819
+ }
820
+ });
821
+ if ('error' in updateRes) {
822
+ toggleNotification({
823
+ type: 'danger',
824
+ message: formatAPIError(updateRes.error)
825
+ });
826
+ return;
827
+ }
828
+ } catch (err) {
829
+ toggleNotification({
830
+ type: 'danger',
831
+ message: formatMessage({
832
+ id: 'notification.error',
833
+ defaultMessage: 'An error occurred'
834
+ })
835
+ });
836
+ throw err;
837
+ }
838
+ }
839
+ dispatch({
840
+ type: 'GO_TO_CREATED_RELATION',
841
+ payload: {
842
+ document: createdRelation,
843
+ shouldBypassConfirmation: true
844
+ }
845
+ });
846
+ } else {
847
+ navigate({
848
+ pathname: `../${res.data.documentId}`,
849
+ search: rawQuery
850
+ }, {
851
+ replace: true,
852
+ relative: 'path'
853
+ });
854
+ }
664
855
  } else if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
665
856
  setErrors(formatValidationErrors(res.error));
666
857
  }
@@ -672,30 +863,37 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
672
863
  }
673
864
  }
674
865
  }, [
866
+ setSubmitting,
867
+ modified,
868
+ validate,
869
+ isCloning,
870
+ documentId,
871
+ collectionType,
872
+ toggleNotification,
873
+ formatMessage,
675
874
  clone,
875
+ model,
676
876
  cloneMatch?.params.origin,
677
- collectionType,
678
- create,
679
- currentDocumentMeta.documentId,
680
877
  currentDocumentMeta.params,
681
878
  document,
682
- documentId,
683
- formatMessage,
684
- formatValidationErrors,
685
- isCloning,
686
- model,
687
- modified,
688
879
  navigate,
689
- onPreview,
690
- params,
691
880
  rawQuery,
692
- resetForm,
693
- rootDocumentMeta.documentId,
694
881
  setErrors,
695
- setSubmitting,
696
- toggleNotification,
882
+ formatValidationErrors,
697
883
  update,
698
- validate
884
+ resetForm,
885
+ create,
886
+ fromRelationModal,
887
+ fieldToConnect,
888
+ documentHistory,
889
+ parentDocumentMetaToUpdate,
890
+ dispatch,
891
+ getInitialFormValues,
892
+ parentDocumentData,
893
+ fieldToConnectUID,
894
+ updateDocumentMutation,
895
+ formatAPIError,
896
+ onPreview
699
897
  ]);
700
898
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
701
899
  React__namespace.useEffect(()=>{