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

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