@strapi/content-manager 0.0.0-next.929f36e7cd2888f97e66b5159baa15234a283fca → 0.0.0-next.92e60e369ae0e382a5d486de347f6d286ab22987

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 (540) hide show
  1. package/dist/admin/components/ComponentIcon.js +3 -0
  2. package/dist/admin/components/ComponentIcon.js.map +1 -1
  3. package/dist/admin/components/ComponentIcon.mjs +3 -0
  4. package/dist/admin/components/ComponentIcon.mjs.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/EditFieldForm.js +3 -2
  6. package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
  7. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +3 -2
  8. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
  9. package/dist/admin/components/ConfigurationForm/Fields.js +304 -205
  10. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  11. package/dist/admin/components/ConfigurationForm/Fields.mjs +309 -211
  12. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  13. package/dist/admin/components/ConfigurationForm/Form.js +1 -1
  14. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
  15. package/dist/admin/components/ConfigurationForm/Form.mjs +3 -3
  16. package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
  17. package/dist/admin/components/DragPreviews/CardDragPreview.js +3 -1
  18. package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -1
  19. package/dist/admin/components/DragPreviews/CardDragPreview.mjs +3 -1
  20. package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -1
  21. package/dist/admin/components/DragPreviews/ComponentDragPreview.js +3 -1
  22. package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -1
  23. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs +3 -1
  24. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -1
  25. package/dist/admin/components/DragPreviews/RelationDragPreview.js +3 -1
  26. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
  27. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +3 -1
  28. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
  29. package/dist/admin/components/LeftMenu.js +94 -50
  30. package/dist/admin/components/LeftMenu.js.map +1 -1
  31. package/dist/admin/components/LeftMenu.mjs +97 -53
  32. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  33. package/dist/admin/components/RelativeTime.js.map +1 -1
  34. package/dist/admin/components/RelativeTime.mjs.map +1 -1
  35. package/dist/admin/components/Widgets.js +437 -0
  36. package/dist/admin/components/Widgets.js.map +1 -0
  37. package/dist/admin/components/Widgets.mjs +414 -0
  38. package/dist/admin/components/Widgets.mjs.map +1 -0
  39. package/dist/admin/content-manager.js.map +1 -1
  40. package/dist/admin/content-manager.mjs.map +1 -1
  41. package/dist/admin/history/components/HistoryAction.js.map +1 -1
  42. package/dist/admin/history/components/HistoryAction.mjs.map +1 -1
  43. package/dist/admin/history/components/VersionContent.js +24 -3
  44. package/dist/admin/history/components/VersionContent.js.map +1 -1
  45. package/dist/admin/history/components/VersionContent.mjs +25 -4
  46. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  47. package/dist/admin/history/components/VersionHeader.js +7 -0
  48. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  49. package/dist/admin/history/components/VersionHeader.mjs +8 -1
  50. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  51. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  52. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  53. package/dist/admin/history/components/VersionsList.js +1 -1
  54. package/dist/admin/history/components/VersionsList.js.map +1 -1
  55. package/dist/admin/history/components/VersionsList.mjs +1 -1
  56. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  57. package/dist/admin/history/pages/History.js +8 -16
  58. package/dist/admin/history/pages/History.js.map +1 -1
  59. package/dist/admin/history/pages/History.mjs +8 -16
  60. package/dist/admin/history/pages/History.mjs.map +1 -1
  61. package/dist/admin/history/services/historyVersion.js.map +1 -1
  62. package/dist/admin/history/services/historyVersion.mjs.map +1 -1
  63. package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
  64. package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
  65. package/dist/admin/hooks/useDocumentActions.js +43 -12
  66. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  67. package/dist/admin/hooks/useDocumentActions.mjs +44 -13
  68. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  69. package/dist/admin/hooks/useDocumentContext.js +57 -0
  70. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  71. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  72. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  73. package/dist/admin/index.js +81 -5
  74. package/dist/admin/index.js.map +1 -1
  75. package/dist/admin/index.mjs +80 -3
  76. package/dist/admin/index.mjs.map +1 -1
  77. package/dist/admin/layout.js +28 -33
  78. package/dist/admin/layout.js.map +1 -1
  79. package/dist/admin/layout.mjs +29 -15
  80. package/dist/admin/layout.mjs.map +1 -1
  81. package/dist/admin/pages/EditView/EditViewPage.js +101 -88
  82. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  83. package/dist/admin/pages/EditView/EditViewPage.mjs +103 -90
  84. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  85. package/dist/admin/pages/EditView/components/Blocker.js +18 -0
  86. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
  87. package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
  88. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
  89. package/dist/admin/pages/EditView/components/DocumentActions.js +335 -123
  90. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  91. package/dist/admin/pages/EditView/components/DocumentActions.mjs +342 -130
  92. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  93. package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
  94. package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  96. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +66 -2
  98. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +66 -2
  100. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -1
  102. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  104. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  106. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +61 -26
  108. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
  110. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  112. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  114. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  115. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  116. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  117. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  118. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  119. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
  120. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
  121. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +7 -3
  122. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +1 -1
  123. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +7 -3
  124. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +1 -1
  125. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  126. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  127. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  128. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  129. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +14 -3
  130. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  131. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +15 -4
  132. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  133. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +19 -5
  134. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  135. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +20 -6
  136. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  137. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +1 -2
  138. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  139. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +1 -2
  140. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  141. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +27 -24
  142. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  143. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +29 -26
  144. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  145. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  146. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  147. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  148. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  149. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +508 -345
  150. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  151. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +508 -347
  152. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  153. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +180 -70
  154. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  155. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +184 -74
  156. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  157. package/dist/admin/pages/EditView/components/FormInputs/UID.js +13 -10
  158. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  159. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +13 -10
  160. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  161. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  162. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  163. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  164. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  165. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  166. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  167. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  168. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  169. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  170. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
  171. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  172. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  173. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  174. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  175. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -1
  176. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -1
  177. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
  178. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
  179. package/dist/admin/pages/EditView/components/FormLayout.js +59 -34
  180. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  181. package/dist/admin/pages/EditView/components/FormLayout.mjs +60 -34
  182. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  183. package/dist/admin/pages/EditView/components/Header.js +92 -27
  184. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  185. package/dist/admin/pages/EditView/components/Header.mjs +94 -29
  186. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  187. package/dist/admin/pages/EditView/components/InputRenderer.js +42 -34
  188. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  189. package/dist/admin/pages/EditView/components/InputRenderer.mjs +42 -34
  190. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  191. package/dist/admin/pages/EditView/utils/data.js +128 -0
  192. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  193. package/dist/admin/pages/EditView/utils/data.mjs +128 -1
  194. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  195. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +1 -0
  196. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  197. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -0
  198. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  199. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  200. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
  201. package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -1
  202. package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -1
  203. package/dist/admin/pages/ListView/ListViewPage.js +225 -132
  204. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  205. package/dist/admin/pages/ListView/ListViewPage.mjs +227 -134
  206. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  207. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -1
  208. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -1
  209. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +6 -16
  210. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  211. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +6 -16
  212. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
  213. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +20 -32
  214. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  215. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +21 -33
  216. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  217. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +13 -3
  218. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  219. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +13 -3
  220. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  221. package/dist/admin/pages/ListView/components/Filters.js +8 -2
  222. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  223. package/dist/admin/pages/ListView/components/Filters.mjs +8 -2
  224. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  225. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  226. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  227. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  228. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  229. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +1 -1
  230. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  231. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +1 -1
  232. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  233. package/dist/admin/pages/ListView/components/TableCells/Media.js +1 -1
  234. package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
  235. package/dist/admin/pages/ListView/components/TableCells/Media.mjs +1 -1
  236. package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
  237. package/dist/admin/pages/ListView/components/TableCells/Relations.js +8 -4
  238. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  239. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +8 -4
  240. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  241. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +5 -2
  242. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
  243. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +5 -2
  244. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
  245. package/dist/admin/preview/components/InputPopover.js +189 -0
  246. package/dist/admin/preview/components/InputPopover.js.map +1 -0
  247. package/dist/admin/preview/components/InputPopover.mjs +167 -0
  248. package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
  249. package/dist/admin/preview/components/PreviewHeader.js +2 -6
  250. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  251. package/dist/admin/preview/components/PreviewHeader.mjs +2 -6
  252. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  253. package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
  254. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  255. package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
  256. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  257. package/dist/admin/preview/hooks/usePreviewInputManager.js +77 -0
  258. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  259. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +56 -0
  260. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  261. package/dist/admin/preview/pages/Preview.js +180 -84
  262. package/dist/admin/preview/pages/Preview.js.map +1 -1
  263. package/dist/admin/preview/pages/Preview.mjs +182 -86
  264. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  265. package/dist/admin/preview/services/preview.js.map +1 -1
  266. package/dist/admin/preview/services/preview.mjs.map +1 -1
  267. package/dist/admin/preview/utils/constants.js +56 -0
  268. package/dist/admin/preview/utils/constants.js.map +1 -0
  269. package/dist/admin/preview/utils/constants.mjs +52 -0
  270. package/dist/admin/preview/utils/constants.mjs.map +1 -0
  271. package/dist/admin/preview/utils/fieldUtils.js +107 -0
  272. package/dist/admin/preview/utils/fieldUtils.js.map +1 -0
  273. package/dist/admin/preview/utils/fieldUtils.mjs +102 -0
  274. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -0
  275. package/dist/admin/preview/utils/getSendMessage.js +22 -0
  276. package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
  277. package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
  278. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
  279. package/dist/admin/preview/utils/previewScript.js +534 -0
  280. package/dist/admin/preview/utils/previewScript.js.map +1 -0
  281. package/dist/admin/preview/utils/previewScript.mjs +532 -0
  282. package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
  283. package/dist/admin/router.js.map +1 -1
  284. package/dist/admin/router.mjs.map +1 -1
  285. package/dist/admin/services/api.js +5 -1
  286. package/dist/admin/services/api.js.map +1 -1
  287. package/dist/admin/services/api.mjs +5 -1
  288. package/dist/admin/services/api.mjs.map +1 -1
  289. package/dist/admin/services/documents.js +59 -17
  290. package/dist/admin/services/documents.js.map +1 -1
  291. package/dist/admin/services/documents.mjs +59 -17
  292. package/dist/admin/services/documents.mjs.map +1 -1
  293. package/dist/admin/services/homepage.js +30 -0
  294. package/dist/admin/services/homepage.js.map +1 -0
  295. package/dist/admin/services/homepage.mjs +28 -0
  296. package/dist/admin/services/homepage.mjs.map +1 -0
  297. package/dist/admin/services/relations.js.map +1 -1
  298. package/dist/admin/services/relations.mjs.map +1 -1
  299. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  300. package/dist/admin/src/components/LeftMenu.d.ts +3 -1
  301. package/dist/admin/src/components/Widgets.d.ts +8 -0
  302. package/dist/admin/src/content-manager.d.ts +0 -3
  303. package/dist/admin/src/exports.d.ts +1 -0
  304. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  305. package/dist/admin/src/history/pages/History.d.ts +1 -1
  306. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  307. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  308. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  309. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
  310. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  311. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +2 -0
  312. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  313. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  314. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +73 -7
  315. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  316. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  317. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -11
  318. package/dist/admin/src/pages/EditView/components/Header.d.ts +15 -0
  319. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +2 -2
  320. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  321. package/dist/admin/src/pages/ListView/components/TableCells/Relations.d.ts +0 -3
  322. package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
  323. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +5 -0
  324. package/dist/admin/src/preview/pages/Preview.d.ts +14 -1
  325. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  326. package/dist/admin/src/preview/utils/constants.d.ts +55 -0
  327. package/dist/admin/src/preview/utils/fieldUtils.d.ts +22 -0
  328. package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
  329. package/dist/admin/src/preview/utils/previewScript.d.ts +24 -0
  330. package/dist/admin/src/services/api.d.ts +1 -1
  331. package/dist/admin/src/services/components.d.ts +2 -2
  332. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  333. package/dist/admin/src/services/documents.d.ts +23 -17
  334. package/dist/admin/src/services/homepage.d.ts +5 -0
  335. package/dist/admin/src/services/init.d.ts +1 -1
  336. package/dist/admin/src/services/relations.d.ts +2 -2
  337. package/dist/admin/src/services/uid.d.ts +3 -3
  338. package/dist/admin/src/utils/api.d.ts +1 -1
  339. package/dist/admin/src/utils/validation.d.ts +1 -0
  340. package/dist/admin/translations/en.json.js +15 -1
  341. package/dist/admin/translations/en.json.js.map +1 -1
  342. package/dist/admin/translations/en.json.mjs +15 -1
  343. package/dist/admin/translations/en.json.mjs.map +1 -1
  344. package/dist/admin/translations/es.json.js +6 -2
  345. package/dist/admin/translations/es.json.js.map +1 -1
  346. package/dist/admin/translations/es.json.mjs +6 -2
  347. package/dist/admin/translations/es.json.mjs.map +1 -1
  348. package/dist/admin/translations/fr.json.js +12 -3
  349. package/dist/admin/translations/fr.json.js.map +1 -1
  350. package/dist/admin/translations/fr.json.mjs +12 -3
  351. package/dist/admin/translations/fr.json.mjs.map +1 -1
  352. package/dist/admin/translations/ru.json.js +235 -226
  353. package/dist/admin/translations/ru.json.js.map +1 -1
  354. package/dist/admin/translations/ru.json.mjs +230 -226
  355. package/dist/admin/translations/ru.json.mjs.map +1 -1
  356. package/dist/admin/utils/api.js +1 -1
  357. package/dist/admin/utils/api.js.map +1 -1
  358. package/dist/admin/utils/api.mjs +1 -1
  359. package/dist/admin/utils/api.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 +19 -7
  367. package/dist/admin/utils/validation.js.map +1 -1
  368. package/dist/admin/utils/validation.mjs +19 -7
  369. package/dist/admin/utils/validation.mjs.map +1 -1
  370. package/dist/server/controllers/collection-types.js +2 -1
  371. package/dist/server/controllers/collection-types.js.map +1 -1
  372. package/dist/server/controllers/collection-types.mjs +2 -1
  373. package/dist/server/controllers/collection-types.mjs.map +1 -1
  374. package/dist/server/controllers/content-types.js +11 -1
  375. package/dist/server/controllers/content-types.js.map +1 -1
  376. package/dist/server/controllers/content-types.mjs +11 -1
  377. package/dist/server/controllers/content-types.mjs.map +1 -1
  378. package/dist/server/controllers/index.js +3 -1
  379. package/dist/server/controllers/index.js.map +1 -1
  380. package/dist/server/controllers/index.mjs +3 -1
  381. package/dist/server/controllers/index.mjs.map +1 -1
  382. package/dist/server/controllers/relations.js +8 -6
  383. package/dist/server/controllers/relations.js.map +1 -1
  384. package/dist/server/controllers/relations.mjs +8 -6
  385. package/dist/server/controllers/relations.mjs.map +1 -1
  386. package/dist/server/controllers/single-types.js +3 -1
  387. package/dist/server/controllers/single-types.js.map +1 -1
  388. package/dist/server/controllers/single-types.mjs +3 -1
  389. package/dist/server/controllers/single-types.mjs.map +1 -1
  390. package/dist/server/controllers/validation/dimensions.js.map +1 -1
  391. package/dist/server/controllers/validation/dimensions.mjs.map +1 -1
  392. package/dist/server/controllers/validation/index.js +14 -2
  393. package/dist/server/controllers/validation/index.js.map +1 -1
  394. package/dist/server/controllers/validation/index.mjs +14 -2
  395. package/dist/server/controllers/validation/index.mjs.map +1 -1
  396. package/dist/server/controllers/validation/model-configuration.js +2 -2
  397. package/dist/server/controllers/validation/model-configuration.js.map +1 -1
  398. package/dist/server/controllers/validation/model-configuration.mjs +2 -2
  399. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
  400. package/dist/server/history/services/lifecycles.js +23 -19
  401. package/dist/server/history/services/lifecycles.js.map +1 -1
  402. package/dist/server/history/services/lifecycles.mjs +23 -19
  403. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  404. package/dist/server/history/utils.js.map +1 -1
  405. package/dist/server/history/utils.mjs.map +1 -1
  406. package/dist/server/homepage/controllers/homepage.js +62 -0
  407. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  408. package/dist/server/homepage/controllers/homepage.mjs +41 -0
  409. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  410. package/dist/server/homepage/controllers/index.js +10 -0
  411. package/dist/server/homepage/controllers/index.js.map +1 -0
  412. package/dist/server/homepage/controllers/index.mjs +8 -0
  413. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  414. package/dist/server/homepage/index.js +14 -0
  415. package/dist/server/homepage/index.js.map +1 -0
  416. package/dist/server/homepage/index.mjs +12 -0
  417. package/dist/server/homepage/index.mjs.map +1 -0
  418. package/dist/server/homepage/routes/homepage.js +36 -0
  419. package/dist/server/homepage/routes/homepage.js.map +1 -0
  420. package/dist/server/homepage/routes/homepage.mjs +34 -0
  421. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  422. package/dist/server/homepage/routes/index.js +13 -0
  423. package/dist/server/homepage/routes/index.js.map +1 -0
  424. package/dist/server/homepage/routes/index.mjs +11 -0
  425. package/dist/server/homepage/routes/index.mjs.map +1 -0
  426. package/dist/server/homepage/services/homepage.js +198 -0
  427. package/dist/server/homepage/services/homepage.js.map +1 -0
  428. package/dist/server/homepage/services/homepage.mjs +196 -0
  429. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  430. package/dist/server/homepage/services/index.js +10 -0
  431. package/dist/server/homepage/services/index.js.map +1 -0
  432. package/dist/server/homepage/services/index.mjs +8 -0
  433. package/dist/server/homepage/services/index.mjs.map +1 -0
  434. package/dist/server/middlewares/routing.js.map +1 -1
  435. package/dist/server/middlewares/routing.mjs.map +1 -1
  436. package/dist/server/preview/services/preview-config.js +11 -32
  437. package/dist/server/preview/services/preview-config.js.map +1 -1
  438. package/dist/server/preview/services/preview-config.mjs +12 -33
  439. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  440. package/dist/server/preview/services/preview.js +4 -1
  441. package/dist/server/preview/services/preview.js.map +1 -1
  442. package/dist/server/preview/services/preview.mjs +4 -1
  443. package/dist/server/preview/services/preview.mjs.map +1 -1
  444. package/dist/server/preview/utils.js.map +1 -1
  445. package/dist/server/preview/utils.mjs.map +1 -1
  446. package/dist/server/routes/index.js +3 -1
  447. package/dist/server/routes/index.js.map +1 -1
  448. package/dist/server/routes/index.mjs +3 -1
  449. package/dist/server/routes/index.mjs.map +1 -1
  450. package/dist/server/services/configuration.js.map +1 -1
  451. package/dist/server/services/configuration.mjs.map +1 -1
  452. package/dist/server/services/data-mapper.js +4 -1
  453. package/dist/server/services/data-mapper.js.map +1 -1
  454. package/dist/server/services/data-mapper.mjs +4 -1
  455. package/dist/server/services/data-mapper.mjs.map +1 -1
  456. package/dist/server/services/document-manager.js +8 -1
  457. package/dist/server/services/document-manager.js.map +1 -1
  458. package/dist/server/services/document-manager.mjs +8 -1
  459. package/dist/server/services/document-manager.mjs.map +1 -1
  460. package/dist/server/services/document-metadata.js +26 -2
  461. package/dist/server/services/document-metadata.js.map +1 -1
  462. package/dist/server/services/document-metadata.mjs +26 -2
  463. package/dist/server/services/document-metadata.mjs.map +1 -1
  464. package/dist/server/services/field-sizes.js.map +1 -1
  465. package/dist/server/services/field-sizes.mjs.map +1 -1
  466. package/dist/server/services/index.js +3 -1
  467. package/dist/server/services/index.js.map +1 -1
  468. package/dist/server/services/index.mjs +3 -1
  469. package/dist/server/services/index.mjs.map +1 -1
  470. package/dist/server/services/uid.js.map +1 -1
  471. package/dist/server/services/uid.mjs.map +1 -1
  472. package/dist/server/services/utils/configuration/attributes.js +1 -1
  473. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  474. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  475. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  476. package/dist/server/services/utils/configuration/layouts.js +1 -1
  477. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  478. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  479. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  480. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  481. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  482. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  483. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  484. package/dist/server/services/utils/populate.js +11 -0
  485. package/dist/server/services/utils/populate.js.map +1 -1
  486. package/dist/server/services/utils/populate.mjs +11 -0
  487. package/dist/server/services/utils/populate.mjs.map +1 -1
  488. package/dist/server/services/utils/store.js.map +1 -1
  489. package/dist/server/services/utils/store.mjs.map +1 -1
  490. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  491. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  492. package/dist/server/src/controllers/index.d.ts.map +1 -1
  493. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  494. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  495. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  496. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  497. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  498. package/dist/server/src/homepage/controllers/homepage.d.ts +8 -0
  499. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  500. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  501. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  502. package/dist/server/src/homepage/index.d.ts +23 -0
  503. package/dist/server/src/homepage/index.d.ts.map +1 -0
  504. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  505. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  506. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  507. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  508. package/dist/server/src/homepage/services/homepage.d.ts +14 -0
  509. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  510. package/dist/server/src/homepage/services/index.d.ts +16 -0
  511. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  512. package/dist/server/src/index.d.ts +15 -0
  513. package/dist/server/src/index.d.ts.map +1 -1
  514. package/dist/server/src/preview/services/index.d.ts +1 -0
  515. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  516. package/dist/server/src/preview/services/preview-config.d.ts +1 -0
  517. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  518. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  519. package/dist/server/src/preview/utils.d.ts +1 -0
  520. package/dist/server/src/preview/utils.d.ts.map +1 -1
  521. package/dist/server/src/routes/index.d.ts +1 -0
  522. package/dist/server/src/routes/index.d.ts.map +1 -1
  523. package/dist/server/src/services/data-mapper.d.ts +1 -0
  524. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  525. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  526. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  527. package/dist/server/src/services/index.d.ts +14 -0
  528. package/dist/server/src/services/index.d.ts.map +1 -1
  529. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  530. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  531. package/dist/shared/contracts/collection-types.d.ts +0 -1
  532. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  533. package/dist/shared/contracts/homepage.d.ts +38 -0
  534. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  535. package/package.json +13 -11
  536. package/dist/admin/features/DocumentContext.js +0 -71
  537. package/dist/admin/features/DocumentContext.js.map +0 -1
  538. package/dist/admin/features/DocumentContext.mjs +0 -49
  539. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  540. package/dist/admin/src/features/DocumentContext.d.ts +0 -53
@@ -1 +1 @@
1
- {"version":3,"file":"document-manager.js","sources":["../../../server/src/services/document-manager.ts"],"sourcesContent":["import { omit, pipe } from 'lodash/fp';\n\nimport { contentTypes, errors, pagination } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { buildDeepPopulate, getDeepPopulate, getDeepPopulateDraftCount } from './utils/populate';\nimport { sumDraftCounts } from './utils/draft';\n\ntype DocService = Modules.Documents.ServiceInstance;\ntype DocServiceParams<TAction extends keyof DocService> = Parameters<DocService[TAction]>[0];\nexport type Document = Modules.Documents.Result<UID.ContentType>;\n\nconst { ApplicationError } = errors;\nconst { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;\n\nconst omitPublishedAtField = omit(PUBLISHED_AT_ATTRIBUTE);\nconst omitIdField = omit('id');\n\nconst documentManager = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n async findOne(\n id: string,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'findOne'>, 'documentId'> = {}\n ) {\n return strapi.documents(uid).findOne({ ...opts, documentId: id });\n },\n\n /**\n * Find multiple (or all) locales for a document\n */\n async findLocales(\n id: string | string[] | undefined,\n uid: UID.CollectionType,\n opts: {\n populate?: Modules.Documents.Params.Pick<any, 'populate'>;\n locale?: string | string[] | '*';\n isPublished?: boolean;\n }\n ) {\n // Will look for a specific locale by default\n const where: any = {};\n\n // Might not have an id if querying a single type\n if (id) {\n where.documentId = id;\n }\n\n // Search in array of locales\n if (Array.isArray(opts.locale)) {\n where.locale = { $in: opts.locale };\n } else if (opts.locale && opts.locale !== '*') {\n // Look for a specific locale, ignore if looking for all locales\n where.locale = opts.locale;\n }\n\n // Published is passed, so we filter on it, otherwise we don't filter\n if (typeof opts.isPublished === 'boolean') {\n where.publishedAt = { $notNull: opts.isPublished };\n }\n\n return strapi.db.query(uid).findMany({ populate: opts.populate, where });\n },\n\n async findMany(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = { ...opts, populate: getDeepPopulate(uid) } as typeof opts;\n return strapi.documents(uid).findMany(params);\n },\n\n async findPage(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = pagination.withDefaultPagination(opts || {}, {\n maxLimit: 1000,\n });\n\n const [documents, total = 0] = await Promise.all([\n strapi.documents(uid).findMany(params),\n strapi.documents(uid).count(params),\n ]);\n\n return {\n results: documents,\n pagination: pagination.transformPagedPaginationInfo(params, total),\n };\n },\n\n async create(uid: UID.CollectionType, opts: DocServiceParams<'create'> = {} as any) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, status: 'draft' as const, populate };\n\n return strapi.documents(uid).create(params);\n },\n\n async update(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'update'>, 'documentId'> = {} as any\n ) {\n const publishData = pipe(omitPublishedAtField, omitIdField)(opts.data || {});\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, data: publishData, populate, status: 'draft' };\n\n return strapi.documents(uid).update({ ...params, documentId: id });\n },\n\n async clone(\n id: Modules.Documents.ID,\n body: Partial<Modules.Documents.Params.Data.Input<UID.CollectionType>>,\n uid: UID.CollectionType\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = {\n data: omitIdField(body),\n populate,\n };\n\n return strapi\n .documents(uid)\n .clone({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n /**\n * Check if a document exists\n */\n async exists(uid: UID.CollectionType, id?: string) {\n // Collection type\n if (id) {\n const count = await strapi.db.query(uid).count({ where: { documentId: id } });\n return count > 0;\n }\n\n // Single type\n const count = await strapi.db.query(uid).count();\n return count > 0;\n },\n\n async delete(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'delete'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n\n await strapi.documents(uid).delete({\n ...opts,\n documentId: id,\n populate,\n });\n return {};\n },\n\n // FIXME: handle relations\n async deleteMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: DocServiceParams<'findMany'> & { locale?: string } = {}\n ) {\n const deletedEntries = await strapi.db.transaction(async () => {\n return Promise.all(documentIds.map(async (id) => this.delete(id, uid, opts)));\n });\n\n return { count: deletedEntries.length };\n },\n\n async publish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'publish'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .publish({ ...params, documentId: id })\n .then((result) => result?.entries);\n },\n\n async publishMany(uid: UID.ContentType, documentIds: string[], locale?: string | string[]) {\n return strapi.db.transaction(async () => {\n const results = await Promise.all(\n documentIds.map((documentId) => this.publish(documentId, uid, { locale }))\n );\n\n const publishedEntitiesCount = results.flat().filter(Boolean).length;\n return publishedEntitiesCount;\n });\n },\n\n async unpublishMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const unpublishedEntries = await strapi.db.transaction(async () => {\n return Promise.all(\n documentIds.map((id) =>\n strapi\n .documents(uid)\n .unpublish({ ...opts, documentId: id })\n .then((result) => result?.entries)\n )\n );\n });\n\n const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;\n\n // Return the number of unpublished entities\n return { count: unpublishedEntitiesCount };\n },\n\n async unpublish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .unpublish({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async discardDraft(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'discardDraft'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .discardDraft({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async countDraftRelations(id: string, uid: UID.ContentType, locale: string) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n const document = await strapi.documents(uid).findOne({ documentId: id, populate, locale });\n if (!document) {\n throw new ApplicationError(\n `Unable to count draft relations, document with id ${id} and locale ${locale} not found`\n );\n }\n\n return sumDraftCounts(document, uid);\n },\n\n async countManyEntriesDraftRelations(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n locale: string | string[]\n ) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n let localeFilter = {};\n if (locale) {\n localeFilter = Array.isArray(locale) ? { locale: { $in: locale } } : { locale };\n }\n\n const entities = await strapi.db.query(uid).findMany({\n populate,\n where: {\n documentId: { $in: documentIds },\n ...localeFilter,\n },\n });\n\n const totalNumberDraftRelations: number = entities!.reduce(\n (count: number, entity: Document) => sumDraftCounts(entity, uid) + count,\n 0\n );\n\n return totalNumberDraftRelations;\n },\n };\n};\n\nexport type DocumentManagerService = typeof documentManager;\n\nexport default documentManager;\n"],"names":["ApplicationError","errors","PUBLISHED_AT_ATTRIBUTE","contentTypes","constants","omitPublishedAtField","omit","omitIdField","documentManager","strapi","findOne","id","uid","opts","documents","documentId","findLocales","where","Array","isArray","locale","$in","isPublished","publishedAt","$notNull","db","query","findMany","populate","params","getDeepPopulate","findPage","pagination","withDefaultPagination","maxLimit","total","Promise","all","count","results","transformPagedPaginationInfo","create","buildDeepPopulate","status","update","publishData","pipe","data","clone","body","then","result","entries","at","exists","delete","deleteMany","documentIds","deletedEntries","transaction","map","length","publish","publishMany","publishedEntitiesCount","flat","filter","Boolean","unpublishMany","unpublishedEntries","unpublish","unpublishedEntitiesCount","discardDraft","countDraftRelations","hasRelations","getDeepPopulateDraftCount","document","sumDraftCounts","countManyEntriesDraftRelations","localeFilter","entities","totalNumberDraftRelations","reduce","entity"],"mappings":"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"}
1
+ {"version":3,"file":"document-manager.js","sources":["../../../server/src/services/document-manager.ts"],"sourcesContent":["import { omit, pipe } from 'lodash/fp';\n\nimport { contentTypes, errors, pagination } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { buildDeepPopulate, getDeepPopulate, getDeepPopulateDraftCount } from './utils/populate';\nimport { sumDraftCounts } from './utils/draft';\n\ntype DocService = Modules.Documents.ServiceInstance;\ntype DocServiceParams<TAction extends keyof DocService> = Parameters<DocService[TAction]>[0];\nexport type Document = Modules.Documents.Result<UID.ContentType>;\n\nconst { ApplicationError } = errors;\nconst { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;\n\nconst omitPublishedAtField = omit(PUBLISHED_AT_ATTRIBUTE);\nconst omitIdField = omit('id');\n\nconst documentManager = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n async findOne(\n id: string,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'findOne'>, 'documentId'> = {}\n ) {\n return strapi.documents(uid).findOne({ ...opts, documentId: id });\n },\n\n /**\n * Find multiple (or all) locales for a document\n */\n async findLocales(\n id: string | string[] | undefined,\n uid: UID.CollectionType,\n opts: {\n populate?: Modules.Documents.Params.Pick<any, 'populate'>;\n locale?: string | string[] | '*';\n isPublished?: boolean;\n }\n ) {\n // Will look for a specific locale by default\n const where: any = {};\n\n // Might not have an id if querying a single type\n if (id) {\n where.documentId = id;\n }\n\n // Search in array of locales\n if (Array.isArray(opts.locale)) {\n where.locale = { $in: opts.locale };\n } else if (opts.locale && opts.locale !== '*') {\n // Look for a specific locale, ignore if looking for all locales\n where.locale = opts.locale;\n }\n\n // Published is passed, so we filter on it, otherwise we don't filter\n if (typeof opts.isPublished === 'boolean') {\n where.publishedAt = { $notNull: opts.isPublished };\n }\n\n return strapi.db.query(uid).findMany({ populate: opts.populate, where });\n },\n\n async findMany(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = { ...opts, populate: getDeepPopulate(uid) } as typeof opts;\n return strapi.documents(uid).findMany(params);\n },\n\n async findPage(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = pagination.withDefaultPagination(opts || {}, {\n maxLimit: 1000,\n });\n\n const [documents, total = 0] = await Promise.all([\n strapi.documents(uid).findMany(params),\n strapi.documents(uid).count(params),\n ]);\n\n return {\n results: documents,\n pagination: pagination.transformPagedPaginationInfo(params, total),\n };\n },\n\n async create(uid: UID.CollectionType, opts: DocServiceParams<'create'> = {} as any) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, status: 'draft' as const, populate };\n\n return strapi.documents(uid).create(params);\n },\n\n async update(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'update'>, 'documentId'> = {} as any\n ) {\n const publishData = pipe(omitPublishedAtField, omitIdField)(opts.data || {});\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, data: publishData, populate, status: 'draft' };\n\n return strapi.documents(uid).update({ ...params, documentId: id });\n },\n\n async clone(\n id: Modules.Documents.ID,\n body: Partial<Modules.Documents.Params.Data.Input<UID.CollectionType>>,\n uid: UID.CollectionType\n ) {\n const populate = await buildDeepPopulate(uid);\n\n // Extract the locale to pass it as a plain param\n const locale = body?.locale;\n const params = {\n // Ensure id and documentId are not copied to the clone\n data: omit(['id', 'documentId'], body),\n locale,\n populate,\n };\n\n return strapi\n .documents(uid)\n .clone({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n /**\n * Check if a document exists\n */\n async exists(uid: UID.CollectionType, id?: string) {\n // Collection type\n if (id) {\n const count = await strapi.db.query(uid).count({ where: { documentId: id } });\n return count > 0;\n }\n\n // Single type\n const count = await strapi.db.query(uid).count();\n return count > 0;\n },\n\n async delete(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'delete'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n\n await strapi.documents(uid).delete({\n ...opts,\n documentId: id,\n populate,\n });\n return {};\n },\n\n // FIXME: handle relations\n async deleteMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: DocServiceParams<'findMany'> & { locale?: string } = {}\n ) {\n const deletedEntries = await strapi.db.transaction(async () => {\n return Promise.all(documentIds.map(async (id) => this.delete(id, uid, opts)));\n });\n\n return { count: deletedEntries.length };\n },\n\n async publish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'publish'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .publish({ ...params, documentId: id })\n .then((result) => result?.entries);\n },\n\n async publishMany(uid: UID.ContentType, documentIds: string[], locale?: string | string[]) {\n return strapi.db.transaction(async () => {\n const results = await Promise.all(\n documentIds.map((documentId) => this.publish(documentId, uid, { locale }))\n );\n\n const publishedEntitiesCount = results.flat().filter(Boolean).length;\n return publishedEntitiesCount;\n });\n },\n\n async unpublishMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const unpublishedEntries = await strapi.db.transaction(async () => {\n return Promise.all(\n documentIds.map((id) =>\n strapi\n .documents(uid)\n .unpublish({ ...opts, documentId: id })\n .then((result) => result?.entries)\n )\n );\n });\n\n const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;\n\n // Return the number of unpublished entities\n return { count: unpublishedEntitiesCount };\n },\n\n async unpublish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .unpublish({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async discardDraft(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'discardDraft'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .discardDraft({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async countDraftRelations(id: string, uid: UID.ContentType, locale: string) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n const document = await strapi.documents(uid).findOne({ documentId: id, populate, locale });\n if (!document) {\n throw new ApplicationError(\n `Unable to count draft relations, document with id ${id} and locale ${locale} not found`\n );\n }\n\n return sumDraftCounts(document, uid);\n },\n\n async countManyEntriesDraftRelations(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n locale: string | string[]\n ) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n let localeFilter = {};\n if (locale) {\n localeFilter = Array.isArray(locale) ? { locale: { $in: locale } } : { locale };\n }\n\n const entities = await strapi.db.query(uid).findMany({\n populate,\n where: {\n documentId: { $in: documentIds },\n ...localeFilter,\n },\n });\n\n const totalNumberDraftRelations: number = entities!.reduce(\n (count: number, entity: Document) => sumDraftCounts(entity, uid) + count,\n 0\n );\n\n return totalNumberDraftRelations;\n },\n };\n};\n\nexport type DocumentManagerService = typeof documentManager;\n\nexport default documentManager;\n"],"names":["ApplicationError","errors","PUBLISHED_AT_ATTRIBUTE","contentTypes","constants","omitPublishedAtField","omit","omitIdField","documentManager","strapi","findOne","id","uid","opts","documents","documentId","findLocales","where","Array","isArray","locale","$in","isPublished","publishedAt","$notNull","db","query","findMany","populate","params","getDeepPopulate","findPage","pagination","withDefaultPagination","maxLimit","total","Promise","all","count","results","transformPagedPaginationInfo","create","buildDeepPopulate","status","update","publishData","pipe","data","clone","body","then","result","entries","at","exists","delete","deleteMany","documentIds","deletedEntries","transaction","map","length","publish","publishMany","publishedEntitiesCount","flat","filter","Boolean","unpublishMany","unpublishedEntries","unpublish","unpublishedEntitiesCount","discardDraft","countDraftRelations","hasRelations","getDeepPopulateDraftCount","document","sumDraftCounts","countManyEntriesDraftRelations","localeFilter","entities","totalNumberDraftRelations","reduce","entity"],"mappings":"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"}
@@ -89,8 +89,15 @@ const documentManager = ({ strapi })=>{
89
89
  },
90
90
  async clone (id, body, uid) {
91
91
  const populate = await buildDeepPopulate(uid);
92
+ // Extract the locale to pass it as a plain param
93
+ const locale = body?.locale;
92
94
  const params = {
93
- data: omitIdField(body),
95
+ // Ensure id and documentId are not copied to the clone
96
+ data: omit([
97
+ 'id',
98
+ 'documentId'
99
+ ], body),
100
+ locale,
94
101
  populate
95
102
  };
96
103
  return strapi.documents(uid).clone({
@@ -1 +1 @@
1
- {"version":3,"file":"document-manager.mjs","sources":["../../../server/src/services/document-manager.ts"],"sourcesContent":["import { omit, pipe } from 'lodash/fp';\n\nimport { contentTypes, errors, pagination } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { buildDeepPopulate, getDeepPopulate, getDeepPopulateDraftCount } from './utils/populate';\nimport { sumDraftCounts } from './utils/draft';\n\ntype DocService = Modules.Documents.ServiceInstance;\ntype DocServiceParams<TAction extends keyof DocService> = Parameters<DocService[TAction]>[0];\nexport type Document = Modules.Documents.Result<UID.ContentType>;\n\nconst { ApplicationError } = errors;\nconst { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;\n\nconst omitPublishedAtField = omit(PUBLISHED_AT_ATTRIBUTE);\nconst omitIdField = omit('id');\n\nconst documentManager = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n async findOne(\n id: string,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'findOne'>, 'documentId'> = {}\n ) {\n return strapi.documents(uid).findOne({ ...opts, documentId: id });\n },\n\n /**\n * Find multiple (or all) locales for a document\n */\n async findLocales(\n id: string | string[] | undefined,\n uid: UID.CollectionType,\n opts: {\n populate?: Modules.Documents.Params.Pick<any, 'populate'>;\n locale?: string | string[] | '*';\n isPublished?: boolean;\n }\n ) {\n // Will look for a specific locale by default\n const where: any = {};\n\n // Might not have an id if querying a single type\n if (id) {\n where.documentId = id;\n }\n\n // Search in array of locales\n if (Array.isArray(opts.locale)) {\n where.locale = { $in: opts.locale };\n } else if (opts.locale && opts.locale !== '*') {\n // Look for a specific locale, ignore if looking for all locales\n where.locale = opts.locale;\n }\n\n // Published is passed, so we filter on it, otherwise we don't filter\n if (typeof opts.isPublished === 'boolean') {\n where.publishedAt = { $notNull: opts.isPublished };\n }\n\n return strapi.db.query(uid).findMany({ populate: opts.populate, where });\n },\n\n async findMany(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = { ...opts, populate: getDeepPopulate(uid) } as typeof opts;\n return strapi.documents(uid).findMany(params);\n },\n\n async findPage(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = pagination.withDefaultPagination(opts || {}, {\n maxLimit: 1000,\n });\n\n const [documents, total = 0] = await Promise.all([\n strapi.documents(uid).findMany(params),\n strapi.documents(uid).count(params),\n ]);\n\n return {\n results: documents,\n pagination: pagination.transformPagedPaginationInfo(params, total),\n };\n },\n\n async create(uid: UID.CollectionType, opts: DocServiceParams<'create'> = {} as any) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, status: 'draft' as const, populate };\n\n return strapi.documents(uid).create(params);\n },\n\n async update(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'update'>, 'documentId'> = {} as any\n ) {\n const publishData = pipe(omitPublishedAtField, omitIdField)(opts.data || {});\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, data: publishData, populate, status: 'draft' };\n\n return strapi.documents(uid).update({ ...params, documentId: id });\n },\n\n async clone(\n id: Modules.Documents.ID,\n body: Partial<Modules.Documents.Params.Data.Input<UID.CollectionType>>,\n uid: UID.CollectionType\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = {\n data: omitIdField(body),\n populate,\n };\n\n return strapi\n .documents(uid)\n .clone({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n /**\n * Check if a document exists\n */\n async exists(uid: UID.CollectionType, id?: string) {\n // Collection type\n if (id) {\n const count = await strapi.db.query(uid).count({ where: { documentId: id } });\n return count > 0;\n }\n\n // Single type\n const count = await strapi.db.query(uid).count();\n return count > 0;\n },\n\n async delete(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'delete'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n\n await strapi.documents(uid).delete({\n ...opts,\n documentId: id,\n populate,\n });\n return {};\n },\n\n // FIXME: handle relations\n async deleteMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: DocServiceParams<'findMany'> & { locale?: string } = {}\n ) {\n const deletedEntries = await strapi.db.transaction(async () => {\n return Promise.all(documentIds.map(async (id) => this.delete(id, uid, opts)));\n });\n\n return { count: deletedEntries.length };\n },\n\n async publish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'publish'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .publish({ ...params, documentId: id })\n .then((result) => result?.entries);\n },\n\n async publishMany(uid: UID.ContentType, documentIds: string[], locale?: string | string[]) {\n return strapi.db.transaction(async () => {\n const results = await Promise.all(\n documentIds.map((documentId) => this.publish(documentId, uid, { locale }))\n );\n\n const publishedEntitiesCount = results.flat().filter(Boolean).length;\n return publishedEntitiesCount;\n });\n },\n\n async unpublishMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const unpublishedEntries = await strapi.db.transaction(async () => {\n return Promise.all(\n documentIds.map((id) =>\n strapi\n .documents(uid)\n .unpublish({ ...opts, documentId: id })\n .then((result) => result?.entries)\n )\n );\n });\n\n const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;\n\n // Return the number of unpublished entities\n return { count: unpublishedEntitiesCount };\n },\n\n async unpublish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .unpublish({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async discardDraft(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'discardDraft'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .discardDraft({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async countDraftRelations(id: string, uid: UID.ContentType, locale: string) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n const document = await strapi.documents(uid).findOne({ documentId: id, populate, locale });\n if (!document) {\n throw new ApplicationError(\n `Unable to count draft relations, document with id ${id} and locale ${locale} not found`\n );\n }\n\n return sumDraftCounts(document, uid);\n },\n\n async countManyEntriesDraftRelations(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n locale: string | string[]\n ) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n let localeFilter = {};\n if (locale) {\n localeFilter = Array.isArray(locale) ? { locale: { $in: locale } } : { locale };\n }\n\n const entities = await strapi.db.query(uid).findMany({\n populate,\n where: {\n documentId: { $in: documentIds },\n ...localeFilter,\n },\n });\n\n const totalNumberDraftRelations: number = entities!.reduce(\n (count: number, entity: Document) => sumDraftCounts(entity, uid) + count,\n 0\n );\n\n return totalNumberDraftRelations;\n },\n };\n};\n\nexport type DocumentManagerService = typeof documentManager;\n\nexport default documentManager;\n"],"names":["ApplicationError","errors","PUBLISHED_AT_ATTRIBUTE","contentTypes","constants","omitPublishedAtField","omit","omitIdField","documentManager","strapi","findOne","id","uid","opts","documents","documentId","findLocales","where","Array","isArray","locale","$in","isPublished","publishedAt","$notNull","db","query","findMany","populate","params","getDeepPopulate","findPage","pagination","withDefaultPagination","maxLimit","total","Promise","all","count","results","transformPagedPaginationInfo","create","buildDeepPopulate","status","update","publishData","pipe","data","clone","body","then","result","entries","at","exists","delete","deleteMany","documentIds","deletedEntries","transaction","map","length","publish","publishMany","publishedEntitiesCount","flat","filter","Boolean","unpublishMany","unpublishedEntries","unpublish","unpublishedEntitiesCount","discardDraft","countDraftRelations","hasRelations","getDeepPopulateDraftCount","document","sumDraftCounts","countManyEntriesDraftRelations","localeFilter","entities","totalNumberDraftRelations","reduce","entity"],"mappings":"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"}
1
+ {"version":3,"file":"document-manager.mjs","sources":["../../../server/src/services/document-manager.ts"],"sourcesContent":["import { omit, pipe } from 'lodash/fp';\n\nimport { contentTypes, errors, pagination } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { buildDeepPopulate, getDeepPopulate, getDeepPopulateDraftCount } from './utils/populate';\nimport { sumDraftCounts } from './utils/draft';\n\ntype DocService = Modules.Documents.ServiceInstance;\ntype DocServiceParams<TAction extends keyof DocService> = Parameters<DocService[TAction]>[0];\nexport type Document = Modules.Documents.Result<UID.ContentType>;\n\nconst { ApplicationError } = errors;\nconst { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;\n\nconst omitPublishedAtField = omit(PUBLISHED_AT_ATTRIBUTE);\nconst omitIdField = omit('id');\n\nconst documentManager = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n async findOne(\n id: string,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'findOne'>, 'documentId'> = {}\n ) {\n return strapi.documents(uid).findOne({ ...opts, documentId: id });\n },\n\n /**\n * Find multiple (or all) locales for a document\n */\n async findLocales(\n id: string | string[] | undefined,\n uid: UID.CollectionType,\n opts: {\n populate?: Modules.Documents.Params.Pick<any, 'populate'>;\n locale?: string | string[] | '*';\n isPublished?: boolean;\n }\n ) {\n // Will look for a specific locale by default\n const where: any = {};\n\n // Might not have an id if querying a single type\n if (id) {\n where.documentId = id;\n }\n\n // Search in array of locales\n if (Array.isArray(opts.locale)) {\n where.locale = { $in: opts.locale };\n } else if (opts.locale && opts.locale !== '*') {\n // Look for a specific locale, ignore if looking for all locales\n where.locale = opts.locale;\n }\n\n // Published is passed, so we filter on it, otherwise we don't filter\n if (typeof opts.isPublished === 'boolean') {\n where.publishedAt = { $notNull: opts.isPublished };\n }\n\n return strapi.db.query(uid).findMany({ populate: opts.populate, where });\n },\n\n async findMany(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = { ...opts, populate: getDeepPopulate(uid) } as typeof opts;\n return strapi.documents(uid).findMany(params);\n },\n\n async findPage(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = pagination.withDefaultPagination(opts || {}, {\n maxLimit: 1000,\n });\n\n const [documents, total = 0] = await Promise.all([\n strapi.documents(uid).findMany(params),\n strapi.documents(uid).count(params),\n ]);\n\n return {\n results: documents,\n pagination: pagination.transformPagedPaginationInfo(params, total),\n };\n },\n\n async create(uid: UID.CollectionType, opts: DocServiceParams<'create'> = {} as any) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, status: 'draft' as const, populate };\n\n return strapi.documents(uid).create(params);\n },\n\n async update(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'update'>, 'documentId'> = {} as any\n ) {\n const publishData = pipe(omitPublishedAtField, omitIdField)(opts.data || {});\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, data: publishData, populate, status: 'draft' };\n\n return strapi.documents(uid).update({ ...params, documentId: id });\n },\n\n async clone(\n id: Modules.Documents.ID,\n body: Partial<Modules.Documents.Params.Data.Input<UID.CollectionType>>,\n uid: UID.CollectionType\n ) {\n const populate = await buildDeepPopulate(uid);\n\n // Extract the locale to pass it as a plain param\n const locale = body?.locale;\n const params = {\n // Ensure id and documentId are not copied to the clone\n data: omit(['id', 'documentId'], body),\n locale,\n populate,\n };\n\n return strapi\n .documents(uid)\n .clone({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n /**\n * Check if a document exists\n */\n async exists(uid: UID.CollectionType, id?: string) {\n // Collection type\n if (id) {\n const count = await strapi.db.query(uid).count({ where: { documentId: id } });\n return count > 0;\n }\n\n // Single type\n const count = await strapi.db.query(uid).count();\n return count > 0;\n },\n\n async delete(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'delete'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n\n await strapi.documents(uid).delete({\n ...opts,\n documentId: id,\n populate,\n });\n return {};\n },\n\n // FIXME: handle relations\n async deleteMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: DocServiceParams<'findMany'> & { locale?: string } = {}\n ) {\n const deletedEntries = await strapi.db.transaction(async () => {\n return Promise.all(documentIds.map(async (id) => this.delete(id, uid, opts)));\n });\n\n return { count: deletedEntries.length };\n },\n\n async publish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'publish'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .publish({ ...params, documentId: id })\n .then((result) => result?.entries);\n },\n\n async publishMany(uid: UID.ContentType, documentIds: string[], locale?: string | string[]) {\n return strapi.db.transaction(async () => {\n const results = await Promise.all(\n documentIds.map((documentId) => this.publish(documentId, uid, { locale }))\n );\n\n const publishedEntitiesCount = results.flat().filter(Boolean).length;\n return publishedEntitiesCount;\n });\n },\n\n async unpublishMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const unpublishedEntries = await strapi.db.transaction(async () => {\n return Promise.all(\n documentIds.map((id) =>\n strapi\n .documents(uid)\n .unpublish({ ...opts, documentId: id })\n .then((result) => result?.entries)\n )\n );\n });\n\n const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;\n\n // Return the number of unpublished entities\n return { count: unpublishedEntitiesCount };\n },\n\n async unpublish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .unpublish({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async discardDraft(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'discardDraft'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .discardDraft({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async countDraftRelations(id: string, uid: UID.ContentType, locale: string) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n const document = await strapi.documents(uid).findOne({ documentId: id, populate, locale });\n if (!document) {\n throw new ApplicationError(\n `Unable to count draft relations, document with id ${id} and locale ${locale} not found`\n );\n }\n\n return sumDraftCounts(document, uid);\n },\n\n async countManyEntriesDraftRelations(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n locale: string | string[]\n ) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n let localeFilter = {};\n if (locale) {\n localeFilter = Array.isArray(locale) ? { locale: { $in: locale } } : { locale };\n }\n\n const entities = await strapi.db.query(uid).findMany({\n populate,\n where: {\n documentId: { $in: documentIds },\n ...localeFilter,\n },\n });\n\n const totalNumberDraftRelations: number = entities!.reduce(\n (count: number, entity: Document) => sumDraftCounts(entity, uid) + count,\n 0\n );\n\n return totalNumberDraftRelations;\n },\n };\n};\n\nexport type DocumentManagerService = typeof documentManager;\n\nexport default documentManager;\n"],"names":["ApplicationError","errors","PUBLISHED_AT_ATTRIBUTE","contentTypes","constants","omitPublishedAtField","omit","omitIdField","documentManager","strapi","findOne","id","uid","opts","documents","documentId","findLocales","where","Array","isArray","locale","$in","isPublished","publishedAt","$notNull","db","query","findMany","populate","params","getDeepPopulate","findPage","pagination","withDefaultPagination","maxLimit","total","Promise","all","count","results","transformPagedPaginationInfo","create","buildDeepPopulate","status","update","publishData","pipe","data","clone","body","then","result","entries","at","exists","delete","deleteMany","documentIds","deletedEntries","transaction","map","length","publish","publishMany","publishedEntitiesCount","flat","filter","Boolean","unpublishMany","unpublishedEntries","unpublish","unpublishedEntitiesCount","discardDraft","countDraftRelations","hasRelations","getDeepPopulateDraftCount","document","sumDraftCounts","countManyEntriesDraftRelations","localeFilter","entities","totalNumberDraftRelations","reduce","entity"],"mappings":"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"}
@@ -4,8 +4,10 @@ var fp = require('lodash/fp');
4
4
  var strapiUtils = require('@strapi/utils');
5
5
  var populate = require('./utils/populate.js');
6
6
 
7
+ const { getScalarAttributes } = strapiUtils.contentTypes;
7
8
  const AVAILABLE_STATUS_FIELDS = [
8
9
  'id',
10
+ 'documentId',
9
11
  'locale',
10
12
  'updatedAt',
11
13
  'createdAt',
@@ -16,6 +18,7 @@ const AVAILABLE_STATUS_FIELDS = [
16
18
  ];
17
19
  const AVAILABLE_LOCALES_FIELDS = [
18
20
  'id',
21
+ 'documentId',
19
22
  'locale',
20
23
  'updatedAt',
21
24
  'createdAt',
@@ -148,6 +151,26 @@ var documentMetadata = (({ strapi })=>({
148
151
  // TODO: Ignore publishedAt if availableStatus=false, and ignore locale if
149
152
  // i18n is disabled
150
153
  const { populate: populate$1 = {}, fields = [] } = populate.getPopulateForValidation(uid);
154
+ // Include non-translatable scalar fields in availableLocales for i18n prefilling
155
+ let nonLocalizedFields = [];
156
+ try {
157
+ const i18nPlugin = strapi.plugin('i18n');
158
+ if (i18nPlugin) {
159
+ const i18nService = i18nPlugin.service('content-types');
160
+ if (i18nService?.getNonLocalizedAttributes) {
161
+ const model = strapi.getModel(uid);
162
+ if (model?.attributes) {
163
+ const allNonLocalized = i18nService.getNonLocalizedAttributes(model);
164
+ // Get only scalar attributes (components, relations, etc. can't be in fields array)
165
+ const scalarAttrs = getScalarAttributes(model);
166
+ // Only include scalar, non-localized fields that actually exist in the model
167
+ nonLocalizedFields = allNonLocalized.filter((field)=>field in model.attributes && scalarAttrs.includes(field));
168
+ }
169
+ }
170
+ }
171
+ } catch (error) {
172
+ // i18n plugin might not be enabled or might error, ignore silently
173
+ }
151
174
  const params = {
152
175
  populate: {
153
176
  ...populate$1,
@@ -171,7 +194,8 @@ var documentMetadata = (({ strapi })=>({
171
194
  },
172
195
  fields: fp.uniq([
173
196
  ...AVAILABLE_LOCALES_FIELDS,
174
- ...fields
197
+ ...fields,
198
+ ...nonLocalizedFields
175
199
  ]),
176
200
  filters: {
177
201
  documentId: version.documentId
@@ -213,7 +237,7 @@ var documentMetadata = (({ strapi })=>({
213
237
  if (document.localizations) {
214
238
  const otherStatus = await this.getManyAvailableStatus(uid, document.localizations);
215
239
  document.localizations = document.localizations.map((d)=>{
216
- const status = otherStatus.find((s)=>s.documentId === d.documentId);
240
+ const status = otherStatus.find((s)=>s.documentId === d.documentId && s.locale === d.locale);
217
241
  return {
218
242
  ...d,
219
243
  status: this.getStatus(d, status ? [
@@ -1 +1 @@
1
- {"version":3,"file":"document-metadata.js","sources":["../../../server/src/services/document-metadata.ts"],"sourcesContent":["import { groupBy, pick, uniq } from 'lodash/fp';\n\nimport { async, contentTypes } from '@strapi/utils';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport type { DocumentMetadata } from '../../../shared/contracts/collection-types';\nimport { getPopulateForValidation } from './utils/populate';\n\nexport interface DocumentVersion {\n id: string | number;\n documentId: Modules.Documents.ID;\n locale?: string;\n localizations?: DocumentVersion[];\n updatedAt?: string | null | Date;\n publishedAt?: string | null | Date;\n}\n\nconst AVAILABLE_STATUS_FIELDS = [\n 'id',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'createdBy',\n 'updatedBy',\n 'status',\n];\nconst AVAILABLE_LOCALES_FIELDS = [\n 'id',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'documentId',\n];\n\nconst CONTENT_MANAGER_STATUS = {\n PUBLISHED: 'published',\n DRAFT: 'draft',\n MODIFIED: 'modified',\n};\n\n/**\n * Controls the metadata properties to be returned\n *\n * If `availableLocales` is set to `true` (default), the returned metadata will include\n * the available locales of the document for its current status.\n *\n * If `availableStatus` is set to `true` (default), the returned metadata will include\n * the available status of the document for its current locale.\n */\nexport interface GetMetadataOptions {\n availableLocales?: boolean;\n availableStatus?: boolean;\n}\n\n/**\n * Checks if the provided document version has been modified after all other versions.\n */\nconst getIsVersionLatestModification = (\n version?: DocumentVersion,\n otherVersion?: DocumentVersion\n): boolean => {\n if (!version || !version.updatedAt) {\n return false;\n }\n\n const versionUpdatedAt = version?.updatedAt ? new Date(version.updatedAt).getTime() : 0;\n\n const otherUpdatedAt = otherVersion?.updatedAt ? new Date(otherVersion.updatedAt).getTime() : 0;\n\n return versionUpdatedAt > otherUpdatedAt;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n /**\n * Returns available locales of a document for the current status\n */\n async getAvailableLocales(\n uid: UID.ContentType,\n version: DocumentVersion,\n allVersions: DocumentVersion[]\n ) {\n // Group all versions by locale\n const versionsByLocale = groupBy('locale', allVersions);\n\n // Delete the current locale\n if (version.locale) {\n delete versionsByLocale[version.locale];\n }\n\n // For each locale, get the ones with the same status\n // There will not be a draft and a version counterpart if the content\n // type does not have draft and publish\n const model = strapi.getModel(uid);\n\n const mappingResult = await async.map(\n Object.values(versionsByLocale),\n async (localeVersions: DocumentVersion[]) => {\n if (!contentTypes.hasDraftAndPublish(model)) {\n return localeVersions[0];\n }\n\n const draftVersion = localeVersions.find((v) => v.publishedAt === null);\n const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);\n\n if (!draftVersion) {\n return;\n }\n\n return {\n ...draftVersion,\n status: this.getStatus(draftVersion, otherVersions as any),\n };\n }\n );\n\n return (\n mappingResult\n // Filter just in case there is a document with no drafts\n .filter(Boolean) as unknown as DocumentMetadata['availableLocales']\n );\n },\n\n /**\n * Returns available status of a document for the current locale\n */\n getAvailableStatus(version: DocumentVersion, allVersions: DocumentVersion[]) {\n // Find the other status of the document\n const status =\n version.publishedAt !== null\n ? CONTENT_MANAGER_STATUS.DRAFT\n : CONTENT_MANAGER_STATUS.PUBLISHED;\n\n // Get version that match the current locale and not match the current status\n const availableStatus = allVersions.find((v) => {\n const matchLocale = v.locale === version.locale;\n const matchStatus = status === 'published' ? v.publishedAt !== null : v.publishedAt === null;\n return matchLocale && matchStatus;\n });\n\n if (!availableStatus) return availableStatus;\n\n // Pick status fields (at fields, status, by fields), use lodash fp\n return pick(AVAILABLE_STATUS_FIELDS, availableStatus);\n },\n\n /**\n * Get the available status of many documents, useful for batch operations\n * @param uid\n * @param documents\n * @returns\n */\n async getManyAvailableStatus(uid: UID.ContentType, documents: DocumentVersion[]) {\n if (!documents.length) return [];\n\n // The status and locale of all documents should be the same\n const status = documents[0].publishedAt !== null ? 'published' : 'draft';\n const locales = documents.map((d) => d.locale).filter(Boolean);\n\n const where: Record<string, any> = {\n documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },\n publishedAt: { $null: status === 'published' },\n };\n\n // If there is any locale to filter (if i18n is enabled)\n if (locales.length) {\n where.locale = { $in: locales };\n }\n\n return strapi.query(uid).findMany({\n where,\n select: ['id', 'documentId', 'locale', 'updatedAt', 'createdAt', 'publishedAt'],\n });\n },\n\n getStatus(version: DocumentVersion, otherDocumentStatuses?: DocumentMetadata['availableStatus']) {\n let draftVersion: DocumentVersion | undefined;\n let publishedVersion: DocumentVersion | undefined;\n\n if (version.publishedAt) {\n publishedVersion = version;\n } else {\n draftVersion = version;\n }\n\n const otherVersion = otherDocumentStatuses?.at(0);\n if (otherVersion?.publishedAt) {\n publishedVersion = otherVersion;\n } else if (otherVersion) {\n draftVersion = otherVersion;\n }\n\n if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;\n if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;\n\n /*\n * The document is modified if the draft version has been updated more\n * recently than the published version.\n */\n const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);\n return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;\n },\n\n // TODO is it necessary to return metadata on every page of the CM\n // We could refactor this so the locales are only loaded when they're\n // needed. e.g. in the bulk locale action modal.\n async getMetadata(\n uid: UID.ContentType,\n version: DocumentVersion,\n { availableLocales = true, availableStatus = true }: GetMetadataOptions = {}\n ) {\n // TODO: Ignore publishedAt if availableStatus=false, and ignore locale if\n // i18n is disabled\n const { populate = {}, fields = [] } = getPopulateForValidation(uid);\n\n const params = {\n populate: {\n ...populate,\n // NOTE: creator fields are selected in this way to avoid exposing sensitive data\n createdBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n updatedBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n },\n fields: uniq([...AVAILABLE_LOCALES_FIELDS, ...fields]),\n filters: {\n documentId: version.documentId,\n },\n };\n\n const dbParams = strapi.get('query-params').transform(uid, params);\n const versions = await strapi.db.query(uid).findMany(dbParams);\n\n // TODO: Remove use of available locales and use localizations instead\n const availableLocalesResult = availableLocales\n ? await this.getAvailableLocales(uid, version, versions)\n : [];\n\n const availableStatusResult = availableStatus\n ? this.getAvailableStatus(version, versions)\n : null;\n\n return {\n availableLocales: availableLocalesResult,\n availableStatus: availableStatusResult ? [availableStatusResult] : [],\n };\n },\n\n /**\n * Returns associated metadata of a document:\n * - Available locales of the document for the current status\n * - Available status of the document for the current locale\n */\n async formatDocumentWithMetadata(\n uid: UID.ContentType,\n document: DocumentVersion,\n opts: GetMetadataOptions = {}\n ) {\n if (!document) {\n return {\n data: document,\n meta: {\n availableLocales: [],\n availableStatus: [],\n },\n };\n }\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(uid));\n\n // Ignore available status if the content type does not have draft and publish\n if (!hasDraftAndPublish) {\n opts.availableStatus = false;\n }\n\n const meta = await this.getMetadata(uid, document, opts);\n\n // Populate localization statuses\n if (document.localizations) {\n const otherStatus = await this.getManyAvailableStatus(uid, document.localizations);\n\n document.localizations = document.localizations.map((d) => {\n const status = otherStatus.find((s) => s.documentId === d.documentId);\n return {\n ...d,\n status: this.getStatus(d, status ? [status] : []),\n };\n });\n }\n\n return {\n data: {\n ...document,\n // Add status to the document only if draft and publish is enabled\n status: hasDraftAndPublish\n ? this.getStatus(document, meta.availableStatus as any)\n : undefined,\n },\n meta,\n };\n },\n});\n"],"names":["AVAILABLE_STATUS_FIELDS","AVAILABLE_LOCALES_FIELDS","CONTENT_MANAGER_STATUS","PUBLISHED","DRAFT","MODIFIED","getIsVersionLatestModification","version","otherVersion","updatedAt","versionUpdatedAt","Date","getTime","otherUpdatedAt","strapi","getAvailableLocales","uid","allVersions","versionsByLocale","groupBy","locale","model","getModel","mappingResult","async","map","Object","values","localeVersions","contentTypes","hasDraftAndPublish","draftVersion","find","v","publishedAt","otherVersions","filter","id","status","getStatus","Boolean","getAvailableStatus","availableStatus","matchLocale","matchStatus","pick","getManyAvailableStatus","documents","length","locales","d","where","documentId","$in","$null","query","findMany","select","otherDocumentStatuses","publishedVersion","at","isDraftModified","getMetadata","availableLocales","populate","fields","getPopulateForValidation","params","createdBy","updatedBy","uniq","filters","dbParams","get","transform","versions","db","availableLocalesResult","availableStatusResult","formatDocumentWithMetadata","document","opts","data","meta","localizations","otherStatus","s","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"document-metadata.js","sources":["../../../server/src/services/document-metadata.ts"],"sourcesContent":["import { groupBy, pick, uniq } from 'lodash/fp';\n\nimport { async, contentTypes } from '@strapi/utils';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport type { DocumentMetadata } from '../../../shared/contracts/collection-types';\nimport { getPopulateForValidation } from './utils/populate';\n\nconst { getScalarAttributes } = contentTypes;\n\nexport interface DocumentVersion {\n id: string | number;\n documentId: Modules.Documents.ID;\n locale?: string;\n localizations?: DocumentVersion[];\n updatedAt?: string | null | Date;\n publishedAt?: string | null | Date;\n}\n\nconst AVAILABLE_STATUS_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'createdBy',\n 'updatedBy',\n 'status',\n];\nconst AVAILABLE_LOCALES_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'documentId',\n];\n\nconst CONTENT_MANAGER_STATUS = {\n PUBLISHED: 'published',\n DRAFT: 'draft',\n MODIFIED: 'modified',\n};\n\n/**\n * Controls the metadata properties to be returned\n *\n * If `availableLocales` is set to `true` (default), the returned metadata will include\n * the available locales of the document for its current status.\n *\n * If `availableStatus` is set to `true` (default), the returned metadata will include\n * the available status of the document for its current locale.\n */\nexport interface GetMetadataOptions {\n availableLocales?: boolean;\n availableStatus?: boolean;\n}\n\n/**\n * Checks if the provided document version has been modified after all other versions.\n */\nconst getIsVersionLatestModification = (\n version?: DocumentVersion,\n otherVersion?: DocumentVersion\n): boolean => {\n if (!version || !version.updatedAt) {\n return false;\n }\n\n const versionUpdatedAt = version?.updatedAt ? new Date(version.updatedAt).getTime() : 0;\n\n const otherUpdatedAt = otherVersion?.updatedAt ? new Date(otherVersion.updatedAt).getTime() : 0;\n\n return versionUpdatedAt > otherUpdatedAt;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n /**\n * Returns available locales of a document for the current status\n */\n async getAvailableLocales(\n uid: UID.ContentType,\n version: DocumentVersion,\n allVersions: DocumentVersion[]\n ) {\n // Group all versions by locale\n const versionsByLocale = groupBy('locale', allVersions);\n\n // Delete the current locale\n if (version.locale) {\n delete versionsByLocale[version.locale];\n }\n\n // For each locale, get the ones with the same status\n // There will not be a draft and a version counterpart if the content\n // type does not have draft and publish\n const model = strapi.getModel(uid);\n\n const mappingResult = await async.map(\n Object.values(versionsByLocale),\n async (localeVersions: DocumentVersion[]) => {\n if (!contentTypes.hasDraftAndPublish(model)) {\n return localeVersions[0];\n }\n\n const draftVersion = localeVersions.find((v) => v.publishedAt === null);\n const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);\n\n if (!draftVersion) {\n return;\n }\n\n return {\n ...draftVersion,\n status: this.getStatus(draftVersion, otherVersions as any),\n };\n }\n );\n\n return (\n mappingResult\n // Filter just in case there is a document with no drafts\n .filter(Boolean) as unknown as DocumentMetadata['availableLocales']\n );\n },\n\n /**\n * Returns available status of a document for the current locale\n */\n getAvailableStatus(version: DocumentVersion, allVersions: DocumentVersion[]) {\n // Find the other status of the document\n const status =\n version.publishedAt !== null\n ? CONTENT_MANAGER_STATUS.DRAFT\n : CONTENT_MANAGER_STATUS.PUBLISHED;\n\n // Get version that match the current locale and not match the current status\n const availableStatus = allVersions.find((v) => {\n const matchLocale = v.locale === version.locale;\n const matchStatus = status === 'published' ? v.publishedAt !== null : v.publishedAt === null;\n return matchLocale && matchStatus;\n });\n\n if (!availableStatus) return availableStatus;\n\n // Pick status fields (at fields, status, by fields), use lodash fp\n return pick(AVAILABLE_STATUS_FIELDS, availableStatus);\n },\n\n /**\n * Get the available status of many documents, useful for batch operations\n * @param uid\n * @param documents\n * @returns\n */\n async getManyAvailableStatus(uid: UID.ContentType, documents: DocumentVersion[]) {\n if (!documents.length) return [];\n\n // The status and locale of all documents should be the same\n const status = documents[0].publishedAt !== null ? 'published' : 'draft';\n const locales = documents.map((d) => d.locale).filter(Boolean);\n\n const where: Record<string, any> = {\n documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },\n publishedAt: { $null: status === 'published' },\n };\n\n // If there is any locale to filter (if i18n is enabled)\n if (locales.length) {\n where.locale = { $in: locales };\n }\n\n return strapi.query(uid).findMany({\n where,\n select: ['id', 'documentId', 'locale', 'updatedAt', 'createdAt', 'publishedAt'],\n });\n },\n\n getStatus(version: DocumentVersion, otherDocumentStatuses?: DocumentMetadata['availableStatus']) {\n let draftVersion: DocumentVersion | undefined;\n let publishedVersion: DocumentVersion | undefined;\n\n if (version.publishedAt) {\n publishedVersion = version;\n } else {\n draftVersion = version;\n }\n\n const otherVersion = otherDocumentStatuses?.at(0);\n if (otherVersion?.publishedAt) {\n publishedVersion = otherVersion;\n } else if (otherVersion) {\n draftVersion = otherVersion;\n }\n\n if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;\n if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;\n\n /*\n * The document is modified if the draft version has been updated more\n * recently than the published version.\n */\n const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);\n return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;\n },\n\n // TODO is it necessary to return metadata on every page of the CM\n // We could refactor this so the locales are only loaded when they're\n // needed. e.g. in the bulk locale action modal.\n async getMetadata(\n uid: UID.ContentType,\n version: DocumentVersion,\n { availableLocales = true, availableStatus = true }: GetMetadataOptions = {}\n ) {\n // TODO: Ignore publishedAt if availableStatus=false, and ignore locale if\n // i18n is disabled\n const { populate = {}, fields = [] } = getPopulateForValidation(uid);\n\n // Include non-translatable scalar fields in availableLocales for i18n prefilling\n let nonLocalizedFields: string[] = [];\n try {\n const i18nPlugin = strapi.plugin('i18n');\n if (i18nPlugin) {\n const i18nService = i18nPlugin.service('content-types');\n if (i18nService?.getNonLocalizedAttributes) {\n const model = strapi.getModel(uid);\n if (model?.attributes) {\n const allNonLocalized = i18nService.getNonLocalizedAttributes(model);\n // Get only scalar attributes (components, relations, etc. can't be in fields array)\n const scalarAttrs = getScalarAttributes(model);\n // Only include scalar, non-localized fields that actually exist in the model\n nonLocalizedFields = allNonLocalized.filter(\n (field: string) => field in model.attributes && scalarAttrs.includes(field)\n );\n }\n }\n }\n } catch (error) {\n // i18n plugin might not be enabled or might error, ignore silently\n }\n\n const params = {\n populate: {\n ...populate,\n // NOTE: creator fields are selected in this way to avoid exposing sensitive data\n createdBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n updatedBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n },\n fields: uniq([...AVAILABLE_LOCALES_FIELDS, ...fields, ...nonLocalizedFields]),\n filters: {\n documentId: version.documentId,\n },\n };\n\n const dbParams = strapi.get('query-params').transform(uid, params);\n const versions = await strapi.db.query(uid).findMany(dbParams);\n\n // TODO: Remove use of available locales and use localizations instead\n const availableLocalesResult = availableLocales\n ? await this.getAvailableLocales(uid, version, versions)\n : [];\n\n const availableStatusResult = availableStatus\n ? this.getAvailableStatus(version, versions)\n : null;\n\n return {\n availableLocales: availableLocalesResult,\n availableStatus: availableStatusResult ? [availableStatusResult] : [],\n };\n },\n\n /**\n * Returns associated metadata of a document:\n * - Available locales of the document for the current status\n * - Available status of the document for the current locale\n */\n async formatDocumentWithMetadata(\n uid: UID.ContentType,\n document: DocumentVersion,\n opts: GetMetadataOptions = {}\n ) {\n if (!document) {\n return {\n data: document,\n meta: {\n availableLocales: [],\n availableStatus: [],\n },\n };\n }\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(uid));\n\n // Ignore available status if the content type does not have draft and publish\n if (!hasDraftAndPublish) {\n opts.availableStatus = false;\n }\n\n const meta = await this.getMetadata(uid, document, opts);\n\n // Populate localization statuses\n if (document.localizations) {\n const otherStatus = await this.getManyAvailableStatus(uid, document.localizations);\n\n document.localizations = document.localizations.map((d) => {\n const status = otherStatus.find(\n (s) => s.documentId === d.documentId && s.locale === d.locale\n );\n return {\n ...d,\n status: this.getStatus(d, status ? [status] : []),\n };\n });\n }\n\n return {\n data: {\n ...document,\n // Add status to the document only if draft and publish is enabled\n status: hasDraftAndPublish\n ? this.getStatus(document, meta.availableStatus as any)\n : undefined,\n },\n meta,\n };\n },\n});\n"],"names":["getScalarAttributes","contentTypes","AVAILABLE_STATUS_FIELDS","AVAILABLE_LOCALES_FIELDS","CONTENT_MANAGER_STATUS","PUBLISHED","DRAFT","MODIFIED","getIsVersionLatestModification","version","otherVersion","updatedAt","versionUpdatedAt","Date","getTime","otherUpdatedAt","strapi","getAvailableLocales","uid","allVersions","versionsByLocale","groupBy","locale","model","getModel","mappingResult","async","map","Object","values","localeVersions","hasDraftAndPublish","draftVersion","find","v","publishedAt","otherVersions","filter","id","status","getStatus","Boolean","getAvailableStatus","availableStatus","matchLocale","matchStatus","pick","getManyAvailableStatus","documents","length","locales","d","where","documentId","$in","$null","query","findMany","select","otherDocumentStatuses","publishedVersion","at","isDraftModified","getMetadata","availableLocales","populate","fields","getPopulateForValidation","nonLocalizedFields","i18nPlugin","plugin","i18nService","service","getNonLocalizedAttributes","attributes","allNonLocalized","scalarAttrs","field","includes","error","params","createdBy","updatedBy","uniq","filters","dbParams","get","transform","versions","db","availableLocalesResult","availableStatusResult","formatDocumentWithMetadata","document","opts","data","meta","localizations","otherStatus","s","undefined"],"mappings":"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"}
@@ -2,8 +2,10 @@ import { groupBy, pick, uniq } from 'lodash/fp';
2
2
  import { async, contentTypes } from '@strapi/utils';
3
3
  import { getPopulateForValidation } from './utils/populate.mjs';
4
4
 
5
+ const { getScalarAttributes } = contentTypes;
5
6
  const AVAILABLE_STATUS_FIELDS = [
6
7
  'id',
8
+ 'documentId',
7
9
  'locale',
8
10
  'updatedAt',
9
11
  'createdAt',
@@ -14,6 +16,7 @@ const AVAILABLE_STATUS_FIELDS = [
14
16
  ];
15
17
  const AVAILABLE_LOCALES_FIELDS = [
16
18
  'id',
19
+ 'documentId',
17
20
  'locale',
18
21
  'updatedAt',
19
22
  'createdAt',
@@ -146,6 +149,26 @@ var documentMetadata = (({ strapi })=>({
146
149
  // TODO: Ignore publishedAt if availableStatus=false, and ignore locale if
147
150
  // i18n is disabled
148
151
  const { populate = {}, fields = [] } = getPopulateForValidation(uid);
152
+ // Include non-translatable scalar fields in availableLocales for i18n prefilling
153
+ let nonLocalizedFields = [];
154
+ try {
155
+ const i18nPlugin = strapi.plugin('i18n');
156
+ if (i18nPlugin) {
157
+ const i18nService = i18nPlugin.service('content-types');
158
+ if (i18nService?.getNonLocalizedAttributes) {
159
+ const model = strapi.getModel(uid);
160
+ if (model?.attributes) {
161
+ const allNonLocalized = i18nService.getNonLocalizedAttributes(model);
162
+ // Get only scalar attributes (components, relations, etc. can't be in fields array)
163
+ const scalarAttrs = getScalarAttributes(model);
164
+ // Only include scalar, non-localized fields that actually exist in the model
165
+ nonLocalizedFields = allNonLocalized.filter((field)=>field in model.attributes && scalarAttrs.includes(field));
166
+ }
167
+ }
168
+ }
169
+ } catch (error) {
170
+ // i18n plugin might not be enabled or might error, ignore silently
171
+ }
149
172
  const params = {
150
173
  populate: {
151
174
  ...populate,
@@ -169,7 +192,8 @@ var documentMetadata = (({ strapi })=>({
169
192
  },
170
193
  fields: uniq([
171
194
  ...AVAILABLE_LOCALES_FIELDS,
172
- ...fields
195
+ ...fields,
196
+ ...nonLocalizedFields
173
197
  ]),
174
198
  filters: {
175
199
  documentId: version.documentId
@@ -211,7 +235,7 @@ var documentMetadata = (({ strapi })=>({
211
235
  if (document.localizations) {
212
236
  const otherStatus = await this.getManyAvailableStatus(uid, document.localizations);
213
237
  document.localizations = document.localizations.map((d)=>{
214
- const status = otherStatus.find((s)=>s.documentId === d.documentId);
238
+ const status = otherStatus.find((s)=>s.documentId === d.documentId && s.locale === d.locale);
215
239
  return {
216
240
  ...d,
217
241
  status: this.getStatus(d, status ? [
@@ -1 +1 @@
1
- {"version":3,"file":"document-metadata.mjs","sources":["../../../server/src/services/document-metadata.ts"],"sourcesContent":["import { groupBy, pick, uniq } from 'lodash/fp';\n\nimport { async, contentTypes } from '@strapi/utils';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport type { DocumentMetadata } from '../../../shared/contracts/collection-types';\nimport { getPopulateForValidation } from './utils/populate';\n\nexport interface DocumentVersion {\n id: string | number;\n documentId: Modules.Documents.ID;\n locale?: string;\n localizations?: DocumentVersion[];\n updatedAt?: string | null | Date;\n publishedAt?: string | null | Date;\n}\n\nconst AVAILABLE_STATUS_FIELDS = [\n 'id',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'createdBy',\n 'updatedBy',\n 'status',\n];\nconst AVAILABLE_LOCALES_FIELDS = [\n 'id',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'documentId',\n];\n\nconst CONTENT_MANAGER_STATUS = {\n PUBLISHED: 'published',\n DRAFT: 'draft',\n MODIFIED: 'modified',\n};\n\n/**\n * Controls the metadata properties to be returned\n *\n * If `availableLocales` is set to `true` (default), the returned metadata will include\n * the available locales of the document for its current status.\n *\n * If `availableStatus` is set to `true` (default), the returned metadata will include\n * the available status of the document for its current locale.\n */\nexport interface GetMetadataOptions {\n availableLocales?: boolean;\n availableStatus?: boolean;\n}\n\n/**\n * Checks if the provided document version has been modified after all other versions.\n */\nconst getIsVersionLatestModification = (\n version?: DocumentVersion,\n otherVersion?: DocumentVersion\n): boolean => {\n if (!version || !version.updatedAt) {\n return false;\n }\n\n const versionUpdatedAt = version?.updatedAt ? new Date(version.updatedAt).getTime() : 0;\n\n const otherUpdatedAt = otherVersion?.updatedAt ? new Date(otherVersion.updatedAt).getTime() : 0;\n\n return versionUpdatedAt > otherUpdatedAt;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n /**\n * Returns available locales of a document for the current status\n */\n async getAvailableLocales(\n uid: UID.ContentType,\n version: DocumentVersion,\n allVersions: DocumentVersion[]\n ) {\n // Group all versions by locale\n const versionsByLocale = groupBy('locale', allVersions);\n\n // Delete the current locale\n if (version.locale) {\n delete versionsByLocale[version.locale];\n }\n\n // For each locale, get the ones with the same status\n // There will not be a draft and a version counterpart if the content\n // type does not have draft and publish\n const model = strapi.getModel(uid);\n\n const mappingResult = await async.map(\n Object.values(versionsByLocale),\n async (localeVersions: DocumentVersion[]) => {\n if (!contentTypes.hasDraftAndPublish(model)) {\n return localeVersions[0];\n }\n\n const draftVersion = localeVersions.find((v) => v.publishedAt === null);\n const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);\n\n if (!draftVersion) {\n return;\n }\n\n return {\n ...draftVersion,\n status: this.getStatus(draftVersion, otherVersions as any),\n };\n }\n );\n\n return (\n mappingResult\n // Filter just in case there is a document with no drafts\n .filter(Boolean) as unknown as DocumentMetadata['availableLocales']\n );\n },\n\n /**\n * Returns available status of a document for the current locale\n */\n getAvailableStatus(version: DocumentVersion, allVersions: DocumentVersion[]) {\n // Find the other status of the document\n const status =\n version.publishedAt !== null\n ? CONTENT_MANAGER_STATUS.DRAFT\n : CONTENT_MANAGER_STATUS.PUBLISHED;\n\n // Get version that match the current locale and not match the current status\n const availableStatus = allVersions.find((v) => {\n const matchLocale = v.locale === version.locale;\n const matchStatus = status === 'published' ? v.publishedAt !== null : v.publishedAt === null;\n return matchLocale && matchStatus;\n });\n\n if (!availableStatus) return availableStatus;\n\n // Pick status fields (at fields, status, by fields), use lodash fp\n return pick(AVAILABLE_STATUS_FIELDS, availableStatus);\n },\n\n /**\n * Get the available status of many documents, useful for batch operations\n * @param uid\n * @param documents\n * @returns\n */\n async getManyAvailableStatus(uid: UID.ContentType, documents: DocumentVersion[]) {\n if (!documents.length) return [];\n\n // The status and locale of all documents should be the same\n const status = documents[0].publishedAt !== null ? 'published' : 'draft';\n const locales = documents.map((d) => d.locale).filter(Boolean);\n\n const where: Record<string, any> = {\n documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },\n publishedAt: { $null: status === 'published' },\n };\n\n // If there is any locale to filter (if i18n is enabled)\n if (locales.length) {\n where.locale = { $in: locales };\n }\n\n return strapi.query(uid).findMany({\n where,\n select: ['id', 'documentId', 'locale', 'updatedAt', 'createdAt', 'publishedAt'],\n });\n },\n\n getStatus(version: DocumentVersion, otherDocumentStatuses?: DocumentMetadata['availableStatus']) {\n let draftVersion: DocumentVersion | undefined;\n let publishedVersion: DocumentVersion | undefined;\n\n if (version.publishedAt) {\n publishedVersion = version;\n } else {\n draftVersion = version;\n }\n\n const otherVersion = otherDocumentStatuses?.at(0);\n if (otherVersion?.publishedAt) {\n publishedVersion = otherVersion;\n } else if (otherVersion) {\n draftVersion = otherVersion;\n }\n\n if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;\n if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;\n\n /*\n * The document is modified if the draft version has been updated more\n * recently than the published version.\n */\n const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);\n return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;\n },\n\n // TODO is it necessary to return metadata on every page of the CM\n // We could refactor this so the locales are only loaded when they're\n // needed. e.g. in the bulk locale action modal.\n async getMetadata(\n uid: UID.ContentType,\n version: DocumentVersion,\n { availableLocales = true, availableStatus = true }: GetMetadataOptions = {}\n ) {\n // TODO: Ignore publishedAt if availableStatus=false, and ignore locale if\n // i18n is disabled\n const { populate = {}, fields = [] } = getPopulateForValidation(uid);\n\n const params = {\n populate: {\n ...populate,\n // NOTE: creator fields are selected in this way to avoid exposing sensitive data\n createdBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n updatedBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n },\n fields: uniq([...AVAILABLE_LOCALES_FIELDS, ...fields]),\n filters: {\n documentId: version.documentId,\n },\n };\n\n const dbParams = strapi.get('query-params').transform(uid, params);\n const versions = await strapi.db.query(uid).findMany(dbParams);\n\n // TODO: Remove use of available locales and use localizations instead\n const availableLocalesResult = availableLocales\n ? await this.getAvailableLocales(uid, version, versions)\n : [];\n\n const availableStatusResult = availableStatus\n ? this.getAvailableStatus(version, versions)\n : null;\n\n return {\n availableLocales: availableLocalesResult,\n availableStatus: availableStatusResult ? [availableStatusResult] : [],\n };\n },\n\n /**\n * Returns associated metadata of a document:\n * - Available locales of the document for the current status\n * - Available status of the document for the current locale\n */\n async formatDocumentWithMetadata(\n uid: UID.ContentType,\n document: DocumentVersion,\n opts: GetMetadataOptions = {}\n ) {\n if (!document) {\n return {\n data: document,\n meta: {\n availableLocales: [],\n availableStatus: [],\n },\n };\n }\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(uid));\n\n // Ignore available status if the content type does not have draft and publish\n if (!hasDraftAndPublish) {\n opts.availableStatus = false;\n }\n\n const meta = await this.getMetadata(uid, document, opts);\n\n // Populate localization statuses\n if (document.localizations) {\n const otherStatus = await this.getManyAvailableStatus(uid, document.localizations);\n\n document.localizations = document.localizations.map((d) => {\n const status = otherStatus.find((s) => s.documentId === d.documentId);\n return {\n ...d,\n status: this.getStatus(d, status ? [status] : []),\n };\n });\n }\n\n return {\n data: {\n ...document,\n // Add status to the document only if draft and publish is enabled\n status: hasDraftAndPublish\n ? this.getStatus(document, meta.availableStatus as any)\n : undefined,\n },\n meta,\n };\n },\n});\n"],"names":["AVAILABLE_STATUS_FIELDS","AVAILABLE_LOCALES_FIELDS","CONTENT_MANAGER_STATUS","PUBLISHED","DRAFT","MODIFIED","getIsVersionLatestModification","version","otherVersion","updatedAt","versionUpdatedAt","Date","getTime","otherUpdatedAt","strapi","getAvailableLocales","uid","allVersions","versionsByLocale","groupBy","locale","model","getModel","mappingResult","async","map","Object","values","localeVersions","contentTypes","hasDraftAndPublish","draftVersion","find","v","publishedAt","otherVersions","filter","id","status","getStatus","Boolean","getAvailableStatus","availableStatus","matchLocale","matchStatus","pick","getManyAvailableStatus","documents","length","locales","d","where","documentId","$in","$null","query","findMany","select","otherDocumentStatuses","publishedVersion","at","isDraftModified","getMetadata","availableLocales","populate","fields","getPopulateForValidation","params","createdBy","updatedBy","uniq","filters","dbParams","get","transform","versions","db","availableLocalesResult","availableStatusResult","formatDocumentWithMetadata","document","opts","data","meta","localizations","otherStatus","s","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"document-metadata.mjs","sources":["../../../server/src/services/document-metadata.ts"],"sourcesContent":["import { groupBy, pick, uniq } from 'lodash/fp';\n\nimport { async, contentTypes } from '@strapi/utils';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport type { DocumentMetadata } from '../../../shared/contracts/collection-types';\nimport { getPopulateForValidation } from './utils/populate';\n\nconst { getScalarAttributes } = contentTypes;\n\nexport interface DocumentVersion {\n id: string | number;\n documentId: Modules.Documents.ID;\n locale?: string;\n localizations?: DocumentVersion[];\n updatedAt?: string | null | Date;\n publishedAt?: string | null | Date;\n}\n\nconst AVAILABLE_STATUS_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'createdBy',\n 'updatedBy',\n 'status',\n];\nconst AVAILABLE_LOCALES_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'documentId',\n];\n\nconst CONTENT_MANAGER_STATUS = {\n PUBLISHED: 'published',\n DRAFT: 'draft',\n MODIFIED: 'modified',\n};\n\n/**\n * Controls the metadata properties to be returned\n *\n * If `availableLocales` is set to `true` (default), the returned metadata will include\n * the available locales of the document for its current status.\n *\n * If `availableStatus` is set to `true` (default), the returned metadata will include\n * the available status of the document for its current locale.\n */\nexport interface GetMetadataOptions {\n availableLocales?: boolean;\n availableStatus?: boolean;\n}\n\n/**\n * Checks if the provided document version has been modified after all other versions.\n */\nconst getIsVersionLatestModification = (\n version?: DocumentVersion,\n otherVersion?: DocumentVersion\n): boolean => {\n if (!version || !version.updatedAt) {\n return false;\n }\n\n const versionUpdatedAt = version?.updatedAt ? new Date(version.updatedAt).getTime() : 0;\n\n const otherUpdatedAt = otherVersion?.updatedAt ? new Date(otherVersion.updatedAt).getTime() : 0;\n\n return versionUpdatedAt > otherUpdatedAt;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n /**\n * Returns available locales of a document for the current status\n */\n async getAvailableLocales(\n uid: UID.ContentType,\n version: DocumentVersion,\n allVersions: DocumentVersion[]\n ) {\n // Group all versions by locale\n const versionsByLocale = groupBy('locale', allVersions);\n\n // Delete the current locale\n if (version.locale) {\n delete versionsByLocale[version.locale];\n }\n\n // For each locale, get the ones with the same status\n // There will not be a draft and a version counterpart if the content\n // type does not have draft and publish\n const model = strapi.getModel(uid);\n\n const mappingResult = await async.map(\n Object.values(versionsByLocale),\n async (localeVersions: DocumentVersion[]) => {\n if (!contentTypes.hasDraftAndPublish(model)) {\n return localeVersions[0];\n }\n\n const draftVersion = localeVersions.find((v) => v.publishedAt === null);\n const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);\n\n if (!draftVersion) {\n return;\n }\n\n return {\n ...draftVersion,\n status: this.getStatus(draftVersion, otherVersions as any),\n };\n }\n );\n\n return (\n mappingResult\n // Filter just in case there is a document with no drafts\n .filter(Boolean) as unknown as DocumentMetadata['availableLocales']\n );\n },\n\n /**\n * Returns available status of a document for the current locale\n */\n getAvailableStatus(version: DocumentVersion, allVersions: DocumentVersion[]) {\n // Find the other status of the document\n const status =\n version.publishedAt !== null\n ? CONTENT_MANAGER_STATUS.DRAFT\n : CONTENT_MANAGER_STATUS.PUBLISHED;\n\n // Get version that match the current locale and not match the current status\n const availableStatus = allVersions.find((v) => {\n const matchLocale = v.locale === version.locale;\n const matchStatus = status === 'published' ? v.publishedAt !== null : v.publishedAt === null;\n return matchLocale && matchStatus;\n });\n\n if (!availableStatus) return availableStatus;\n\n // Pick status fields (at fields, status, by fields), use lodash fp\n return pick(AVAILABLE_STATUS_FIELDS, availableStatus);\n },\n\n /**\n * Get the available status of many documents, useful for batch operations\n * @param uid\n * @param documents\n * @returns\n */\n async getManyAvailableStatus(uid: UID.ContentType, documents: DocumentVersion[]) {\n if (!documents.length) return [];\n\n // The status and locale of all documents should be the same\n const status = documents[0].publishedAt !== null ? 'published' : 'draft';\n const locales = documents.map((d) => d.locale).filter(Boolean);\n\n const where: Record<string, any> = {\n documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },\n publishedAt: { $null: status === 'published' },\n };\n\n // If there is any locale to filter (if i18n is enabled)\n if (locales.length) {\n where.locale = { $in: locales };\n }\n\n return strapi.query(uid).findMany({\n where,\n select: ['id', 'documentId', 'locale', 'updatedAt', 'createdAt', 'publishedAt'],\n });\n },\n\n getStatus(version: DocumentVersion, otherDocumentStatuses?: DocumentMetadata['availableStatus']) {\n let draftVersion: DocumentVersion | undefined;\n let publishedVersion: DocumentVersion | undefined;\n\n if (version.publishedAt) {\n publishedVersion = version;\n } else {\n draftVersion = version;\n }\n\n const otherVersion = otherDocumentStatuses?.at(0);\n if (otherVersion?.publishedAt) {\n publishedVersion = otherVersion;\n } else if (otherVersion) {\n draftVersion = otherVersion;\n }\n\n if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;\n if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;\n\n /*\n * The document is modified if the draft version has been updated more\n * recently than the published version.\n */\n const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);\n return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;\n },\n\n // TODO is it necessary to return metadata on every page of the CM\n // We could refactor this so the locales are only loaded when they're\n // needed. e.g. in the bulk locale action modal.\n async getMetadata(\n uid: UID.ContentType,\n version: DocumentVersion,\n { availableLocales = true, availableStatus = true }: GetMetadataOptions = {}\n ) {\n // TODO: Ignore publishedAt if availableStatus=false, and ignore locale if\n // i18n is disabled\n const { populate = {}, fields = [] } = getPopulateForValidation(uid);\n\n // Include non-translatable scalar fields in availableLocales for i18n prefilling\n let nonLocalizedFields: string[] = [];\n try {\n const i18nPlugin = strapi.plugin('i18n');\n if (i18nPlugin) {\n const i18nService = i18nPlugin.service('content-types');\n if (i18nService?.getNonLocalizedAttributes) {\n const model = strapi.getModel(uid);\n if (model?.attributes) {\n const allNonLocalized = i18nService.getNonLocalizedAttributes(model);\n // Get only scalar attributes (components, relations, etc. can't be in fields array)\n const scalarAttrs = getScalarAttributes(model);\n // Only include scalar, non-localized fields that actually exist in the model\n nonLocalizedFields = allNonLocalized.filter(\n (field: string) => field in model.attributes && scalarAttrs.includes(field)\n );\n }\n }\n }\n } catch (error) {\n // i18n plugin might not be enabled or might error, ignore silently\n }\n\n const params = {\n populate: {\n ...populate,\n // NOTE: creator fields are selected in this way to avoid exposing sensitive data\n createdBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n updatedBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n },\n fields: uniq([...AVAILABLE_LOCALES_FIELDS, ...fields, ...nonLocalizedFields]),\n filters: {\n documentId: version.documentId,\n },\n };\n\n const dbParams = strapi.get('query-params').transform(uid, params);\n const versions = await strapi.db.query(uid).findMany(dbParams);\n\n // TODO: Remove use of available locales and use localizations instead\n const availableLocalesResult = availableLocales\n ? await this.getAvailableLocales(uid, version, versions)\n : [];\n\n const availableStatusResult = availableStatus\n ? this.getAvailableStatus(version, versions)\n : null;\n\n return {\n availableLocales: availableLocalesResult,\n availableStatus: availableStatusResult ? [availableStatusResult] : [],\n };\n },\n\n /**\n * Returns associated metadata of a document:\n * - Available locales of the document for the current status\n * - Available status of the document for the current locale\n */\n async formatDocumentWithMetadata(\n uid: UID.ContentType,\n document: DocumentVersion,\n opts: GetMetadataOptions = {}\n ) {\n if (!document) {\n return {\n data: document,\n meta: {\n availableLocales: [],\n availableStatus: [],\n },\n };\n }\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(uid));\n\n // Ignore available status if the content type does not have draft and publish\n if (!hasDraftAndPublish) {\n opts.availableStatus = false;\n }\n\n const meta = await this.getMetadata(uid, document, opts);\n\n // Populate localization statuses\n if (document.localizations) {\n const otherStatus = await this.getManyAvailableStatus(uid, document.localizations);\n\n document.localizations = document.localizations.map((d) => {\n const status = otherStatus.find(\n (s) => s.documentId === d.documentId && s.locale === d.locale\n );\n return {\n ...d,\n status: this.getStatus(d, status ? [status] : []),\n };\n });\n }\n\n return {\n data: {\n ...document,\n // Add status to the document only if draft and publish is enabled\n status: hasDraftAndPublish\n ? this.getStatus(document, meta.availableStatus as any)\n : undefined,\n },\n meta,\n };\n },\n});\n"],"names":["getScalarAttributes","contentTypes","AVAILABLE_STATUS_FIELDS","AVAILABLE_LOCALES_FIELDS","CONTENT_MANAGER_STATUS","PUBLISHED","DRAFT","MODIFIED","getIsVersionLatestModification","version","otherVersion","updatedAt","versionUpdatedAt","Date","getTime","otherUpdatedAt","strapi","getAvailableLocales","uid","allVersions","versionsByLocale","groupBy","locale","model","getModel","mappingResult","async","map","Object","values","localeVersions","hasDraftAndPublish","draftVersion","find","v","publishedAt","otherVersions","filter","id","status","getStatus","Boolean","getAvailableStatus","availableStatus","matchLocale","matchStatus","pick","getManyAvailableStatus","documents","length","locales","d","where","documentId","$in","$null","query","findMany","select","otherDocumentStatuses","publishedVersion","at","isDraftModified","getMetadata","availableLocales","populate","fields","getPopulateForValidation","nonLocalizedFields","i18nPlugin","plugin","i18nService","service","getNonLocalizedAttributes","attributes","allNonLocalized","scalarAttrs","field","includes","error","params","createdBy","updatedBy","uniq","filters","dbParams","get","transform","versions","db","availableLocalesResult","availableStatusResult","formatDocumentWithMetadata","document","opts","data","meta","localizations","otherStatus","s","undefined"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"field-sizes.js","sources":["../../../server/src/services/field-sizes.ts"],"sourcesContent":["import { errors } from '@strapi/utils';\nimport type { Core, Modules } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\ntype FieldSize = Modules.CustomFields.CustomFieldServerOptions['inputSize'];\n\nconst needsFullSize: FieldSize = {\n default: 12,\n isResizable: false,\n};\n\nconst smallSize: FieldSize = {\n default: 4,\n isResizable: true,\n};\n\nconst defaultSize: FieldSize = {\n default: 6,\n isResizable: true,\n};\n\nconst fieldSizes: Record<string, FieldSize> = {\n // Full row and not resizable\n dynamiczone: needsFullSize,\n component: needsFullSize,\n json: needsFullSize,\n richtext: needsFullSize,\n blocks: needsFullSize,\n // Small and resizable\n checkbox: smallSize,\n boolean: smallSize,\n date: smallSize,\n time: smallSize,\n biginteger: smallSize,\n decimal: smallSize,\n float: smallSize,\n integer: smallSize,\n number: smallSize,\n // Medium and resizable\n datetime: defaultSize,\n email: defaultSize,\n enumeration: defaultSize,\n media: defaultSize,\n password: defaultSize,\n relation: defaultSize,\n string: defaultSize,\n text: defaultSize,\n timestamp: defaultSize,\n uid: defaultSize,\n};\n\nconst createFieldSizesService = ({ strapi }: { strapi: Core.Strapi }) => {\n const fieldSizesService = {\n getAllFieldSizes() {\n return fieldSizes;\n },\n\n hasFieldSize(type: string) {\n return !!fieldSizes[type];\n },\n\n getFieldSize(type?: string) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n const fieldSize = fieldSizes[type];\n if (!fieldSize) {\n throw new ApplicationError(`Could not find field size for type ${type}`);\n }\n\n return fieldSize;\n },\n\n setFieldSize(type: string, size: FieldSize) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n if (!size) {\n throw new ApplicationError('The size is required');\n }\n\n fieldSizes[type] = size;\n },\n\n setCustomFieldInputSizes() {\n // Find all custom fields already registered\n const customFields = strapi.get('custom-fields').getAll();\n\n // If they have a custom field size, register it\n // TODO types can be inferred when customFields is typed\n Object.entries(customFields).forEach(([uid, customField]: [string, any]) => {\n if (customField.inputSize) {\n fieldSizesService.setFieldSize(uid, customField.inputSize);\n }\n });\n },\n };\n\n return fieldSizesService;\n};\n\nexport default createFieldSizesService;\n"],"names":["ApplicationError","errors","needsFullSize","default","isResizable","smallSize","defaultSize","fieldSizes","dynamiczone","component","json","richtext","blocks","checkbox","boolean","date","time","biginteger","decimal","float","integer","number","datetime","email","enumeration","media","password","relation","string","text","timestamp","uid","createFieldSizesService","strapi","fieldSizesService","getAllFieldSizes","hasFieldSize","type","getFieldSize","fieldSize","setFieldSize","size","setCustomFieldInputSizes","customFields","get","getAll","Object","entries","forEach","customField","inputSize"],"mappings":"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"}
1
+ {"version":3,"file":"field-sizes.js","sources":["../../../server/src/services/field-sizes.ts"],"sourcesContent":["import { errors } from '@strapi/utils';\nimport type { Core, Modules } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\ntype FieldSize = Modules.CustomFields.CustomFieldServerOptions['inputSize'];\n\nconst needsFullSize: FieldSize = {\n default: 12,\n isResizable: false,\n};\n\nconst smallSize: FieldSize = {\n default: 4,\n isResizable: true,\n};\n\nconst defaultSize: FieldSize = {\n default: 6,\n isResizable: true,\n};\n\nconst fieldSizes: Record<string, FieldSize> = {\n // Full row and not resizable\n dynamiczone: needsFullSize,\n component: needsFullSize,\n json: needsFullSize,\n richtext: needsFullSize,\n blocks: needsFullSize,\n // Small and resizable\n checkbox: smallSize,\n boolean: smallSize,\n date: smallSize,\n time: smallSize,\n biginteger: smallSize,\n decimal: smallSize,\n float: smallSize,\n integer: smallSize,\n number: smallSize,\n // Medium and resizable\n datetime: defaultSize,\n email: defaultSize,\n enumeration: defaultSize,\n media: defaultSize,\n password: defaultSize,\n relation: defaultSize,\n string: defaultSize,\n text: defaultSize,\n timestamp: defaultSize,\n uid: defaultSize,\n};\n\nconst createFieldSizesService = ({ strapi }: { strapi: Core.Strapi }) => {\n const fieldSizesService = {\n getAllFieldSizes() {\n return fieldSizes;\n },\n\n hasFieldSize(type: string) {\n return !!fieldSizes[type];\n },\n\n getFieldSize(type?: string) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n const fieldSize = fieldSizes[type];\n if (!fieldSize) {\n throw new ApplicationError(`Could not find field size for type ${type}`);\n }\n\n return fieldSize;\n },\n\n setFieldSize(type: string, size: FieldSize) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n if (!size) {\n throw new ApplicationError('The size is required');\n }\n\n fieldSizes[type] = size;\n },\n\n setCustomFieldInputSizes() {\n // Find all custom fields already registered\n const customFields = strapi.get('custom-fields').getAll();\n\n // If they have a custom field size, register it\n // TODO types can be inferred when customFields is typed\n Object.entries(customFields).forEach(([uid, customField]: [string, any]) => {\n if (customField.inputSize) {\n fieldSizesService.setFieldSize(uid, customField.inputSize);\n }\n });\n },\n };\n\n return fieldSizesService;\n};\n\nexport default createFieldSizesService;\n"],"names":["ApplicationError","errors","needsFullSize","default","isResizable","smallSize","defaultSize","fieldSizes","dynamiczone","component","json","richtext","blocks","checkbox","boolean","date","time","biginteger","decimal","float","integer","number","datetime","email","enumeration","media","password","relation","string","text","timestamp","uid","createFieldSizesService","strapi","fieldSizesService","getAllFieldSizes","hasFieldSize","type","getFieldSize","fieldSize","setFieldSize","size","setCustomFieldInputSizes","customFields","get","getAll","Object","entries","forEach","customField","inputSize"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"field-sizes.mjs","sources":["../../../server/src/services/field-sizes.ts"],"sourcesContent":["import { errors } from '@strapi/utils';\nimport type { Core, Modules } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\ntype FieldSize = Modules.CustomFields.CustomFieldServerOptions['inputSize'];\n\nconst needsFullSize: FieldSize = {\n default: 12,\n isResizable: false,\n};\n\nconst smallSize: FieldSize = {\n default: 4,\n isResizable: true,\n};\n\nconst defaultSize: FieldSize = {\n default: 6,\n isResizable: true,\n};\n\nconst fieldSizes: Record<string, FieldSize> = {\n // Full row and not resizable\n dynamiczone: needsFullSize,\n component: needsFullSize,\n json: needsFullSize,\n richtext: needsFullSize,\n blocks: needsFullSize,\n // Small and resizable\n checkbox: smallSize,\n boolean: smallSize,\n date: smallSize,\n time: smallSize,\n biginteger: smallSize,\n decimal: smallSize,\n float: smallSize,\n integer: smallSize,\n number: smallSize,\n // Medium and resizable\n datetime: defaultSize,\n email: defaultSize,\n enumeration: defaultSize,\n media: defaultSize,\n password: defaultSize,\n relation: defaultSize,\n string: defaultSize,\n text: defaultSize,\n timestamp: defaultSize,\n uid: defaultSize,\n};\n\nconst createFieldSizesService = ({ strapi }: { strapi: Core.Strapi }) => {\n const fieldSizesService = {\n getAllFieldSizes() {\n return fieldSizes;\n },\n\n hasFieldSize(type: string) {\n return !!fieldSizes[type];\n },\n\n getFieldSize(type?: string) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n const fieldSize = fieldSizes[type];\n if (!fieldSize) {\n throw new ApplicationError(`Could not find field size for type ${type}`);\n }\n\n return fieldSize;\n },\n\n setFieldSize(type: string, size: FieldSize) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n if (!size) {\n throw new ApplicationError('The size is required');\n }\n\n fieldSizes[type] = size;\n },\n\n setCustomFieldInputSizes() {\n // Find all custom fields already registered\n const customFields = strapi.get('custom-fields').getAll();\n\n // If they have a custom field size, register it\n // TODO types can be inferred when customFields is typed\n Object.entries(customFields).forEach(([uid, customField]: [string, any]) => {\n if (customField.inputSize) {\n fieldSizesService.setFieldSize(uid, customField.inputSize);\n }\n });\n },\n };\n\n return fieldSizesService;\n};\n\nexport default createFieldSizesService;\n"],"names":["ApplicationError","errors","needsFullSize","default","isResizable","smallSize","defaultSize","fieldSizes","dynamiczone","component","json","richtext","blocks","checkbox","boolean","date","time","biginteger","decimal","float","integer","number","datetime","email","enumeration","media","password","relation","string","text","timestamp","uid","createFieldSizesService","strapi","fieldSizesService","getAllFieldSizes","hasFieldSize","type","getFieldSize","fieldSize","setFieldSize","size","setCustomFieldInputSizes","customFields","get","getAll","Object","entries","forEach","customField","inputSize"],"mappings":";;AAGA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,MAAAA;AAI7B,MAAMC,aAA2B,GAAA;IAC/BC,OAAS,EAAA,EAAA;IACTC,WAAa,EAAA;AACf,CAAA;AAEA,MAAMC,SAAuB,GAAA;IAC3BF,OAAS,EAAA,CAAA;IACTC,WAAa,EAAA;AACf,CAAA;AAEA,MAAME,WAAyB,GAAA;IAC7BH,OAAS,EAAA,CAAA;IACTC,WAAa,EAAA;AACf,CAAA;AAEA,MAAMG,UAAwC,GAAA;;IAE5CC,WAAaN,EAAAA,aAAAA;IACbO,SAAWP,EAAAA,aAAAA;IACXQ,IAAMR,EAAAA,aAAAA;IACNS,QAAUT,EAAAA,aAAAA;IACVU,MAAQV,EAAAA,aAAAA;;IAERW,QAAUR,EAAAA,SAAAA;IACVS,OAAST,EAAAA,SAAAA;IACTU,IAAMV,EAAAA,SAAAA;IACNW,IAAMX,EAAAA,SAAAA;IACNY,UAAYZ,EAAAA,SAAAA;IACZa,OAASb,EAAAA,SAAAA;IACTc,KAAOd,EAAAA,SAAAA;IACPe,OAASf,EAAAA,SAAAA;IACTgB,MAAQhB,EAAAA,SAAAA;;IAERiB,QAAUhB,EAAAA,WAAAA;IACViB,KAAOjB,EAAAA,WAAAA;IACPkB,WAAalB,EAAAA,WAAAA;IACbmB,KAAOnB,EAAAA,WAAAA;IACPoB,QAAUpB,EAAAA,WAAAA;IACVqB,QAAUrB,EAAAA,WAAAA;IACVsB,MAAQtB,EAAAA,WAAAA;IACRuB,IAAMvB,EAAAA,WAAAA;IACNwB,SAAWxB,EAAAA,WAAAA;IACXyB,GAAKzB,EAAAA;AACP,CAAA;AAEA,MAAM0B,uBAA0B,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,iBAAoB,GAAA;AACxBC,QAAAA,gBAAAA,CAAAA,GAAAA;YACE,OAAO5B,UAAAA;AACT,SAAA;AAEA6B,QAAAA,YAAAA,CAAAA,CAAaC,IAAY,EAAA;AACvB,YAAA,OAAO,CAAC,CAAC9B,UAAU,CAAC8B,IAAK,CAAA;AAC3B,SAAA;AAEAC,QAAAA,YAAAA,CAAAA,CAAaD,IAAa,EAAA;AACxB,YAAA,IAAI,CAACA,IAAM,EAAA;AACT,gBAAA,MAAM,IAAIrC,gBAAiB,CAAA,sBAAA,CAAA;AAC7B;YAEA,MAAMuC,SAAAA,GAAYhC,UAAU,CAAC8B,IAAK,CAAA;AAClC,YAAA,IAAI,CAACE,SAAW,EAAA;AACd,gBAAA,MAAM,IAAIvC,gBAAiB,CAAA,CAAC,mCAAmC,EAAEqC,KAAK,CAAC,CAAA;AACzE;YAEA,OAAOE,SAAAA;AACT,SAAA;QAEAC,YAAaH,CAAAA,CAAAA,IAAY,EAAEI,IAAe,EAAA;AACxC,YAAA,IAAI,CAACJ,IAAM,EAAA;AACT,gBAAA,MAAM,IAAIrC,gBAAiB,CAAA,sBAAA,CAAA;AAC7B;AAEA,YAAA,IAAI,CAACyC,IAAM,EAAA;AACT,gBAAA,MAAM,IAAIzC,gBAAiB,CAAA,sBAAA,CAAA;AAC7B;YAEAO,UAAU,CAAC8B,KAAK,GAAGI,IAAAA;AACrB,SAAA;AAEAC,QAAAA,wBAAAA,CAAAA,GAAAA;;AAEE,YAAA,MAAMC,YAAeV,GAAAA,MAAAA,CAAOW,GAAG,CAAC,iBAAiBC,MAAM,EAAA;;;YAIvDC,MAAOC,CAAAA,OAAO,CAACJ,YAAcK,CAAAA,CAAAA,OAAO,CAAC,CAAC,CAACjB,KAAKkB,WAA2B,CAAA,GAAA;gBACrE,IAAIA,WAAAA,CAAYC,SAAS,EAAE;AACzBhB,oBAAAA,iBAAAA,CAAkBM,YAAY,CAACT,GAAKkB,EAAAA,WAAAA,CAAYC,SAAS,CAAA;AAC3D;AACF,aAAA,CAAA;AACF;AACF,KAAA;IAEA,OAAOhB,iBAAAA;AACT;;;;"}
1
+ {"version":3,"file":"field-sizes.mjs","sources":["../../../server/src/services/field-sizes.ts"],"sourcesContent":["import { errors } from '@strapi/utils';\nimport type { Core, Modules } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\ntype FieldSize = Modules.CustomFields.CustomFieldServerOptions['inputSize'];\n\nconst needsFullSize: FieldSize = {\n default: 12,\n isResizable: false,\n};\n\nconst smallSize: FieldSize = {\n default: 4,\n isResizable: true,\n};\n\nconst defaultSize: FieldSize = {\n default: 6,\n isResizable: true,\n};\n\nconst fieldSizes: Record<string, FieldSize> = {\n // Full row and not resizable\n dynamiczone: needsFullSize,\n component: needsFullSize,\n json: needsFullSize,\n richtext: needsFullSize,\n blocks: needsFullSize,\n // Small and resizable\n checkbox: smallSize,\n boolean: smallSize,\n date: smallSize,\n time: smallSize,\n biginteger: smallSize,\n decimal: smallSize,\n float: smallSize,\n integer: smallSize,\n number: smallSize,\n // Medium and resizable\n datetime: defaultSize,\n email: defaultSize,\n enumeration: defaultSize,\n media: defaultSize,\n password: defaultSize,\n relation: defaultSize,\n string: defaultSize,\n text: defaultSize,\n timestamp: defaultSize,\n uid: defaultSize,\n};\n\nconst createFieldSizesService = ({ strapi }: { strapi: Core.Strapi }) => {\n const fieldSizesService = {\n getAllFieldSizes() {\n return fieldSizes;\n },\n\n hasFieldSize(type: string) {\n return !!fieldSizes[type];\n },\n\n getFieldSize(type?: string) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n const fieldSize = fieldSizes[type];\n if (!fieldSize) {\n throw new ApplicationError(`Could not find field size for type ${type}`);\n }\n\n return fieldSize;\n },\n\n setFieldSize(type: string, size: FieldSize) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n if (!size) {\n throw new ApplicationError('The size is required');\n }\n\n fieldSizes[type] = size;\n },\n\n setCustomFieldInputSizes() {\n // Find all custom fields already registered\n const customFields = strapi.get('custom-fields').getAll();\n\n // If they have a custom field size, register it\n // TODO types can be inferred when customFields is typed\n Object.entries(customFields).forEach(([uid, customField]: [string, any]) => {\n if (customField.inputSize) {\n fieldSizesService.setFieldSize(uid, customField.inputSize);\n }\n });\n },\n };\n\n return fieldSizesService;\n};\n\nexport default createFieldSizesService;\n"],"names":["ApplicationError","errors","needsFullSize","default","isResizable","smallSize","defaultSize","fieldSizes","dynamiczone","component","json","richtext","blocks","checkbox","boolean","date","time","biginteger","decimal","float","integer","number","datetime","email","enumeration","media","password","relation","string","text","timestamp","uid","createFieldSizesService","strapi","fieldSizesService","getAllFieldSizes","hasFieldSize","type","getFieldSize","fieldSize","setFieldSize","size","setCustomFieldInputSizes","customFields","get","getAll","Object","entries","forEach","customField","inputSize"],"mappings":"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"}