@strapi/content-manager 0.0.0-experimental.5a4d501fa348721471ac552dcecac1b0c8146ae7 → 0.0.0-experimental.5aa166b6d14b8a896a5c865796f1ec9f465601e0

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 (301) 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 +414 -0
  10. package/dist/admin/components/Widgets.js.map +1 -0
  11. package/dist/admin/components/Widgets.mjs +391 -0
  12. package/dist/admin/components/Widgets.mjs.map +1 -0
  13. package/dist/admin/history/components/VersionContent.js +24 -3
  14. package/dist/admin/history/components/VersionContent.js.map +1 -1
  15. package/dist/admin/history/components/VersionContent.mjs +25 -4
  16. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  17. package/dist/admin/history/components/VersionHeader.js +6 -0
  18. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  19. package/dist/admin/history/components/VersionHeader.mjs +7 -1
  20. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  21. package/dist/admin/hooks/useDocumentActions.js +12 -4
  22. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  23. package/dist/admin/hooks/useDocumentActions.mjs +12 -4
  24. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  25. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  26. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  27. package/dist/admin/index.js +62 -5
  28. package/dist/admin/index.js.map +1 -1
  29. package/dist/admin/index.mjs +61 -3
  30. package/dist/admin/index.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/EditViewPage.js +99 -75
  32. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  33. package/dist/admin/pages/EditView/EditViewPage.mjs +101 -77
  34. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/DocumentActions.js +295 -91
  36. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/DocumentActions.mjs +299 -95
  38. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +61 -26
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  52. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  54. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
  56. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
  58. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +15 -2
  60. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +16 -3
  62. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +18 -5
  64. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +20 -7
  66. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +129 -55
  68. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +129 -55
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +148 -38
  72. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +152 -42
  74. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/UID.js +4 -2
  76. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +4 -2
  78. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  80. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  82. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  84. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  86. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  88. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  90. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormLayout.js +47 -27
  92. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormLayout.mjs +47 -27
  94. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/utils/data.js +103 -0
  96. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  97. package/dist/admin/pages/EditView/utils/data.mjs +103 -1
  98. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  99. package/dist/admin/pages/ListView/ListViewPage.js +227 -132
  100. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  101. package/dist/admin/pages/ListView/ListViewPage.mjs +229 -134
  102. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  103. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  104. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  105. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  106. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  107. package/dist/admin/pages/ListView/components/Filters.js +1 -0
  108. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  109. package/dist/admin/pages/ListView/components/Filters.mjs +1 -0
  110. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  111. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  112. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  113. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  114. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  115. package/dist/admin/preview/components/PreviewHeader.js +1 -1
  116. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  117. package/dist/admin/preview/components/PreviewHeader.mjs +1 -1
  118. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  119. package/dist/admin/preview/pages/Preview.js +86 -33
  120. package/dist/admin/preview/pages/Preview.js.map +1 -1
  121. package/dist/admin/preview/pages/Preview.mjs +87 -34
  122. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  123. package/dist/admin/services/api.js +3 -1
  124. package/dist/admin/services/api.js.map +1 -1
  125. package/dist/admin/services/api.mjs +3 -1
  126. package/dist/admin/services/api.mjs.map +1 -1
  127. package/dist/admin/services/documents.js +32 -16
  128. package/dist/admin/services/documents.js.map +1 -1
  129. package/dist/admin/services/documents.mjs +32 -16
  130. package/dist/admin/services/documents.mjs.map +1 -1
  131. package/dist/admin/services/homepage.js +39 -0
  132. package/dist/admin/services/homepage.js.map +1 -0
  133. package/dist/admin/services/homepage.mjs +36 -0
  134. package/dist/admin/services/homepage.mjs.map +1 -0
  135. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  136. package/dist/admin/src/components/Widgets.d.ts +4 -0
  137. package/dist/admin/src/exports.d.ts +1 -0
  138. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  139. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  140. package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
  141. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  142. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +26 -5
  143. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  144. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  145. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -8
  146. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  147. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  148. package/dist/admin/src/services/api.d.ts +1 -1
  149. package/dist/admin/src/services/components.d.ts +2 -2
  150. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  151. package/dist/admin/src/services/documents.d.ts +23 -17
  152. package/dist/admin/src/services/homepage.d.ts +9 -0
  153. package/dist/admin/src/services/init.d.ts +1 -1
  154. package/dist/admin/src/services/relations.d.ts +2 -2
  155. package/dist/admin/src/services/uid.d.ts +3 -3
  156. package/dist/admin/src/utils/validation.d.ts +1 -0
  157. package/dist/admin/translations/en.json.js +8 -1
  158. package/dist/admin/translations/en.json.js.map +1 -1
  159. package/dist/admin/translations/en.json.mjs +8 -1
  160. package/dist/admin/translations/en.json.mjs.map +1 -1
  161. package/dist/admin/translations/es.json.js +5 -2
  162. package/dist/admin/translations/es.json.js.map +1 -1
  163. package/dist/admin/translations/es.json.mjs +5 -2
  164. package/dist/admin/translations/es.json.mjs.map +1 -1
  165. package/dist/admin/translations/fr.json.js +10 -2
  166. package/dist/admin/translations/fr.json.js.map +1 -1
  167. package/dist/admin/translations/fr.json.mjs +10 -2
  168. package/dist/admin/translations/fr.json.mjs.map +1 -1
  169. package/dist/admin/translations/ru.json.js +235 -226
  170. package/dist/admin/translations/ru.json.js.map +1 -1
  171. package/dist/admin/translations/ru.json.mjs +230 -226
  172. package/dist/admin/translations/ru.json.mjs.map +1 -1
  173. package/dist/admin/utils/validation.js +17 -6
  174. package/dist/admin/utils/validation.js.map +1 -1
  175. package/dist/admin/utils/validation.mjs +17 -6
  176. package/dist/admin/utils/validation.mjs.map +1 -1
  177. package/dist/server/controllers/content-types.js +11 -1
  178. package/dist/server/controllers/content-types.js.map +1 -1
  179. package/dist/server/controllers/content-types.mjs +11 -1
  180. package/dist/server/controllers/content-types.mjs.map +1 -1
  181. package/dist/server/controllers/index.js +3 -1
  182. package/dist/server/controllers/index.js.map +1 -1
  183. package/dist/server/controllers/index.mjs +3 -1
  184. package/dist/server/controllers/index.mjs.map +1 -1
  185. package/dist/server/controllers/relations.js +2 -2
  186. package/dist/server/controllers/relations.js.map +1 -1
  187. package/dist/server/controllers/relations.mjs +2 -2
  188. package/dist/server/controllers/relations.mjs.map +1 -1
  189. package/dist/server/controllers/validation/index.js +14 -2
  190. package/dist/server/controllers/validation/index.js.map +1 -1
  191. package/dist/server/controllers/validation/index.mjs +14 -2
  192. package/dist/server/controllers/validation/index.mjs.map +1 -1
  193. package/dist/server/history/services/lifecycles.js +3 -0
  194. package/dist/server/history/services/lifecycles.js.map +1 -1
  195. package/dist/server/history/services/lifecycles.mjs +3 -0
  196. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  197. package/dist/server/homepage/controllers/homepage.js +62 -0
  198. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  199. package/dist/server/homepage/controllers/homepage.mjs +41 -0
  200. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  201. package/dist/server/homepage/controllers/index.js +10 -0
  202. package/dist/server/homepage/controllers/index.js.map +1 -0
  203. package/dist/server/homepage/controllers/index.mjs +8 -0
  204. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  205. package/dist/server/homepage/index.js +14 -0
  206. package/dist/server/homepage/index.js.map +1 -0
  207. package/dist/server/homepage/index.mjs +12 -0
  208. package/dist/server/homepage/index.mjs.map +1 -0
  209. package/dist/server/homepage/routes/homepage.js +36 -0
  210. package/dist/server/homepage/routes/homepage.js.map +1 -0
  211. package/dist/server/homepage/routes/homepage.mjs +34 -0
  212. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  213. package/dist/server/homepage/routes/index.js +13 -0
  214. package/dist/server/homepage/routes/index.js.map +1 -0
  215. package/dist/server/homepage/routes/index.mjs +11 -0
  216. package/dist/server/homepage/routes/index.mjs.map +1 -0
  217. package/dist/server/homepage/services/homepage.js +197 -0
  218. package/dist/server/homepage/services/homepage.js.map +1 -0
  219. package/dist/server/homepage/services/homepage.mjs +195 -0
  220. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  221. package/dist/server/homepage/services/index.js +10 -0
  222. package/dist/server/homepage/services/index.js.map +1 -0
  223. package/dist/server/homepage/services/index.mjs +8 -0
  224. package/dist/server/homepage/services/index.mjs.map +1 -0
  225. package/dist/server/preview/services/preview.js +0 -1
  226. package/dist/server/preview/services/preview.js.map +1 -1
  227. package/dist/server/preview/services/preview.mjs +0 -1
  228. package/dist/server/preview/services/preview.mjs.map +1 -1
  229. package/dist/server/routes/index.js +3 -1
  230. package/dist/server/routes/index.js.map +1 -1
  231. package/dist/server/routes/index.mjs +3 -1
  232. package/dist/server/routes/index.mjs.map +1 -1
  233. package/dist/server/services/data-mapper.js +4 -1
  234. package/dist/server/services/data-mapper.js.map +1 -1
  235. package/dist/server/services/data-mapper.mjs +4 -1
  236. package/dist/server/services/data-mapper.mjs.map +1 -1
  237. package/dist/server/services/document-manager.js +8 -1
  238. package/dist/server/services/document-manager.js.map +1 -1
  239. package/dist/server/services/document-manager.mjs +8 -1
  240. package/dist/server/services/document-manager.mjs.map +1 -1
  241. package/dist/server/services/document-metadata.js +3 -1
  242. package/dist/server/services/document-metadata.js.map +1 -1
  243. package/dist/server/services/document-metadata.mjs +3 -1
  244. package/dist/server/services/document-metadata.mjs.map +1 -1
  245. package/dist/server/services/index.js +3 -1
  246. package/dist/server/services/index.js.map +1 -1
  247. package/dist/server/services/index.mjs +3 -1
  248. package/dist/server/services/index.mjs.map +1 -1
  249. package/dist/server/services/utils/configuration/attributes.js +1 -1
  250. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  251. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  252. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  253. package/dist/server/services/utils/configuration/layouts.js +1 -1
  254. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  255. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  256. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  257. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  258. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  259. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  260. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  261. package/dist/server/services/utils/populate.js +11 -0
  262. package/dist/server/services/utils/populate.js.map +1 -1
  263. package/dist/server/services/utils/populate.mjs +11 -0
  264. package/dist/server/services/utils/populate.mjs.map +1 -1
  265. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  266. package/dist/server/src/controllers/index.d.ts.map +1 -1
  267. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  268. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  269. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  270. package/dist/server/src/homepage/controllers/homepage.d.ts +8 -0
  271. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  272. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  273. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  274. package/dist/server/src/homepage/index.d.ts +23 -0
  275. package/dist/server/src/homepage/index.d.ts.map +1 -0
  276. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  277. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  278. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  279. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  280. package/dist/server/src/homepage/services/homepage.d.ts +14 -0
  281. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  282. package/dist/server/src/homepage/services/index.d.ts +16 -0
  283. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  284. package/dist/server/src/index.d.ts +15 -0
  285. package/dist/server/src/index.d.ts.map +1 -1
  286. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  287. package/dist/server/src/routes/index.d.ts +1 -0
  288. package/dist/server/src/routes/index.d.ts.map +1 -1
  289. package/dist/server/src/services/data-mapper.d.ts +1 -0
  290. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  291. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  292. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  293. package/dist/server/src/services/index.d.ts +14 -0
  294. package/dist/server/src/services/index.d.ts.map +1 -1
  295. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  296. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  297. package/dist/shared/contracts/collection-types.d.ts +0 -1
  298. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  299. package/dist/shared/contracts/homepage.d.ts +38 -0
  300. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  301. package/package.json +12 -9
@@ -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 { 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 <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 </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","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 unstable_tours,\n} from '@strapi/admin/strapi-admin';\nimport { Grid, Main, Tabs, Box } 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';\nimport { handleInvisibleAttributes } from './utils/data';\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 {isSingleType && (\n <unstable_tours.contentManager.Introduction>\n {/* Invisible Anchor */}\n <Box paddingTop={5} />\n </unstable_tours.contentManager.Introduction>\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 // removes hidden fields from the validation\n // this is necessary because the yup schema doesn't know about the visibility conditions\n // and we don't want to validate fields that are not visible\n const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema,\n initialValues,\n components,\n });\n\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n removedAttributes,\n ...options,\n });\n\n return yupSchema.validate(cleanedValues, { 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 <unstable_tours.contentManager.Fields>\n <Tabs.Content value=\"draft\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n </unstable_tours.contentManager.Fields>\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","unstable_tours","contentManager","Introduction","Box","paddingTop","Form","disabled","method","validate","data","cleanedValues","removedAttributes","handleInvisibleAttributes","initialErrors","forceValidation","_Fragment","Header","isCreating","getDocumentStatus","undefined","title","Tabs","Root","variant","value","onValueChange","List","aria-label","getTranslation","defaultMessage","StatusTab","availableStatus","length","Grid","gap","Item","col","s","direction","alignItems","Fields","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,9 +6,11 @@ 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
- var styledComponents = require('styled-components');
12
14
  var attributes = require('../../../constants/attributes.js');
13
15
  var collections = require('../../../constants/collections.js');
14
16
  var DocumentRBAC = require('../../../features/DocumentRBAC.js');
@@ -20,6 +22,8 @@ var router = require('../../../router.js');
20
22
  var documents = require('../../../services/documents.js');
21
23
  var api = require('../../../utils/api.js');
22
24
  var translations = require('../../../utils/translations.js');
25
+ var data = require('../utils/data.js');
26
+ var RelationModal = require('./FormInputs/Relations/RelationModal.js');
23
27
 
24
28
  function _interopNamespaceDefault(e) {
25
29
  var n = Object.create(null);
@@ -40,6 +44,38 @@ function _interopNamespaceDefault(e) {
40
44
 
41
45
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
42
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
+ };
43
79
  const DocumentActions = ({ actions })=>{
44
80
  const { formatMessage } = reactIntl.useIntl();
45
81
  const [primaryAction, secondaryAction, ...restActions] = actions.filter((action)=>{
@@ -60,23 +96,33 @@ const DocumentActions = ({ actions })=>{
60
96
  alignItems: "stretch",
61
97
  width: "100%",
62
98
  children: [
63
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
64
- gap: 2,
65
- children: [
66
- /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
67
- ...primaryAction,
68
- variant: primaryAction.variant || 'default'
69
- }),
70
- restActions.length > 0 ? /*#__PURE__*/ jsxRuntime.jsx(DocumentActionsMenu, {
71
- actions: restActions,
72
- label: formatMessage({
73
- id: 'content-manager.containers.edit.panels.default.more-actions',
74
- defaultMessage: 'More document actions'
75
- })
76
- }) : null
77
- ]
99
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.unstable_tours.contentManager.Publish, {
100
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
101
+ gap: 2,
102
+ children: [
103
+ primaryAction.label === 'Publish' ? /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
104
+ ...primaryAction,
105
+ variant: primaryAction.variant || 'default'
106
+ }) : /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
107
+ ...primaryAction,
108
+ variant: primaryAction.variant || 'default'
109
+ }),
110
+ restActions.length > 0 ? /*#__PURE__*/ jsxRuntime.jsx(DocumentActionsMenu, {
111
+ actions: restActions,
112
+ label: formatMessage({
113
+ id: 'content-manager.containers.edit.panels.default.more-actions',
114
+ defaultMessage: 'More document actions'
115
+ })
116
+ }) : null
117
+ ]
118
+ })
78
119
  }),
79
- secondaryAction ? /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
120
+ secondaryAction ? secondaryAction.label === 'Publish' ? /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.unstable_tours.contentManager.Publish, {
121
+ children: /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
122
+ ...secondaryAction,
123
+ variant: secondaryAction.variant || 'secondary'
124
+ })
125
+ }) : /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
80
126
  ...secondaryAction,
81
127
  variant: secondaryAction.variant || 'secondary'
82
128
  }) : null
@@ -138,11 +184,6 @@ const DocumentActionButton = (action)=>{
138
184
  ]
139
185
  });
140
186
  };
141
- const MenuItem = styledComponents.styled(designSystem.Menu.Item)`
142
- &:hover {
143
- background: ${({ theme, isVariantDanger, isDisabled })=>isVariantDanger && !isDisabled ? theme.colors.danger100 : 'neutral'};
144
- }
145
- `;
146
187
  const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })=>{
147
188
  const [isOpen, setIsOpen] = React__namespace.useState(false);
148
189
  const [dialogId, setDialogId] = React__namespace.useState(null);
@@ -204,27 +245,19 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
204
245
  popoverPlacement: "bottom-end",
205
246
  children: [
206
247
  actions.map((action)=>{
207
- return /*#__PURE__*/ jsxRuntime.jsx(MenuItem, {
248
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
208
249
  disabled: action.disabled,
209
250
  /* @ts-expect-error – TODO: this is an error in the DS where it is most likely a synthetic event, not regular. */ onSelect: handleClick(action),
210
251
  display: "block",
211
- isVariantDanger: action.variant === 'danger',
212
- isDisabled: action.disabled,
252
+ variant: action.variant === 'danger' ? action.variant : 'default',
253
+ startIcon: action.icon,
213
254
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
214
255
  justifyContent: "space-between",
215
256
  gap: 4,
216
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
217
- color: !action.disabled ? convertActionVariantToColor(action.variant) : 'inherit',
257
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
218
258
  gap: 2,
219
259
  tag: "span",
220
- children: [
221
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
222
- tag: "span",
223
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : 'inherit',
224
- children: action.icon
225
- }),
226
- action.label
227
- ]
260
+ children: action.label
228
261
  })
229
262
  })
230
263
  }, action.id);
@@ -252,30 +285,6 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
252
285
  ]
253
286
  });
254
287
  };
255
- const convertActionVariantToColor = (variant = 'secondary')=>{
256
- switch(variant){
257
- case 'danger':
258
- return 'danger600';
259
- case 'secondary':
260
- return undefined;
261
- case 'success':
262
- return 'success600';
263
- default:
264
- return 'primary600';
265
- }
266
- };
267
- const convertActionVariantToIconColor = (variant = 'secondary')=>{
268
- switch(variant){
269
- case 'danger':
270
- return 'danger600';
271
- case 'secondary':
272
- return 'neutral500';
273
- case 'success':
274
- return 'success600';
275
- default:
276
- return 'primary600';
277
- }
278
- };
279
288
  const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, isOpen, variant = 'secondary', loading })=>{
280
289
  const { formatMessage } = reactIntl.useIntl();
281
290
  const handleClose = async ()=>{
@@ -381,7 +390,10 @@ const transformData = (data)=>{
381
390
  const isCloning = reactRouterDom.useMatch(router.CLONE_PATH) !== null;
382
391
  const { id } = reactRouterDom.useParams();
383
392
  const { formatMessage } = reactIntl.useIntl();
384
- const canPublish = DocumentRBAC.useDocumentRBAC('PublishAction', ({ canPublish })=>canPublish);
393
+ const { canPublish, canReadFields } = DocumentRBAC.useDocumentRBAC('PublishAction', ({ canPublish, canReadFields })=>({
394
+ canPublish,
395
+ canReadFields
396
+ }));
385
397
  const { publish, isLoading } = useDocumentActions.useDocumentActions();
386
398
  const onPreview = Preview.usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
387
399
  const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = documents.useGetDraftRelationCountQuery();
@@ -394,7 +406,20 @@ const transformData = (data)=>{
394
406
  const validate = strapiAdmin.useForm('PublishAction', (state)=>state.validate);
395
407
  const setErrors = strapiAdmin.useForm('PublishAction', (state)=>state.setErrors);
396
408
  const formValues = strapiAdmin.useForm('PublishAction', ({ values })=>values);
409
+ const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
410
+ const { currentDocument: { components } } = useDocumentContext.useDocumentContext('PublishAction');
411
+ // need to discriminate if the publish is coming from a relation modal or in the edit view
412
+ const relationContext = RelationModal.useRelationModal('PublishAction', ()=>true, false);
413
+ const fromRelationModal = relationContext != undefined;
414
+ const dispatch = RelationModal.useRelationModal('PublishAction', (state)=>state.dispatch);
415
+ const fieldToConnect = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
416
+ const fieldToConnectUID = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
417
+ const documentHistory = RelationModal.useRelationModal('PublishAction', (state)=>state.state.documentHistory, false);
418
+ const rootDocumentMeta = RelationModal.useRelationModal('PublishAction', (state)=>state.rootDocumentMeta);
397
419
  const { currentDocumentMeta } = useDocumentContext.useDocumentContext('PublishAction');
420
+ const [updateDocumentMutation] = documents.useUpdateDocumentMutation();
421
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
422
+ const idToPublish = currentDocumentMeta.documentId || id;
398
423
  React__namespace.useEffect(()=>{
399
424
  if (isErrorDraftRelations) {
400
425
  toggleNotification({
@@ -477,6 +502,16 @@ const transformData = (data)=>{
477
502
  model,
478
503
  currentDocumentMeta.params
479
504
  ]);
505
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
506
+ const parentDocumentData = useDocument.useDocument({
507
+ documentId: parentDocumentMetaToUpdate?.documentId,
508
+ model: parentDocumentMetaToUpdate?.model,
509
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
510
+ params: parentDocumentMetaToUpdate?.params
511
+ }, {
512
+ skip: !parentDocumentMetaToUpdate
513
+ });
514
+ const { getInitialFormValues } = useDocument.useDoc();
480
515
  const isDocumentPublished = (document?.[attributes.PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[attributes.PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
481
516
  if (!schema?.options?.draftAndPublish) {
482
517
  return null;
@@ -488,29 +523,99 @@ const transformData = (data)=>{
488
523
  status: 'published'
489
524
  });
490
525
  if (errors) {
491
- toggleNotification({
492
- type: 'danger',
493
- message: formatMessage({
494
- id: 'content-manager.validation.error',
495
- defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
496
- })
526
+ const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
527
+ const attribute = schema.attributes[fieldName];
528
+ return attribute?.required && !(canReadFields ?? []).includes(fieldName);
497
529
  });
530
+ if (hasUnreadableRequiredField) {
531
+ toggleNotification({
532
+ type: 'danger',
533
+ message: formatMessage({
534
+ id: 'content-manager.validation.error.unreadable-required-field',
535
+ defaultMessage: 'Your current permissions prevent access to certain required fields. Please request access from an administrator to proceed.'
536
+ })
537
+ });
538
+ } else {
539
+ toggleNotification({
540
+ type: 'danger',
541
+ message: formatMessage({
542
+ id: 'content-manager.validation.error',
543
+ defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
544
+ })
545
+ });
546
+ }
498
547
  return;
499
548
  }
549
+ const { data: data$1 } = data.handleInvisibleAttributes(transformData(formValues), {
550
+ schema,
551
+ components
552
+ });
500
553
  const res = await publish({
501
554
  collectionType,
502
555
  model,
503
556
  documentId,
504
557
  params: currentDocumentMeta.params
505
- }, transformData(formValues));
558
+ }, data$1);
559
+ // Reset form if successful
560
+ if ('data' in res) {
561
+ resetForm();
562
+ }
506
563
  if ('data' in res && collectionType !== collections.SINGLE_TYPES) {
507
564
  /**
508
565
  * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
509
- */ if (id === 'create') {
566
+ */ if (idToPublish === 'create' && !fromRelationModal) {
510
567
  navigate({
511
568
  pathname: `../${collectionType}/${model}/${res.data.documentId}`,
512
569
  search: rawQuery
513
570
  });
571
+ } else if (fromRelationModal) {
572
+ const newRelation = {
573
+ documentId: res.data.documentId,
574
+ collectionType,
575
+ model,
576
+ params: currentDocumentMeta.params
577
+ };
578
+ /*
579
+ * Update, if needed, the parent relation with the newly published document.
580
+ * Check if in history we have the parent relation otherwise use the
581
+ * rootDocument
582
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES)) {
583
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
584
+ const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;
585
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
586
+ try {
587
+ const updateRes = await updateDocumentMutation({
588
+ collectionType: metaDocumentToUpdate.collectionType,
589
+ model: metaDocumentToUpdate.model,
590
+ documentId: metaDocumentToUpdate.collectionType !== collections.SINGLE_TYPES ? metaDocumentToUpdate.documentId : undefined,
591
+ params: metaDocumentToUpdate.params,
592
+ data: dataToUpdate
593
+ });
594
+ if ('error' in updateRes) {
595
+ toggleNotification({
596
+ type: 'danger',
597
+ message: formatAPIError(updateRes.error)
598
+ });
599
+ return;
600
+ }
601
+ } catch (err) {
602
+ toggleNotification({
603
+ type: 'danger',
604
+ message: formatMessage({
605
+ id: 'notification.error',
606
+ defaultMessage: 'An error occurred'
607
+ })
608
+ });
609
+ throw err;
610
+ }
611
+ }
612
+ dispatch({
613
+ type: 'GO_TO_CREATED_RELATION',
614
+ payload: {
615
+ document: newRelation,
616
+ shouldBypassConfirmation: true
617
+ }
618
+ });
514
619
  }
515
620
  } else if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
516
621
  setErrors(formatValidationErrors(res.error));
@@ -584,16 +689,40 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
584
689
  const isCloning = cloneMatch !== null;
585
690
  const { formatMessage } = reactIntl.useIntl();
586
691
  const { create, update, clone, isLoading } = useDocumentActions.useDocumentActions();
692
+ const { currentDocument: { components } } = useDocumentContext.useDocumentContext('UpdateAction');
587
693
  const [{ rawQuery }] = strapiAdmin.useQueryParams();
588
694
  const onPreview = Preview.usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
695
+ const { getInitialFormValues } = useDocument.useDoc();
589
696
  const isSubmitting = strapiAdmin.useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
590
697
  const modified = strapiAdmin.useForm('UpdateAction', ({ modified })=>modified);
591
698
  const setSubmitting = strapiAdmin.useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
699
+ const initialValues = strapiAdmin.useForm('UpdateAction', ({ initialValues })=>initialValues);
592
700
  const document = strapiAdmin.useForm('UpdateAction', ({ values })=>values);
593
701
  const validate = strapiAdmin.useForm('UpdateAction', (state)=>state.validate);
594
702
  const setErrors = strapiAdmin.useForm('UpdateAction', (state)=>state.setErrors);
595
- const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
703
+ const resetForm = strapiAdmin.useForm('UpdateAction', ({ resetForm })=>resetForm);
704
+ const dispatch = RelationModal.useRelationModal('UpdateAction', (state)=>state.dispatch);
705
+ // need to discriminate if the update is coming from a relation modal or in the edit view
706
+ const relationContext = RelationModal.useRelationModal('UpdateAction', ()=>true, false);
707
+ const relationalModalSchema = RelationModal.useRelationModal('UpdateAction', (state)=>state.currentDocument.schema, false);
708
+ const fieldToConnect = RelationModal.useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
709
+ const fieldToConnectUID = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
710
+ const documentHistory = RelationModal.useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
711
+ const rootDocumentMeta = RelationModal.useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
712
+ const fromRelationModal = relationContext != undefined;
596
713
  const { currentDocumentMeta } = useDocumentContext.useDocumentContext('UpdateAction');
714
+ const [updateDocumentMutation] = documents.useUpdateDocumentMutation();
715
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
716
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
717
+ const parentDocumentData = useDocument.useDocument({
718
+ documentId: parentDocumentMetaToUpdate?.documentId,
719
+ model: parentDocumentMetaToUpdate?.model,
720
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
721
+ params: parentDocumentMetaToUpdate?.params
722
+ }, {
723
+ skip: !parentDocumentMetaToUpdate
724
+ });
725
+ const { schema } = useDocument.useDoc();
597
726
  const handleUpdate = React__namespace.useCallback(async ()=>{
598
727
  setSubmitting(true);
599
728
  try {
@@ -630,30 +759,91 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
630
759
  setErrors(formatValidationErrors(res.error));
631
760
  }
632
761
  } else if (documentId || collectionType === collections.SINGLE_TYPES) {
762
+ const { data: data$1 } = data.handleInvisibleAttributes(transformData(document), {
763
+ schema: fromRelationModal ? relationalModalSchema : schema,
764
+ initialValues,
765
+ components
766
+ });
633
767
  const res = await update({
634
768
  collectionType,
635
769
  model,
636
770
  documentId,
637
771
  params: currentDocumentMeta.params
638
- }, transformData(document));
772
+ }, data$1);
639
773
  if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
640
774
  setErrors(formatValidationErrors(res.error));
641
775
  } else {
642
776
  resetForm();
643
777
  }
644
778
  } else {
779
+ const { data: data$1 } = data.handleInvisibleAttributes(transformData(document), {
780
+ schema: fromRelationModal ? relationalModalSchema : schema,
781
+ initialValues,
782
+ components
783
+ });
645
784
  const res = await create({
646
785
  model,
647
786
  params: currentDocumentMeta.params
648
- }, transformData(document));
787
+ }, data$1);
649
788
  if ('data' in res && collectionType !== collections.SINGLE_TYPES) {
650
- navigate({
651
- pathname: `../${res.data.documentId}`,
652
- search: rawQuery
653
- }, {
654
- replace: true,
655
- relative: 'path'
656
- });
789
+ if (fromRelationModal) {
790
+ const createdRelation = {
791
+ documentId: res.data.documentId,
792
+ collectionType,
793
+ model,
794
+ params: currentDocumentMeta.params
795
+ };
796
+ /*
797
+ * Update, if needed, the parent relation with the newly published document.
798
+ * Check if in history we have the parent relation otherwise use the
799
+ * rootDocument
800
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES)) {
801
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
802
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
803
+ try {
804
+ const updateRes = await updateDocumentMutation({
805
+ collectionType: parentDocumentMetaToUpdate.collectionType,
806
+ model: parentDocumentMetaToUpdate.model,
807
+ documentId: parentDocumentMetaToUpdate.collectionType !== collections.SINGLE_TYPES ? parentDocumentMetaToUpdate.documentId : undefined,
808
+ params: parentDocumentMetaToUpdate.params,
809
+ data: {
810
+ ...dataToUpdate
811
+ }
812
+ });
813
+ if ('error' in updateRes) {
814
+ toggleNotification({
815
+ type: 'danger',
816
+ message: formatAPIError(updateRes.error)
817
+ });
818
+ return;
819
+ }
820
+ } catch (err) {
821
+ toggleNotification({
822
+ type: 'danger',
823
+ message: formatMessage({
824
+ id: 'notification.error',
825
+ defaultMessage: 'An error occurred'
826
+ })
827
+ });
828
+ throw err;
829
+ }
830
+ }
831
+ dispatch({
832
+ type: 'GO_TO_CREATED_RELATION',
833
+ payload: {
834
+ document: createdRelation,
835
+ shouldBypassConfirmation: true
836
+ }
837
+ });
838
+ } else {
839
+ navigate({
840
+ pathname: `../${res.data.documentId}`,
841
+ search: rawQuery
842
+ }, {
843
+ replace: true,
844
+ relative: 'path'
845
+ });
846
+ }
657
847
  } else if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
658
848
  setErrors(formatValidationErrors(res.error));
659
849
  }
@@ -665,27 +855,41 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
665
855
  }
666
856
  }
667
857
  }, [
858
+ setSubmitting,
859
+ modified,
860
+ validate,
861
+ isCloning,
862
+ documentId,
863
+ collectionType,
864
+ toggleNotification,
865
+ formatMessage,
668
866
  clone,
867
+ model,
669
868
  cloneMatch?.params.origin,
670
- collectionType,
671
- create,
672
869
  currentDocumentMeta.params,
673
870
  document,
674
- documentId,
675
- formatMessage,
676
- formatValidationErrors,
677
- isCloning,
678
- model,
679
- modified,
680
871
  navigate,
681
872
  rawQuery,
682
- resetForm,
683
873
  setErrors,
684
- setSubmitting,
685
- toggleNotification,
874
+ formatValidationErrors,
686
875
  update,
687
- validate,
688
- onPreview
876
+ resetForm,
877
+ create,
878
+ fromRelationModal,
879
+ fieldToConnect,
880
+ documentHistory,
881
+ parentDocumentMetaToUpdate,
882
+ dispatch,
883
+ getInitialFormValues,
884
+ parentDocumentData,
885
+ fieldToConnectUID,
886
+ updateDocumentMutation,
887
+ formatAPIError,
888
+ onPreview,
889
+ initialValues,
890
+ schema,
891
+ components,
892
+ relationalModalSchema
689
893
  ]);
690
894
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
691
895
  React__namespace.useEffect(()=>{