@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
@@ -10,14 +10,17 @@ var reactRouterDom = require('react-router-dom');
10
10
  var styledComponents = require('styled-components');
11
11
  var collections = require('../../../../../constants/collections.js');
12
12
  var plugin = require('../../../../../constants/plugin.js');
13
- var DocumentContext = require('../../../../../features/DocumentContext.js');
14
- var DocumentRBAC = require('../../../../../features/DocumentRBAC.js');
15
- var useDocumentLayout = require('../../../../../hooks/useDocumentLayout.js');
13
+ var api = require('../../../../../utils/api.js');
14
+ var DocumentStatus = require('../../DocumentStatus.js');
15
+ var useDocument = require('../../../../../hooks/useDocument.js');
16
+ require('../../../../../preview/pages/Preview.js');
16
17
  var documents = require('../../../../../services/documents.js');
18
+ var useDocumentLayout = require('../../../../../hooks/useDocumentLayout.js');
19
+ var DocumentRBAC = require('../../../../../features/DocumentRBAC.js');
17
20
  var validation = require('../../../../../utils/validation.js');
18
21
  var DocumentActions = require('../../DocumentActions.js');
19
- var DocumentStatus = require('../../DocumentStatus.js');
20
22
  var FormLayout = require('../../FormLayout.js');
23
+ var ComponentContext = require('../ComponentContext.js');
21
24
 
22
25
  function _interopNamespaceDefault(e) {
23
26
  var n = Object.create(null);
@@ -43,271 +46,432 @@ function getCollectionType(url) {
43
46
  const match = url.match(regex);
44
47
  return match ? match[1] : undefined;
45
48
  }
46
- const CustomModalContent = styledComponents.styled(designSystem.Modal.Content)`
49
+ const StyledModalContent = styledComponents.styled(designSystem.Modal.Content)`
47
50
  width: 90%;
48
51
  max-width: 100%;
49
52
  height: 90%;
50
53
  max-height: 100%;
51
54
  `;
52
- const [RelationModalProvider, useRelationModal] = strapiAdmin.createContext('RelationModal', {
53
- parentModified: false,
54
- depth: 0
55
- });
56
- const RelationModalForm = ({ relation, triggerButtonLabel })=>{
55
+ const getFullPageUrl = (currentDocumentMeta)=>{
56
+ const isSingleType = currentDocumentMeta.collectionType === collections.SINGLE_TYPES;
57
+ const queryParams = currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : '';
58
+ return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;
59
+ };
60
+ function reducer(state, action) {
61
+ switch(action.type){
62
+ case 'GO_TO_RELATION':
63
+ if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {
64
+ return {
65
+ ...state,
66
+ confirmDialogIntent: action.payload.document,
67
+ fieldToConnect: action.payload.fieldToConnect,
68
+ fieldToConnectUID: action.payload.fieldToConnectUID
69
+ };
70
+ }
71
+ const lastItemDocumentHistory = state.documentHistory.at(-1);
72
+ const hasToResetDocumentHistory = lastItemDocumentHistory && !lastItemDocumentHistory.documentId;
73
+ return {
74
+ ...state,
75
+ // Reset document history if the last item has documentId undefined
76
+ documentHistory: hasToResetDocumentHistory ? [
77
+ action.payload.document
78
+ ] : [
79
+ ...state.documentHistory,
80
+ action.payload.document
81
+ ],
82
+ confirmDialogIntent: null,
83
+ isModalOpen: true,
84
+ fieldToConnect: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnect,
85
+ fieldToConnectUID: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnectUID
86
+ };
87
+ case 'GO_BACK':
88
+ if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {
89
+ return {
90
+ ...state,
91
+ confirmDialogIntent: 'back'
92
+ };
93
+ }
94
+ return {
95
+ ...state,
96
+ documentHistory: state.documentHistory.slice(0, -1),
97
+ confirmDialogIntent: null
98
+ };
99
+ case 'GO_FULL_PAGE':
100
+ if (state.hasUnsavedChanges) {
101
+ return {
102
+ ...state,
103
+ confirmDialogIntent: 'navigate'
104
+ };
105
+ }
106
+ return {
107
+ ...state,
108
+ documentHistory: [],
109
+ hasUnsavedChanges: false,
110
+ isModalOpen: false,
111
+ confirmDialogIntent: null
112
+ };
113
+ case 'GO_TO_CREATED_RELATION':
114
+ return {
115
+ ...state,
116
+ // Reset document history if the last item has documentId undefined
117
+ documentHistory: state.documentHistory ? [
118
+ ...state.documentHistory.slice(0, -1),
119
+ action.payload.document
120
+ ] : [
121
+ action.payload.document
122
+ ],
123
+ confirmDialogIntent: null,
124
+ isModalOpen: true,
125
+ fieldToConnect: undefined,
126
+ fieldToConnectUID: undefined
127
+ };
128
+ case 'CANCEL_CONFIRM_DIALOG':
129
+ return {
130
+ ...state,
131
+ confirmDialogIntent: null
132
+ };
133
+ case 'CLOSE_MODAL':
134
+ if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {
135
+ return {
136
+ ...state,
137
+ confirmDialogIntent: 'close'
138
+ };
139
+ }
140
+ return {
141
+ ...state,
142
+ documentHistory: [],
143
+ confirmDialogIntent: null,
144
+ hasUnsavedChanges: false,
145
+ isModalOpen: false
146
+ };
147
+ case 'SET_HAS_UNSAVED_CHANGES':
148
+ return {
149
+ ...state,
150
+ hasUnsavedChanges: action.payload.hasUnsavedChanges
151
+ };
152
+ default:
153
+ return state;
154
+ }
155
+ }
156
+ const [RelationModalProvider, useRelationModal] = strapiAdmin.createContext('RelationModal');
157
+ function isRenderProp(children) {
158
+ return typeof children === 'function';
159
+ }
160
+ const RootRelationRenderer = (props)=>{
161
+ const { children } = props;
162
+ const [state, dispatch] = React__namespace.useReducer(reducer, {
163
+ documentHistory: [],
164
+ confirmDialogIntent: null,
165
+ isModalOpen: false,
166
+ hasUnsavedChanges: false,
167
+ fieldToConnect: undefined
168
+ });
169
+ const rootDocument = useDocument.useDoc();
170
+ const [{ query }] = strapiAdmin.useQueryParams();
171
+ const params = React__namespace.useMemo(()=>api.buildValidParams(query ?? {}), [
172
+ query
173
+ ]);
174
+ const rootDocumentMeta = {
175
+ documentId: rootDocument.document?.documentId || '',
176
+ model: rootDocument.model,
177
+ collectionType: rootDocument.collectionType,
178
+ params
179
+ };
180
+ const currentDocumentMeta = state.documentHistory.at(-1) ?? rootDocumentMeta;
181
+ const currentDocument = useDocument.useDocument(currentDocumentMeta);
182
+ // TODO: check if we can remove the single type check
183
+ const isSingleType = currentDocumentMeta.collectionType === collections.SINGLE_TYPES;
184
+ const isCreating = !currentDocumentMeta.documentId && !isSingleType;
185
+ /**
186
+ * There is no parent relation, so the relation modal doesn't exist. Create it and set up all the
187
+ * pieces that will be used by potential child relations: the context, header, form, and footer.
188
+ */ return /*#__PURE__*/ jsxRuntime.jsx(RelationModalProvider, {
189
+ state: state,
190
+ dispatch: dispatch,
191
+ rootDocumentMeta: rootDocumentMeta,
192
+ currentDocumentMeta: currentDocumentMeta,
193
+ currentDocument: currentDocument,
194
+ isCreating: isCreating,
195
+ children: /*#__PURE__*/ jsxRuntime.jsx(RelationModal, {
196
+ children: isRenderProp(children) ? children({
197
+ dispatch
198
+ }) : props.relation && /*#__PURE__*/ jsxRuntime.jsx(RelationModalTrigger, {
199
+ relation: props.relation,
200
+ children: children
201
+ })
202
+ })
203
+ });
204
+ };
205
+ const NestedRelationRenderer = (props)=>{
206
+ const { children } = props;
207
+ const dispatch = useRelationModal('NestedRelation', (state)=>state.dispatch);
208
+ return isRenderProp(children) ? children({
209
+ dispatch
210
+ }) : props.relation && /*#__PURE__*/ jsxRuntime.jsx(RelationModalTrigger, {
211
+ relation: props.relation,
212
+ children: children
213
+ }); /* This is the trigger that will be rendered in the parent relation */
214
+ };
215
+ /**
216
+ * Component responsible for rendering its children wrapped in a modal, form and context if needed
217
+ */ const RelationModalRenderer = (props)=>{
218
+ // We're in a nested relation if the relation modal context is not undefined
219
+ const isNested = useRelationModal('RelationContextWrapper', (state)=>state != undefined, false);
220
+ return isNested ? /*#__PURE__*/ jsxRuntime.jsx(NestedRelationRenderer, {
221
+ ...props
222
+ }) : /*#__PURE__*/ jsxRuntime.jsx(RootRelationRenderer, {
223
+ ...props
224
+ });
225
+ };
226
+ /* -------------------------------------------------------------------------------------------------
227
+ * RelationModal
228
+ * -----------------------------------------------------------------------------------------------*/ const generateCreateUrl = (currentDocumentMeta)=>{
229
+ return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}/create${currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : ''}`;
230
+ };
231
+ const RelationModal = ({ children })=>{
232
+ const { formatMessage } = reactIntl.useIntl();
233
+ const navigate = reactRouterDom.useNavigate();
234
+ const state = useRelationModal('RelationModalForm', (state)=>state.state);
235
+ const dispatch = useRelationModal('RelationModalForm', (state)=>state.dispatch);
236
+ const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
237
+ const currentDocument = useRelationModal('RelationModalForm', (state)=>state.currentDocument);
238
+ const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
239
+ /*
240
+ * We must wrap the modal window with Component Provider with reset values
241
+ * to avoid inheriting id and uid from the root document and having weird
242
+ * behaviors with simple relationships..
243
+ */ return /*#__PURE__*/ jsxRuntime.jsx(ComponentContext.ComponentProvider, {
244
+ id: undefined,
245
+ level: -1,
246
+ uid: undefined,
247
+ type: undefined,
248
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Root, {
249
+ open: state.isModalOpen,
250
+ onOpenChange: (open)=>{
251
+ if (!open) {
252
+ dispatch({
253
+ type: 'CLOSE_MODAL',
254
+ payload: {
255
+ shouldBypassConfirmation: false
256
+ }
257
+ });
258
+ }
259
+ },
260
+ children: [
261
+ children,
262
+ /*#__PURE__*/ jsxRuntime.jsxs(StyledModalContent, {
263
+ children: [
264
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Header, {
265
+ gap: 2,
266
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
267
+ justifyContent: "space-between",
268
+ alignItems: "center",
269
+ width: "100%",
270
+ children: [
271
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
272
+ gap: 2,
273
+ children: [
274
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
275
+ withTooltip: false,
276
+ label: formatMessage({
277
+ id: 'global.back',
278
+ defaultMessage: 'Back'
279
+ }),
280
+ variant: "ghost",
281
+ disabled: state.documentHistory.length < 2,
282
+ onClick: ()=>{
283
+ dispatch({
284
+ type: 'GO_BACK',
285
+ payload: {
286
+ shouldBypassConfirmation: false
287
+ }
288
+ });
289
+ },
290
+ marginRight: 1,
291
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowLeft, {})
292
+ }),
293
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
294
+ tag: "span",
295
+ fontWeight: 600,
296
+ children: isCreating ? formatMessage({
297
+ id: 'content-manager.relation.create',
298
+ defaultMessage: 'Create a relation'
299
+ }) : formatMessage({
300
+ id: 'content-manager.components.RelationInputModal.modal-title',
301
+ defaultMessage: 'Edit a relation'
302
+ })
303
+ })
304
+ ]
305
+ }),
306
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
307
+ onClick: ()=>{
308
+ dispatch({
309
+ type: 'GO_FULL_PAGE'
310
+ });
311
+ if (!state.hasUnsavedChanges) {
312
+ if (isCreating) {
313
+ navigate(generateCreateUrl(currentDocumentMeta));
314
+ } else {
315
+ navigate(getFullPageUrl(currentDocumentMeta));
316
+ }
317
+ }
318
+ },
319
+ variant: "tertiary",
320
+ label: formatMessage({
321
+ id: 'content-manager.components.RelationInputModal.button-fullpage',
322
+ defaultMessage: 'Go to entry'
323
+ }),
324
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowsOut, {})
325
+ })
326
+ ]
327
+ })
328
+ }),
329
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
330
+ children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
331
+ method: isCreating ? 'POST' : 'PUT',
332
+ initialValues: currentDocument.getInitialFormValues(isCreating),
333
+ validate: (values, options)=>{
334
+ const yupSchema = validation.createYupSchema(currentDocument.schema?.attributes, currentDocument.components, {
335
+ status: currentDocument.document?.status,
336
+ ...options
337
+ });
338
+ return yupSchema.validate(values, {
339
+ abortEarly: false
340
+ });
341
+ },
342
+ children: /*#__PURE__*/ jsxRuntime.jsx(RelationModalBody, {})
343
+ })
344
+ })
345
+ ]
346
+ })
347
+ ]
348
+ })
349
+ });
350
+ };
351
+ /**
352
+ * All the main content (not header and footer) of the relation modal, plus the confirmation dialog.
353
+ * Will be wrapped in a Modal.Body by the RelationModal component.
354
+ * Cannot be moved directly inside RelationModal because it needs access to the context via hooks.
355
+ */ const RelationModalBody = ()=>{
57
356
  const navigate = reactRouterDom.useNavigate();
58
357
  const { pathname, search } = reactRouterDom.useLocation();
59
358
  const { formatMessage } = reactIntl.useIntl();
60
359
  const [triggerRefetchDocument] = documents.useLazyGetDocumentQuery();
61
- const currentDocument = DocumentContext.useDocumentContext('RelationModalForm', (state)=>state.document);
62
- const rootDocumentMeta = DocumentContext.useDocumentContext('RelationModalForm', (state)=>state.rootDocumentMeta);
63
- const currentDocumentMeta = DocumentContext.useDocumentContext('RelationModalForm', (state)=>state.meta);
64
- const changeDocument = DocumentContext.useDocumentContext('RelationModalForm', (state)=>state.changeDocument);
65
- const documentHistory = DocumentContext.useDocumentContext('RelationModalForm', (state)=>state.documentHistory);
66
- const setDocumentHistory = DocumentContext.useDocumentContext('RelationModalForm', (state)=>state.setDocumentHistory);
67
- const [isConfirmationOpen, setIsConfirmationOpen] = React__namespace.useState(false);
68
- const [actionPosition, setActionPosition] = React__namespace.useState('cancel');
69
- const [isModalOpen, setIsModalOpen] = React__namespace.useState(false);
70
- // NOTE: Not sure about this relation modal context, maybe we should move this to DocumentContext?
71
- // Get parent modal context if it exists
72
- const parentContext = useRelationModal('RelationModalForm', (state)=>state);
73
- // Get depth of nested modals
74
- const depth = parentContext ? parentContext.depth + 1 : 0;
75
- // Check if this is a nested modal
76
- const isNested = depth > 0;
77
- const addDocumentToHistory = (document)=>setDocumentHistory((prev)=>[
78
- ...prev,
79
- document
80
- ]);
81
- const getPreviousDocument = ()=>{
82
- if (documentHistory.length === 0) return undefined;
83
- const lastDocument = documentHistory[documentHistory.length - 1];
84
- return lastDocument;
85
- };
86
- const removeLastDocumentFromHistory = ()=>{
87
- setDocumentHistory((prev)=>[
88
- ...prev
89
- ].slice(0, prev.length - 1));
90
- };
91
- const handleToggleModal = ()=>{
92
- if (isModalOpen) {
93
- setIsModalOpen(false);
94
- const document = {
95
- collectionType: rootDocumentMeta.collectionType,
96
- model: rootDocumentMeta.model,
97
- documentId: rootDocumentMeta.documentId
98
- };
99
- // Change back to the root document
100
- changeDocument(document);
101
- // Reset the document history
102
- setDocumentHistory([]);
103
- // Reset action position
104
- setActionPosition('cancel');
105
- // Read from cache or refetch root document
106
- triggerRefetchDocument(document, // Favor the cache
360
+ const state = useRelationModal('RelationModalForm', (state)=>state.state);
361
+ const dispatch = useRelationModal('RelationModalForm', (state)=>state.dispatch);
362
+ const rootDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.rootDocumentMeta);
363
+ const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
364
+ const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
365
+ /**
366
+ * One-way sync the modified state from the form to the modal state.
367
+ * It is needed because we need to consume state from the form context in order to lift it up
368
+ * into the modal context. It is not possible otherwise because the modal needs the form state,
369
+ * but it must be a parent of the form.
370
+ */ const modified = strapiAdmin.useForm('FormWatcher', (state)=>state.modified);
371
+ const isSubmitting = strapiAdmin.useForm('FormWatcher', (state)=>state.isSubmitting);
372
+ const hasUnsavedChanges = modified && !isSubmitting;
373
+ React__namespace.useEffect(()=>{
374
+ dispatch({
375
+ type: 'SET_HAS_UNSAVED_CHANGES',
376
+ payload: {
377
+ hasUnsavedChanges
378
+ }
379
+ });
380
+ }, [
381
+ hasUnsavedChanges,
382
+ dispatch
383
+ ]);
384
+ const handleCloseModal = (shouldBypassConfirmation)=>{
385
+ dispatch({
386
+ type: 'CLOSE_MODAL',
387
+ payload: {
388
+ shouldBypassConfirmation
389
+ }
390
+ });
391
+ {
392
+ // TODO: check if we can avoid this by relying on RTK invalidatesTags.
393
+ // If so we can delete this function and dispatch the events directly
394
+ triggerRefetchDocument(// TODO check if params should be removed (as they were before)
395
+ rootDocumentMeta, // Favor the cache
107
396
  true);
108
- } else {
109
- changeDocument(relation);
110
- setIsModalOpen(true);
111
397
  }
112
398
  };
113
- const getFullPageLink = ()=>{
114
- const isSingleType = currentDocumentMeta.collectionType === collections.SINGLE_TYPES;
115
- const queryParams = currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : '';
116
- return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;
117
- };
118
399
  const handleRedirection = ()=>{
119
400
  const editViewUrl = `${pathname}${search}`;
120
- const isRootDocumentUrl = editViewUrl.includes(getFullPageLink());
401
+ const fullPageUrl = getFullPageUrl(currentDocumentMeta);
402
+ const isRootDocumentUrl = editViewUrl.includes(fullPageUrl);
121
403
  if (isRootDocumentUrl) {
122
- handleToggleModal();
404
+ handleCloseModal(true);
123
405
  } else {
124
- navigate(getFullPageLink());
406
+ if (isCreating) {
407
+ navigate(generateCreateUrl(currentDocumentMeta));
408
+ } else {
409
+ navigate(fullPageUrl);
410
+ }
125
411
  }
126
412
  };
127
413
  const handleConfirm = ()=>{
128
- if (actionPosition === 'navigate') {
129
- handleRedirection();
130
- } else if (actionPosition === 'back') {
131
- const previousRelation = getPreviousDocument();
132
- if (previousRelation) {
133
- removeLastDocumentFromHistory();
134
- changeDocument(previousRelation);
135
- }
136
- } else {
137
- // Add current relation to history before opening a new one in case we are opening a new one
138
- if (currentDocumentMeta && Object.keys(currentDocumentMeta).length > 0) {
139
- addDocumentToHistory(currentDocumentMeta);
140
- }
141
- handleToggleModal();
414
+ if (state.confirmDialogIntent === null) {
415
+ return;
142
416
  }
143
- };
144
- return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
145
- method: "PUT",
146
- initialValues: currentDocument.getInitialFormValues(),
147
- validate: (values, options)=>{
148
- const yupSchema = validation.createYupSchema(currentDocument.schema?.attributes, currentDocument.components, {
149
- status: currentDocument.document?.status,
150
- ...options
417
+ if (state.confirmDialogIntent === 'navigate') {
418
+ handleRedirection();
419
+ } else if (state.confirmDialogIntent === 'back') {
420
+ dispatch({
421
+ type: 'GO_BACK',
422
+ payload: {
423
+ shouldBypassConfirmation: true
424
+ }
151
425
  });
152
- return yupSchema.validate(values, {
153
- abortEarly: false
426
+ } else if (state.confirmDialogIntent === 'close') {
427
+ handleCloseModal(true);
428
+ } else if ('documentId' in state.confirmDialogIntent) {
429
+ dispatch({
430
+ type: 'GO_TO_RELATION',
431
+ payload: {
432
+ document: state.confirmDialogIntent,
433
+ shouldBypassConfirmation: true
434
+ }
154
435
  });
155
- },
156
- children: ({ modified, isSubmitting, resetForm })=>{
157
- // We don't count the root document, so history starts after 1
158
- const hasHistory = documentHistory.length > 1;
159
- return /*#__PURE__*/ jsxRuntime.jsxs(RelationModalProvider, {
160
- parentModified: modified,
161
- depth: depth,
162
- children: [
163
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Root, {
164
- open: isModalOpen,
165
- onOpenChange: ()=>{
166
- if (isModalOpen) {
167
- if (modified && !isSubmitting) {
168
- setIsConfirmationOpen(true);
169
- } else {
170
- handleToggleModal();
171
- }
172
- }
173
- },
174
- children: [
175
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Trigger, {
176
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
177
- description: triggerButtonLabel,
178
- children: /*#__PURE__*/ jsxRuntime.jsx(CustomTextButton, {
179
- onClick: ()=>{
180
- // Check if parent modal has unsaved changes
181
- if (isNested && parentContext.parentModified) {
182
- setIsConfirmationOpen(true);
183
- // Return early to avoid opening the modal
184
- return;
185
- } else {
186
- if (modified && !isSubmitting) {
187
- setIsConfirmationOpen(true);
188
- } else {
189
- // Add current relation to history before opening a new one
190
- if (currentDocumentMeta && Object.keys(currentDocumentMeta).length > 0) {
191
- addDocumentToHistory(currentDocumentMeta);
192
- }
193
- handleToggleModal();
194
- }
195
- if (!isModalOpen) {
196
- setIsModalOpen(true);
197
- }
198
- }
199
- },
200
- width: "100%",
201
- children: triggerButtonLabel
202
- })
203
- })
204
- }),
205
- /*#__PURE__*/ jsxRuntime.jsxs(CustomModalContent, {
206
- children: [
207
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Header, {
208
- gap: 2,
209
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
210
- justifyContent: "space-between",
211
- alignItems: "center",
212
- width: "100%",
213
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
214
- gap: 2,
215
- children: [
216
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
217
- withTooltip: false,
218
- label: "Back",
219
- variant: "ghost",
220
- disabled: !hasHistory,
221
- onClick: ()=>{
222
- setActionPosition('back');
223
- if (modified && !isSubmitting) {
224
- setIsConfirmationOpen(true);
225
- } else {
226
- const previousRelation = getPreviousDocument();
227
- if (previousRelation) {
228
- removeLastDocumentFromHistory();
229
- changeDocument(previousRelation);
230
- }
231
- }
232
- },
233
- marginRight: 1,
234
- children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowLeft, {})
235
- }),
236
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
237
- tag: "span",
238
- fontWeight: 600,
239
- children: formatMessage({
240
- id: 'content-manager.components.RelationInputModal.modal-title',
241
- defaultMessage: 'Edit a relation'
242
- })
243
- })
244
- ]
245
- })
246
- })
247
- }),
248
- /*#__PURE__*/ jsxRuntime.jsx(RelationModalBody, {
249
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
250
- onClick: ()=>{
251
- setActionPosition('navigate');
252
- if (modified && !isSubmitting) {
253
- setIsConfirmationOpen(true);
254
- } else {
255
- navigate(getFullPageLink());
256
- }
257
- },
258
- variant: "tertiary",
259
- label: formatMessage({
260
- id: 'content-manager.components.RelationInputModal.button-fullpage',
261
- defaultMessage: 'Go to entry'
262
- }),
263
- children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowsOut, {})
264
- })
265
- }),
266
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Footer, {
267
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
268
- onClick: ()=>{
269
- if (modified && !isSubmitting) {
270
- setIsConfirmationOpen(true);
271
- } else {
272
- handleToggleModal();
273
- }
274
- },
275
- variant: "tertiary",
276
- children: formatMessage({
277
- id: 'app.components.Button.cancel',
278
- defaultMessage: 'Cancel'
279
- })
280
- })
281
- })
282
- ]
283
- })
284
- ]
285
- }),
286
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Root, {
287
- open: isConfirmationOpen,
288
- onOpenChange: setIsConfirmationOpen,
289
- children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
290
- onConfirm: ()=>{
291
- handleConfirm();
292
- setIsConfirmationOpen(false);
293
- resetForm();
294
- },
295
- onCancel: ()=>{
296
- setIsConfirmationOpen(false);
297
- },
298
- variant: "danger",
299
- children: formatMessage({
300
- id: 'content-manager.components.RelationInputModal.confirmation-message',
301
- defaultMessage: 'Some changes were not saved. Are you sure you want to close this relation? All changes that were not saved will be lost.'
302
- })
303
- })
436
+ }
437
+ };
438
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
439
+ children: [
440
+ /*#__PURE__*/ jsxRuntime.jsx(RelationModalForm, {}),
441
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Root, {
442
+ open: state.confirmDialogIntent != null,
443
+ children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
444
+ onConfirm: ()=>handleConfirm(),
445
+ onCancel: ()=>dispatch({
446
+ type: 'CANCEL_CONFIRM_DIALOG'
447
+ }),
448
+ variant: "danger",
449
+ children: formatMessage({
450
+ id: 'content-manager.components.RelationInputModal.confirmation-message',
451
+ defaultMessage: 'Some changes were not saved. Are you sure you want to close this relation? All changes that were not saved will be lost.'
304
452
  })
305
- ]
453
+ })
454
+ })
455
+ ]
456
+ });
457
+ };
458
+ const RelationModalTrigger = ({ children, relation })=>{
459
+ const dispatch = useRelationModal('ModalTrigger', (state)=>state.dispatch);
460
+ return /*#__PURE__*/ jsxRuntime.jsx(StyledTextButton, {
461
+ onClick: ()=>{
462
+ dispatch({
463
+ type: 'GO_TO_RELATION',
464
+ payload: {
465
+ document: relation,
466
+ shouldBypassConfirmation: false
467
+ }
306
468
  });
307
- }
469
+ },
470
+ children: children
308
471
  });
309
472
  };
310
- const CustomTextButton = styledComponents.styled(designSystem.TextButton)`
473
+ const StyledTextButton = styledComponents.styled(designSystem.TextButton)`
474
+ max-width: 100%;
311
475
  & > span {
312
476
  font-size: ${({ theme })=>theme.fontSizes[2]};
313
477
  width: inherit;
@@ -316,20 +480,23 @@ const CustomTextButton = styledComponents.styled(designSystem.TextButton)`
316
480
  text-overflow: ellipsis;
317
481
  }
318
482
  `;
319
- const RelationModalBody = ({ children })=>{
483
+ /**
484
+ * The mini edit view for a relation that is displayed inside a modal.
485
+ * It's complete with its header, document actions and form layout.
486
+ */ const RelationModalForm = ()=>{
320
487
  const { formatMessage } = reactIntl.useIntl();
321
- const documentMeta = DocumentContext.useDocumentContext('RelationModalBody', (state)=>state.meta);
322
- const documentResponse = DocumentContext.useDocumentContext('RelationModalBody', (state)=>state.document);
323
- const onPreview = DocumentContext.useDocumentContext('RelationModalBody', (state)=>state.onPreview);
324
- const documentLayoutResponse = useDocumentLayout.useDocumentLayout(documentMeta.model);
325
- const plugins = strapiAdmin.useStrapiApp('RelationModalBody', (state)=>state.plugins);
326
- const initialValues = documentResponse.getInitialFormValues();
488
+ const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
489
+ const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
490
+ const currentDocument = useRelationModal('RelationModalForm', (state)=>state.currentDocument);
491
+ const documentLayoutResponse = useDocumentLayout.useDocumentLayout(currentDocumentMeta.model);
492
+ const plugins = strapiAdmin.useStrapiApp('RelationModalForm', (state)=>state.plugins);
493
+ const initialValues = isCreating ? currentDocument.getInitialFormValues(isCreating) : currentDocument.getInitialFormValues();
327
494
  const { permissions = [], isLoading: isLoadingPermissions, error } = strapiAdmin.useRBAC(plugin.PERMISSIONS.map((action)=>({
328
495
  action,
329
- subject: documentMeta.model
496
+ subject: currentDocumentMeta.model
330
497
  })));
331
- const isLoading = isLoadingPermissions || documentLayoutResponse.isLoading || documentResponse.isLoading;
332
- if (isLoading && !documentResponse.document?.documentId) {
498
+ const isLoading = isLoadingPermissions || documentLayoutResponse.isLoading || currentDocument.isLoading;
499
+ if (isLoading && !currentDocument.document?.documentId) {
333
500
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Loader, {
334
501
  small: true,
335
502
  children: formatMessage({
@@ -338,7 +505,7 @@ const RelationModalBody = ({ children })=>{
338
505
  })
339
506
  });
340
507
  }
341
- if (error || !documentMeta.model || documentLayoutResponse.error || !documentResponse.document || !documentResponse.meta || !documentResponse.schema || !initialValues) {
508
+ if (error || !currentDocumentMeta.model || documentLayoutResponse.error || !isCreating && !currentDocument.document || !isCreating && !currentDocument.meta || !currentDocument.schema || !initialValues) {
342
509
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
343
510
  alignItems: "center",
344
511
  height: "100%",
@@ -354,107 +521,101 @@ const RelationModalBody = ({ children })=>{
354
521
  })
355
522
  });
356
523
  }
357
- const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);
358
- const hasDraftAndPublished = documentResponse.schema?.options?.draftAndPublish ?? false;
524
+ const documentTitle = currentDocument.getTitle(documentLayoutResponse.edit.settings.mainField);
525
+ const hasDraftAndPublished = currentDocument.schema?.options?.draftAndPublish ?? false;
359
526
  const props = {
360
527
  activeTab: 'draft',
361
- collectionType: documentMeta.collectionType,
362
- model: documentMeta.model,
363
- documentId: documentMeta.documentId,
364
- document: documentResponse.document,
365
- meta: documentResponse.meta,
366
- onPreview,
367
- fromRelationModal: true,
368
- fromPreview: onPreview !== undefined
528
+ collectionType: currentDocumentMeta.collectionType,
529
+ model: currentDocumentMeta.model,
530
+ documentId: currentDocumentMeta.documentId,
531
+ document: currentDocument.document,
532
+ meta: currentDocument.meta
369
533
  };
370
- return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
371
- children: /*#__PURE__*/ jsxRuntime.jsxs(DocumentRBAC.DocumentRBAC, {
372
- permissions: permissions,
373
- model: documentMeta.model,
374
- children: [
375
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
376
- alignItems: "flex-start",
377
- direction: "column",
378
- gap: 2,
379
- children: [
380
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
381
- width: "100%",
382
- justifyContent: "space-between",
383
- gap: 2,
384
- children: [
385
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
386
- tag: "h2",
387
- variant: "alpha",
388
- children: documentTitle
389
- }),
390
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
391
- gap: 2,
392
- children: [
393
- children,
394
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.DescriptionComponentRenderer, {
395
- props: props,
396
- descriptions: plugins['content-manager'].apis.getDocumentActions('relation-modal'),
397
- children: (actions)=>{
398
- const filteredActions = actions.filter((action)=>{
399
- return [
400
- action.position
401
- ].flat().includes('relation-modal');
402
- });
403
- const [primaryAction, secondaryAction] = filteredActions;
404
- if (!primaryAction && !secondaryAction) return null;
405
- // Both actions are available when draft and publish enabled
406
- if (primaryAction && secondaryAction) {
407
- return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
408
- children: [
409
- /*#__PURE__*/ jsxRuntime.jsx(DocumentActions.DocumentActionButton, {
410
- ...secondaryAction,
411
- variant: secondaryAction.variant || 'secondary'
412
- }),
413
- /*#__PURE__*/ jsxRuntime.jsx(DocumentActions.DocumentActionButton, {
414
- ...primaryAction,
415
- variant: primaryAction.variant || 'default'
416
- })
417
- ]
418
- });
419
- }
420
- // Otherwise we just have the save action
421
- return /*#__PURE__*/ jsxRuntime.jsx(DocumentActions.DocumentActionButton, {
422
- ...primaryAction,
423
- variant: primaryAction.variant || 'secondary'
424
- });
425
- }
426
- })
427
- ]
534
+ return /*#__PURE__*/ jsxRuntime.jsxs(DocumentRBAC.DocumentRBAC, {
535
+ permissions: permissions,
536
+ model: currentDocumentMeta.model,
537
+ children: [
538
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
539
+ alignItems: "flex-start",
540
+ direction: "column",
541
+ gap: 2,
542
+ children: [
543
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
544
+ width: "100%",
545
+ justifyContent: "space-between",
546
+ gap: 2,
547
+ children: [
548
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
549
+ tag: "h2",
550
+ variant: "alpha",
551
+ children: documentTitle
552
+ }),
553
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
554
+ gap: 2,
555
+ children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.DescriptionComponentRenderer, {
556
+ props: props,
557
+ descriptions: plugins['content-manager'].apis.getDocumentActions('relation-modal'),
558
+ children: (actions)=>{
559
+ const filteredActions = actions.filter((action)=>{
560
+ return [
561
+ action.position
562
+ ].flat().includes('relation-modal');
563
+ });
564
+ const [primaryAction, secondaryAction] = filteredActions;
565
+ if (!primaryAction && !secondaryAction) return null;
566
+ // Both actions are available when draft and publish enabled
567
+ if (primaryAction && secondaryAction) {
568
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
569
+ children: [
570
+ /*#__PURE__*/ jsxRuntime.jsx(DocumentActions.DocumentActionButton, {
571
+ ...secondaryAction,
572
+ variant: secondaryAction.variant || 'secondary'
573
+ }),
574
+ /*#__PURE__*/ jsxRuntime.jsx(DocumentActions.DocumentActionButton, {
575
+ ...primaryAction,
576
+ variant: primaryAction.variant || 'default'
577
+ })
578
+ ]
579
+ });
580
+ }
581
+ // Otherwise we just have the save action
582
+ return /*#__PURE__*/ jsxRuntime.jsx(DocumentActions.DocumentActionButton, {
583
+ ...primaryAction,
584
+ variant: primaryAction.variant || 'secondary'
585
+ });
586
+ }
428
587
  })
429
- ]
430
- }),
431
- hasDraftAndPublished ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
432
- children: /*#__PURE__*/ jsxRuntime.jsx(DocumentStatus.DocumentStatus, {
433
- status: documentResponse.document?.status
434
588
  })
435
- }) : null
436
- ]
437
- }),
438
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
439
- flex: 1,
440
- overflow: "auto",
441
- alignItems: "stretch",
442
- paddingTop: 7,
443
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
444
- overflow: "auto",
445
- flex: 1,
446
- children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
447
- layout: documentLayoutResponse.edit.layout,
448
- document: documentResponse,
449
- hasBackground: false
589
+ ]
590
+ }),
591
+ hasDraftAndPublished ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
592
+ children: /*#__PURE__*/ jsxRuntime.jsx(DocumentStatus.DocumentStatus, {
593
+ status: currentDocument.document?.status
450
594
  })
595
+ }) : null
596
+ ]
597
+ }),
598
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
599
+ flex: 1,
600
+ overflow: "auto",
601
+ alignItems: "stretch",
602
+ paddingTop: 7,
603
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
604
+ overflow: "auto",
605
+ flex: 1,
606
+ children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
607
+ layout: documentLayoutResponse.edit.layout,
608
+ document: currentDocument,
609
+ hasBackground: false
451
610
  })
452
611
  })
453
- ]
454
- })
612
+ })
613
+ ]
455
614
  });
456
615
  };
457
616
 
458
- exports.RelationModalForm = RelationModalForm;
617
+ exports.RelationModalRenderer = RelationModalRenderer;
459
618
  exports.getCollectionType = getCollectionType;
619
+ exports.reducer = reducer;
620
+ exports.useRelationModal = useRelationModal;
460
621
  //# sourceMappingURL=RelationModal.js.map