@strapi/content-manager 0.0.0-next.ce5699024a72ea224891438d5bbe39f904ec6774 → 0.0.0-next.d23f1485e5669cca1cee1bf5f8168b6b8109b78f

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