@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,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
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';
4
+ import { Menu, Flex, Button, 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
12
  import { styled } from 'styled-components';
10
13
  import { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes.mjs';
11
14
  import { SINGLE_TYPES } from '../../../constants/collections.mjs';
12
- import { useDocumentContext } from '../../../features/DocumentContext.mjs';
13
15
  import { useDocumentRBAC } from '../../../features/DocumentRBAC.mjs';
14
- import { useDoc } from '../../../hooks/useDocument.mjs';
16
+ import { useDocument, useDoc } from '../../../hooks/useDocument.mjs';
15
17
  import { useDocumentActions } from '../../../hooks/useDocumentActions.mjs';
18
+ import { useDocumentContext } from '../../../hooks/useDocumentContext.mjs';
19
+ import { usePreviewContext } from '../../../preview/pages/Preview.mjs';
16
20
  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';
21
+ import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery, useUpdateDocumentMutation } from '../../../services/documents.mjs';
22
+ import { isBaseQueryError, buildValidParams } from '../../../utils/api.mjs';
19
23
  import { getTranslation } from '../../../utils/translations.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)=>{
@@ -350,8 +387,8 @@ const transformData = (data)=>{
350
387
  };
351
388
  /* -------------------------------------------------------------------------------------------------
352
389
  * DocumentActionComponents
353
- * -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document, onPreview, fromPreview = false, fromRelationModal = false })=>{
354
- const schema = useDocumentContext('PublishAction', (state)=>state.document.schema);
390
+ * -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document })=>{
391
+ const { currentDocument: { schema } } = useDocumentContext('PublishAction');
355
392
  const navigate = useNavigate();
356
393
  const { toggleNotification } = useNotification();
357
394
  const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
@@ -359,23 +396,35 @@ const transformData = (data)=>{
359
396
  const isCloning = useMatch(CLONE_PATH) !== null;
360
397
  const { id } = useParams();
361
398
  const { formatMessage } = useIntl();
362
- const canPublish = useDocumentRBAC('PublishAction', ({ canPublish })=>canPublish);
363
- const { publish, isLoading } = useDocumentActions(fromPreview, fromRelationModal);
399
+ const { canPublish, canReadFields } = useDocumentRBAC('PublishAction', ({ canPublish, canReadFields })=>({
400
+ canPublish,
401
+ canReadFields
402
+ }));
403
+ const { publish, isLoading } = useDocumentActions();
404
+ const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
364
405
  const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = useLazyGetDraftRelationCountQuery();
365
406
  const [localCountOfDraftRelations, setLocalCountOfDraftRelations] = React.useState(0);
366
407
  const [serverCountOfDraftRelations, setServerCountOfDraftRelations] = React.useState(0);
367
- const [{ query, rawQuery }] = useQueryParams();
368
- const params = React.useMemo(()=>buildValidParams(query), [
369
- query
370
- ]);
408
+ const [{ rawQuery }] = useQueryParams();
371
409
  const modified = useForm('PublishAction', ({ modified })=>modified);
372
410
  const setSubmitting = useForm('PublishAction', ({ setSubmitting })=>setSubmitting);
373
411
  const isSubmitting = useForm('PublishAction', ({ isSubmitting })=>isSubmitting);
374
412
  const validate = useForm('PublishAction', (state)=>state.validate);
375
413
  const setErrors = useForm('PublishAction', (state)=>state.setErrors);
376
414
  const formValues = useForm('PublishAction', ({ values })=>values);
377
- const rootDocumentMeta = useDocumentContext('PublishAction', (state)=>state.rootDocumentMeta);
378
- const currentDocumentMeta = useDocumentContext('PublishAction', (state)=>state.meta);
415
+ const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
416
+ // need to discriminate if the publish is coming from a relation modal or in the edit view
417
+ const relationContext = useRelationModal('PublishAction', ()=>true, false);
418
+ const fromRelationModal = relationContext != undefined;
419
+ const dispatch = useRelationModal('PublishAction', (state)=>state.dispatch);
420
+ const fieldToConnect = useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
421
+ const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
422
+ const documentHistory = useRelationModal('PublishAction', (state)=>state.state.documentHistory, false);
423
+ const rootDocumentMeta = useRelationModal('PublishAction', (state)=>state.rootDocumentMeta);
424
+ const { currentDocumentMeta } = useDocumentContext('PublishAction');
425
+ const [updateDocumentMutation] = useUpdateDocumentMutation();
426
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
427
+ const idToPublish = currentDocumentMeta.documentId || id;
379
428
  React.useEffect(()=>{
380
429
  if (isErrorDraftRelations) {
381
430
  toggleNotification({
@@ -439,7 +488,7 @@ const transformData = (data)=>{
439
488
  collectionType,
440
489
  model,
441
490
  documentId,
442
- params
491
+ params: currentDocumentMeta.params
443
492
  });
444
493
  if (error) {
445
494
  throw error;
@@ -456,8 +505,18 @@ const transformData = (data)=>{
456
505
  countDraftRelations,
457
506
  collectionType,
458
507
  model,
459
- params
508
+ currentDocumentMeta.params
460
509
  ]);
510
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
511
+ const parentDocumentData = useDocument({
512
+ documentId: parentDocumentMetaToUpdate?.documentId,
513
+ model: parentDocumentMetaToUpdate?.model,
514
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
515
+ params: parentDocumentMetaToUpdate?.params
516
+ }, {
517
+ skip: !parentDocumentMetaToUpdate
518
+ });
519
+ const { getInitialFormValues } = useDoc();
461
520
  const isDocumentPublished = (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
462
521
  if (!schema?.options?.draftAndPublish) {
463
522
  return null;
@@ -469,30 +528,95 @@ const transformData = (data)=>{
469
528
  status: 'published'
470
529
  });
471
530
  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
- })
531
+ const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
532
+ const attribute = schema.attributes[fieldName];
533
+ return attribute?.required && !(canReadFields ?? []).includes(fieldName);
478
534
  });
535
+ if (hasUnreadableRequiredField) {
536
+ toggleNotification({
537
+ type: 'danger',
538
+ message: formatMessage({
539
+ id: 'content-manager.validation.error.unreadable-required-field',
540
+ defaultMessage: 'Your current permissions prevent access to certain required fields. Please request access from an administrator to proceed.'
541
+ })
542
+ });
543
+ } else {
544
+ toggleNotification({
545
+ type: 'danger',
546
+ message: formatMessage({
547
+ id: 'content-manager.validation.error',
548
+ defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
549
+ })
550
+ });
551
+ }
479
552
  return;
480
553
  }
481
- const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
482
554
  const res = await publish({
483
555
  collectionType,
484
556
  model,
485
557
  documentId,
486
- params: isPublishingRelation ? currentDocumentMeta.params : params
558
+ params: currentDocumentMeta.params
487
559
  }, transformData(formValues));
560
+ // Reset form if successful
561
+ if ('data' in res) {
562
+ resetForm();
563
+ }
488
564
  if ('data' in res && collectionType !== SINGLE_TYPES) {
489
565
  /**
490
566
  * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
491
- */ if (id === 'create') {
567
+ */ if (idToPublish === 'create' && !fromRelationModal) {
492
568
  navigate({
493
569
  pathname: `../${collectionType}/${model}/${res.data.documentId}`,
494
570
  search: rawQuery
495
571
  });
572
+ } else if (fromRelationModal) {
573
+ const newRelation = {
574
+ documentId: res.data.documentId,
575
+ collectionType,
576
+ model,
577
+ params: currentDocumentMeta.params
578
+ };
579
+ /*
580
+ * Update, if needed, the parent relation with the newly published document.
581
+ * Check if in history we have the parent relation otherwise use the
582
+ * rootDocument
583
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
584
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
585
+ const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;
586
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
587
+ try {
588
+ const updateRes = await updateDocumentMutation({
589
+ collectionType: metaDocumentToUpdate.collectionType,
590
+ model: metaDocumentToUpdate.model,
591
+ documentId: metaDocumentToUpdate.collectionType !== SINGLE_TYPES ? metaDocumentToUpdate.documentId : undefined,
592
+ params: metaDocumentToUpdate.params,
593
+ data: dataToUpdate
594
+ });
595
+ if ('error' in updateRes) {
596
+ toggleNotification({
597
+ type: 'danger',
598
+ message: formatAPIError(updateRes.error)
599
+ });
600
+ return;
601
+ }
602
+ } catch (err) {
603
+ toggleNotification({
604
+ type: 'danger',
605
+ message: formatMessage({
606
+ id: 'notification.error',
607
+ defaultMessage: 'An error occurred'
608
+ })
609
+ });
610
+ throw err;
611
+ }
612
+ }
613
+ dispatch({
614
+ type: 'GO_TO_CREATED_RELATION',
615
+ payload: {
616
+ document: newRelation,
617
+ shouldBypassConfirmation: true
618
+ }
619
+ });
496
620
  }
497
621
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
498
622
  setErrors(formatValidationErrors(res.error));
@@ -558,27 +682,44 @@ PublishAction.position = [
558
682
  'preview',
559
683
  'relation-modal'
560
684
  ];
561
- const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview, fromPreview = false, fromRelationModal = false })=>{
685
+ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
562
686
  const navigate = useNavigate();
563
687
  const { toggleNotification } = useNotification();
564
688
  const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
565
689
  const cloneMatch = useMatch(CLONE_PATH);
566
690
  const isCloning = cloneMatch !== null;
567
691
  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
- ]);
692
+ const { create, update, clone, isLoading } = useDocumentActions();
693
+ const [{ rawQuery }] = useQueryParams();
694
+ const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
695
+ const { getInitialFormValues } = useDoc();
573
696
  const isSubmitting = useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
574
697
  const modified = useForm('UpdateAction', ({ modified })=>modified);
575
698
  const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
576
699
  const document = useForm('UpdateAction', ({ values })=>values);
577
700
  const validate = useForm('UpdateAction', (state)=>state.validate);
578
701
  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);
702
+ const resetForm = useForm('UpdateAction', ({ resetForm })=>resetForm);
703
+ const dispatch = useRelationModal('UpdateAction', (state)=>state.dispatch);
704
+ // need to discriminate if the update is coming from a relation modal or in the edit view
705
+ const relationContext = useRelationModal('UpdateAction', ()=>true, false);
706
+ const fieldToConnect = useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
707
+ const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
708
+ const documentHistory = useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
709
+ const rootDocumentMeta = useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
710
+ const fromRelationModal = relationContext != undefined;
711
+ const { currentDocumentMeta } = useDocumentContext('UpdateAction');
712
+ const [updateDocumentMutation] = useUpdateDocumentMutation();
713
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
714
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
715
+ const parentDocumentData = useDocument({
716
+ documentId: parentDocumentMetaToUpdate?.documentId,
717
+ model: parentDocumentMetaToUpdate?.model,
718
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
719
+ params: parentDocumentMetaToUpdate?.params
720
+ }, {
721
+ skip: !parentDocumentMetaToUpdate
722
+ });
582
723
  const handleUpdate = React.useCallback(async ()=>{
583
724
  setSubmitting(true);
584
725
  try {
@@ -602,7 +743,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
602
743
  const res = await clone({
603
744
  model,
604
745
  documentId: cloneMatch.params.origin,
605
- params
746
+ params: currentDocumentMeta.params
606
747
  }, transformData(document));
607
748
  if ('data' in res) {
608
749
  navigate({
@@ -615,12 +756,11 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
615
756
  setErrors(formatValidationErrors(res.error));
616
757
  }
617
758
  } else if (documentId || collectionType === SINGLE_TYPES) {
618
- const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
619
759
  const res = await update({
620
760
  collectionType,
621
761
  model,
622
762
  documentId,
623
- params: isEditingRelation ? currentDocumentMeta.params : params
763
+ params: currentDocumentMeta.params
624
764
  }, transformData(document));
625
765
  if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
626
766
  setErrors(formatValidationErrors(res.error));
@@ -630,16 +770,67 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
630
770
  } else {
631
771
  const res = await create({
632
772
  model,
633
- params
773
+ params: currentDocumentMeta.params
634
774
  }, transformData(document));
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
  }
@@ -651,30 +842,37 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
651
842
  }
652
843
  }
653
844
  }, [
845
+ setSubmitting,
846
+ modified,
847
+ validate,
848
+ isCloning,
849
+ documentId,
850
+ collectionType,
851
+ toggleNotification,
852
+ formatMessage,
654
853
  clone,
854
+ model,
655
855
  cloneMatch?.params.origin,
656
- collectionType,
657
- create,
658
- currentDocumentMeta.documentId,
659
856
  currentDocumentMeta.params,
660
857
  document,
661
- documentId,
662
- formatMessage,
663
- formatValidationErrors,
664
- isCloning,
665
- model,
666
- modified,
667
858
  navigate,
668
- onPreview,
669
- params,
670
859
  rawQuery,
671
- resetForm,
672
- rootDocumentMeta.documentId,
673
860
  setErrors,
674
- setSubmitting,
675
- toggleNotification,
861
+ formatValidationErrors,
676
862
  update,
677
- validate
863
+ resetForm,
864
+ create,
865
+ fromRelationModal,
866
+ fieldToConnect,
867
+ documentHistory,
868
+ parentDocumentMetaToUpdate,
869
+ dispatch,
870
+ getInitialFormValues,
871
+ parentDocumentData,
872
+ fieldToConnectUID,
873
+ updateDocumentMutation,
874
+ formatAPIError,
875
+ onPreview
678
876
  ]);
679
877
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
680
878
  React.useEffect(()=>{