@strapi/content-manager 5.37.1 → 5.38.0

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 (552) hide show
  1. package/dist/admin/components/ActionsDrawer.js.map +1 -1
  2. package/dist/admin/components/ActionsDrawer.mjs.map +1 -1
  3. package/dist/admin/components/ComponentIcon.js.map +1 -1
  4. package/dist/admin/components/ComponentIcon.mjs.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
  6. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
  7. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  8. package/dist/admin/components/ConfigurationForm/Fields.mjs +2 -2
  9. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  10. package/dist/admin/components/ConfigurationForm/Form.js +62 -30
  11. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
  12. package/dist/admin/components/ConfigurationForm/Form.mjs +62 -30
  13. package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
  14. package/dist/admin/components/DragLayer.js.map +1 -1
  15. package/dist/admin/components/DragLayer.mjs.map +1 -1
  16. package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -1
  17. package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -1
  18. package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -1
  19. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -1
  20. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
  21. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
  22. package/dist/admin/components/FieldTypeIcon.js.map +1 -1
  23. package/dist/admin/components/FieldTypeIcon.mjs +1 -1
  24. package/dist/admin/components/FieldTypeIcon.mjs.map +1 -1
  25. package/dist/admin/components/InjectionZone.js.map +1 -1
  26. package/dist/admin/components/InjectionZone.mjs.map +1 -1
  27. package/dist/admin/components/LeftMenu.js.map +1 -1
  28. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  29. package/dist/admin/components/RelativeTime.js.map +1 -1
  30. package/dist/admin/components/RelativeTime.mjs.map +1 -1
  31. package/dist/admin/components/Widgets.js.map +1 -1
  32. package/dist/admin/components/Widgets.mjs +1 -1
  33. package/dist/admin/components/Widgets.mjs.map +1 -1
  34. package/dist/admin/constants/attributes.js.map +1 -1
  35. package/dist/admin/constants/attributes.mjs.map +1 -1
  36. package/dist/admin/constants/collections.js.map +1 -1
  37. package/dist/admin/constants/collections.mjs.map +1 -1
  38. package/dist/admin/constants/dragAndDrop.js.map +1 -1
  39. package/dist/admin/constants/dragAndDrop.mjs.map +1 -1
  40. package/dist/admin/constants/hooks.js.map +1 -1
  41. package/dist/admin/constants/hooks.mjs.map +1 -1
  42. package/dist/admin/constants/plugin.js.map +1 -1
  43. package/dist/admin/constants/plugin.mjs.map +1 -1
  44. package/dist/admin/content-manager.js.map +1 -1
  45. package/dist/admin/content-manager.mjs.map +1 -1
  46. package/dist/admin/features/DocumentRBAC.js.map +1 -1
  47. package/dist/admin/features/DocumentRBAC.mjs.map +1 -1
  48. package/dist/admin/history/components/HistoryAction.js.map +1 -1
  49. package/dist/admin/history/components/HistoryAction.mjs.map +1 -1
  50. package/dist/admin/history/components/VersionContent.js.map +1 -1
  51. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  52. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  53. package/dist/admin/history/components/VersionHeader.mjs +1 -1
  54. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  55. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  56. package/dist/admin/history/components/VersionInputRenderer.mjs +1 -1
  57. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  58. package/dist/admin/history/components/VersionsList.js.map +1 -1
  59. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  60. package/dist/admin/history/index.js.map +1 -1
  61. package/dist/admin/history/index.mjs.map +1 -1
  62. package/dist/admin/history/pages/History.js.map +1 -1
  63. package/dist/admin/history/pages/History.mjs +1 -1
  64. package/dist/admin/history/pages/History.mjs.map +1 -1
  65. package/dist/admin/history/routes.js.map +1 -1
  66. package/dist/admin/history/routes.mjs.map +1 -1
  67. package/dist/admin/history/services/historyVersion.js.map +1 -1
  68. package/dist/admin/history/services/historyVersion.mjs.map +1 -1
  69. package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
  70. package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
  71. package/dist/admin/hooks/useContentTypeSchema.js.map +1 -1
  72. package/dist/admin/hooks/useContentTypeSchema.mjs.map +1 -1
  73. package/dist/admin/hooks/useDebounce.js.map +1 -1
  74. package/dist/admin/hooks/useDebounce.mjs.map +1 -1
  75. package/dist/admin/hooks/useDocument.js.map +1 -1
  76. package/dist/admin/hooks/useDocument.mjs +1 -1
  77. package/dist/admin/hooks/useDocument.mjs.map +1 -1
  78. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  79. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  80. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  81. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  82. package/dist/admin/hooks/useDocumentLayout.js +2 -1
  83. package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
  84. package/dist/admin/hooks/useDocumentLayout.mjs +2 -1
  85. package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
  86. package/dist/admin/hooks/useDragAndDrop.js +1 -3
  87. package/dist/admin/hooks/useDragAndDrop.js.map +1 -1
  88. package/dist/admin/hooks/useDragAndDrop.mjs +1 -3
  89. package/dist/admin/hooks/useDragAndDrop.mjs.map +1 -1
  90. package/dist/admin/hooks/useKeyboardDragAndDrop.js.map +1 -1
  91. package/dist/admin/hooks/useKeyboardDragAndDrop.mjs.map +1 -1
  92. package/dist/admin/hooks/useLazyComponents.js.map +1 -1
  93. package/dist/admin/hooks/useLazyComponents.mjs.map +1 -1
  94. package/dist/admin/hooks/useOnce.js.map +1 -1
  95. package/dist/admin/hooks/useOnce.mjs.map +1 -1
  96. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
  97. package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -1
  98. package/dist/admin/hooks/usePrev.js.map +1 -1
  99. package/dist/admin/hooks/usePrev.mjs.map +1 -1
  100. package/dist/admin/index.js.map +1 -1
  101. package/dist/admin/index.mjs.map +1 -1
  102. package/dist/admin/layout.js.map +1 -1
  103. package/dist/admin/layout.mjs.map +1 -1
  104. package/dist/admin/modules/app.js.map +1 -1
  105. package/dist/admin/modules/app.mjs.map +1 -1
  106. package/dist/admin/modules/hooks.js.map +1 -1
  107. package/dist/admin/modules/hooks.mjs +1 -1
  108. package/dist/admin/modules/hooks.mjs.map +1 -1
  109. package/dist/admin/modules/reducers.js.map +1 -1
  110. package/dist/admin/modules/reducers.mjs.map +1 -1
  111. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
  112. package/dist/admin/pages/ComponentConfigurationPage.mjs +1 -1
  113. package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -1
  114. package/dist/admin/pages/EditConfigurationPage.js.map +1 -1
  115. package/dist/admin/pages/EditConfigurationPage.mjs +1 -1
  116. package/dist/admin/pages/EditConfigurationPage.mjs.map +1 -1
  117. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  118. package/dist/admin/pages/EditView/EditViewPage.mjs +4 -4
  119. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  120. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -1
  121. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -1
  122. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  123. package/dist/admin/pages/EditView/components/DocumentActions.mjs +4 -4
  124. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  125. package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
  126. package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
  127. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
  128. package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs.map +1 -1
  129. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  130. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +1 -1
  131. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
  132. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js.map +1 -1
  133. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs +1 -1
  134. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs.map +1 -1
  135. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  136. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +1 -1
  137. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
  138. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  139. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  140. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
  141. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +2 -2
  142. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
  143. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.js.map +1 -1
  144. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.mjs.map +1 -1
  145. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -1
  146. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -1
  147. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  148. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  149. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  150. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  151. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
  152. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -1
  153. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  154. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +1 -1
  155. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  156. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  157. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +1 -1
  158. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  159. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
  160. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs +2 -2
  161. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
  162. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js.map +1 -1
  163. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs.map +1 -1
  164. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.js.map +1 -1
  165. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.mjs.map +1 -1
  166. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.js.map +1 -1
  167. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.mjs.map +1 -1
  168. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.js.map +1 -1
  169. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.mjs.map +1 -1
  170. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js.map +1 -1
  171. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs.map +1 -1
  172. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -1
  173. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -1
  174. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  175. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  176. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  177. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  178. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  179. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  180. package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.js.map +1 -1
  181. package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.mjs.map +1 -1
  182. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.js.map +1 -1
  183. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.mjs.map +1 -1
  184. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  185. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  186. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js.map +1 -1
  187. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs.map +1 -1
  188. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  189. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  190. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.js.map +1 -1
  191. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.mjs.map +1 -1
  192. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  193. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  194. package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.js.map +1 -1
  195. package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.mjs.map +1 -1
  196. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +45 -6
  197. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  198. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +46 -9
  199. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  200. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  201. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +2 -2
  202. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  203. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  204. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  205. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  206. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  207. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  208. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  209. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
  210. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -1
  211. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  212. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
  213. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js.map +1 -1
  214. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs.map +1 -1
  215. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  216. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +2 -2
  217. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  218. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -1
  219. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -1
  220. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -1
  221. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.mjs.map +1 -1
  222. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -1
  223. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.mjs.map +1 -1
  224. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js +8 -6
  225. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
  226. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs +8 -6
  227. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
  228. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  229. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  230. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  231. package/dist/admin/pages/EditView/components/Header.mjs +2 -2
  232. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  233. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  234. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  235. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  236. package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -1
  237. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  238. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  239. package/dist/admin/pages/EditView/utils/forms.js.map +1 -1
  240. package/dist/admin/pages/EditView/utils/forms.mjs.map +1 -1
  241. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  242. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -1
  243. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  244. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  245. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs +1 -1
  246. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
  247. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
  248. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs +1 -1
  249. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs.map +1 -1
  250. package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -1
  251. package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -1
  252. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  253. package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
  254. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
  255. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -1
  256. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  257. package/dist/admin/pages/ListView/ListViewPage.mjs +3 -3
  258. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  259. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -1
  260. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -1
  261. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  262. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
  263. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +1 -4
  264. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  265. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -5
  266. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  267. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +4 -4
  268. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  269. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +2 -2
  270. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  271. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  272. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  273. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  274. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  275. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  276. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  277. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +7 -1
  278. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
  279. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs +7 -1
  280. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs.map +1 -1
  281. package/dist/admin/pages/ListView/components/TableCells/Components.js.map +1 -1
  282. package/dist/admin/pages/ListView/components/TableCells/Components.mjs +2 -2
  283. package/dist/admin/pages/ListView/components/TableCells/Components.mjs.map +1 -1
  284. package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
  285. package/dist/admin/pages/ListView/components/TableCells/Media.mjs +1 -1
  286. package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
  287. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  288. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  289. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
  290. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
  291. package/dist/admin/pages/NoContentTypePage.js.map +1 -1
  292. package/dist/admin/pages/NoContentTypePage.mjs.map +1 -1
  293. package/dist/admin/pages/NoPermissionsPage.js.map +1 -1
  294. package/dist/admin/pages/NoPermissionsPage.mjs.map +1 -1
  295. package/dist/admin/preview/components/InputPopover.js.map +1 -1
  296. package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
  297. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  298. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  299. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  300. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  301. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
  302. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -1
  303. package/dist/admin/preview/index.js.map +1 -1
  304. package/dist/admin/preview/index.mjs.map +1 -1
  305. package/dist/admin/preview/pages/Preview.js.map +1 -1
  306. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  307. package/dist/admin/preview/routes.js.map +1 -1
  308. package/dist/admin/preview/routes.mjs.map +1 -1
  309. package/dist/admin/preview/services/preview.js.map +1 -1
  310. package/dist/admin/preview/services/preview.mjs.map +1 -1
  311. package/dist/admin/preview/utils/constants.js +0 -1
  312. package/dist/admin/preview/utils/constants.js.map +1 -1
  313. package/dist/admin/preview/utils/constants.mjs +0 -1
  314. package/dist/admin/preview/utils/constants.mjs.map +1 -1
  315. package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
  316. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
  317. package/dist/admin/preview/utils/getSendMessage.js.map +1 -1
  318. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -1
  319. package/dist/admin/preview/utils/previewScript.js.map +1 -1
  320. package/dist/admin/preview/utils/previewScript.mjs.map +1 -1
  321. package/dist/admin/router.js.map +1 -1
  322. package/dist/admin/router.mjs.map +1 -1
  323. package/dist/admin/services/api.js.map +1 -1
  324. package/dist/admin/services/api.mjs.map +1 -1
  325. package/dist/admin/services/components.js.map +1 -1
  326. package/dist/admin/services/components.mjs.map +1 -1
  327. package/dist/admin/services/contentTypes.js.map +1 -1
  328. package/dist/admin/services/contentTypes.mjs.map +1 -1
  329. package/dist/admin/services/documents.js.map +1 -1
  330. package/dist/admin/services/documents.mjs.map +1 -1
  331. package/dist/admin/services/homepage.js.map +1 -1
  332. package/dist/admin/services/homepage.mjs.map +1 -1
  333. package/dist/admin/services/init.js.map +1 -1
  334. package/dist/admin/services/init.mjs.map +1 -1
  335. package/dist/admin/services/relations.js.map +1 -1
  336. package/dist/admin/services/relations.mjs.map +1 -1
  337. package/dist/admin/services/uid.js.map +1 -1
  338. package/dist/admin/services/uid.mjs.map +1 -1
  339. package/dist/admin/src/hooks/useDocumentLayout.d.ts +1 -0
  340. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +7 -2
  341. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +1 -1
  342. package/dist/admin/translations/en.json.js +5 -0
  343. package/dist/admin/translations/en.json.js.map +1 -1
  344. package/dist/admin/translations/en.json.mjs +5 -0
  345. package/dist/admin/translations/en.json.mjs.map +1 -1
  346. package/dist/admin/translations/fr.json.js +72 -1
  347. package/dist/admin/translations/fr.json.js.map +1 -1
  348. package/dist/admin/translations/fr.json.mjs +72 -1
  349. package/dist/admin/translations/fr.json.mjs.map +1 -1
  350. package/dist/admin/utils/api.js.map +1 -1
  351. package/dist/admin/utils/api.mjs.map +1 -1
  352. package/dist/admin/utils/attributes.js.map +1 -1
  353. package/dist/admin/utils/attributes.mjs.map +1 -1
  354. package/dist/admin/utils/objects.js.map +1 -1
  355. package/dist/admin/utils/objects.mjs.map +1 -1
  356. package/dist/admin/utils/relations.js.map +1 -1
  357. package/dist/admin/utils/relations.mjs.map +1 -1
  358. package/dist/admin/utils/strings.js.map +1 -1
  359. package/dist/admin/utils/strings.mjs.map +1 -1
  360. package/dist/admin/utils/translations.js.map +1 -1
  361. package/dist/admin/utils/translations.mjs.map +1 -1
  362. package/dist/admin/utils/urls.js.map +1 -1
  363. package/dist/admin/utils/urls.mjs.map +1 -1
  364. package/dist/admin/utils/users.js.map +1 -1
  365. package/dist/admin/utils/users.mjs.map +1 -1
  366. package/dist/admin/utils/validation.js.map +1 -1
  367. package/dist/admin/utils/validation.mjs.map +1 -1
  368. package/dist/server/bootstrap.js.map +1 -1
  369. package/dist/server/bootstrap.mjs.map +1 -1
  370. package/dist/server/constants/index.js.map +1 -1
  371. package/dist/server/constants/index.mjs.map +1 -1
  372. package/dist/server/controllers/collection-types.js.map +1 -1
  373. package/dist/server/controllers/collection-types.mjs +1 -1
  374. package/dist/server/controllers/collection-types.mjs.map +1 -1
  375. package/dist/server/controllers/components.js.map +1 -1
  376. package/dist/server/controllers/components.mjs.map +1 -1
  377. package/dist/server/controllers/content-types.js +10 -10
  378. package/dist/server/controllers/content-types.js.map +1 -1
  379. package/dist/server/controllers/content-types.mjs.map +1 -1
  380. package/dist/server/controllers/index.js +4 -4
  381. package/dist/server/controllers/index.js.map +1 -1
  382. package/dist/server/controllers/index.mjs.map +1 -1
  383. package/dist/server/controllers/init.js.map +1 -1
  384. package/dist/server/controllers/init.mjs.map +1 -1
  385. package/dist/server/controllers/relations.js.map +1 -1
  386. package/dist/server/controllers/relations.mjs +3 -3
  387. package/dist/server/controllers/relations.mjs.map +1 -1
  388. package/dist/server/controllers/single-types.js.map +1 -1
  389. package/dist/server/controllers/single-types.mjs +1 -1
  390. package/dist/server/controllers/single-types.mjs.map +1 -1
  391. package/dist/server/controllers/uid.js.map +1 -1
  392. package/dist/server/controllers/uid.mjs +1 -1
  393. package/dist/server/controllers/uid.mjs.map +1 -1
  394. package/dist/server/controllers/utils/clone.js.map +1 -1
  395. package/dist/server/controllers/utils/clone.mjs.map +1 -1
  396. package/dist/server/controllers/utils/document-status.js.map +1 -1
  397. package/dist/server/controllers/utils/document-status.mjs.map +1 -1
  398. package/dist/server/controllers/utils/metadata.js.map +1 -1
  399. package/dist/server/controllers/utils/metadata.mjs.map +1 -1
  400. package/dist/server/controllers/validation/dimensions.js.map +1 -1
  401. package/dist/server/controllers/validation/dimensions.mjs.map +1 -1
  402. package/dist/server/controllers/validation/index.js.map +1 -1
  403. package/dist/server/controllers/validation/index.mjs +1 -1
  404. package/dist/server/controllers/validation/index.mjs.map +1 -1
  405. package/dist/server/controllers/validation/model-configuration.js +6 -1
  406. package/dist/server/controllers/validation/model-configuration.js.map +1 -1
  407. package/dist/server/controllers/validation/model-configuration.mjs +6 -1
  408. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
  409. package/dist/server/controllers/validation/relations.js.map +1 -1
  410. package/dist/server/controllers/validation/relations.mjs.map +1 -1
  411. package/dist/server/destroy.js.map +1 -1
  412. package/dist/server/destroy.mjs.map +1 -1
  413. package/dist/server/history/constants.js.map +1 -1
  414. package/dist/server/history/constants.mjs.map +1 -1
  415. package/dist/server/history/controllers/history-version.js.map +1 -1
  416. package/dist/server/history/controllers/history-version.mjs.map +1 -1
  417. package/dist/server/history/controllers/index.js.map +1 -1
  418. package/dist/server/history/controllers/index.mjs.map +1 -1
  419. package/dist/server/history/controllers/validation/history-version.js.map +1 -1
  420. package/dist/server/history/controllers/validation/history-version.mjs.map +1 -1
  421. package/dist/server/history/index.js +4 -4
  422. package/dist/server/history/index.js.map +1 -1
  423. package/dist/server/history/index.mjs.map +1 -1
  424. package/dist/server/history/models/history-version.js.map +1 -1
  425. package/dist/server/history/models/history-version.mjs.map +1 -1
  426. package/dist/server/history/routes/history-version.js.map +1 -1
  427. package/dist/server/history/routes/history-version.mjs.map +1 -1
  428. package/dist/server/history/routes/index.js.map +1 -1
  429. package/dist/server/history/routes/index.mjs.map +1 -1
  430. package/dist/server/history/services/history.js.map +1 -1
  431. package/dist/server/history/services/history.mjs.map +1 -1
  432. package/dist/server/history/services/index.js.map +1 -1
  433. package/dist/server/history/services/index.mjs.map +1 -1
  434. package/dist/server/history/services/lifecycles.js.map +1 -1
  435. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  436. package/dist/server/history/services/utils.js.map +1 -1
  437. package/dist/server/history/services/utils.mjs.map +1 -1
  438. package/dist/server/history/utils.js.map +1 -1
  439. package/dist/server/history/utils.mjs.map +1 -1
  440. package/dist/server/homepage/controllers/homepage.js.map +1 -1
  441. package/dist/server/homepage/controllers/homepage.mjs.map +1 -1
  442. package/dist/server/homepage/controllers/index.js.map +1 -1
  443. package/dist/server/homepage/controllers/index.mjs.map +1 -1
  444. package/dist/server/homepage/index.js +6 -6
  445. package/dist/server/homepage/index.js.map +1 -1
  446. package/dist/server/homepage/index.mjs.map +1 -1
  447. package/dist/server/homepage/routes/homepage.js.map +1 -1
  448. package/dist/server/homepage/routes/homepage.mjs.map +1 -1
  449. package/dist/server/homepage/routes/index.js.map +1 -1
  450. package/dist/server/homepage/routes/index.mjs.map +1 -1
  451. package/dist/server/homepage/services/homepage.js.map +1 -1
  452. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  453. package/dist/server/homepage/services/index.js.map +1 -1
  454. package/dist/server/homepage/services/index.mjs.map +1 -1
  455. package/dist/server/index.js +8 -8
  456. package/dist/server/middlewares/routing.js.map +1 -1
  457. package/dist/server/middlewares/routing.mjs.map +1 -1
  458. package/dist/server/policies/hasPermissions.js.map +1 -1
  459. package/dist/server/policies/hasPermissions.mjs.map +1 -1
  460. package/dist/server/policies/index.js.map +1 -1
  461. package/dist/server/policies/index.mjs.map +1 -1
  462. package/dist/server/preview/controllers/index.js.map +1 -1
  463. package/dist/server/preview/controllers/index.mjs.map +1 -1
  464. package/dist/server/preview/controllers/preview.js.map +1 -1
  465. package/dist/server/preview/controllers/preview.mjs.map +1 -1
  466. package/dist/server/preview/controllers/validation/preview.js.map +1 -1
  467. package/dist/server/preview/controllers/validation/preview.mjs.map +1 -1
  468. package/dist/server/preview/index.js +4 -4
  469. package/dist/server/preview/index.js.map +1 -1
  470. package/dist/server/preview/index.mjs.map +1 -1
  471. package/dist/server/preview/routes/index.js.map +1 -1
  472. package/dist/server/preview/routes/index.mjs.map +1 -1
  473. package/dist/server/preview/routes/preview.js.map +1 -1
  474. package/dist/server/preview/routes/preview.mjs.map +1 -1
  475. package/dist/server/preview/services/index.js.map +1 -1
  476. package/dist/server/preview/services/index.mjs.map +1 -1
  477. package/dist/server/preview/services/preview-config.js.map +1 -1
  478. package/dist/server/preview/services/preview-config.mjs +1 -1
  479. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  480. package/dist/server/preview/services/preview.js.map +1 -1
  481. package/dist/server/preview/services/preview.mjs.map +1 -1
  482. package/dist/server/preview/utils.js.map +1 -1
  483. package/dist/server/preview/utils.mjs.map +1 -1
  484. package/dist/server/register.js.map +1 -1
  485. package/dist/server/register.mjs.map +1 -1
  486. package/dist/server/routes/admin.js.map +1 -1
  487. package/dist/server/routes/admin.mjs.map +1 -1
  488. package/dist/server/routes/index.js +4 -4
  489. package/dist/server/routes/index.js.map +1 -1
  490. package/dist/server/routes/index.mjs.map +1 -1
  491. package/dist/server/services/components.js.map +1 -1
  492. package/dist/server/services/components.mjs.map +1 -1
  493. package/dist/server/services/configuration.js.map +1 -1
  494. package/dist/server/services/configuration.mjs.map +1 -1
  495. package/dist/server/services/content-types.js.map +1 -1
  496. package/dist/server/services/content-types.mjs.map +1 -1
  497. package/dist/server/services/data-mapper.js.map +1 -1
  498. package/dist/server/services/data-mapper.mjs.map +1 -1
  499. package/dist/server/services/document-manager.js.map +1 -1
  500. package/dist/server/services/document-manager.mjs +2 -2
  501. package/dist/server/services/document-manager.mjs.map +1 -1
  502. package/dist/server/services/document-metadata.js.map +1 -1
  503. package/dist/server/services/document-metadata.mjs +2 -2
  504. package/dist/server/services/document-metadata.mjs.map +1 -1
  505. package/dist/server/services/field-sizes.js.map +1 -1
  506. package/dist/server/services/field-sizes.mjs.map +1 -1
  507. package/dist/server/services/index.js +4 -4
  508. package/dist/server/services/index.js.map +1 -1
  509. package/dist/server/services/index.mjs.map +1 -1
  510. package/dist/server/services/metrics.js.map +1 -1
  511. package/dist/server/services/metrics.mjs.map +1 -1
  512. package/dist/server/services/permission-checker.js.map +1 -1
  513. package/dist/server/services/permission-checker.mjs.map +1 -1
  514. package/dist/server/services/permission.js.map +1 -1
  515. package/dist/server/services/permission.mjs.map +1 -1
  516. package/dist/server/services/populate-builder.js.map +1 -1
  517. package/dist/server/services/populate-builder.mjs +4 -4
  518. package/dist/server/services/populate-builder.mjs.map +1 -1
  519. package/dist/server/services/uid.js.map +1 -1
  520. package/dist/server/services/uid.mjs.map +1 -1
  521. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  522. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  523. package/dist/server/services/utils/configuration/index.js.map +1 -1
  524. package/dist/server/services/utils/configuration/index.mjs +3 -3
  525. package/dist/server/services/utils/configuration/index.mjs.map +1 -1
  526. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  527. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  528. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  529. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  530. package/dist/server/services/utils/configuration/metadatas.mjs +1 -1
  531. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  532. package/dist/server/services/utils/configuration/settings.js +4 -2
  533. package/dist/server/services/utils/configuration/settings.js.map +1 -1
  534. package/dist/server/services/utils/configuration/settings.mjs +5 -3
  535. package/dist/server/services/utils/configuration/settings.mjs.map +1 -1
  536. package/dist/server/services/utils/draft.js.map +1 -1
  537. package/dist/server/services/utils/draft.mjs.map +1 -1
  538. package/dist/server/services/utils/populate.js.map +1 -1
  539. package/dist/server/services/utils/populate.mjs +1 -1
  540. package/dist/server/services/utils/populate.mjs.map +1 -1
  541. package/dist/server/services/utils/store.js.map +1 -1
  542. package/dist/server/services/utils/store.mjs.map +1 -1
  543. package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
  544. package/dist/server/utils/index.js.map +1 -1
  545. package/dist/server/utils/index.mjs.map +1 -1
  546. package/dist/server/validation/policies/hasPermissions.js.map +1 -1
  547. package/dist/server/validation/policies/hasPermissions.mjs.map +1 -1
  548. package/dist/shared/contracts/content-types.d.ts +2 -0
  549. package/dist/shared/contracts/content-types.d.ts.map +1 -1
  550. package/dist/shared/contracts/relations.d.ts +1 -1
  551. package/dist/shared/contracts/relations.d.ts.map +1 -1
  552. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sources":["../../../admin/src/history/routes.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { type PathRouteProps } from 'react-router-dom';\n\nconst ProtectedHistoryPage = React.lazy(() =>\n import('./pages/History').then((mod) => ({ default: mod.ProtectedHistoryPage }))\n);\n\n/**\n * These routes will be merged with the rest of the Content Manager routes\n */\nconst routes: PathRouteProps[] = [\n {\n path: ':collectionType/:slug/:id/history',\n Component: ProtectedHistoryPage,\n },\n {\n path: ':collectionType/:slug/history',\n Component: ProtectedHistoryPage,\n },\n];\n\nexport { routes };\n"],"names":["ProtectedHistoryPage","React","lazy","then","mod","default","routes","path","Component"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAMA,oBAAuBC,iBAAAA,gBAAAA,CAAMC,IAAI,CAAC,IACtC,oDAAO,oBAAA,KAAA,CAAmBC,IAAI,CAAC,CAACC,GAAAA,IAAS;AAAEC,YAAAA,OAAAA,EAASD,IAAIJ;SAAqB,CAAA,CAAA,CAAA;AAG/E;;AAEC,UACKM,MAA2B,GAAA;AAC/B,IAAA;QACEC,IAAM,EAAA,mCAAA;QACNC,SAAWR,EAAAA;AACb,KAAA;AACA,IAAA;QACEO,IAAM,EAAA,+BAAA;QACNC,SAAWR,EAAAA;AACb;AACD;;;;"}
1
+ {"version":3,"file":"routes.js","sources":["../../../admin/src/history/routes.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { type PathRouteProps } from 'react-router-dom';\n\nconst ProtectedHistoryPage = React.lazy(() =>\n import('./pages/History').then((mod) => ({ default: mod.ProtectedHistoryPage }))\n);\n\n/**\n * These routes will be merged with the rest of the Content Manager routes\n */\nconst routes: PathRouteProps[] = [\n {\n path: ':collectionType/:slug/:id/history',\n Component: ProtectedHistoryPage,\n },\n {\n path: ':collectionType/:slug/history',\n Component: ProtectedHistoryPage,\n },\n];\n\nexport { routes };\n"],"names":["ProtectedHistoryPage","React","lazy","then","mod","default","routes","path","Component"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAMA,oBAAAA,iBAAuBC,gBAAAA,CAAMC,IAAI,CAAC,IACtC,oDAAO,oBAAA,KAAA,CAAmBC,IAAI,CAAC,CAACC,GAAAA,IAAS;AAAEC,YAAAA,OAAAA,EAASD,IAAIJ;SAAqB,CAAA,CAAA,CAAA;AAG/E;;AAEC,UACKM,MAAAA,GAA2B;AAC/B,IAAA;QACEC,IAAAA,EAAM,mCAAA;QACNC,SAAAA,EAAWR;AACb,KAAA;AACA,IAAA;QACEO,IAAAA,EAAM,+BAAA;QACNC,SAAAA,EAAWR;AACb;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.mjs","sources":["../../../admin/src/history/routes.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { type PathRouteProps } from 'react-router-dom';\n\nconst ProtectedHistoryPage = React.lazy(() =>\n import('./pages/History').then((mod) => ({ default: mod.ProtectedHistoryPage }))\n);\n\n/**\n * These routes will be merged with the rest of the Content Manager routes\n */\nconst routes: PathRouteProps[] = [\n {\n path: ':collectionType/:slug/:id/history',\n Component: ProtectedHistoryPage,\n },\n {\n path: ':collectionType/:slug/history',\n Component: ProtectedHistoryPage,\n },\n];\n\nexport { routes };\n"],"names":["ProtectedHistoryPage","React","lazy","then","mod","default","routes","path","Component"],"mappings":";;AAKA,MAAMA,oBAAuBC,iBAAAA,KAAAA,CAAMC,IAAI,CAAC,IACtC,OAAO,qBAAA,CAAA,CAAmBC,IAAI,CAAC,CAACC,GAAAA,IAAS;AAAEC,YAAAA,OAAAA,EAASD,IAAIJ;SAAqB,CAAA,CAAA,CAAA;AAG/E;;AAEC,UACKM,MAA2B,GAAA;AAC/B,IAAA;QACEC,IAAM,EAAA,mCAAA;QACNC,SAAWR,EAAAA;AACb,KAAA;AACA,IAAA;QACEO,IAAM,EAAA,+BAAA;QACNC,SAAWR,EAAAA;AACb;AACD;;;;"}
1
+ {"version":3,"file":"routes.mjs","sources":["../../../admin/src/history/routes.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { type PathRouteProps } from 'react-router-dom';\n\nconst ProtectedHistoryPage = React.lazy(() =>\n import('./pages/History').then((mod) => ({ default: mod.ProtectedHistoryPage }))\n);\n\n/**\n * These routes will be merged with the rest of the Content Manager routes\n */\nconst routes: PathRouteProps[] = [\n {\n path: ':collectionType/:slug/:id/history',\n Component: ProtectedHistoryPage,\n },\n {\n path: ':collectionType/:slug/history',\n Component: ProtectedHistoryPage,\n },\n];\n\nexport { routes };\n"],"names":["ProtectedHistoryPage","React","lazy","then","mod","default","routes","path","Component"],"mappings":";;AAKA,MAAMA,oBAAAA,iBAAuBC,KAAAA,CAAMC,IAAI,CAAC,IACtC,OAAO,qBAAA,CAAA,CAAmBC,IAAI,CAAC,CAACC,GAAAA,IAAS;AAAEC,YAAAA,OAAAA,EAASD,IAAIJ;SAAqB,CAAA,CAAA,CAAA;AAG/E;;AAEC,UACKM,MAAAA,GAA2B;AAC/B,IAAA;QACEC,IAAAA,EAAM,mCAAA;QACNC,SAAAA,EAAWR;AACb,KAAA;AACA,IAAA;QACEO,IAAAA,EAAM,+BAAA;QACNC,SAAAA,EAAWR;AACb;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"historyVersion.js","sources":["../../../../admin/src/history/services/historyVersion.ts"],"sourcesContent":["import {\n GetHistoryVersions,\n RestoreHistoryVersion,\n} from '../../../../shared/contracts/history-versions';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { contentManagerApi } from '../../services/api';\n\nimport type { Data } from '@strapi/types';\n\ninterface RestoreVersion extends RestoreHistoryVersion.Request {\n documentId: Data.ID;\n collectionType?: string;\n}\n\nconst historyVersionsApi = contentManagerApi.injectEndpoints({\n endpoints: (builder) => ({\n getHistoryVersions: builder.query<\n GetHistoryVersions.Response,\n GetHistoryVersions.Request['query']\n >({\n query(params) {\n return {\n url: `/content-manager/history-versions`,\n method: 'GET',\n config: {\n params,\n },\n };\n },\n providesTags: ['HistoryVersion'],\n }),\n restoreVersion: builder.mutation<RestoreHistoryVersion.Response, RestoreVersion>({\n query({ params, body }) {\n return {\n url: `/content-manager/history-versions/${params.versionId}/restore`,\n method: 'PUT',\n data: body,\n };\n },\n invalidatesTags: (_res, _error, { documentId, collectionType, params }) => {\n return [\n 'HistoryVersion',\n {\n type: 'Document',\n id:\n collectionType === COLLECTION_TYPES\n ? `${params.contentType}_${documentId}`\n : params.contentType,\n },\n ];\n },\n }),\n }),\n});\n\nconst { useGetHistoryVersionsQuery, useRestoreVersionMutation } = historyVersionsApi;\n\nexport { useGetHistoryVersionsQuery, useRestoreVersionMutation };\n"],"names":["historyVersionsApi","contentManagerApi","injectEndpoints","endpoints","builder","getHistoryVersions","query","params","url","method","config","providesTags","restoreVersion","mutation","body","versionId","data","invalidatesTags","_res","_error","documentId","collectionType","type","id","COLLECTION_TYPES","contentType","useGetHistoryVersionsQuery","useRestoreVersionMutation"],"mappings":";;;;;AAcA,MAAMA,kBAAAA,GAAqBC,qBAAkBC,CAAAA,eAAe,CAAC;IAC3DC,SAAW,EAAA,CAACC,WAAa;YACvBC,kBAAoBD,EAAAA,OAAAA,CAAQE,KAAK,CAG/B;AACAA,gBAAAA,KAAAA,CAAAA,CAAMC,MAAM,EAAA;oBACV,OAAO;wBACLC,GAAK,EAAA,CAAC,iCAAiC,CAAC;wBACxCC,MAAQ,EAAA,KAAA;wBACRC,MAAQ,EAAA;AACNH,4BAAAA;AACF;AACF,qBAAA;AACF,iBAAA;gBACAI,YAAc,EAAA;AAAC,oBAAA;AAAiB;AAClC,aAAA,CAAA;YACAC,cAAgBR,EAAAA,OAAAA,CAAQS,QAAQ,CAAiD;AAC/EP,gBAAAA,KAAAA,CAAAA,CAAM,EAAEC,MAAM,EAAEO,IAAI,EAAE,EAAA;oBACpB,OAAO;AACLN,wBAAAA,GAAAA,EAAK,CAAC,kCAAkC,EAAED,OAAOQ,SAAS,CAAC,QAAQ,CAAC;wBACpEN,MAAQ,EAAA,KAAA;wBACRO,IAAMF,EAAAA;AACR,qBAAA;AACF,iBAAA;gBACAG,eAAiB,EAAA,CAACC,MAAMC,MAAQ,EAAA,EAAEC,UAAU,EAAEC,cAAc,EAAEd,MAAM,EAAE,GAAA;oBACpE,OAAO;AACL,wBAAA,gBAAA;AACA,wBAAA;4BACEe,IAAM,EAAA,UAAA;4BACNC,EACEF,EAAAA,cAAAA,KAAmBG,4BACf,GAAA,CAAA,EAAGjB,MAAOkB,CAAAA,WAAW,CAAC,CAAC,EAAEL,UAAAA,CAAAA,CAAY,GACrCb,MAAAA,CAAOkB;AACf;AACD,qBAAA;AACH;AACF,aAAA;SACF;AACF,CAAA,CAAA;AAEA,MAAM,EAAEC,0BAA0B,EAAEC,yBAAyB,EAAE,GAAG3B;;;;;"}
1
+ {"version":3,"file":"historyVersion.js","sources":["../../../../admin/src/history/services/historyVersion.ts"],"sourcesContent":["import {\n GetHistoryVersions,\n RestoreHistoryVersion,\n} from '../../../../shared/contracts/history-versions';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { contentManagerApi } from '../../services/api';\n\nimport type { Data } from '@strapi/types';\n\ninterface RestoreVersion extends RestoreHistoryVersion.Request {\n documentId: Data.ID;\n collectionType?: string;\n}\n\nconst historyVersionsApi = contentManagerApi.injectEndpoints({\n endpoints: (builder) => ({\n getHistoryVersions: builder.query<\n GetHistoryVersions.Response,\n GetHistoryVersions.Request['query']\n >({\n query(params) {\n return {\n url: `/content-manager/history-versions`,\n method: 'GET',\n config: {\n params,\n },\n };\n },\n providesTags: ['HistoryVersion'],\n }),\n restoreVersion: builder.mutation<RestoreHistoryVersion.Response, RestoreVersion>({\n query({ params, body }) {\n return {\n url: `/content-manager/history-versions/${params.versionId}/restore`,\n method: 'PUT',\n data: body,\n };\n },\n invalidatesTags: (_res, _error, { documentId, collectionType, params }) => {\n return [\n 'HistoryVersion',\n {\n type: 'Document',\n id:\n collectionType === COLLECTION_TYPES\n ? `${params.contentType}_${documentId}`\n : params.contentType,\n },\n ];\n },\n }),\n }),\n});\n\nconst { useGetHistoryVersionsQuery, useRestoreVersionMutation } = historyVersionsApi;\n\nexport { useGetHistoryVersionsQuery, useRestoreVersionMutation };\n"],"names":["historyVersionsApi","contentManagerApi","injectEndpoints","endpoints","builder","getHistoryVersions","query","params","url","method","config","providesTags","restoreVersion","mutation","body","versionId","data","invalidatesTags","_res","_error","documentId","collectionType","type","id","COLLECTION_TYPES","contentType","useGetHistoryVersionsQuery","useRestoreVersionMutation"],"mappings":";;;;;AAcA,MAAMA,kBAAAA,GAAqBC,qBAAAA,CAAkBC,eAAe,CAAC;IAC3DC,SAAAA,EAAW,CAACC,WAAa;YACvBC,kBAAAA,EAAoBD,OAAAA,CAAQE,KAAK,CAG/B;AACAA,gBAAAA,KAAAA,CAAAA,CAAMC,MAAM,EAAA;oBACV,OAAO;wBACLC,GAAAA,EAAK,CAAC,iCAAiC,CAAC;wBACxCC,MAAAA,EAAQ,KAAA;wBACRC,MAAAA,EAAQ;AACNH,4BAAAA;AACF;AACF,qBAAA;AACF,gBAAA,CAAA;gBACAI,YAAAA,EAAc;AAAC,oBAAA;AAAiB;AAClC,aAAA,CAAA;YACAC,cAAAA,EAAgBR,OAAAA,CAAQS,QAAQ,CAAiD;AAC/EP,gBAAAA,KAAAA,CAAAA,CAAM,EAAEC,MAAM,EAAEO,IAAI,EAAE,EAAA;oBACpB,OAAO;AACLN,wBAAAA,GAAAA,EAAK,CAAC,kCAAkC,EAAED,OAAOQ,SAAS,CAAC,QAAQ,CAAC;wBACpEN,MAAAA,EAAQ,KAAA;wBACRO,IAAAA,EAAMF;AACR,qBAAA;AACF,gBAAA,CAAA;gBACAG,eAAAA,EAAiB,CAACC,MAAMC,MAAAA,EAAQ,EAAEC,UAAU,EAAEC,cAAc,EAAEd,MAAM,EAAE,GAAA;oBACpE,OAAO;AACL,wBAAA,gBAAA;AACA,wBAAA;4BACEe,IAAAA,EAAM,UAAA;4BACNC,EAAAA,EACEF,cAAAA,KAAmBG,4BAAAA,GACf,CAAA,EAAGjB,MAAAA,CAAOkB,WAAW,CAAC,CAAC,EAAEL,UAAAA,CAAAA,CAAY,GACrCb,MAAAA,CAAOkB;AACf;AACD,qBAAA;AACH,gBAAA;AACF,aAAA;SACF;AACF,CAAA,CAAA;AAEA,MAAM,EAAEC,0BAA0B,EAAEC,yBAAyB,EAAE,GAAG3B;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"historyVersion.mjs","sources":["../../../../admin/src/history/services/historyVersion.ts"],"sourcesContent":["import {\n GetHistoryVersions,\n RestoreHistoryVersion,\n} from '../../../../shared/contracts/history-versions';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { contentManagerApi } from '../../services/api';\n\nimport type { Data } from '@strapi/types';\n\ninterface RestoreVersion extends RestoreHistoryVersion.Request {\n documentId: Data.ID;\n collectionType?: string;\n}\n\nconst historyVersionsApi = contentManagerApi.injectEndpoints({\n endpoints: (builder) => ({\n getHistoryVersions: builder.query<\n GetHistoryVersions.Response,\n GetHistoryVersions.Request['query']\n >({\n query(params) {\n return {\n url: `/content-manager/history-versions`,\n method: 'GET',\n config: {\n params,\n },\n };\n },\n providesTags: ['HistoryVersion'],\n }),\n restoreVersion: builder.mutation<RestoreHistoryVersion.Response, RestoreVersion>({\n query({ params, body }) {\n return {\n url: `/content-manager/history-versions/${params.versionId}/restore`,\n method: 'PUT',\n data: body,\n };\n },\n invalidatesTags: (_res, _error, { documentId, collectionType, params }) => {\n return [\n 'HistoryVersion',\n {\n type: 'Document',\n id:\n collectionType === COLLECTION_TYPES\n ? `${params.contentType}_${documentId}`\n : params.contentType,\n },\n ];\n },\n }),\n }),\n});\n\nconst { useGetHistoryVersionsQuery, useRestoreVersionMutation } = historyVersionsApi;\n\nexport { useGetHistoryVersionsQuery, useRestoreVersionMutation };\n"],"names":["historyVersionsApi","contentManagerApi","injectEndpoints","endpoints","builder","getHistoryVersions","query","params","url","method","config","providesTags","restoreVersion","mutation","body","versionId","data","invalidatesTags","_res","_error","documentId","collectionType","type","id","COLLECTION_TYPES","contentType","useGetHistoryVersionsQuery","useRestoreVersionMutation"],"mappings":";;;AAcA,MAAMA,kBAAAA,GAAqBC,iBAAkBC,CAAAA,eAAe,CAAC;IAC3DC,SAAW,EAAA,CAACC,WAAa;YACvBC,kBAAoBD,EAAAA,OAAAA,CAAQE,KAAK,CAG/B;AACAA,gBAAAA,KAAAA,CAAAA,CAAMC,MAAM,EAAA;oBACV,OAAO;wBACLC,GAAK,EAAA,CAAC,iCAAiC,CAAC;wBACxCC,MAAQ,EAAA,KAAA;wBACRC,MAAQ,EAAA;AACNH,4BAAAA;AACF;AACF,qBAAA;AACF,iBAAA;gBACAI,YAAc,EAAA;AAAC,oBAAA;AAAiB;AAClC,aAAA,CAAA;YACAC,cAAgBR,EAAAA,OAAAA,CAAQS,QAAQ,CAAiD;AAC/EP,gBAAAA,KAAAA,CAAAA,CAAM,EAAEC,MAAM,EAAEO,IAAI,EAAE,EAAA;oBACpB,OAAO;AACLN,wBAAAA,GAAAA,EAAK,CAAC,kCAAkC,EAAED,OAAOQ,SAAS,CAAC,QAAQ,CAAC;wBACpEN,MAAQ,EAAA,KAAA;wBACRO,IAAMF,EAAAA;AACR,qBAAA;AACF,iBAAA;gBACAG,eAAiB,EAAA,CAACC,MAAMC,MAAQ,EAAA,EAAEC,UAAU,EAAEC,cAAc,EAAEd,MAAM,EAAE,GAAA;oBACpE,OAAO;AACL,wBAAA,gBAAA;AACA,wBAAA;4BACEe,IAAM,EAAA,UAAA;4BACNC,EACEF,EAAAA,cAAAA,KAAmBG,gBACf,GAAA,CAAA,EAAGjB,MAAOkB,CAAAA,WAAW,CAAC,CAAC,EAAEL,UAAAA,CAAAA,CAAY,GACrCb,MAAAA,CAAOkB;AACf;AACD,qBAAA;AACH;AACF,aAAA;SACF;AACF,CAAA,CAAA;AAEA,MAAM,EAAEC,0BAA0B,EAAEC,yBAAyB,EAAE,GAAG3B;;;;"}
1
+ {"version":3,"file":"historyVersion.mjs","sources":["../../../../admin/src/history/services/historyVersion.ts"],"sourcesContent":["import {\n GetHistoryVersions,\n RestoreHistoryVersion,\n} from '../../../../shared/contracts/history-versions';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { contentManagerApi } from '../../services/api';\n\nimport type { Data } from '@strapi/types';\n\ninterface RestoreVersion extends RestoreHistoryVersion.Request {\n documentId: Data.ID;\n collectionType?: string;\n}\n\nconst historyVersionsApi = contentManagerApi.injectEndpoints({\n endpoints: (builder) => ({\n getHistoryVersions: builder.query<\n GetHistoryVersions.Response,\n GetHistoryVersions.Request['query']\n >({\n query(params) {\n return {\n url: `/content-manager/history-versions`,\n method: 'GET',\n config: {\n params,\n },\n };\n },\n providesTags: ['HistoryVersion'],\n }),\n restoreVersion: builder.mutation<RestoreHistoryVersion.Response, RestoreVersion>({\n query({ params, body }) {\n return {\n url: `/content-manager/history-versions/${params.versionId}/restore`,\n method: 'PUT',\n data: body,\n };\n },\n invalidatesTags: (_res, _error, { documentId, collectionType, params }) => {\n return [\n 'HistoryVersion',\n {\n type: 'Document',\n id:\n collectionType === COLLECTION_TYPES\n ? `${params.contentType}_${documentId}`\n : params.contentType,\n },\n ];\n },\n }),\n }),\n});\n\nconst { useGetHistoryVersionsQuery, useRestoreVersionMutation } = historyVersionsApi;\n\nexport { useGetHistoryVersionsQuery, useRestoreVersionMutation };\n"],"names":["historyVersionsApi","contentManagerApi","injectEndpoints","endpoints","builder","getHistoryVersions","query","params","url","method","config","providesTags","restoreVersion","mutation","body","versionId","data","invalidatesTags","_res","_error","documentId","collectionType","type","id","COLLECTION_TYPES","contentType","useGetHistoryVersionsQuery","useRestoreVersionMutation"],"mappings":";;;AAcA,MAAMA,kBAAAA,GAAqBC,iBAAAA,CAAkBC,eAAe,CAAC;IAC3DC,SAAAA,EAAW,CAACC,WAAa;YACvBC,kBAAAA,EAAoBD,OAAAA,CAAQE,KAAK,CAG/B;AACAA,gBAAAA,KAAAA,CAAAA,CAAMC,MAAM,EAAA;oBACV,OAAO;wBACLC,GAAAA,EAAK,CAAC,iCAAiC,CAAC;wBACxCC,MAAAA,EAAQ,KAAA;wBACRC,MAAAA,EAAQ;AACNH,4BAAAA;AACF;AACF,qBAAA;AACF,gBAAA,CAAA;gBACAI,YAAAA,EAAc;AAAC,oBAAA;AAAiB;AAClC,aAAA,CAAA;YACAC,cAAAA,EAAgBR,OAAAA,CAAQS,QAAQ,CAAiD;AAC/EP,gBAAAA,KAAAA,CAAAA,CAAM,EAAEC,MAAM,EAAEO,IAAI,EAAE,EAAA;oBACpB,OAAO;AACLN,wBAAAA,GAAAA,EAAK,CAAC,kCAAkC,EAAED,OAAOQ,SAAS,CAAC,QAAQ,CAAC;wBACpEN,MAAAA,EAAQ,KAAA;wBACRO,IAAAA,EAAMF;AACR,qBAAA;AACF,gBAAA,CAAA;gBACAG,eAAAA,EAAiB,CAACC,MAAMC,MAAAA,EAAQ,EAAEC,UAAU,EAAEC,cAAc,EAAEd,MAAM,EAAE,GAAA;oBACpE,OAAO;AACL,wBAAA,gBAAA;AACA,wBAAA;4BACEe,IAAAA,EAAM,UAAA;4BACNC,EAAAA,EACEF,cAAAA,KAAmBG,gBAAAA,GACf,CAAA,EAAGjB,MAAAA,CAAOkB,WAAW,CAAC,CAAC,EAAEL,UAAAA,CAAAA,CAAY,GACrCb,MAAAA,CAAOkB;AACf;AACD,qBAAA;AACH,gBAAA;AACF,aAAA;SACF;AACF,CAAA,CAAA;AAEA,MAAM,EAAEC,0BAA0B,EAAEC,yBAAyB,EAAE,GAAG3B;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useContentManagerInitData.js","sources":["../../../admin/src/hooks/useContentManagerInitData.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport {\n useAuth,\n type Permission,\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../constants/collections';\nimport { HOOKS } from '../constants/hooks';\nimport { AppState, setInitialData } from '../modules/app';\nimport { useTypedDispatch, useTypedSelector } from '../modules/hooks';\nimport { useGetAllContentTypeSettingsQuery } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type {\n ContentType,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\nconst useContentManagerInitData = (): AppState => {\n const { toggleNotification } = useNotification();\n const dispatch = useTypedDispatch();\n const runHookWaterfall = useStrapiApp(\n 'useContentManagerInitData',\n (state) => state.runHookWaterfall\n );\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const checkUserHasPermissions = useAuth(\n 'useContentManagerInitData',\n (state) => state.checkUserHasPermissions\n );\n\n const state = useTypedSelector((state) => state['content-manager'].app);\n\n const initialDataQuery = useGetInitialDataQuery(undefined, {\n /**\n * TODO: remove this when the CTB has been refactored to use redux-toolkit-query\n * and it can invalidate the cache on mutation\n */\n refetchOnMountOrArgChange: true,\n });\n\n useEffect(() => {\n if (initialDataQuery.data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n }\n }, [formatMessage, initialDataQuery.data, notifyStatus]);\n\n useEffect(() => {\n if (initialDataQuery.error) {\n toggleNotification({ type: 'danger', message: formatAPIError(initialDataQuery.error) });\n }\n }, [formatAPIError, initialDataQuery.error, toggleNotification]);\n\n const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();\n\n useEffect(() => {\n if (contentTypeSettingsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentTypeSettingsQuery.error),\n });\n }\n }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);\n\n const formatData = async (\n components: Component[],\n contentTypes: ContentType[],\n fieldSizes: GetInitData.Response['data']['fieldSizes'],\n contentTypeConfigurations: FindContentTypesSettings.Response['data']\n ) => {\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } =\n contentTypes.reduce<{\n collectionType: ContentType[];\n singleType: ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index].length > 0\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index].length > 0\n );\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models: contentTypes,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models: contentTypes,\n });\n\n dispatch(\n setInitialData({\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n components,\n contentTypeSchemas: contentTypes,\n fieldSizes,\n })\n );\n };\n\n useEffect(() => {\n if (initialDataQuery.data && contentTypeSettingsQuery.data) {\n formatData(\n initialDataQuery.data.components,\n initialDataQuery.data.contentTypes,\n initialDataQuery.data.fieldSizes,\n contentTypeSettingsQuery.data\n );\n }\n }, [initialDataQuery.data, contentTypeSettingsQuery.data]);\n\n return { ...state };\n};\n\nconst generateLinks = (\n links: ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind === 'collectionType' ? COLLECTION_TYPES : SINGLE_TYPES}/${\n link.uid\n }`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n"],"names":["MUTATE_COLLECTION_TYPES_LINKS","MUTATE_SINGLE_TYPES_LINKS","HOOKS","useContentManagerInitData","toggleNotification","useNotification","dispatch","useTypedDispatch","runHookWaterfall","useStrapiApp","state","notifyStatus","useNotifyAT","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","checkUserHasPermissions","useAuth","useTypedSelector","app","initialDataQuery","useGetInitialDataQuery","undefined","refetchOnMountOrArgChange","useEffect","data","id","defaultMessage","error","type","message","contentTypeSettingsQuery","useGetAllContentTypeSettingsQuery","formatData","components","contentTypes","fieldSizes","contentTypeConfigurations","collectionType","collectionTypeLinks","singleType","singleTypeLinks","reduce","acc","model","kind","push","collectionTypeSectionLinks","generateLinks","singleTypeSectionLinks","collectionTypeLinksPermissions","Promise","all","map","permissions","authorizedCollectionTypeLinks","filter","_","index","length","singleTypeLinksPermissions","authorizedSingleTypeLinks","ctLinks","models","stLinks","setInitialData","contentTypeSchemas","links","configurations","link","isDisplayed","collectionTypesPermissions","action","subject","uid","singleTypesPermissions","currentContentTypeConfig","find","search","searchParams","page","pageSize","settings","sort","defaultSortBy","defaultSortOrder","stringify","encode","title","info","displayName","to","COLLECTION_TYPES","SINGLE_TYPES","name"],"mappings":"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"}
1
+ {"version":3,"file":"useContentManagerInitData.js","sources":["../../../admin/src/hooks/useContentManagerInitData.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport {\n useAuth,\n type Permission,\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../constants/collections';\nimport { HOOKS } from '../constants/hooks';\nimport { AppState, setInitialData } from '../modules/app';\nimport { useTypedDispatch, useTypedSelector } from '../modules/hooks';\nimport { useGetAllContentTypeSettingsQuery } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type {\n ContentType,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\nconst useContentManagerInitData = (): AppState => {\n const { toggleNotification } = useNotification();\n const dispatch = useTypedDispatch();\n const runHookWaterfall = useStrapiApp(\n 'useContentManagerInitData',\n (state) => state.runHookWaterfall\n );\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const checkUserHasPermissions = useAuth(\n 'useContentManagerInitData',\n (state) => state.checkUserHasPermissions\n );\n\n const state = useTypedSelector((state) => state['content-manager'].app);\n\n const initialDataQuery = useGetInitialDataQuery(undefined, {\n /**\n * TODO: remove this when the CTB has been refactored to use redux-toolkit-query\n * and it can invalidate the cache on mutation\n */\n refetchOnMountOrArgChange: true,\n });\n\n useEffect(() => {\n if (initialDataQuery.data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n }\n }, [formatMessage, initialDataQuery.data, notifyStatus]);\n\n useEffect(() => {\n if (initialDataQuery.error) {\n toggleNotification({ type: 'danger', message: formatAPIError(initialDataQuery.error) });\n }\n }, [formatAPIError, initialDataQuery.error, toggleNotification]);\n\n const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();\n\n useEffect(() => {\n if (contentTypeSettingsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentTypeSettingsQuery.error),\n });\n }\n }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);\n\n const formatData = async (\n components: Component[],\n contentTypes: ContentType[],\n fieldSizes: GetInitData.Response['data']['fieldSizes'],\n contentTypeConfigurations: FindContentTypesSettings.Response['data']\n ) => {\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } =\n contentTypes.reduce<{\n collectionType: ContentType[];\n singleType: ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index].length > 0\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index].length > 0\n );\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models: contentTypes,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models: contentTypes,\n });\n\n dispatch(\n setInitialData({\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n components,\n contentTypeSchemas: contentTypes,\n fieldSizes,\n })\n );\n };\n\n useEffect(() => {\n if (initialDataQuery.data && contentTypeSettingsQuery.data) {\n formatData(\n initialDataQuery.data.components,\n initialDataQuery.data.contentTypes,\n initialDataQuery.data.fieldSizes,\n contentTypeSettingsQuery.data\n );\n }\n }, [initialDataQuery.data, contentTypeSettingsQuery.data]);\n\n return { ...state };\n};\n\nconst generateLinks = (\n links: ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind === 'collectionType' ? COLLECTION_TYPES : SINGLE_TYPES}/${\n link.uid\n }`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n"],"names":["MUTATE_COLLECTION_TYPES_LINKS","MUTATE_SINGLE_TYPES_LINKS","HOOKS","useContentManagerInitData","toggleNotification","useNotification","dispatch","useTypedDispatch","runHookWaterfall","useStrapiApp","state","notifyStatus","useNotifyAT","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","checkUserHasPermissions","useAuth","useTypedSelector","app","initialDataQuery","useGetInitialDataQuery","undefined","refetchOnMountOrArgChange","useEffect","data","id","defaultMessage","error","type","message","contentTypeSettingsQuery","useGetAllContentTypeSettingsQuery","formatData","components","contentTypes","fieldSizes","contentTypeConfigurations","collectionType","collectionTypeLinks","singleType","singleTypeLinks","reduce","acc","model","kind","push","collectionTypeSectionLinks","generateLinks","singleTypeSectionLinks","collectionTypeLinksPermissions","Promise","all","map","permissions","authorizedCollectionTypeLinks","filter","_","index","length","singleTypeLinksPermissions","authorizedSingleTypeLinks","ctLinks","models","stLinks","setInitialData","contentTypeSchemas","links","configurations","link","isDisplayed","collectionTypesPermissions","action","subject","uid","singleTypesPermissions","currentContentTypeConfig","find","search","searchParams","page","pageSize","settings","sort","defaultSortBy","defaultSortOrder","stringify","encode","title","info","displayName","to","COLLECTION_TYPES","SINGLE_TYPES","name"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useContentManagerInitData.mjs","sources":["../../../admin/src/hooks/useContentManagerInitData.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport {\n useAuth,\n type Permission,\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../constants/collections';\nimport { HOOKS } from '../constants/hooks';\nimport { AppState, setInitialData } from '../modules/app';\nimport { useTypedDispatch, useTypedSelector } from '../modules/hooks';\nimport { useGetAllContentTypeSettingsQuery } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type {\n ContentType,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\nconst useContentManagerInitData = (): AppState => {\n const { toggleNotification } = useNotification();\n const dispatch = useTypedDispatch();\n const runHookWaterfall = useStrapiApp(\n 'useContentManagerInitData',\n (state) => state.runHookWaterfall\n );\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const checkUserHasPermissions = useAuth(\n 'useContentManagerInitData',\n (state) => state.checkUserHasPermissions\n );\n\n const state = useTypedSelector((state) => state['content-manager'].app);\n\n const initialDataQuery = useGetInitialDataQuery(undefined, {\n /**\n * TODO: remove this when the CTB has been refactored to use redux-toolkit-query\n * and it can invalidate the cache on mutation\n */\n refetchOnMountOrArgChange: true,\n });\n\n useEffect(() => {\n if (initialDataQuery.data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n }\n }, [formatMessage, initialDataQuery.data, notifyStatus]);\n\n useEffect(() => {\n if (initialDataQuery.error) {\n toggleNotification({ type: 'danger', message: formatAPIError(initialDataQuery.error) });\n }\n }, [formatAPIError, initialDataQuery.error, toggleNotification]);\n\n const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();\n\n useEffect(() => {\n if (contentTypeSettingsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentTypeSettingsQuery.error),\n });\n }\n }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);\n\n const formatData = async (\n components: Component[],\n contentTypes: ContentType[],\n fieldSizes: GetInitData.Response['data']['fieldSizes'],\n contentTypeConfigurations: FindContentTypesSettings.Response['data']\n ) => {\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } =\n contentTypes.reduce<{\n collectionType: ContentType[];\n singleType: ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index].length > 0\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index].length > 0\n );\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models: contentTypes,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models: contentTypes,\n });\n\n dispatch(\n setInitialData({\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n components,\n contentTypeSchemas: contentTypes,\n fieldSizes,\n })\n );\n };\n\n useEffect(() => {\n if (initialDataQuery.data && contentTypeSettingsQuery.data) {\n formatData(\n initialDataQuery.data.components,\n initialDataQuery.data.contentTypes,\n initialDataQuery.data.fieldSizes,\n contentTypeSettingsQuery.data\n );\n }\n }, [initialDataQuery.data, contentTypeSettingsQuery.data]);\n\n return { ...state };\n};\n\nconst generateLinks = (\n links: ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind === 'collectionType' ? COLLECTION_TYPES : SINGLE_TYPES}/${\n link.uid\n }`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n"],"names":["MUTATE_COLLECTION_TYPES_LINKS","MUTATE_SINGLE_TYPES_LINKS","HOOKS","useContentManagerInitData","toggleNotification","useNotification","dispatch","useTypedDispatch","runHookWaterfall","useStrapiApp","state","notifyStatus","useNotifyAT","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","checkUserHasPermissions","useAuth","useTypedSelector","app","initialDataQuery","useGetInitialDataQuery","undefined","refetchOnMountOrArgChange","useEffect","data","id","defaultMessage","error","type","message","contentTypeSettingsQuery","useGetAllContentTypeSettingsQuery","formatData","components","contentTypes","fieldSizes","contentTypeConfigurations","collectionType","collectionTypeLinks","singleType","singleTypeLinks","reduce","acc","model","kind","push","collectionTypeSectionLinks","generateLinks","singleTypeSectionLinks","collectionTypeLinksPermissions","Promise","all","map","permissions","authorizedCollectionTypeLinks","filter","_","index","length","singleTypeLinksPermissions","authorizedSingleTypeLinks","ctLinks","models","stLinks","setInitialData","contentTypeSchemas","links","configurations","link","isDisplayed","collectionTypesPermissions","action","subject","uid","singleTypesPermissions","currentContentTypeConfig","find","search","searchParams","page","pageSize","settings","sort","defaultSortBy","defaultSortOrder","stringify","encode","title","info","displayName","to","COLLECTION_TYPES","SINGLE_TYPES","name"],"mappings":"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"}
1
+ {"version":3,"file":"useContentManagerInitData.mjs","sources":["../../../admin/src/hooks/useContentManagerInitData.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport {\n useAuth,\n type Permission,\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../constants/collections';\nimport { HOOKS } from '../constants/hooks';\nimport { AppState, setInitialData } from '../modules/app';\nimport { useTypedDispatch, useTypedSelector } from '../modules/hooks';\nimport { useGetAllContentTypeSettingsQuery } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type {\n ContentType,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\nconst useContentManagerInitData = (): AppState => {\n const { toggleNotification } = useNotification();\n const dispatch = useTypedDispatch();\n const runHookWaterfall = useStrapiApp(\n 'useContentManagerInitData',\n (state) => state.runHookWaterfall\n );\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const checkUserHasPermissions = useAuth(\n 'useContentManagerInitData',\n (state) => state.checkUserHasPermissions\n );\n\n const state = useTypedSelector((state) => state['content-manager'].app);\n\n const initialDataQuery = useGetInitialDataQuery(undefined, {\n /**\n * TODO: remove this when the CTB has been refactored to use redux-toolkit-query\n * and it can invalidate the cache on mutation\n */\n refetchOnMountOrArgChange: true,\n });\n\n useEffect(() => {\n if (initialDataQuery.data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n }\n }, [formatMessage, initialDataQuery.data, notifyStatus]);\n\n useEffect(() => {\n if (initialDataQuery.error) {\n toggleNotification({ type: 'danger', message: formatAPIError(initialDataQuery.error) });\n }\n }, [formatAPIError, initialDataQuery.error, toggleNotification]);\n\n const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();\n\n useEffect(() => {\n if (contentTypeSettingsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentTypeSettingsQuery.error),\n });\n }\n }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);\n\n const formatData = async (\n components: Component[],\n contentTypes: ContentType[],\n fieldSizes: GetInitData.Response['data']['fieldSizes'],\n contentTypeConfigurations: FindContentTypesSettings.Response['data']\n ) => {\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } =\n contentTypes.reduce<{\n collectionType: ContentType[];\n singleType: ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index].length > 0\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index].length > 0\n );\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models: contentTypes,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models: contentTypes,\n });\n\n dispatch(\n setInitialData({\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n components,\n contentTypeSchemas: contentTypes,\n fieldSizes,\n })\n );\n };\n\n useEffect(() => {\n if (initialDataQuery.data && contentTypeSettingsQuery.data) {\n formatData(\n initialDataQuery.data.components,\n initialDataQuery.data.contentTypes,\n initialDataQuery.data.fieldSizes,\n contentTypeSettingsQuery.data\n );\n }\n }, [initialDataQuery.data, contentTypeSettingsQuery.data]);\n\n return { ...state };\n};\n\nconst generateLinks = (\n links: ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind === 'collectionType' ? COLLECTION_TYPES : SINGLE_TYPES}/${\n link.uid\n }`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n"],"names":["MUTATE_COLLECTION_TYPES_LINKS","MUTATE_SINGLE_TYPES_LINKS","HOOKS","useContentManagerInitData","toggleNotification","useNotification","dispatch","useTypedDispatch","runHookWaterfall","useStrapiApp","state","notifyStatus","useNotifyAT","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","checkUserHasPermissions","useAuth","useTypedSelector","app","initialDataQuery","useGetInitialDataQuery","undefined","refetchOnMountOrArgChange","useEffect","data","id","defaultMessage","error","type","message","contentTypeSettingsQuery","useGetAllContentTypeSettingsQuery","formatData","components","contentTypes","fieldSizes","contentTypeConfigurations","collectionType","collectionTypeLinks","singleType","singleTypeLinks","reduce","acc","model","kind","push","collectionTypeSectionLinks","generateLinks","singleTypeSectionLinks","collectionTypeLinksPermissions","Promise","all","map","permissions","authorizedCollectionTypeLinks","filter","_","index","length","singleTypeLinksPermissions","authorizedSingleTypeLinks","ctLinks","models","stLinks","setInitialData","contentTypeSchemas","links","configurations","link","isDisplayed","collectionTypesPermissions","action","subject","uid","singleTypesPermissions","currentContentTypeConfig","find","search","searchParams","page","pageSize","settings","sort","defaultSortBy","defaultSortOrder","stringify","encode","title","info","displayName","to","COLLECTION_TYPES","SINGLE_TYPES","name"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useContentTypeSchema.js","sources":["../../../admin/src/hooks/useContentTypeSchema.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\n\nimport { useGetInitialDataQuery } from '../services/init';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * useContentTypeSchema\n * -----------------------------------------------------------------------------------------------*/\ntype ComponentsDictionary = Record<string, Component>;\n\n/**\n * @internal\n * @description Given a model UID, return the schema and the schemas\n * of the associated components within said model's schema. A wrapper\n * implementation around the `useGetInitialDataQuery` with a unique\n * `selectFromResult` function to memoize the calculation.\n *\n * If no model is provided, the hook will return all the schemas.\n */\nconst useContentTypeSchema = (model?: string) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const { data, error, isLoading, isFetching } = useGetInitialDataQuery(undefined);\n\n const { components, contentType, contentTypes } = React.useMemo(() => {\n const contentType = data?.contentTypes.find((ct) => ct.uid === model);\n\n const componentsByKey = data?.components.reduce<ComponentsDictionary>((acc, component) => {\n acc[component.uid] = component;\n\n return acc;\n }, {});\n\n const components = extractContentTypeComponents(contentType?.attributes, componentsByKey);\n\n return {\n components: Object.keys(components).length === 0 ? undefined : components,\n contentType,\n contentTypes: data?.contentTypes ?? [],\n };\n }, [model, data]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError]);\n\n return {\n // This must be memoized to avoid inifiinite re-renders where the empty object is different everytime.\n components: React.useMemo(() => components ?? {}, [components]),\n schema: contentType,\n schemas: contentTypes,\n isLoading: isLoading || isFetching,\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * extractContentTypeComponents\n * -----------------------------------------------------------------------------------------------*/\n/**\n * @internal\n * @description Extracts the components used in a content type's attributes recursively.\n */\nconst extractContentTypeComponents = (\n attributes: ContentType['attributes'] = {},\n allComponents: ComponentsDictionary = {}\n): ComponentsDictionary => {\n const getComponents = (attributes: Schema.Attribute.AnyAttribute[]) => {\n return attributes.reduce<string[]>((acc, attribute) => {\n /**\n * If the attribute is a component or dynamiczone, we need to recursively\n * extract the component UIDs from its attributes.\n */\n if (attribute.type === 'component') {\n const componentAttributes = Object.values(\n allComponents[attribute.component]?.attributes ?? {}\n );\n\n acc.push(attribute.component, ...getComponents(componentAttributes));\n } else if (attribute.type === 'dynamiczone') {\n acc.push(\n ...attribute.components,\n /**\n * Dynamic zones have an array of components, so we flatMap over them\n * performing the same search as above.\n */\n ...attribute.components.flatMap((componentUid) => {\n const componentAttributes = Object.values(\n allComponents[componentUid]?.attributes ?? {}\n );\n\n return getComponents(componentAttributes);\n })\n );\n }\n\n return acc;\n }, []);\n };\n\n const componentUids = getComponents(Object.values(attributes));\n\n const uniqueComponentUids = [...new Set(componentUids)];\n\n const componentsByKey = uniqueComponentUids.reduce<ComponentsDictionary>((acc, uid) => {\n acc[uid] = allComponents[uid];\n\n return acc;\n }, {});\n\n return componentsByKey;\n};\n\nexport { useContentTypeSchema, extractContentTypeComponents };\nexport type { ComponentsDictionary };\n"],"names":["useContentTypeSchema","model","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","data","error","isLoading","isFetching","useGetInitialDataQuery","undefined","components","contentType","contentTypes","React","useMemo","find","ct","uid","componentsByKey","reduce","acc","component","extractContentTypeComponents","attributes","Object","keys","length","useEffect","type","message","schema","schemas","allComponents","getComponents","attribute","componentAttributes","values","push","flatMap","componentUid","componentUids","uniqueComponentUids","Set"],"mappings":"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"}
1
+ {"version":3,"file":"useContentTypeSchema.js","sources":["../../../admin/src/hooks/useContentTypeSchema.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\n\nimport { useGetInitialDataQuery } from '../services/init';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * useContentTypeSchema\n * -----------------------------------------------------------------------------------------------*/\ntype ComponentsDictionary = Record<string, Component>;\n\n/**\n * @internal\n * @description Given a model UID, return the schema and the schemas\n * of the associated components within said model's schema. A wrapper\n * implementation around the `useGetInitialDataQuery` with a unique\n * `selectFromResult` function to memoize the calculation.\n *\n * If no model is provided, the hook will return all the schemas.\n */\nconst useContentTypeSchema = (model?: string) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const { data, error, isLoading, isFetching } = useGetInitialDataQuery(undefined);\n\n const { components, contentType, contentTypes } = React.useMemo(() => {\n const contentType = data?.contentTypes.find((ct) => ct.uid === model);\n\n const componentsByKey = data?.components.reduce<ComponentsDictionary>((acc, component) => {\n acc[component.uid] = component;\n\n return acc;\n }, {});\n\n const components = extractContentTypeComponents(contentType?.attributes, componentsByKey);\n\n return {\n components: Object.keys(components).length === 0 ? undefined : components,\n contentType,\n contentTypes: data?.contentTypes ?? [],\n };\n }, [model, data]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError]);\n\n return {\n // This must be memoized to avoid inifiinite re-renders where the empty object is different everytime.\n components: React.useMemo(() => components ?? {}, [components]),\n schema: contentType,\n schemas: contentTypes,\n isLoading: isLoading || isFetching,\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * extractContentTypeComponents\n * -----------------------------------------------------------------------------------------------*/\n/**\n * @internal\n * @description Extracts the components used in a content type's attributes recursively.\n */\nconst extractContentTypeComponents = (\n attributes: ContentType['attributes'] = {},\n allComponents: ComponentsDictionary = {}\n): ComponentsDictionary => {\n const getComponents = (attributes: Schema.Attribute.AnyAttribute[]) => {\n return attributes.reduce<string[]>((acc, attribute) => {\n /**\n * If the attribute is a component or dynamiczone, we need to recursively\n * extract the component UIDs from its attributes.\n */\n if (attribute.type === 'component') {\n const componentAttributes = Object.values(\n allComponents[attribute.component]?.attributes ?? {}\n );\n\n acc.push(attribute.component, ...getComponents(componentAttributes));\n } else if (attribute.type === 'dynamiczone') {\n acc.push(\n ...attribute.components,\n /**\n * Dynamic zones have an array of components, so we flatMap over them\n * performing the same search as above.\n */\n ...attribute.components.flatMap((componentUid) => {\n const componentAttributes = Object.values(\n allComponents[componentUid]?.attributes ?? {}\n );\n\n return getComponents(componentAttributes);\n })\n );\n }\n\n return acc;\n }, []);\n };\n\n const componentUids = getComponents(Object.values(attributes));\n\n const uniqueComponentUids = [...new Set(componentUids)];\n\n const componentsByKey = uniqueComponentUids.reduce<ComponentsDictionary>((acc, uid) => {\n acc[uid] = allComponents[uid];\n\n return acc;\n }, {});\n\n return componentsByKey;\n};\n\nexport { useContentTypeSchema, extractContentTypeComponents };\nexport type { ComponentsDictionary };\n"],"names":["useContentTypeSchema","model","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","data","error","isLoading","isFetching","useGetInitialDataQuery","undefined","components","contentType","contentTypes","React","useMemo","find","ct","uid","componentsByKey","reduce","acc","component","extractContentTypeComponents","attributes","Object","keys","length","useEffect","type","message","schema","schemas","allComponents","getComponents","attribute","componentAttributes","values","push","flatMap","componentUid","componentUids","uniqueComponentUids","Set"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useContentTypeSchema.mjs","sources":["../../../admin/src/hooks/useContentTypeSchema.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\n\nimport { useGetInitialDataQuery } from '../services/init';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * useContentTypeSchema\n * -----------------------------------------------------------------------------------------------*/\ntype ComponentsDictionary = Record<string, Component>;\n\n/**\n * @internal\n * @description Given a model UID, return the schema and the schemas\n * of the associated components within said model's schema. A wrapper\n * implementation around the `useGetInitialDataQuery` with a unique\n * `selectFromResult` function to memoize the calculation.\n *\n * If no model is provided, the hook will return all the schemas.\n */\nconst useContentTypeSchema = (model?: string) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const { data, error, isLoading, isFetching } = useGetInitialDataQuery(undefined);\n\n const { components, contentType, contentTypes } = React.useMemo(() => {\n const contentType = data?.contentTypes.find((ct) => ct.uid === model);\n\n const componentsByKey = data?.components.reduce<ComponentsDictionary>((acc, component) => {\n acc[component.uid] = component;\n\n return acc;\n }, {});\n\n const components = extractContentTypeComponents(contentType?.attributes, componentsByKey);\n\n return {\n components: Object.keys(components).length === 0 ? undefined : components,\n contentType,\n contentTypes: data?.contentTypes ?? [],\n };\n }, [model, data]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError]);\n\n return {\n // This must be memoized to avoid inifiinite re-renders where the empty object is different everytime.\n components: React.useMemo(() => components ?? {}, [components]),\n schema: contentType,\n schemas: contentTypes,\n isLoading: isLoading || isFetching,\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * extractContentTypeComponents\n * -----------------------------------------------------------------------------------------------*/\n/**\n * @internal\n * @description Extracts the components used in a content type's attributes recursively.\n */\nconst extractContentTypeComponents = (\n attributes: ContentType['attributes'] = {},\n allComponents: ComponentsDictionary = {}\n): ComponentsDictionary => {\n const getComponents = (attributes: Schema.Attribute.AnyAttribute[]) => {\n return attributes.reduce<string[]>((acc, attribute) => {\n /**\n * If the attribute is a component or dynamiczone, we need to recursively\n * extract the component UIDs from its attributes.\n */\n if (attribute.type === 'component') {\n const componentAttributes = Object.values(\n allComponents[attribute.component]?.attributes ?? {}\n );\n\n acc.push(attribute.component, ...getComponents(componentAttributes));\n } else if (attribute.type === 'dynamiczone') {\n acc.push(\n ...attribute.components,\n /**\n * Dynamic zones have an array of components, so we flatMap over them\n * performing the same search as above.\n */\n ...attribute.components.flatMap((componentUid) => {\n const componentAttributes = Object.values(\n allComponents[componentUid]?.attributes ?? {}\n );\n\n return getComponents(componentAttributes);\n })\n );\n }\n\n return acc;\n }, []);\n };\n\n const componentUids = getComponents(Object.values(attributes));\n\n const uniqueComponentUids = [...new Set(componentUids)];\n\n const componentsByKey = uniqueComponentUids.reduce<ComponentsDictionary>((acc, uid) => {\n acc[uid] = allComponents[uid];\n\n return acc;\n }, {});\n\n return componentsByKey;\n};\n\nexport { useContentTypeSchema, extractContentTypeComponents };\nexport type { ComponentsDictionary };\n"],"names":["useContentTypeSchema","model","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","data","error","isLoading","isFetching","useGetInitialDataQuery","undefined","components","contentType","contentTypes","React","useMemo","find","ct","uid","componentsByKey","reduce","acc","component","extractContentTypeComponents","attributes","Object","keys","length","useEffect","type","message","schema","schemas","allComponents","getComponents","attribute","componentAttributes","values","push","flatMap","componentUid","componentUids","uniqueComponentUids","Set"],"mappings":"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"}
1
+ {"version":3,"file":"useContentTypeSchema.mjs","sources":["../../../admin/src/hooks/useContentTypeSchema.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\n\nimport { useGetInitialDataQuery } from '../services/init';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * useContentTypeSchema\n * -----------------------------------------------------------------------------------------------*/\ntype ComponentsDictionary = Record<string, Component>;\n\n/**\n * @internal\n * @description Given a model UID, return the schema and the schemas\n * of the associated components within said model's schema. A wrapper\n * implementation around the `useGetInitialDataQuery` with a unique\n * `selectFromResult` function to memoize the calculation.\n *\n * If no model is provided, the hook will return all the schemas.\n */\nconst useContentTypeSchema = (model?: string) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const { data, error, isLoading, isFetching } = useGetInitialDataQuery(undefined);\n\n const { components, contentType, contentTypes } = React.useMemo(() => {\n const contentType = data?.contentTypes.find((ct) => ct.uid === model);\n\n const componentsByKey = data?.components.reduce<ComponentsDictionary>((acc, component) => {\n acc[component.uid] = component;\n\n return acc;\n }, {});\n\n const components = extractContentTypeComponents(contentType?.attributes, componentsByKey);\n\n return {\n components: Object.keys(components).length === 0 ? undefined : components,\n contentType,\n contentTypes: data?.contentTypes ?? [],\n };\n }, [model, data]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError]);\n\n return {\n // This must be memoized to avoid inifiinite re-renders where the empty object is different everytime.\n components: React.useMemo(() => components ?? {}, [components]),\n schema: contentType,\n schemas: contentTypes,\n isLoading: isLoading || isFetching,\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * extractContentTypeComponents\n * -----------------------------------------------------------------------------------------------*/\n/**\n * @internal\n * @description Extracts the components used in a content type's attributes recursively.\n */\nconst extractContentTypeComponents = (\n attributes: ContentType['attributes'] = {},\n allComponents: ComponentsDictionary = {}\n): ComponentsDictionary => {\n const getComponents = (attributes: Schema.Attribute.AnyAttribute[]) => {\n return attributes.reduce<string[]>((acc, attribute) => {\n /**\n * If the attribute is a component or dynamiczone, we need to recursively\n * extract the component UIDs from its attributes.\n */\n if (attribute.type === 'component') {\n const componentAttributes = Object.values(\n allComponents[attribute.component]?.attributes ?? {}\n );\n\n acc.push(attribute.component, ...getComponents(componentAttributes));\n } else if (attribute.type === 'dynamiczone') {\n acc.push(\n ...attribute.components,\n /**\n * Dynamic zones have an array of components, so we flatMap over them\n * performing the same search as above.\n */\n ...attribute.components.flatMap((componentUid) => {\n const componentAttributes = Object.values(\n allComponents[componentUid]?.attributes ?? {}\n );\n\n return getComponents(componentAttributes);\n })\n );\n }\n\n return acc;\n }, []);\n };\n\n const componentUids = getComponents(Object.values(attributes));\n\n const uniqueComponentUids = [...new Set(componentUids)];\n\n const componentsByKey = uniqueComponentUids.reduce<ComponentsDictionary>((acc, uid) => {\n acc[uid] = allComponents[uid];\n\n return acc;\n }, {});\n\n return componentsByKey;\n};\n\nexport { useContentTypeSchema, extractContentTypeComponents };\nexport type { ComponentsDictionary };\n"],"names":["useContentTypeSchema","model","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","data","error","isLoading","isFetching","useGetInitialDataQuery","undefined","components","contentType","contentTypes","React","useMemo","find","ct","uid","componentsByKey","reduce","acc","component","extractContentTypeComponents","attributes","Object","keys","length","useEffect","type","message","schema","schemas","allComponents","getComponents","attribute","componentAttributes","values","push","flatMap","componentUid","componentUids","uniqueComponentUids","Set"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDebounce.js","sources":["../../../admin/src/hooks/useDebounce.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","handler","setTimeout","clearTimeout"],"mappings":";;;;AAEO,SAASA,WAAAA,CAAoBC,KAAa,EAAEC,KAAa,EAAA;AAC9D,IAAA,MAAM,CAACC,cAAAA,EAAgBC,iBAAkB,CAAA,GAAGC,cAASJ,CAAAA,KAAAA,CAAAA;IAErDK,eAAU,CAAA,IAAA;AACR,QAAA,MAAMC,UAAUC,UAAW,CAAA,IAAA;YACzBJ,iBAAkBH,CAAAA,KAAAA,CAAAA;SACjBC,EAAAA,KAAAA,CAAAA;QAEH,OAAO,IAAA;YACLO,YAAaF,CAAAA,OAAAA,CAAAA;AACf,SAAA;KACC,EAAA;AAACN,QAAAA,KAAAA;AAAOC,QAAAA;AAAM,KAAA,CAAA;IAEjB,OAAOC,cAAAA;AACT;;;;"}
1
+ {"version":3,"file":"useDebounce.js","sources":["../../../admin/src/hooks/useDebounce.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","handler","setTimeout","clearTimeout"],"mappings":";;;;AAEO,SAASA,WAAAA,CAAoBC,KAAa,EAAEC,KAAa,EAAA;AAC9D,IAAA,MAAM,CAACC,cAAAA,EAAgBC,iBAAAA,CAAkB,GAAGC,cAAAA,CAASJ,KAAAA,CAAAA;IAErDK,eAAAA,CAAU,IAAA;AACR,QAAA,MAAMC,UAAUC,UAAAA,CAAW,IAAA;YACzBJ,iBAAAA,CAAkBH,KAAAA,CAAAA;QACpB,CAAA,EAAGC,KAAAA,CAAAA;QAEH,OAAO,IAAA;YACLO,YAAAA,CAAaF,OAAAA,CAAAA;AACf,QAAA,CAAA;IACF,CAAA,EAAG;AAACN,QAAAA,KAAAA;AAAOC,QAAAA;AAAM,KAAA,CAAA;IAEjB,OAAOC,cAAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDebounce.mjs","sources":["../../../admin/src/hooks/useDebounce.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","handler","setTimeout","clearTimeout"],"mappings":";;AAEO,SAASA,WAAAA,CAAoBC,KAAa,EAAEC,KAAa,EAAA;AAC9D,IAAA,MAAM,CAACC,cAAAA,EAAgBC,iBAAkB,CAAA,GAAGC,QAASJ,CAAAA,KAAAA,CAAAA;IAErDK,SAAU,CAAA,IAAA;AACR,QAAA,MAAMC,UAAUC,UAAW,CAAA,IAAA;YACzBJ,iBAAkBH,CAAAA,KAAAA,CAAAA;SACjBC,EAAAA,KAAAA,CAAAA;QAEH,OAAO,IAAA;YACLO,YAAaF,CAAAA,OAAAA,CAAAA;AACf,SAAA;KACC,EAAA;AAACN,QAAAA,KAAAA;AAAOC,QAAAA;AAAM,KAAA,CAAA;IAEjB,OAAOC,cAAAA;AACT;;;;"}
1
+ {"version":3,"file":"useDebounce.mjs","sources":["../../../admin/src/hooks/useDebounce.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","handler","setTimeout","clearTimeout"],"mappings":";;AAEO,SAASA,WAAAA,CAAoBC,KAAa,EAAEC,KAAa,EAAA;AAC9D,IAAA,MAAM,CAACC,cAAAA,EAAgBC,iBAAAA,CAAkB,GAAGC,QAAAA,CAASJ,KAAAA,CAAAA;IAErDK,SAAAA,CAAU,IAAA;AACR,QAAA,MAAMC,UAAUC,UAAAA,CAAW,IAAA;YACzBJ,iBAAAA,CAAkBH,KAAAA,CAAAA;QACpB,CAAA,EAAGC,KAAAA,CAAAA;QAEH,OAAO,IAAA;YACLO,YAAAA,CAAaF,OAAAA,CAAAA;AACf,QAAA,CAAA;IACF,CAAA,EAAG;AAACN,QAAAA,KAAAA;AAAOC,QAAAA;AAAM,KAAA,CAAA;IAEjB,OAAOC,cAAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDocument.js","sources":["../../../admin/src/hooks/useDocument.ts"],"sourcesContent":["/**\n * This hook doesn't use a context provider because we fetch directly from the server,\n * this sounds expensive but actually, it's really not. Because we have redux-toolkit-query\n * being a cache layer so if nothing invalidates the cache, we don't fetch again.\n */\n\nimport * as React from 'react';\n\nimport {\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n FormErrors,\n getYupValidationErrors,\n useForm,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\nimport { ValidationError } from 'yup';\n\nimport { SINGLE_TYPES } from '../constants/collections';\nimport { type AnyData, transformDocument } from '../pages/EditView/utils/data';\nimport { createDefaultForm } from '../pages/EditView/utils/forms';\nimport { useGetDocumentQuery } from '../services/documents';\nimport { buildValidParams } from '../utils/api';\nimport { createYupSchema } from '../utils/validation';\n\nimport { useContentTypeSchema, ComponentsDictionary } from './useContentTypeSchema';\nimport { useDocumentLayout } from './useDocumentLayout';\n\nimport type { FindOne } from '../../../shared/contracts/collection-types';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Modules } from '@strapi/types';\n\ninterface UseDocumentArgs {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n}\n\ntype UseDocumentOpts = Parameters<typeof useGetDocumentQuery>[1];\n\ntype Document = FindOne.Response['data'];\n\ntype Schema = ContentType;\n\ntype UseDocument = (\n args: UseDocumentArgs,\n opts?: UseDocumentOpts\n) => {\n /**\n * These are the schemas of the components used in the content type, organised\n * by their uid.\n */\n components: ComponentsDictionary;\n document?: Document;\n meta?: FindOne.Response['meta'];\n isLoading: boolean;\n /**\n * This is the schema of the content type, it is not the same as the layout.\n */\n schema?: Schema;\n schemas?: Schema[];\n hasError?: boolean;\n refetch: () => void;\n validate: (document: Document) => null | FormErrors;\n /**\n * Get the document's title\n */\n getTitle: (mainField: string) => string;\n /**\n * Get the initial form values for the document\n */\n getInitialFormValues: (isCreatingDocument?: boolean) => AnyData | undefined;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocument\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha\n * @public\n * @description Returns a document based on the model, collection type & id passed as arguments.\n * Also extracts its schema from the redux cache to be used for creating a validation schema.\n * @example\n * ```tsx\n * const { id, model, collectionType } = useParams<{ id: string; model: string; collectionType: string }>();\n *\n * if(!model || !collectionType) return null;\n *\n * const { document, isLoading, validate } = useDocument({ documentId: id, model, collectionType, params: { locale: 'en-GB' } })\n * const { update } = useDocumentActions()\n *\n * const onSubmit = async (document: Document) => {\n * const errors = validate(document);\n *\n * if(errors) {\n * // handle errors\n * }\n *\n * await update({ collectionType, model, id }, document)\n * }\n * ```\n *\n */\nconst useDocument: UseDocument = (args, opts) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n\n const {\n currentData: data,\n isLoading: isLoadingDocument,\n isFetching: isFetchingDocument,\n error,\n refetch,\n } = useGetDocumentQuery(args, {\n ...opts,\n skip: (!args.documentId && args.collectionType !== SINGLE_TYPES) || opts?.skip,\n });\n const document = data?.data;\n const meta = data?.meta;\n\n const {\n components,\n schema,\n schemas,\n isLoading: isLoadingSchema,\n } = useContentTypeSchema(args.model);\n const isSingleType = schema?.kind === 'singleType';\n\n const getTitle = (mainField: string) => {\n // Always use mainField if it's not an id\n if (mainField !== 'id' && document?.[mainField]) {\n return document[mainField];\n }\n\n // When it's a singleType without a mainField, use the contentType displayName\n if (isSingleType && schema?.info.displayName) {\n return schema.info.displayName;\n }\n\n // Otherwise, use a fallback\n return formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n };\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError, args.collectionType]);\n\n const validationSchema = React.useMemo(() => {\n if (!schema) {\n return null;\n }\n\n return createYupSchema(schema.attributes, components);\n }, [schema, components]);\n\n const validate = React.useCallback(\n (document: Modules.Documents.AnyDocument): FormErrors | null => {\n if (!validationSchema) {\n throw new Error(\n 'There is no validation schema generated, this is likely due to the schema not being loaded yet.'\n );\n }\n\n try {\n validationSchema.validateSync(document, { abortEarly: false, strict: true });\n return null;\n } catch (error) {\n if (error instanceof ValidationError) {\n return getYupValidationErrors(error);\n }\n\n throw error;\n }\n },\n [validationSchema]\n );\n\n /**\n * Here we prepare the form for editing, we need to:\n * - remove prohibited fields from the document (passwords | ADD YOURS WHEN THERES A NEW ONE)\n * - swap out count objects on relations for empty arrays\n * - set __temp_key__ on array objects for drag & drop\n *\n * We also prepare the form for new documents, so we need to:\n * - set default values on fields\n */\n const getInitialFormValues = React.useCallback(\n (isCreatingDocument: boolean = false) => {\n if ((!document && !isCreatingDocument && !isSingleType) || !schema) {\n return undefined;\n }\n\n /**\n * Check that we have an ID so we know the\n * document has been created in some way.\n */\n const form = document?.id ? document : createDefaultForm(schema, components);\n\n return transformDocument(schema, components)(form);\n },\n [document, isSingleType, schema, components]\n );\n\n const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;\n const hasError = !!error;\n\n return {\n components,\n document,\n meta,\n isLoading,\n hasError,\n schema,\n schemas,\n validate,\n getTitle,\n getInitialFormValues,\n refetch,\n } satisfies ReturnType<UseDocument>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDoc\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal this hook uses the router to extract the model, collection type & id from the url.\n * therefore, it shouldn't be used outside of the content-manager because it won't work as intended.\n */\nconst useDoc = () => {\n const { id, slug, collectionType, origin } = useParams<{\n id: string;\n origin: string;\n slug: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!slug) {\n throw new Error('Could not find model in url params');\n }\n\n const document = useDocument(\n { documentId: origin || id, model: slug, collectionType, params },\n {\n skip: id === 'create' || (!origin && !id && collectionType !== SINGLE_TYPES),\n }\n );\n\n const returnId = origin || (id === 'create' ? undefined : id);\n\n return {\n collectionType,\n model: slug,\n id: returnId,\n ...document,\n };\n};\n\n/**\n * @public\n * @experimental\n * Content manager context hooks for plugin development.\n * Make sure to use this hook inside the content manager.\n */\nconst useContentManagerContext = () => {\n const {\n collectionType,\n model,\n id,\n components,\n isLoading: isLoadingDoc,\n schema,\n schemas,\n } = useDoc();\n\n const layout = useDocumentLayout(model);\n\n const form = useForm<unknown>('useContentManagerContext', (state) => state);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n const slug = model;\n const isCreatingEntry = id === 'create';\n\n const {} = useContentTypeSchema();\n\n const isLoading = isLoadingDoc || layout.isLoading;\n const error = layout.error;\n\n return {\n error,\n isLoading,\n\n // Base metadata\n model,\n collectionType,\n id,\n slug,\n isCreatingEntry,\n isSingleType,\n hasDraftAndPublish: schema?.options?.draftAndPublish ?? false,\n\n // All schema infos\n components,\n contentType: schema,\n contentTypes: schemas,\n\n // Form state\n form,\n\n // layout infos\n layout,\n };\n};\n\nexport { useDocument, useDoc, useContentManagerContext };\nexport type { UseDocument, UseDocumentArgs, Document, Schema, ComponentsDictionary };\n"],"names":["useDocument","args","opts","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","currentData","data","isLoading","isLoadingDocument","isFetching","isFetchingDocument","error","refetch","useGetDocumentQuery","skip","documentId","collectionType","SINGLE_TYPES","document","meta","components","schema","schemas","isLoadingSchema","useContentTypeSchema","model","isSingleType","kind","getTitle","mainField","info","displayName","id","defaultMessage","React","useEffect","type","message","validationSchema","useMemo","createYupSchema","attributes","validate","useCallback","Error","validateSync","abortEarly","strict","ValidationError","getYupValidationErrors","getInitialFormValues","isCreatingDocument","undefined","form","createDefaultForm","transformDocument","hasError","useDoc","slug","origin","useParams","query","useQueryParams","params","buildValidParams","returnId","useContentManagerContext","isLoadingDoc","layout","useDocumentLayout","useForm","state","isCreatingEntry","hasDraftAndPublish","options","draftAndPublish","contentType","contentTypes"],"mappings":"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"}
1
+ {"version":3,"file":"useDocument.js","sources":["../../../admin/src/hooks/useDocument.ts"],"sourcesContent":["/**\n * This hook doesn't use a context provider because we fetch directly from the server,\n * this sounds expensive but actually, it's really not. Because we have redux-toolkit-query\n * being a cache layer so if nothing invalidates the cache, we don't fetch again.\n */\n\nimport * as React from 'react';\n\nimport {\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n FormErrors,\n getYupValidationErrors,\n useForm,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\nimport { ValidationError } from 'yup';\n\nimport { SINGLE_TYPES } from '../constants/collections';\nimport { type AnyData, transformDocument } from '../pages/EditView/utils/data';\nimport { createDefaultForm } from '../pages/EditView/utils/forms';\nimport { useGetDocumentQuery } from '../services/documents';\nimport { buildValidParams } from '../utils/api';\nimport { createYupSchema } from '../utils/validation';\n\nimport { useContentTypeSchema, ComponentsDictionary } from './useContentTypeSchema';\nimport { useDocumentLayout } from './useDocumentLayout';\n\nimport type { FindOne } from '../../../shared/contracts/collection-types';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Modules } from '@strapi/types';\n\ninterface UseDocumentArgs {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n}\n\ntype UseDocumentOpts = Parameters<typeof useGetDocumentQuery>[1];\n\ntype Document = FindOne.Response['data'];\n\ntype Schema = ContentType;\n\ntype UseDocument = (\n args: UseDocumentArgs,\n opts?: UseDocumentOpts\n) => {\n /**\n * These are the schemas of the components used in the content type, organised\n * by their uid.\n */\n components: ComponentsDictionary;\n document?: Document;\n meta?: FindOne.Response['meta'];\n isLoading: boolean;\n /**\n * This is the schema of the content type, it is not the same as the layout.\n */\n schema?: Schema;\n schemas?: Schema[];\n hasError?: boolean;\n refetch: () => void;\n validate: (document: Document) => null | FormErrors;\n /**\n * Get the document's title\n */\n getTitle: (mainField: string) => string;\n /**\n * Get the initial form values for the document\n */\n getInitialFormValues: (isCreatingDocument?: boolean) => AnyData | undefined;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocument\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha\n * @public\n * @description Returns a document based on the model, collection type & id passed as arguments.\n * Also extracts its schema from the redux cache to be used for creating a validation schema.\n * @example\n * ```tsx\n * const { id, model, collectionType } = useParams<{ id: string; model: string; collectionType: string }>();\n *\n * if(!model || !collectionType) return null;\n *\n * const { document, isLoading, validate } = useDocument({ documentId: id, model, collectionType, params: { locale: 'en-GB' } })\n * const { update } = useDocumentActions()\n *\n * const onSubmit = async (document: Document) => {\n * const errors = validate(document);\n *\n * if(errors) {\n * // handle errors\n * }\n *\n * await update({ collectionType, model, id }, document)\n * }\n * ```\n *\n */\nconst useDocument: UseDocument = (args, opts) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n\n const {\n currentData: data,\n isLoading: isLoadingDocument,\n isFetching: isFetchingDocument,\n error,\n refetch,\n } = useGetDocumentQuery(args, {\n ...opts,\n skip: (!args.documentId && args.collectionType !== SINGLE_TYPES) || opts?.skip,\n });\n const document = data?.data;\n const meta = data?.meta;\n\n const {\n components,\n schema,\n schemas,\n isLoading: isLoadingSchema,\n } = useContentTypeSchema(args.model);\n const isSingleType = schema?.kind === 'singleType';\n\n const getTitle = (mainField: string) => {\n // Always use mainField if it's not an id\n if (mainField !== 'id' && document?.[mainField]) {\n return document[mainField];\n }\n\n // When it's a singleType without a mainField, use the contentType displayName\n if (isSingleType && schema?.info.displayName) {\n return schema.info.displayName;\n }\n\n // Otherwise, use a fallback\n return formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n };\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError, args.collectionType]);\n\n const validationSchema = React.useMemo(() => {\n if (!schema) {\n return null;\n }\n\n return createYupSchema(schema.attributes, components);\n }, [schema, components]);\n\n const validate = React.useCallback(\n (document: Modules.Documents.AnyDocument): FormErrors | null => {\n if (!validationSchema) {\n throw new Error(\n 'There is no validation schema generated, this is likely due to the schema not being loaded yet.'\n );\n }\n\n try {\n validationSchema.validateSync(document, { abortEarly: false, strict: true });\n return null;\n } catch (error) {\n if (error instanceof ValidationError) {\n return getYupValidationErrors(error);\n }\n\n throw error;\n }\n },\n [validationSchema]\n );\n\n /**\n * Here we prepare the form for editing, we need to:\n * - remove prohibited fields from the document (passwords | ADD YOURS WHEN THERES A NEW ONE)\n * - swap out count objects on relations for empty arrays\n * - set __temp_key__ on array objects for drag & drop\n *\n * We also prepare the form for new documents, so we need to:\n * - set default values on fields\n */\n const getInitialFormValues = React.useCallback(\n (isCreatingDocument: boolean = false) => {\n if ((!document && !isCreatingDocument && !isSingleType) || !schema) {\n return undefined;\n }\n\n /**\n * Check that we have an ID so we know the\n * document has been created in some way.\n */\n const form = document?.id ? document : createDefaultForm(schema, components);\n\n return transformDocument(schema, components)(form);\n },\n [document, isSingleType, schema, components]\n );\n\n const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;\n const hasError = !!error;\n\n return {\n components,\n document,\n meta,\n isLoading,\n hasError,\n schema,\n schemas,\n validate,\n getTitle,\n getInitialFormValues,\n refetch,\n } satisfies ReturnType<UseDocument>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDoc\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal this hook uses the router to extract the model, collection type & id from the url.\n * therefore, it shouldn't be used outside of the content-manager because it won't work as intended.\n */\nconst useDoc = () => {\n const { id, slug, collectionType, origin } = useParams<{\n id: string;\n origin: string;\n slug: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!slug) {\n throw new Error('Could not find model in url params');\n }\n\n const document = useDocument(\n { documentId: origin || id, model: slug, collectionType, params },\n {\n skip: id === 'create' || (!origin && !id && collectionType !== SINGLE_TYPES),\n }\n );\n\n const returnId = origin || (id === 'create' ? undefined : id);\n\n return {\n collectionType,\n model: slug,\n id: returnId,\n ...document,\n };\n};\n\n/**\n * @public\n * @experimental\n * Content manager context hooks for plugin development.\n * Make sure to use this hook inside the content manager.\n */\nconst useContentManagerContext = () => {\n const {\n collectionType,\n model,\n id,\n components,\n isLoading: isLoadingDoc,\n schema,\n schemas,\n } = useDoc();\n\n const layout = useDocumentLayout(model);\n\n const form = useForm<unknown>('useContentManagerContext', (state) => state);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n const slug = model;\n const isCreatingEntry = id === 'create';\n\n const {} = useContentTypeSchema();\n\n const isLoading = isLoadingDoc || layout.isLoading;\n const error = layout.error;\n\n return {\n error,\n isLoading,\n\n // Base metadata\n model,\n collectionType,\n id,\n slug,\n isCreatingEntry,\n isSingleType,\n hasDraftAndPublish: schema?.options?.draftAndPublish ?? false,\n\n // All schema infos\n components,\n contentType: schema,\n contentTypes: schemas,\n\n // Form state\n form,\n\n // layout infos\n layout,\n };\n};\n\nexport { useDocument, useDoc, useContentManagerContext };\nexport type { UseDocument, UseDocumentArgs, Document, Schema, ComponentsDictionary };\n"],"names":["useDocument","args","opts","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","currentData","data","isLoading","isLoadingDocument","isFetching","isFetchingDocument","error","refetch","useGetDocumentQuery","skip","documentId","collectionType","SINGLE_TYPES","document","meta","components","schema","schemas","isLoadingSchema","useContentTypeSchema","model","isSingleType","kind","getTitle","mainField","info","displayName","id","defaultMessage","React","useEffect","type","message","validationSchema","useMemo","createYupSchema","attributes","validate","useCallback","Error","validateSync","abortEarly","strict","ValidationError","getYupValidationErrors","getInitialFormValues","isCreatingDocument","undefined","form","createDefaultForm","transformDocument","hasError","useDoc","slug","origin","useParams","query","useQueryParams","params","buildValidParams","returnId","useContentManagerContext","isLoadingDoc","layout","useDocumentLayout","useForm","state","isCreatingEntry","hasDraftAndPublish","options","draftAndPublish","contentType","contentTypes"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { useNotification, useAPIErrorHandler, getYupValidationErrors, useForm, useQueryParams } from '@strapi/admin/strapi-admin';
2
+ import { useForm, useNotification, useAPIErrorHandler, getYupValidationErrors, useQueryParams } from '@strapi/admin/strapi-admin';
3
3
  import { useIntl } from 'react-intl';
4
4
  import { useParams } from 'react-router-dom';
5
5
  import { ValidationError } from 'yup';
@@ -1 +1 @@
1
- {"version":3,"file":"useDocument.mjs","sources":["../../../admin/src/hooks/useDocument.ts"],"sourcesContent":["/**\n * This hook doesn't use a context provider because we fetch directly from the server,\n * this sounds expensive but actually, it's really not. Because we have redux-toolkit-query\n * being a cache layer so if nothing invalidates the cache, we don't fetch again.\n */\n\nimport * as React from 'react';\n\nimport {\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n FormErrors,\n getYupValidationErrors,\n useForm,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\nimport { ValidationError } from 'yup';\n\nimport { SINGLE_TYPES } from '../constants/collections';\nimport { type AnyData, transformDocument } from '../pages/EditView/utils/data';\nimport { createDefaultForm } from '../pages/EditView/utils/forms';\nimport { useGetDocumentQuery } from '../services/documents';\nimport { buildValidParams } from '../utils/api';\nimport { createYupSchema } from '../utils/validation';\n\nimport { useContentTypeSchema, ComponentsDictionary } from './useContentTypeSchema';\nimport { useDocumentLayout } from './useDocumentLayout';\n\nimport type { FindOne } from '../../../shared/contracts/collection-types';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Modules } from '@strapi/types';\n\ninterface UseDocumentArgs {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n}\n\ntype UseDocumentOpts = Parameters<typeof useGetDocumentQuery>[1];\n\ntype Document = FindOne.Response['data'];\n\ntype Schema = ContentType;\n\ntype UseDocument = (\n args: UseDocumentArgs,\n opts?: UseDocumentOpts\n) => {\n /**\n * These are the schemas of the components used in the content type, organised\n * by their uid.\n */\n components: ComponentsDictionary;\n document?: Document;\n meta?: FindOne.Response['meta'];\n isLoading: boolean;\n /**\n * This is the schema of the content type, it is not the same as the layout.\n */\n schema?: Schema;\n schemas?: Schema[];\n hasError?: boolean;\n refetch: () => void;\n validate: (document: Document) => null | FormErrors;\n /**\n * Get the document's title\n */\n getTitle: (mainField: string) => string;\n /**\n * Get the initial form values for the document\n */\n getInitialFormValues: (isCreatingDocument?: boolean) => AnyData | undefined;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocument\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha\n * @public\n * @description Returns a document based on the model, collection type & id passed as arguments.\n * Also extracts its schema from the redux cache to be used for creating a validation schema.\n * @example\n * ```tsx\n * const { id, model, collectionType } = useParams<{ id: string; model: string; collectionType: string }>();\n *\n * if(!model || !collectionType) return null;\n *\n * const { document, isLoading, validate } = useDocument({ documentId: id, model, collectionType, params: { locale: 'en-GB' } })\n * const { update } = useDocumentActions()\n *\n * const onSubmit = async (document: Document) => {\n * const errors = validate(document);\n *\n * if(errors) {\n * // handle errors\n * }\n *\n * await update({ collectionType, model, id }, document)\n * }\n * ```\n *\n */\nconst useDocument: UseDocument = (args, opts) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n\n const {\n currentData: data,\n isLoading: isLoadingDocument,\n isFetching: isFetchingDocument,\n error,\n refetch,\n } = useGetDocumentQuery(args, {\n ...opts,\n skip: (!args.documentId && args.collectionType !== SINGLE_TYPES) || opts?.skip,\n });\n const document = data?.data;\n const meta = data?.meta;\n\n const {\n components,\n schema,\n schemas,\n isLoading: isLoadingSchema,\n } = useContentTypeSchema(args.model);\n const isSingleType = schema?.kind === 'singleType';\n\n const getTitle = (mainField: string) => {\n // Always use mainField if it's not an id\n if (mainField !== 'id' && document?.[mainField]) {\n return document[mainField];\n }\n\n // When it's a singleType without a mainField, use the contentType displayName\n if (isSingleType && schema?.info.displayName) {\n return schema.info.displayName;\n }\n\n // Otherwise, use a fallback\n return formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n };\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError, args.collectionType]);\n\n const validationSchema = React.useMemo(() => {\n if (!schema) {\n return null;\n }\n\n return createYupSchema(schema.attributes, components);\n }, [schema, components]);\n\n const validate = React.useCallback(\n (document: Modules.Documents.AnyDocument): FormErrors | null => {\n if (!validationSchema) {\n throw new Error(\n 'There is no validation schema generated, this is likely due to the schema not being loaded yet.'\n );\n }\n\n try {\n validationSchema.validateSync(document, { abortEarly: false, strict: true });\n return null;\n } catch (error) {\n if (error instanceof ValidationError) {\n return getYupValidationErrors(error);\n }\n\n throw error;\n }\n },\n [validationSchema]\n );\n\n /**\n * Here we prepare the form for editing, we need to:\n * - remove prohibited fields from the document (passwords | ADD YOURS WHEN THERES A NEW ONE)\n * - swap out count objects on relations for empty arrays\n * - set __temp_key__ on array objects for drag & drop\n *\n * We also prepare the form for new documents, so we need to:\n * - set default values on fields\n */\n const getInitialFormValues = React.useCallback(\n (isCreatingDocument: boolean = false) => {\n if ((!document && !isCreatingDocument && !isSingleType) || !schema) {\n return undefined;\n }\n\n /**\n * Check that we have an ID so we know the\n * document has been created in some way.\n */\n const form = document?.id ? document : createDefaultForm(schema, components);\n\n return transformDocument(schema, components)(form);\n },\n [document, isSingleType, schema, components]\n );\n\n const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;\n const hasError = !!error;\n\n return {\n components,\n document,\n meta,\n isLoading,\n hasError,\n schema,\n schemas,\n validate,\n getTitle,\n getInitialFormValues,\n refetch,\n } satisfies ReturnType<UseDocument>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDoc\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal this hook uses the router to extract the model, collection type & id from the url.\n * therefore, it shouldn't be used outside of the content-manager because it won't work as intended.\n */\nconst useDoc = () => {\n const { id, slug, collectionType, origin } = useParams<{\n id: string;\n origin: string;\n slug: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!slug) {\n throw new Error('Could not find model in url params');\n }\n\n const document = useDocument(\n { documentId: origin || id, model: slug, collectionType, params },\n {\n skip: id === 'create' || (!origin && !id && collectionType !== SINGLE_TYPES),\n }\n );\n\n const returnId = origin || (id === 'create' ? undefined : id);\n\n return {\n collectionType,\n model: slug,\n id: returnId,\n ...document,\n };\n};\n\n/**\n * @public\n * @experimental\n * Content manager context hooks for plugin development.\n * Make sure to use this hook inside the content manager.\n */\nconst useContentManagerContext = () => {\n const {\n collectionType,\n model,\n id,\n components,\n isLoading: isLoadingDoc,\n schema,\n schemas,\n } = useDoc();\n\n const layout = useDocumentLayout(model);\n\n const form = useForm<unknown>('useContentManagerContext', (state) => state);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n const slug = model;\n const isCreatingEntry = id === 'create';\n\n const {} = useContentTypeSchema();\n\n const isLoading = isLoadingDoc || layout.isLoading;\n const error = layout.error;\n\n return {\n error,\n isLoading,\n\n // Base metadata\n model,\n collectionType,\n id,\n slug,\n isCreatingEntry,\n isSingleType,\n hasDraftAndPublish: schema?.options?.draftAndPublish ?? false,\n\n // All schema infos\n components,\n contentType: schema,\n contentTypes: schemas,\n\n // Form state\n form,\n\n // layout infos\n layout,\n };\n};\n\nexport { useDocument, useDoc, useContentManagerContext };\nexport type { UseDocument, UseDocumentArgs, Document, Schema, ComponentsDictionary };\n"],"names":["useDocument","args","opts","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","currentData","data","isLoading","isLoadingDocument","isFetching","isFetchingDocument","error","refetch","useGetDocumentQuery","skip","documentId","collectionType","SINGLE_TYPES","document","meta","components","schema","schemas","isLoadingSchema","useContentTypeSchema","model","isSingleType","kind","getTitle","mainField","info","displayName","id","defaultMessage","React","useEffect","type","message","validationSchema","useMemo","createYupSchema","attributes","validate","useCallback","Error","validateSync","abortEarly","strict","ValidationError","getYupValidationErrors","getInitialFormValues","isCreatingDocument","undefined","form","createDefaultForm","transformDocument","hasError","useDoc","slug","origin","useParams","query","useQueryParams","params","buildValidParams","returnId","useContentManagerContext","isLoadingDoc","layout","useDocumentLayout","useForm","state","isCreatingEntry","hasDraftAndPublish","options","draftAndPublish","contentType","contentTypes"],"mappings":"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"}
1
+ {"version":3,"file":"useDocument.mjs","sources":["../../../admin/src/hooks/useDocument.ts"],"sourcesContent":["/**\n * This hook doesn't use a context provider because we fetch directly from the server,\n * this sounds expensive but actually, it's really not. Because we have redux-toolkit-query\n * being a cache layer so if nothing invalidates the cache, we don't fetch again.\n */\n\nimport * as React from 'react';\n\nimport {\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n FormErrors,\n getYupValidationErrors,\n useForm,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\nimport { ValidationError } from 'yup';\n\nimport { SINGLE_TYPES } from '../constants/collections';\nimport { type AnyData, transformDocument } from '../pages/EditView/utils/data';\nimport { createDefaultForm } from '../pages/EditView/utils/forms';\nimport { useGetDocumentQuery } from '../services/documents';\nimport { buildValidParams } from '../utils/api';\nimport { createYupSchema } from '../utils/validation';\n\nimport { useContentTypeSchema, ComponentsDictionary } from './useContentTypeSchema';\nimport { useDocumentLayout } from './useDocumentLayout';\n\nimport type { FindOne } from '../../../shared/contracts/collection-types';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Modules } from '@strapi/types';\n\ninterface UseDocumentArgs {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n}\n\ntype UseDocumentOpts = Parameters<typeof useGetDocumentQuery>[1];\n\ntype Document = FindOne.Response['data'];\n\ntype Schema = ContentType;\n\ntype UseDocument = (\n args: UseDocumentArgs,\n opts?: UseDocumentOpts\n) => {\n /**\n * These are the schemas of the components used in the content type, organised\n * by their uid.\n */\n components: ComponentsDictionary;\n document?: Document;\n meta?: FindOne.Response['meta'];\n isLoading: boolean;\n /**\n * This is the schema of the content type, it is not the same as the layout.\n */\n schema?: Schema;\n schemas?: Schema[];\n hasError?: boolean;\n refetch: () => void;\n validate: (document: Document) => null | FormErrors;\n /**\n * Get the document's title\n */\n getTitle: (mainField: string) => string;\n /**\n * Get the initial form values for the document\n */\n getInitialFormValues: (isCreatingDocument?: boolean) => AnyData | undefined;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocument\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha\n * @public\n * @description Returns a document based on the model, collection type & id passed as arguments.\n * Also extracts its schema from the redux cache to be used for creating a validation schema.\n * @example\n * ```tsx\n * const { id, model, collectionType } = useParams<{ id: string; model: string; collectionType: string }>();\n *\n * if(!model || !collectionType) return null;\n *\n * const { document, isLoading, validate } = useDocument({ documentId: id, model, collectionType, params: { locale: 'en-GB' } })\n * const { update } = useDocumentActions()\n *\n * const onSubmit = async (document: Document) => {\n * const errors = validate(document);\n *\n * if(errors) {\n * // handle errors\n * }\n *\n * await update({ collectionType, model, id }, document)\n * }\n * ```\n *\n */\nconst useDocument: UseDocument = (args, opts) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n\n const {\n currentData: data,\n isLoading: isLoadingDocument,\n isFetching: isFetchingDocument,\n error,\n refetch,\n } = useGetDocumentQuery(args, {\n ...opts,\n skip: (!args.documentId && args.collectionType !== SINGLE_TYPES) || opts?.skip,\n });\n const document = data?.data;\n const meta = data?.meta;\n\n const {\n components,\n schema,\n schemas,\n isLoading: isLoadingSchema,\n } = useContentTypeSchema(args.model);\n const isSingleType = schema?.kind === 'singleType';\n\n const getTitle = (mainField: string) => {\n // Always use mainField if it's not an id\n if (mainField !== 'id' && document?.[mainField]) {\n return document[mainField];\n }\n\n // When it's a singleType without a mainField, use the contentType displayName\n if (isSingleType && schema?.info.displayName) {\n return schema.info.displayName;\n }\n\n // Otherwise, use a fallback\n return formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n };\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError, args.collectionType]);\n\n const validationSchema = React.useMemo(() => {\n if (!schema) {\n return null;\n }\n\n return createYupSchema(schema.attributes, components);\n }, [schema, components]);\n\n const validate = React.useCallback(\n (document: Modules.Documents.AnyDocument): FormErrors | null => {\n if (!validationSchema) {\n throw new Error(\n 'There is no validation schema generated, this is likely due to the schema not being loaded yet.'\n );\n }\n\n try {\n validationSchema.validateSync(document, { abortEarly: false, strict: true });\n return null;\n } catch (error) {\n if (error instanceof ValidationError) {\n return getYupValidationErrors(error);\n }\n\n throw error;\n }\n },\n [validationSchema]\n );\n\n /**\n * Here we prepare the form for editing, we need to:\n * - remove prohibited fields from the document (passwords | ADD YOURS WHEN THERES A NEW ONE)\n * - swap out count objects on relations for empty arrays\n * - set __temp_key__ on array objects for drag & drop\n *\n * We also prepare the form for new documents, so we need to:\n * - set default values on fields\n */\n const getInitialFormValues = React.useCallback(\n (isCreatingDocument: boolean = false) => {\n if ((!document && !isCreatingDocument && !isSingleType) || !schema) {\n return undefined;\n }\n\n /**\n * Check that we have an ID so we know the\n * document has been created in some way.\n */\n const form = document?.id ? document : createDefaultForm(schema, components);\n\n return transformDocument(schema, components)(form);\n },\n [document, isSingleType, schema, components]\n );\n\n const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;\n const hasError = !!error;\n\n return {\n components,\n document,\n meta,\n isLoading,\n hasError,\n schema,\n schemas,\n validate,\n getTitle,\n getInitialFormValues,\n refetch,\n } satisfies ReturnType<UseDocument>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDoc\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal this hook uses the router to extract the model, collection type & id from the url.\n * therefore, it shouldn't be used outside of the content-manager because it won't work as intended.\n */\nconst useDoc = () => {\n const { id, slug, collectionType, origin } = useParams<{\n id: string;\n origin: string;\n slug: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!slug) {\n throw new Error('Could not find model in url params');\n }\n\n const document = useDocument(\n { documentId: origin || id, model: slug, collectionType, params },\n {\n skip: id === 'create' || (!origin && !id && collectionType !== SINGLE_TYPES),\n }\n );\n\n const returnId = origin || (id === 'create' ? undefined : id);\n\n return {\n collectionType,\n model: slug,\n id: returnId,\n ...document,\n };\n};\n\n/**\n * @public\n * @experimental\n * Content manager context hooks for plugin development.\n * Make sure to use this hook inside the content manager.\n */\nconst useContentManagerContext = () => {\n const {\n collectionType,\n model,\n id,\n components,\n isLoading: isLoadingDoc,\n schema,\n schemas,\n } = useDoc();\n\n const layout = useDocumentLayout(model);\n\n const form = useForm<unknown>('useContentManagerContext', (state) => state);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n const slug = model;\n const isCreatingEntry = id === 'create';\n\n const {} = useContentTypeSchema();\n\n const isLoading = isLoadingDoc || layout.isLoading;\n const error = layout.error;\n\n return {\n error,\n isLoading,\n\n // Base metadata\n model,\n collectionType,\n id,\n slug,\n isCreatingEntry,\n isSingleType,\n hasDraftAndPublish: schema?.options?.draftAndPublish ?? false,\n\n // All schema infos\n components,\n contentType: schema,\n contentTypes: schemas,\n\n // Form state\n form,\n\n // layout infos\n layout,\n };\n};\n\nexport { useDocument, useDoc, useContentManagerContext };\nexport type { UseDocument, UseDocumentArgs, Document, Schema, ComponentsDictionary };\n"],"names":["useDocument","args","opts","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","currentData","data","isLoading","isLoadingDocument","isFetching","isFetchingDocument","error","refetch","useGetDocumentQuery","skip","documentId","collectionType","SINGLE_TYPES","document","meta","components","schema","schemas","isLoadingSchema","useContentTypeSchema","model","isSingleType","kind","getTitle","mainField","info","displayName","id","defaultMessage","React","useEffect","type","message","validationSchema","useMemo","createYupSchema","attributes","validate","useCallback","Error","validateSync","abortEarly","strict","ValidationError","getYupValidationErrors","getInitialFormValues","isCreatingDocument","undefined","form","createDefaultForm","transformDocument","hasError","useDoc","slug","origin","useParams","query","useQueryParams","params","buildValidParams","returnId","useContentManagerContext","isLoadingDoc","layout","useDocumentLayout","useForm","state","isCreatingEntry","hasDraftAndPublish","options","draftAndPublish","contentType","contentTypes"],"mappings":"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"}