@strapi/upload 5.29.0 → 5.30.1

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 (301) hide show
  1. package/dist/admin/ai/components/AIAssetCard.js +31 -9
  2. package/dist/admin/ai/components/AIAssetCard.js.map +1 -1
  3. package/dist/admin/ai/components/AIAssetCard.mjs +25 -3
  4. package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -1
  5. package/dist/admin/ai/components/AIUploadModal.js +3 -2
  6. package/dist/admin/ai/components/AIUploadModal.js.map +1 -1
  7. package/dist/admin/ai/components/AIUploadModal.mjs +3 -2
  8. package/dist/admin/ai/components/AIUploadModal.mjs.map +1 -1
  9. package/dist/admin/components/AssetCard/AssetCard.js +5 -4
  10. package/dist/admin/components/AssetCard/AssetCard.js.map +1 -1
  11. package/dist/admin/components/AssetCard/AssetCard.mjs +2 -1
  12. package/dist/admin/components/AssetCard/AssetCard.mjs.map +1 -1
  13. package/dist/admin/components/AssetCard/AssetCardBase.js +1 -1
  14. package/dist/admin/components/AssetCard/AssetCardBase.mjs +1 -1
  15. package/dist/admin/components/AssetCard/DocAssetCard.js +3 -7
  16. package/dist/admin/components/AssetCard/DocAssetCard.js.map +1 -1
  17. package/dist/admin/components/AssetCard/DocAssetCard.mjs +3 -7
  18. package/dist/admin/components/AssetCard/DocAssetCard.mjs.map +1 -1
  19. package/dist/admin/components/AssetCard/ImageAssetCard.js +1 -1
  20. package/dist/admin/components/AssetCard/ImageAssetCard.js.map +1 -1
  21. package/dist/admin/components/AssetCard/ImageAssetCard.mjs +1 -1
  22. package/dist/admin/components/AssetCard/ImageAssetCard.mjs.map +1 -1
  23. package/dist/admin/components/AssetCard/UploadingAssetCard.js +5 -4
  24. package/dist/admin/components/AssetCard/UploadingAssetCard.js.map +1 -1
  25. package/dist/admin/components/AssetCard/UploadingAssetCard.mjs +2 -1
  26. package/dist/admin/components/AssetCard/UploadingAssetCard.mjs.map +1 -1
  27. package/dist/admin/components/AssetCard/VideoAssetCard.js +1 -1
  28. package/dist/admin/components/AssetCard/VideoAssetCard.mjs +1 -1
  29. package/dist/admin/components/AssetDialog/AssetDialog.js +1 -1
  30. package/dist/admin/components/AssetDialog/AssetDialog.mjs +1 -1
  31. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js +2 -0
  32. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js.map +1 -1
  33. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs +2 -0
  34. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +1 -1
  35. package/dist/admin/components/AssetDialog/BrowseStep/Filters.js +1 -1
  36. package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs +1 -1
  37. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js +3 -3
  38. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js.map +1 -1
  39. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs +2 -2
  40. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs.map +1 -1
  41. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js +1 -1
  42. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs +1 -1
  43. package/dist/admin/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  44. package/dist/admin/components/Breadcrumbs/Breadcrumbs.mjs.map +1 -1
  45. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js +1 -1
  46. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs +1 -1
  47. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js +1 -1
  48. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs +1 -1
  49. package/dist/admin/components/CopyLinkButton/CopyLinkButton.js +1 -1
  50. package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs +1 -1
  51. package/dist/admin/components/EditAssetDialog/EditAssetContent.js +9 -6
  52. package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
  53. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +8 -5
  54. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
  55. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js +15 -34
  56. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -1
  57. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs +15 -34
  58. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -1
  59. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js +1 -1
  60. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs +1 -1
  61. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +5 -4
  62. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -1
  63. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +3 -2
  64. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -1
  65. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js +3 -3
  66. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js.map +1 -1
  67. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs +2 -2
  68. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs.map +1 -1
  69. package/dist/admin/components/EditFolderDialog/EditFolderDialog.js +3 -2
  70. package/dist/admin/components/EditFolderDialog/EditFolderDialog.js.map +1 -1
  71. package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs +3 -2
  72. package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs.map +1 -1
  73. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js +1 -1
  74. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs +1 -1
  75. package/dist/admin/components/EmptyAssets/EmptyAssetGrid.js.map +1 -1
  76. package/dist/admin/components/EmptyAssets/EmptyAssetGrid.mjs.map +1 -1
  77. package/dist/admin/components/FilterList/FilterList.js.map +1 -1
  78. package/dist/admin/components/FilterList/FilterList.mjs.map +1 -1
  79. package/dist/admin/components/FilterList/FilterTag.js.map +1 -1
  80. package/dist/admin/components/FilterList/FilterTag.mjs.map +1 -1
  81. package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.js.map +1 -1
  82. package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.mjs.map +1 -1
  83. package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js.map +1 -1
  84. package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs.map +1 -1
  85. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js +8 -10
  86. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +1 -1
  87. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs +5 -7
  88. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +1 -1
  89. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js +1 -1
  90. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs +1 -1
  91. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js +1 -0
  92. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js.map +1 -1
  93. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs +1 -0
  94. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs.map +1 -1
  95. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +1 -1
  96. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
  97. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +1 -1
  98. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
  99. package/dist/admin/components/SelectTree/Option.js.map +1 -1
  100. package/dist/admin/components/SelectTree/Option.mjs.map +1 -1
  101. package/dist/admin/components/SelectTree/SelectTree.js.map +1 -1
  102. package/dist/admin/components/SelectTree/SelectTree.mjs.map +1 -1
  103. package/dist/admin/components/SelectTree/utils/flattenTree.js.map +1 -1
  104. package/dist/admin/components/SelectTree/utils/flattenTree.mjs.map +1 -1
  105. package/dist/admin/components/SortPicker/SortPicker.js +1 -0
  106. package/dist/admin/components/SortPicker/SortPicker.js.map +1 -1
  107. package/dist/admin/components/SortPicker/SortPicker.mjs +1 -0
  108. package/dist/admin/components/SortPicker/SortPicker.mjs.map +1 -1
  109. package/dist/admin/components/TableList/CellContent.js +1 -1
  110. package/dist/admin/components/TableList/CellContent.mjs +1 -1
  111. package/dist/admin/components/TableList/PreviewCell.js +5 -4
  112. package/dist/admin/components/TableList/PreviewCell.js.map +1 -1
  113. package/dist/admin/components/TableList/PreviewCell.mjs +2 -1
  114. package/dist/admin/components/TableList/PreviewCell.mjs.map +1 -1
  115. package/dist/admin/components/TableList/TableList.js +1 -0
  116. package/dist/admin/components/TableList/TableList.js.map +1 -1
  117. package/dist/admin/components/TableList/TableList.mjs +1 -0
  118. package/dist/admin/components/TableList/TableList.mjs.map +1 -1
  119. package/dist/admin/components/TableList/TableRows.js +1 -0
  120. package/dist/admin/components/TableList/TableRows.js.map +1 -1
  121. package/dist/admin/components/TableList/TableRows.mjs +1 -0
  122. package/dist/admin/components/TableList/TableRows.mjs.map +1 -1
  123. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js +1 -1
  124. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs +1 -1
  125. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +3 -2
  126. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -1
  127. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs +2 -1
  128. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +1 -1
  129. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +3 -3
  130. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -1
  131. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +2 -2
  132. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -1
  133. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js +3 -3
  134. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js.map +1 -1
  135. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs +2 -2
  136. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs.map +1 -1
  137. package/dist/admin/components/UploadProgress/UploadProgress.js.map +1 -1
  138. package/dist/admin/components/UploadProgress/UploadProgress.mjs.map +1 -1
  139. package/dist/admin/constants.js +5 -10
  140. package/dist/admin/constants.js.map +1 -1
  141. package/dist/admin/constants.mjs +5 -11
  142. package/dist/admin/constants.mjs.map +1 -1
  143. package/dist/admin/enums.js +20 -0
  144. package/dist/admin/enums.js.map +1 -0
  145. package/dist/admin/enums.mjs +17 -0
  146. package/dist/admin/enums.mjs.map +1 -0
  147. package/dist/admin/hooks/useBulkEdit.js +1 -1
  148. package/dist/admin/hooks/useBulkEdit.mjs +1 -1
  149. package/dist/admin/hooks/useBulkMove.js +1 -1
  150. package/dist/admin/hooks/useBulkMove.mjs +1 -1
  151. package/dist/admin/hooks/useBulkRemove.js +1 -1
  152. package/dist/admin/hooks/useBulkRemove.mjs +1 -1
  153. package/dist/admin/hooks/useConfig.js +2 -1
  154. package/dist/admin/hooks/useConfig.js.map +1 -1
  155. package/dist/admin/hooks/useConfig.mjs +2 -1
  156. package/dist/admin/hooks/useConfig.mjs.map +1 -1
  157. package/dist/admin/hooks/useEditAsset.js +1 -1
  158. package/dist/admin/hooks/useEditAsset.js.map +1 -1
  159. package/dist/admin/hooks/useEditAsset.mjs +1 -1
  160. package/dist/admin/hooks/useEditAsset.mjs.map +1 -1
  161. package/dist/admin/hooks/useEditFolder.js.map +1 -1
  162. package/dist/admin/hooks/useEditFolder.mjs.map +1 -1
  163. package/dist/admin/hooks/useFolder.js +1 -1
  164. package/dist/admin/hooks/useFolder.js.map +1 -1
  165. package/dist/admin/hooks/useFolder.mjs +1 -1
  166. package/dist/admin/hooks/useFolder.mjs.map +1 -1
  167. package/dist/admin/hooks/useFolderStructure.js +1 -1
  168. package/dist/admin/hooks/useFolderStructure.mjs +1 -1
  169. package/dist/admin/hooks/useModalQueryParams.js +2 -2
  170. package/dist/admin/hooks/useModalQueryParams.js.map +1 -1
  171. package/dist/admin/hooks/useModalQueryParams.mjs +1 -1
  172. package/dist/admin/hooks/useModalQueryParams.mjs.map +1 -1
  173. package/dist/admin/hooks/useRemoveAsset.js.map +1 -1
  174. package/dist/admin/hooks/useRemoveAsset.mjs.map +1 -1
  175. package/dist/admin/hooks/useTracking.js +24 -0
  176. package/dist/admin/hooks/useTracking.js.map +1 -0
  177. package/dist/admin/hooks/useTracking.mjs +22 -0
  178. package/dist/admin/hooks/useTracking.mjs.map +1 -0
  179. package/dist/admin/hooks/useUpload.js.map +1 -1
  180. package/dist/admin/hooks/useUpload.mjs.map +1 -1
  181. package/dist/admin/index.js +1 -0
  182. package/dist/admin/index.js.map +1 -1
  183. package/dist/admin/index.mjs +1 -0
  184. package/dist/admin/index.mjs.map +1 -1
  185. package/dist/admin/package.json.js +5 -5
  186. package/dist/admin/package.json.mjs +5 -5
  187. package/dist/admin/pages/App/App.js +1 -1
  188. package/dist/admin/pages/App/App.mjs +1 -1
  189. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +1 -1
  190. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
  191. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +1 -1
  192. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
  193. package/dist/admin/pages/App/ConfigureTheView/components/Settings.js +1 -0
  194. package/dist/admin/pages/App/ConfigureTheView/components/Settings.js.map +1 -1
  195. package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs +1 -0
  196. package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs.map +1 -1
  197. package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.js.map +1 -1
  198. package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.mjs.map +1 -1
  199. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js +1 -0
  200. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js.map +1 -1
  201. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs +1 -0
  202. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs.map +1 -1
  203. package/dist/admin/pages/App/MediaLibrary/components/BulkActions.js +1 -1
  204. package/dist/admin/pages/App/MediaLibrary/components/BulkActions.mjs +1 -1
  205. package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.js +1 -1
  206. package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.mjs +1 -1
  207. package/dist/admin/pages/App/MediaLibrary/components/Filters.js +3 -2
  208. package/dist/admin/pages/App/MediaLibrary/components/Filters.js.map +1 -1
  209. package/dist/admin/pages/App/MediaLibrary/components/Filters.mjs +3 -2
  210. package/dist/admin/pages/App/MediaLibrary/components/Filters.mjs.map +1 -1
  211. package/dist/admin/pages/App/MediaLibrary/components/Header.js +1 -1
  212. package/dist/admin/pages/App/MediaLibrary/components/Header.js.map +1 -1
  213. package/dist/admin/pages/App/MediaLibrary/components/Header.mjs +1 -1
  214. package/dist/admin/pages/App/MediaLibrary/components/Header.mjs.map +1 -1
  215. package/dist/admin/pages/SettingsPage/SettingsPage.js +1 -0
  216. package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
  217. package/dist/admin/pages/SettingsPage/SettingsPage.mjs +1 -0
  218. package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
  219. package/dist/admin/src/components/AssetCard/UploadingAssetCard.d.ts +1 -1
  220. package/dist/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.d.ts +1 -1
  221. package/dist/admin/src/constants.d.ts +0 -6
  222. package/dist/admin/src/enums.d.ts +12 -0
  223. package/dist/admin/src/hooks/useTracking.d.ts +4 -0
  224. package/dist/admin/src/utils/icons.d.ts +14 -0
  225. package/dist/admin/src/utils/rawFileToAsset.d.ts +1 -1
  226. package/dist/admin/src/utils/typeFromMime.d.ts +2 -2
  227. package/dist/admin/src/utils/urlsToAssets.d.ts +1 -1
  228. package/dist/admin/translations/pt-BR.json.js +75 -7
  229. package/dist/admin/translations/pt-BR.json.js.map +1 -1
  230. package/dist/admin/translations/pt-BR.json.mjs +75 -7
  231. package/dist/admin/translations/pt-BR.json.mjs.map +1 -1
  232. package/dist/admin/utils/formatBytes.js.map +1 -1
  233. package/dist/admin/utils/formatBytes.mjs.map +1 -1
  234. package/dist/admin/utils/formatDuration.js.map +1 -1
  235. package/dist/admin/utils/formatDuration.mjs.map +1 -1
  236. package/dist/admin/utils/getFolderURL.js.map +1 -1
  237. package/dist/admin/utils/getFolderURL.mjs.map +1 -1
  238. package/dist/admin/utils/getTrad.js.map +1 -1
  239. package/dist/admin/utils/getTrad.mjs.map +1 -1
  240. package/dist/admin/utils/icons.js +23 -0
  241. package/dist/admin/utils/icons.js.map +1 -0
  242. package/dist/admin/utils/icons.mjs +19 -0
  243. package/dist/admin/utils/icons.mjs.map +1 -0
  244. package/dist/admin/utils/normalizeAPIError.js.map +1 -1
  245. package/dist/admin/utils/normalizeAPIError.mjs.map +1 -1
  246. package/dist/admin/utils/prefixFileUrlWithBackendUrl.js.map +1 -1
  247. package/dist/admin/utils/prefixFileUrlWithBackendUrl.mjs.map +1 -1
  248. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -1
  249. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -1
  250. package/dist/admin/utils/typeFromMime.js +15 -11
  251. package/dist/admin/utils/typeFromMime.js.map +1 -1
  252. package/dist/admin/utils/typeFromMime.mjs +15 -11
  253. package/dist/admin/utils/typeFromMime.mjs.map +1 -1
  254. package/dist/server/controllers/admin-folder-file.js +2 -2
  255. package/dist/server/controllers/admin-folder-file.js.map +1 -1
  256. package/dist/server/controllers/admin-folder-file.mjs +2 -2
  257. package/dist/server/controllers/admin-folder-file.mjs.map +1 -1
  258. package/dist/server/controllers/admin-upload.js +1 -1
  259. package/dist/server/controllers/admin-upload.js.map +1 -1
  260. package/dist/server/controllers/admin-upload.mjs +1 -1
  261. package/dist/server/controllers/admin-upload.mjs.map +1 -1
  262. package/dist/server/controllers/utils/folders.js.map +1 -1
  263. package/dist/server/controllers/utils/folders.mjs.map +1 -1
  264. package/dist/server/controllers/validation/admin/folder-file.js.map +1 -1
  265. package/dist/server/controllers/validation/admin/folder-file.mjs.map +1 -1
  266. package/dist/server/controllers/validation/admin/folder.js +1 -1
  267. package/dist/server/controllers/validation/admin/folder.js.map +1 -1
  268. package/dist/server/controllers/validation/admin/folder.mjs +1 -1
  269. package/dist/server/controllers/validation/admin/folder.mjs.map +1 -1
  270. package/dist/server/register.js.map +1 -1
  271. package/dist/server/register.mjs.map +1 -1
  272. package/dist/server/services/ai-metadata.js.map +1 -1
  273. package/dist/server/services/ai-metadata.mjs.map +1 -1
  274. package/dist/server/services/api-upload-folder.js.map +1 -1
  275. package/dist/server/services/api-upload-folder.mjs.map +1 -1
  276. package/dist/server/services/folder.js.map +1 -1
  277. package/dist/server/services/folder.mjs.map +1 -1
  278. package/dist/server/services/image-manipulation.js.map +1 -1
  279. package/dist/server/services/image-manipulation.mjs.map +1 -1
  280. package/dist/server/services/metrics.js +14 -1
  281. package/dist/server/services/metrics.js.map +1 -1
  282. package/dist/server/services/metrics.mjs +14 -1
  283. package/dist/server/services/metrics.mjs.map +1 -1
  284. package/dist/server/services/upload.js +8 -8
  285. package/dist/server/services/upload.js.map +1 -1
  286. package/dist/server/services/upload.mjs +8 -8
  287. package/dist/server/services/upload.mjs.map +1 -1
  288. package/dist/server/services/weekly-metrics.js +3 -6
  289. package/dist/server/services/weekly-metrics.js.map +1 -1
  290. package/dist/server/services/weekly-metrics.mjs +3 -6
  291. package/dist/server/services/weekly-metrics.mjs.map +1 -1
  292. package/dist/server/src/index.d.ts +1 -1
  293. package/dist/server/src/services/index.d.ts +1 -1
  294. package/dist/server/src/services/metrics.d.ts +1 -0
  295. package/dist/server/src/services/metrics.d.ts.map +1 -1
  296. package/dist/server/src/services/upload.d.ts.map +1 -1
  297. package/dist/server/src/services/weekly-metrics.d.ts +0 -1
  298. package/dist/server/src/services/weekly-metrics.d.ts.map +1 -1
  299. package/dist/server/utils/cron.js.map +1 -1
  300. package/dist/server/utils/cron.mjs.map +1 -1
  301. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewBox.mjs","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport { Flex, IconButton } from '@strapi/design-system';\nimport { Crop as Resize, Download as DownloadIcon, Trash } from '@strapi/icons';\nimport cropperjscss from 'cropperjs/dist/cropper.css?raw';\nimport { useIntl } from 'react-intl';\nimport { createGlobalStyle } from 'styled-components';\n\nimport { AssetType } from '../../../constants';\nimport { useCropImg } from '../../../hooks/useCropImg';\nimport { useEditAsset } from '../../../hooks/useEditAsset';\nimport { useUpload } from '../../../hooks/useUpload';\nimport { createAssetUrl, getTrad, downloadFile } from '../../../utils';\nimport { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton';\nimport { UploadProgress } from '../../UploadProgress/UploadProgress';\nimport { RemoveAssetDialog } from '../RemoveAssetDialog';\n\nimport { AssetPreview } from './AssetPreview';\nimport { CroppingActions } from './CroppingActions';\nimport {\n ActionRow,\n BadgeOverride,\n RelativeBox,\n UploadProgressWrapper,\n Wrapper,\n} from './PreviewComponents';\n\nimport type { File as FileDefinition, RawFile } from '../../../../../shared/contracts/files';\n\ninterface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface PreviewBoxProps {\n asset: Asset;\n canUpdate: boolean;\n canCopyLink: boolean;\n canDownload: boolean;\n replacementFile?: File;\n onDelete: (asset?: Asset | null) => void;\n onCropFinish: () => void;\n onCropStart: () => void;\n onCropCancel: () => void;\n trackedLocation?: string;\n}\n\nexport const PreviewBox = ({\n asset,\n canUpdate,\n canCopyLink,\n canDownload,\n onDelete,\n onCropFinish,\n onCropStart,\n onCropCancel,\n replacementFile,\n trackedLocation,\n}: PreviewBoxProps) => {\n const CropperjsStyle = createGlobalStyle`${cropperjscss}`;\n const { trackUsage } = useTracking();\n const previewRef = React.useRef(null);\n const [isCropImageReady, setIsCropImageReady] = React.useState(false);\n const [hasCropIntent, setHasCropIntent] = React.useState<boolean | null>(null);\n const [assetUrl, setAssetUrl] = React.useState(createAssetUrl(asset, false));\n const [thumbnailUrl, setThumbnailUrl] = React.useState(createAssetUrl(asset, true));\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { crop, produceFile, stopCropping, isCropping, isCropperReady, width, height } =\n useCropImg();\n const { editAsset, error, isLoading, progress, cancel } = useEditAsset();\n\n const {\n upload,\n isLoading: isLoadingUpload,\n cancel: cancelUpload,\n error: uploadError,\n progress: progressUpload,\n } = useUpload();\n\n React.useEffect(() => {\n // Whenever a replacementUrl is set, make sure to permutate the real asset.url by\n // the locally generated one\n if (replacementFile) {\n const fileLocalUrl = URL.createObjectURL(replacementFile);\n\n if (asset.isLocal) {\n asset.url = fileLocalUrl;\n }\n\n setAssetUrl(fileLocalUrl);\n setThumbnailUrl(fileLocalUrl);\n }\n }, [replacementFile, asset]);\n\n React.useEffect(() => {\n if (hasCropIntent === false) {\n stopCropping();\n onCropCancel();\n }\n }, [hasCropIntent, stopCropping, onCropCancel, onCropFinish]);\n\n React.useEffect(() => {\n if (hasCropIntent && isCropImageReady) {\n crop(previewRef.current!);\n onCropStart();\n }\n }, [isCropImageReady, hasCropIntent, onCropStart, crop]);\n\n const handleCropping = async () => {\n const nextAsset = { ...asset, width, height, folder: asset.folder?.id };\n const file = (await produceFile(nextAsset.name, nextAsset.mime!, nextAsset.updatedAt!)) as File;\n\n // Making sure that when persisting the new asset, the URL changes with width and height\n // So that the browser makes a request and handle the image caching correctly at the good size\n let optimizedCachingImage;\n let optimizedCachingThumbnailImage;\n\n if (asset.isLocal) {\n optimizedCachingImage = URL.createObjectURL(file);\n optimizedCachingThumbnailImage = optimizedCachingImage;\n asset.url = optimizedCachingImage;\n asset.rawFile = file;\n\n trackUsage('didCropFile', { duplicatedFile: null, location: trackedLocation! });\n } else {\n const updatedAsset = await editAsset(nextAsset, file);\n optimizedCachingImage = createAssetUrl(updatedAsset, false);\n optimizedCachingThumbnailImage = createAssetUrl(updatedAsset, true);\n\n trackUsage('didCropFile', { duplicatedFile: false, location: trackedLocation! });\n }\n\n setAssetUrl(optimizedCachingImage);\n setThumbnailUrl(optimizedCachingThumbnailImage);\n setHasCropIntent(false);\n };\n\n const isInCroppingMode = isCropping && !isLoading;\n\n const handleDuplication = async () => {\n const nextAsset = { ...asset, width, height };\n const file = (await produceFile(\n nextAsset.name,\n nextAsset.mime!,\n nextAsset.updatedAt!\n )) as RawFile;\n\n await upload({ name: file.name, rawFile: file }, asset.folder?.id ? asset.folder.id : null);\n\n trackUsage('didCropFile', { duplicatedFile: true, location: trackedLocation! });\n\n setHasCropIntent(false);\n onCropFinish();\n };\n\n const handleCropCancel = () => {\n setHasCropIntent(false);\n };\n\n const handleCropStart = () => {\n setHasCropIntent(true);\n };\n\n return (\n <>\n <CropperjsStyle />\n <RelativeBox hasRadius background=\"neutral150\" borderColor=\"neutral200\">\n {isCropperReady && isInCroppingMode && (\n <CroppingActions\n onValidate={handleCropping}\n onDuplicate={asset.isLocal ? undefined : handleDuplication}\n onCancel={handleCropCancel}\n />\n )}\n\n <ActionRow paddingLeft={3} paddingRight={3} justifyContent=\"flex-end\">\n <Flex gap={1}>\n {canUpdate && !asset.isLocal && (\n <IconButton\n label={formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n onClick={() => setShowConfirmDialog(true)}\n >\n <Trash />\n </IconButton>\n )}\n\n {canDownload && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.download'),\n defaultMessage: 'Download',\n })}\n onClick={() => downloadFile(assetUrl!, asset.name)}\n >\n <DownloadIcon />\n </IconButton>\n )}\n\n {canCopyLink && <CopyLinkButton url={assetUrl!} />}\n\n {canUpdate && asset.mime?.includes(AssetType.Image) && (\n <IconButton\n label={formatMessage({ id: getTrad('control-card.crop'), defaultMessage: 'Crop' })}\n onClick={handleCropStart}\n >\n <Resize />\n </IconButton>\n )}\n </Flex>\n </ActionRow>\n\n <Wrapper>\n {/* This one is for editting an asset */}\n {isLoading && (\n <UploadProgressWrapper>\n <UploadProgress error={error} onCancel={cancel} progress={progress} />\n </UploadProgressWrapper>\n )}\n\n {/* This one is for duplicating an asset after cropping */}\n {isLoadingUpload && (\n <UploadProgressWrapper>\n <UploadProgress\n error={uploadError}\n onCancel={cancelUpload}\n progress={progressUpload}\n />\n </UploadProgressWrapper>\n )}\n\n <AssetPreview\n ref={previewRef}\n mime={asset.mime!}\n name={asset.name}\n url={hasCropIntent ? assetUrl! : thumbnailUrl!}\n onLoad={() => {\n if (asset.isLocal || hasCropIntent) {\n setIsCropImageReady(true);\n }\n }}\n />\n </Wrapper>\n\n <ActionRow\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"flex-end\"\n $blurry={isInCroppingMode}\n >\n {isInCroppingMode && width && height && (\n <BadgeOverride background=\"neutral900\" color=\"neutral0\">\n {width && height ? `${height}✕${width}` : 'N/A'}\n </BadgeOverride>\n )}\n </ActionRow>\n </RelativeBox>\n\n <RemoveAssetDialog\n open={showConfirmDialog}\n onClose={() => {\n setShowConfirmDialog(false);\n onDelete(null);\n }}\n asset={asset}\n />\n </>\n );\n};\n"],"names":["PreviewBox","asset","canUpdate","canCopyLink","canDownload","onDelete","onCropFinish","onCropStart","onCropCancel","replacementFile","trackedLocation","CropperjsStyle","createGlobalStyle","cropperjscss","trackUsage","useTracking","previewRef","React","useRef","isCropImageReady","setIsCropImageReady","useState","hasCropIntent","setHasCropIntent","assetUrl","setAssetUrl","createAssetUrl","thumbnailUrl","setThumbnailUrl","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","crop","produceFile","stopCropping","isCropping","isCropperReady","width","height","useCropImg","editAsset","error","isLoading","progress","cancel","useEditAsset","upload","isLoadingUpload","cancelUpload","uploadError","progressUpload","useUpload","useEffect","fileLocalUrl","URL","createObjectURL","isLocal","url","current","handleCropping","nextAsset","folder","id","file","name","mime","updatedAt","optimizedCachingImage","optimizedCachingThumbnailImage","rawFile","duplicatedFile","location","updatedAsset","isInCroppingMode","handleDuplication","handleCropCancel","handleCropStart","_jsxs","_Fragment","_jsx","RelativeBox","hasRadius","background","borderColor","CroppingActions","onValidate","onDuplicate","undefined","onCancel","ActionRow","paddingLeft","paddingRight","justifyContent","Flex","gap","IconButton","label","defaultMessage","onClick","Trash","getTrad","downloadFile","DownloadIcon","CopyLinkButton","includes","AssetType","Image","Resize","Wrapper","UploadProgressWrapper","UploadProgress","AssetPreview","ref","onLoad","$blurry","BadgeOverride","color","RemoveAssetDialog","open","onClose"],"mappings":"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"}
1
+ {"version":3,"file":"PreviewBox.mjs","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Flex, IconButton } from '@strapi/design-system';\nimport { Crop as Resize, Download as DownloadIcon, Trash } from '@strapi/icons';\nimport cropperjscss from 'cropperjs/dist/cropper.css?raw';\nimport { useIntl } from 'react-intl';\nimport { createGlobalStyle } from 'styled-components';\n\nimport { AssetType } from '../../../enums';\nimport { useCropImg } from '../../../hooks/useCropImg';\nimport { useEditAsset } from '../../../hooks/useEditAsset';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { useUpload } from '../../../hooks/useUpload';\nimport { createAssetUrl, getTrad, downloadFile } from '../../../utils';\nimport { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton';\nimport { UploadProgress } from '../../UploadProgress/UploadProgress';\nimport { RemoveAssetDialog } from '../RemoveAssetDialog';\n\nimport { AssetPreview } from './AssetPreview';\nimport { CroppingActions } from './CroppingActions';\nimport {\n ActionRow,\n BadgeOverride,\n RelativeBox,\n UploadProgressWrapper,\n Wrapper,\n} from './PreviewComponents';\n\nimport type { File as FileDefinition, RawFile } from '../../../../../shared/contracts/files';\n\ninterface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface PreviewBoxProps {\n asset: Asset;\n canUpdate: boolean;\n canCopyLink: boolean;\n canDownload: boolean;\n replacementFile?: File;\n onDelete: (asset?: Asset | null) => void;\n onCropFinish: () => void;\n onCropStart: () => void;\n onCropCancel: () => void;\n trackedLocation?: string;\n}\n\nexport const PreviewBox = ({\n asset,\n canUpdate,\n canCopyLink,\n canDownload,\n onDelete,\n onCropFinish,\n onCropStart,\n onCropCancel,\n replacementFile,\n trackedLocation,\n}: PreviewBoxProps) => {\n const CropperjsStyle = createGlobalStyle`${cropperjscss}`;\n const { trackUsage } = useTracking();\n const previewRef = React.useRef(null);\n const [isCropImageReady, setIsCropImageReady] = React.useState(false);\n const [hasCropIntent, setHasCropIntent] = React.useState<boolean | null>(null);\n const [assetUrl, setAssetUrl] = React.useState(createAssetUrl(asset, false));\n const [thumbnailUrl, setThumbnailUrl] = React.useState(createAssetUrl(asset, true));\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { crop, produceFile, stopCropping, isCropping, isCropperReady, width, height } =\n useCropImg();\n const { editAsset, error, isLoading, progress, cancel } = useEditAsset();\n\n const {\n upload,\n isLoading: isLoadingUpload,\n cancel: cancelUpload,\n error: uploadError,\n progress: progressUpload,\n } = useUpload();\n\n React.useEffect(() => {\n // Whenever a replacementUrl is set, make sure to permutate the real asset.url by\n // the locally generated one\n if (replacementFile) {\n const fileLocalUrl = URL.createObjectURL(replacementFile);\n\n if (asset.isLocal) {\n asset.url = fileLocalUrl;\n }\n\n setAssetUrl(fileLocalUrl);\n setThumbnailUrl(fileLocalUrl);\n }\n }, [replacementFile, asset]);\n\n React.useEffect(() => {\n if (hasCropIntent === false) {\n stopCropping();\n onCropCancel();\n }\n }, [hasCropIntent, stopCropping, onCropCancel, onCropFinish]);\n\n React.useEffect(() => {\n if (hasCropIntent && isCropImageReady) {\n crop(previewRef.current!);\n onCropStart();\n }\n }, [isCropImageReady, hasCropIntent, onCropStart, crop]);\n\n const handleCropping = async () => {\n const nextAsset = { ...asset, width, height, folder: asset.folder?.id };\n const file = (await produceFile(nextAsset.name, nextAsset.mime!, nextAsset.updatedAt!)) as File;\n\n // Making sure that when persisting the new asset, the URL changes with width and height\n // So that the browser makes a request and handle the image caching correctly at the good size\n let optimizedCachingImage;\n let optimizedCachingThumbnailImage;\n\n if (asset.isLocal) {\n optimizedCachingImage = URL.createObjectURL(file);\n optimizedCachingThumbnailImage = optimizedCachingImage;\n asset.url = optimizedCachingImage;\n asset.rawFile = file;\n\n trackUsage('didCropFile', { duplicatedFile: null, location: trackedLocation! });\n } else {\n const updatedAsset = await editAsset(nextAsset, file);\n optimizedCachingImage = createAssetUrl(updatedAsset, false);\n optimizedCachingThumbnailImage = createAssetUrl(updatedAsset, true);\n\n trackUsage('didCropFile', { duplicatedFile: false, location: trackedLocation! });\n }\n\n setAssetUrl(optimizedCachingImage);\n setThumbnailUrl(optimizedCachingThumbnailImage);\n setHasCropIntent(false);\n };\n\n const isInCroppingMode = isCropping && !isLoading;\n\n const handleDuplication = async () => {\n const nextAsset = { ...asset, width, height };\n const file = (await produceFile(\n nextAsset.name,\n nextAsset.mime!,\n nextAsset.updatedAt!\n )) as RawFile;\n\n await upload({ name: file.name, rawFile: file }, asset.folder?.id ? asset.folder.id : null);\n\n trackUsage('didCropFile', { duplicatedFile: true, location: trackedLocation! });\n\n setHasCropIntent(false);\n onCropFinish();\n };\n\n const handleCropCancel = () => {\n setHasCropIntent(false);\n };\n\n const handleCropStart = () => {\n setHasCropIntent(true);\n };\n\n return (\n <>\n <CropperjsStyle />\n <RelativeBox hasRadius background=\"neutral150\" borderColor=\"neutral200\">\n {isCropperReady && isInCroppingMode && (\n <CroppingActions\n onValidate={handleCropping}\n onDuplicate={asset.isLocal ? undefined : handleDuplication}\n onCancel={handleCropCancel}\n />\n )}\n\n <ActionRow paddingLeft={3} paddingRight={3} justifyContent=\"flex-end\">\n <Flex gap={1}>\n {canUpdate && !asset.isLocal && (\n <IconButton\n label={formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n onClick={() => setShowConfirmDialog(true)}\n >\n <Trash />\n </IconButton>\n )}\n\n {canDownload && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.download'),\n defaultMessage: 'Download',\n })}\n onClick={() => downloadFile(assetUrl!, asset.name)}\n >\n <DownloadIcon />\n </IconButton>\n )}\n\n {canCopyLink && <CopyLinkButton url={assetUrl!} />}\n\n {canUpdate && asset.mime?.includes(AssetType.Image) && (\n <IconButton\n label={formatMessage({ id: getTrad('control-card.crop'), defaultMessage: 'Crop' })}\n onClick={handleCropStart}\n >\n <Resize />\n </IconButton>\n )}\n </Flex>\n </ActionRow>\n\n <Wrapper>\n {/* This one is for editting an asset */}\n {isLoading && (\n <UploadProgressWrapper>\n <UploadProgress error={error} onCancel={cancel} progress={progress} />\n </UploadProgressWrapper>\n )}\n\n {/* This one is for duplicating an asset after cropping */}\n {isLoadingUpload && (\n <UploadProgressWrapper>\n <UploadProgress\n error={uploadError}\n onCancel={cancelUpload}\n progress={progressUpload}\n />\n </UploadProgressWrapper>\n )}\n\n <AssetPreview\n ref={previewRef}\n mime={asset.mime!}\n name={asset.name}\n url={hasCropIntent ? assetUrl! : thumbnailUrl!}\n onLoad={() => {\n if (asset.isLocal || hasCropIntent) {\n setIsCropImageReady(true);\n }\n }}\n />\n </Wrapper>\n\n <ActionRow\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"flex-end\"\n $blurry={isInCroppingMode}\n >\n {isInCroppingMode && width && height && (\n <BadgeOverride background=\"neutral900\" color=\"neutral0\">\n {width && height ? `${height}✕${width}` : 'N/A'}\n </BadgeOverride>\n )}\n </ActionRow>\n </RelativeBox>\n\n <RemoveAssetDialog\n open={showConfirmDialog}\n onClose={() => {\n setShowConfirmDialog(false);\n onDelete(null);\n }}\n asset={asset}\n />\n </>\n );\n};\n"],"names":["PreviewBox","asset","canUpdate","canCopyLink","canDownload","onDelete","onCropFinish","onCropStart","onCropCancel","replacementFile","trackedLocation","CropperjsStyle","createGlobalStyle","cropperjscss","trackUsage","useTracking","previewRef","React","useRef","isCropImageReady","setIsCropImageReady","useState","hasCropIntent","setHasCropIntent","assetUrl","setAssetUrl","createAssetUrl","thumbnailUrl","setThumbnailUrl","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","crop","produceFile","stopCropping","isCropping","isCropperReady","width","height","useCropImg","editAsset","error","isLoading","progress","cancel","useEditAsset","upload","isLoadingUpload","cancelUpload","uploadError","progressUpload","useUpload","useEffect","fileLocalUrl","URL","createObjectURL","isLocal","url","current","handleCropping","nextAsset","folder","id","file","name","mime","updatedAt","optimizedCachingImage","optimizedCachingThumbnailImage","rawFile","duplicatedFile","location","updatedAsset","isInCroppingMode","handleDuplication","handleCropCancel","handleCropStart","_jsxs","_Fragment","_jsx","RelativeBox","hasRadius","background","borderColor","CroppingActions","onValidate","onDuplicate","undefined","onCancel","ActionRow","paddingLeft","paddingRight","justifyContent","Flex","gap","IconButton","label","defaultMessage","onClick","Trash","getTrad","downloadFile","DownloadIcon","CopyLinkButton","includes","AssetType","Image","Resize","Wrapper","UploadProgressWrapper","UploadProgress","AssetPreview","ref","onLoad","$blurry","BadgeOverride","color","RemoveAssetDialog","open","onClose"],"mappings":"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"}
@@ -2,14 +2,14 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
- var strapiAdmin = require('@strapi/admin/strapi-admin');
6
5
  var designSystem = require('@strapi/design-system');
7
6
  var reactIntl = require('react-intl');
7
+ var useTracking = require('../../hooks/useTracking.js');
8
8
  require('byte-size');
9
9
  require('date-fns');
10
10
  var getTrad = require('../../utils/getTrad.js');
11
11
  require('qs');
12
- require('../../constants.js');
12
+ require('../../utils/typeFromMime.js');
13
13
  require('../../utils/urlYupSchema.js');
14
14
 
15
15
  function _interopNamespaceDefault(e) {
@@ -34,7 +34,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
34
34
  const ReplaceMediaButton = ({ onSelectMedia, acceptedMime, trackedLocation, ...props })=>{
35
35
  const { formatMessage } = reactIntl.useIntl();
36
36
  const inputRef = React__namespace.useRef(null);
37
- const { trackUsage } = strapiAdmin.useTracking();
37
+ const { trackUsage } = useTracking.useTracking();
38
38
  const handleClick = (e)=>{
39
39
  e.preventDefault();
40
40
  if (trackedLocation) {
@@ -1 +1 @@
1
- {"version":3,"file":"ReplaceMediaButton.js","sources":["../../../../admin/src/components/EditAssetDialog/ReplaceMediaButton.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport { Button, VisuallyHidden, ButtonProps } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils';\n\ninterface ReplaceMediaButtonProps extends ButtonProps {\n acceptedMime: string;\n onSelectMedia: (file?: File) => void;\n trackedLocation?: string;\n}\n\nexport const ReplaceMediaButton = ({\n onSelectMedia,\n acceptedMime,\n trackedLocation,\n ...props\n}: ReplaceMediaButtonProps) => {\n const { formatMessage } = useIntl();\n const inputRef = React.useRef<HTMLInputElement>(null);\n const { trackUsage } = useTracking();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n\n if (trackedLocation) {\n trackUsage('didReplaceMedia', { location: trackedLocation });\n }\n\n inputRef.current?.click();\n };\n\n const handleChange = () => {\n const file = inputRef.current?.files?.[0];\n\n onSelectMedia(file);\n };\n\n return (\n <>\n <Button variant=\"secondary\" onClick={handleClick} {...props}>\n {formatMessage({\n id: getTrad('control-card.replace-media'),\n defaultMessage: 'Replace media',\n })}\n </Button>\n <VisuallyHidden>\n <input\n accept={acceptedMime}\n type=\"file\"\n name=\"file\"\n data-testid=\"file-input\"\n tabIndex={-1}\n ref={inputRef}\n onChange={handleChange}\n aria-hidden\n />\n </VisuallyHidden>\n </>\n );\n};\n"],"names":["ReplaceMediaButton","onSelectMedia","acceptedMime","trackedLocation","props","formatMessage","useIntl","inputRef","React","useRef","trackUsage","useTracking","handleClick","e","preventDefault","location","current","click","handleChange","file","files","_jsxs","_Fragment","_jsx","Button","variant","onClick","id","getTrad","defaultMessage","VisuallyHidden","input","accept","type","name","data-testid","tabIndex","ref","onChange","aria-hidden"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcO,MAAMA,kBAAqB,GAAA,CAAC,EACjCC,aAAa,EACbC,YAAY,EACZC,eAAe,EACf,GAAGC,KACqB,EAAA,GAAA;IACxB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAMC,QAAAA,GAAWC,gBAAMC,CAAAA,MAAM,CAAmB,IAAA,CAAA;IAChD,MAAM,EAAEC,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;AAEvB,IAAA,MAAMC,cAAc,CAACC,CAAAA,GAAAA;AACnBA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;AAEhB,QAAA,IAAIX,eAAiB,EAAA;AACnBO,YAAAA,UAAAA,CAAW,iBAAmB,EAAA;gBAAEK,QAAUZ,EAAAA;AAAgB,aAAA,CAAA;AAC5D;AAEAI,QAAAA,QAAAA,CAASS,OAAO,EAAEC,KAAAA,EAAAA;AACpB,KAAA;AAEA,IAAA,MAAMC,YAAe,GAAA,IAAA;AACnB,QAAA,MAAMC,OAAOZ,QAASS,CAAAA,OAAO,EAAEI,KAAAA,GAAQ,CAAE,CAAA;QAEzCnB,aAAckB,CAAAA,IAAAA,CAAAA;AAChB,KAAA;IAEA,qBACEE,eAAA,CAAAC,mBAAA,EAAA;;0BACEC,cAACC,CAAAA,mBAAAA,EAAAA;gBAAOC,OAAQ,EAAA,WAAA;gBAAYC,OAASd,EAAAA,WAAAA;AAAc,gBAAA,GAAGR,KAAK;0BACxDC,aAAc,CAAA;AACbsB,oBAAAA,EAAAA,EAAIC,eAAQ,CAAA,4BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;;0BAEFN,cAACO,CAAAA,2BAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAP,cAACQ,CAAAA,OAAAA,EAAAA;oBACCC,MAAQ9B,EAAAA,YAAAA;oBACR+B,IAAK,EAAA,MAAA;oBACLC,IAAK,EAAA,MAAA;oBACLC,aAAY,EAAA,YAAA;AACZC,oBAAAA,QAAAA,EAAU,CAAC,CAAA;oBACXC,GAAK9B,EAAAA,QAAAA;oBACL+B,QAAUpB,EAAAA,YAAAA;oBACVqB,aAAW,EAAA;;;;;AAKrB;;;;"}
1
+ {"version":3,"file":"ReplaceMediaButton.js","sources":["../../../../admin/src/components/EditAssetDialog/ReplaceMediaButton.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, VisuallyHidden, ButtonProps } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useTracking } from '../../hooks/useTracking';\nimport { getTrad } from '../../utils';\n\ninterface ReplaceMediaButtonProps extends ButtonProps {\n acceptedMime: string;\n onSelectMedia: (file?: File) => void;\n trackedLocation?: string;\n}\n\nexport const ReplaceMediaButton = ({\n onSelectMedia,\n acceptedMime,\n trackedLocation,\n ...props\n}: ReplaceMediaButtonProps) => {\n const { formatMessage } = useIntl();\n const inputRef = React.useRef<HTMLInputElement>(null);\n const { trackUsage } = useTracking();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n\n if (trackedLocation) {\n trackUsage('didReplaceMedia', { location: trackedLocation });\n }\n\n inputRef.current?.click();\n };\n\n const handleChange = () => {\n const file = inputRef.current?.files?.[0];\n\n onSelectMedia(file);\n };\n\n return (\n <>\n <Button variant=\"secondary\" onClick={handleClick} {...props}>\n {formatMessage({\n id: getTrad('control-card.replace-media'),\n defaultMessage: 'Replace media',\n })}\n </Button>\n <VisuallyHidden>\n <input\n accept={acceptedMime}\n type=\"file\"\n name=\"file\"\n data-testid=\"file-input\"\n tabIndex={-1}\n ref={inputRef}\n onChange={handleChange}\n aria-hidden\n />\n </VisuallyHidden>\n </>\n );\n};\n"],"names":["ReplaceMediaButton","onSelectMedia","acceptedMime","trackedLocation","props","formatMessage","useIntl","inputRef","React","useRef","trackUsage","useTracking","handleClick","e","preventDefault","location","current","click","handleChange","file","files","_jsxs","_Fragment","_jsx","Button","variant","onClick","id","getTrad","defaultMessage","VisuallyHidden","input","accept","type","name","data-testid","tabIndex","ref","onChange","aria-hidden"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcO,MAAMA,kBAAqB,GAAA,CAAC,EACjCC,aAAa,EACbC,YAAY,EACZC,eAAe,EACf,GAAGC,KACqB,EAAA,GAAA;IACxB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAMC,QAAAA,GAAWC,gBAAMC,CAAAA,MAAM,CAAmB,IAAA,CAAA;IAChD,MAAM,EAAEC,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;AAEvB,IAAA,MAAMC,cAAc,CAACC,CAAAA,GAAAA;AACnBA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;AAEhB,QAAA,IAAIX,eAAiB,EAAA;AACnBO,YAAAA,UAAAA,CAAW,iBAAmB,EAAA;gBAAEK,QAAUZ,EAAAA;AAAgB,aAAA,CAAA;AAC5D;AAEAI,QAAAA,QAAAA,CAASS,OAAO,EAAEC,KAAAA,EAAAA;AACpB,KAAA;AAEA,IAAA,MAAMC,YAAe,GAAA,IAAA;AACnB,QAAA,MAAMC,OAAOZ,QAASS,CAAAA,OAAO,EAAEI,KAAAA,GAAQ,CAAE,CAAA;QAEzCnB,aAAckB,CAAAA,IAAAA,CAAAA;AAChB,KAAA;IAEA,qBACEE,eAAA,CAAAC,mBAAA,EAAA;;0BACEC,cAACC,CAAAA,mBAAAA,EAAAA;gBAAOC,OAAQ,EAAA,WAAA;gBAAYC,OAASd,EAAAA,WAAAA;AAAc,gBAAA,GAAGR,KAAK;0BACxDC,aAAc,CAAA;AACbsB,oBAAAA,EAAAA,EAAIC,eAAQ,CAAA,4BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;;0BAEFN,cAACO,CAAAA,2BAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAP,cAACQ,CAAAA,OAAAA,EAAAA;oBACCC,MAAQ9B,EAAAA,YAAAA;oBACR+B,IAAK,EAAA,MAAA;oBACLC,IAAK,EAAA,MAAA;oBACLC,aAAY,EAAA,YAAA;AACZC,oBAAAA,QAAAA,EAAU,CAAC,CAAA;oBACXC,GAAK9B,EAAAA,QAAAA;oBACL+B,QAAUpB,EAAAA,YAAAA;oBACVqB,aAAW,EAAA;;;;;AAKrB;;;;"}
@@ -1,13 +1,13 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useTracking } from '@strapi/admin/strapi-admin';
4
3
  import { Button, VisuallyHidden } from '@strapi/design-system';
5
4
  import { useIntl } from 'react-intl';
5
+ import { useTracking } from '../../hooks/useTracking.mjs';
6
6
  import 'byte-size';
7
7
  import 'date-fns';
8
8
  import { getTrad } from '../../utils/getTrad.mjs';
9
9
  import 'qs';
10
- import '../../constants.mjs';
10
+ import '../../utils/typeFromMime.mjs';
11
11
  import '../../utils/urlYupSchema.mjs';
12
12
 
13
13
  const ReplaceMediaButton = ({ onSelectMedia, acceptedMime, trackedLocation, ...props })=>{
@@ -1 +1 @@
1
- {"version":3,"file":"ReplaceMediaButton.mjs","sources":["../../../../admin/src/components/EditAssetDialog/ReplaceMediaButton.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport { Button, VisuallyHidden, ButtonProps } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils';\n\ninterface ReplaceMediaButtonProps extends ButtonProps {\n acceptedMime: string;\n onSelectMedia: (file?: File) => void;\n trackedLocation?: string;\n}\n\nexport const ReplaceMediaButton = ({\n onSelectMedia,\n acceptedMime,\n trackedLocation,\n ...props\n}: ReplaceMediaButtonProps) => {\n const { formatMessage } = useIntl();\n const inputRef = React.useRef<HTMLInputElement>(null);\n const { trackUsage } = useTracking();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n\n if (trackedLocation) {\n trackUsage('didReplaceMedia', { location: trackedLocation });\n }\n\n inputRef.current?.click();\n };\n\n const handleChange = () => {\n const file = inputRef.current?.files?.[0];\n\n onSelectMedia(file);\n };\n\n return (\n <>\n <Button variant=\"secondary\" onClick={handleClick} {...props}>\n {formatMessage({\n id: getTrad('control-card.replace-media'),\n defaultMessage: 'Replace media',\n })}\n </Button>\n <VisuallyHidden>\n <input\n accept={acceptedMime}\n type=\"file\"\n name=\"file\"\n data-testid=\"file-input\"\n tabIndex={-1}\n ref={inputRef}\n onChange={handleChange}\n aria-hidden\n />\n </VisuallyHidden>\n </>\n );\n};\n"],"names":["ReplaceMediaButton","onSelectMedia","acceptedMime","trackedLocation","props","formatMessage","useIntl","inputRef","React","useRef","trackUsage","useTracking","handleClick","e","preventDefault","location","current","click","handleChange","file","files","_jsxs","_Fragment","_jsx","Button","variant","onClick","id","getTrad","defaultMessage","VisuallyHidden","input","accept","type","name","data-testid","tabIndex","ref","onChange","aria-hidden"],"mappings":";;;;;;;;;;;;AAcO,MAAMA,kBAAqB,GAAA,CAAC,EACjCC,aAAa,EACbC,YAAY,EACZC,eAAe,EACf,GAAGC,KACqB,EAAA,GAAA;IACxB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAMC,QAAAA,GAAWC,KAAMC,CAAAA,MAAM,CAAmB,IAAA,CAAA;IAChD,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AAEvB,IAAA,MAAMC,cAAc,CAACC,CAAAA,GAAAA;AACnBA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;AAEhB,QAAA,IAAIX,eAAiB,EAAA;AACnBO,YAAAA,UAAAA,CAAW,iBAAmB,EAAA;gBAAEK,QAAUZ,EAAAA;AAAgB,aAAA,CAAA;AAC5D;AAEAI,QAAAA,QAAAA,CAASS,OAAO,EAAEC,KAAAA,EAAAA;AACpB,KAAA;AAEA,IAAA,MAAMC,YAAe,GAAA,IAAA;AACnB,QAAA,MAAMC,OAAOZ,QAASS,CAAAA,OAAO,EAAEI,KAAAA,GAAQ,CAAE,CAAA;QAEzCnB,aAAckB,CAAAA,IAAAA,CAAAA;AAChB,KAAA;IAEA,qBACEE,IAAA,CAAAC,QAAA,EAAA;;0BACEC,GAACC,CAAAA,MAAAA,EAAAA;gBAAOC,OAAQ,EAAA,WAAA;gBAAYC,OAASd,EAAAA,WAAAA;AAAc,gBAAA,GAAGR,KAAK;0BACxDC,aAAc,CAAA;AACbsB,oBAAAA,EAAAA,EAAIC,OAAQ,CAAA,4BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;;0BAEFN,GAACO,CAAAA,cAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAP,GAACQ,CAAAA,OAAAA,EAAAA;oBACCC,MAAQ9B,EAAAA,YAAAA;oBACR+B,IAAK,EAAA,MAAA;oBACLC,IAAK,EAAA,MAAA;oBACLC,aAAY,EAAA,YAAA;AACZC,oBAAAA,QAAAA,EAAU,CAAC,CAAA;oBACXC,GAAK9B,EAAAA,QAAAA;oBACL+B,QAAUpB,EAAAA,YAAAA;oBACVqB,aAAW,EAAA;;;;;AAKrB;;;;"}
1
+ {"version":3,"file":"ReplaceMediaButton.mjs","sources":["../../../../admin/src/components/EditAssetDialog/ReplaceMediaButton.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, VisuallyHidden, ButtonProps } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useTracking } from '../../hooks/useTracking';\nimport { getTrad } from '../../utils';\n\ninterface ReplaceMediaButtonProps extends ButtonProps {\n acceptedMime: string;\n onSelectMedia: (file?: File) => void;\n trackedLocation?: string;\n}\n\nexport const ReplaceMediaButton = ({\n onSelectMedia,\n acceptedMime,\n trackedLocation,\n ...props\n}: ReplaceMediaButtonProps) => {\n const { formatMessage } = useIntl();\n const inputRef = React.useRef<HTMLInputElement>(null);\n const { trackUsage } = useTracking();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n\n if (trackedLocation) {\n trackUsage('didReplaceMedia', { location: trackedLocation });\n }\n\n inputRef.current?.click();\n };\n\n const handleChange = () => {\n const file = inputRef.current?.files?.[0];\n\n onSelectMedia(file);\n };\n\n return (\n <>\n <Button variant=\"secondary\" onClick={handleClick} {...props}>\n {formatMessage({\n id: getTrad('control-card.replace-media'),\n defaultMessage: 'Replace media',\n })}\n </Button>\n <VisuallyHidden>\n <input\n accept={acceptedMime}\n type=\"file\"\n name=\"file\"\n data-testid=\"file-input\"\n tabIndex={-1}\n ref={inputRef}\n onChange={handleChange}\n aria-hidden\n />\n </VisuallyHidden>\n </>\n );\n};\n"],"names":["ReplaceMediaButton","onSelectMedia","acceptedMime","trackedLocation","props","formatMessage","useIntl","inputRef","React","useRef","trackUsage","useTracking","handleClick","e","preventDefault","location","current","click","handleChange","file","files","_jsxs","_Fragment","_jsx","Button","variant","onClick","id","getTrad","defaultMessage","VisuallyHidden","input","accept","type","name","data-testid","tabIndex","ref","onChange","aria-hidden"],"mappings":";;;;;;;;;;;;AAcO,MAAMA,kBAAqB,GAAA,CAAC,EACjCC,aAAa,EACbC,YAAY,EACZC,eAAe,EACf,GAAGC,KACqB,EAAA,GAAA;IACxB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAMC,QAAAA,GAAWC,KAAMC,CAAAA,MAAM,CAAmB,IAAA,CAAA;IAChD,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AAEvB,IAAA,MAAMC,cAAc,CAACC,CAAAA,GAAAA;AACnBA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;AAEhB,QAAA,IAAIX,eAAiB,EAAA;AACnBO,YAAAA,UAAAA,CAAW,iBAAmB,EAAA;gBAAEK,QAAUZ,EAAAA;AAAgB,aAAA,CAAA;AAC5D;AAEAI,QAAAA,QAAAA,CAASS,OAAO,EAAEC,KAAAA,EAAAA;AACpB,KAAA;AAEA,IAAA,MAAMC,YAAe,GAAA,IAAA;AACnB,QAAA,MAAMC,OAAOZ,QAASS,CAAAA,OAAO,EAAEI,KAAAA,GAAQ,CAAE,CAAA;QAEzCnB,aAAckB,CAAAA,IAAAA,CAAAA;AAChB,KAAA;IAEA,qBACEE,IAAA,CAAAC,QAAA,EAAA;;0BACEC,GAACC,CAAAA,MAAAA,EAAAA;gBAAOC,OAAQ,EAAA,WAAA;gBAAYC,OAASd,EAAAA,WAAAA;AAAc,gBAAA,GAAGR,KAAK;0BACxDC,aAAc,CAAA;AACbsB,oBAAAA,EAAAA,EAAIC,OAAQ,CAAA,4BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;;0BAEFN,GAACO,CAAAA,cAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAP,GAACQ,CAAAA,OAAAA,EAAAA;oBACCC,MAAQ9B,EAAAA,YAAAA;oBACR+B,IAAK,EAAA,MAAA;oBACLC,IAAK,EAAA,MAAA;oBACLC,aAAY,EAAA,YAAA;AACZC,oBAAAA,QAAAA,EAAU,CAAC,CAAA;oBACXC,GAAK9B,EAAAA,QAAAA;oBACL+B,QAAUpB,EAAAA,YAAAA;oBACVqB,aAAW,EAAA;;;;;AAKrB;;;;"}
@@ -12,13 +12,14 @@ var useBulkRemove = require('../../hooks/useBulkRemove.js');
12
12
  var useEditFolder = require('../../hooks/useEditFolder.js');
13
13
  var useFolderStructure = require('../../hooks/useFolderStructure.js');
14
14
  var useMediaLibraryPermissions = require('../../hooks/useMediaLibraryPermissions.js');
15
+ var useTracking = require('../../hooks/useTracking.js');
15
16
  var findRecursiveFolderByValue = require('../../utils/findRecursiveFolderByValue.js');
16
17
  require('byte-size');
17
18
  require('date-fns');
18
19
  var getAPIInnerErrors = require('../../utils/getAPIInnerErrors.js');
19
20
  var getTrad = require('../../utils/getTrad.js');
20
21
  require('qs');
21
- require('../../constants.js');
22
+ require('../../utils/typeFromMime.js');
22
23
  require('../../utils/urlYupSchema.js');
23
24
  var ContextInfo = require('../ContextInfo/ContextInfo.js');
24
25
  var SelectTree = require('../SelectTree/SelectTree.js');
@@ -59,7 +60,7 @@ const EditFolderContent = ({ onClose, folder, location, parentFolderId })=>{
59
60
  const { canCreate, isLoading: isLoadingPermissions, canUpdate } = useMediaLibraryPermissions.useMediaLibraryPermissions();
60
61
  const [showConfirmDialog, setShowConfirmDialog] = React__namespace.useState(false);
61
62
  const { formatMessage, formatDate } = reactIntl.useIntl();
62
- const { trackUsage } = strapiAdmin.useTracking();
63
+ const { trackUsage } = useTracking.useTracking();
63
64
  const { editFolder, isLoading: isEditFolderLoading } = useEditFolder.useEditFolder();
64
65
  const { remove } = useBulkRemove.useBulkRemove();
65
66
  const { toggleNotification } = strapiAdmin.useNotification();
@@ -1 +1 @@
1
- {"version":3,"file":"EditFolderDialog.js","sources":["../../../../admin/src/components/EditFolderDialog/EditFolderDialog.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useNotification } from '@strapi/admin/strapi-admin';\nimport { Button, Field, Flex, Grid, Loader, Modal, Typography } from '@strapi/design-system';\nimport { Form, Formik, FormikErrors } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { useBulkRemove } from '../../hooks/useBulkRemove';\nimport { useEditFolder } from '../../hooks/useEditFolder';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { findRecursiveFolderByValue, getTrad, getAPIInnerErrors } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { EditFolderModalHeader } from './ModalHeader/ModalHeader';\nimport { RemoveFolderDialog } from './RemoveFolderDialog';\n\nimport type { FolderDefinition } from '../../../../shared/contracts/folders';\nimport type { FetchError } from '@strapi/admin/strapi-admin';\n\nconst folderSchema = yup.object({\n name: yup.string().required(),\n parent: yup\n .object({\n label: yup.string(),\n value: yup.number().nullable(true),\n })\n .nullable(true),\n});\n\ninterface ValuesSubmit {\n name: string;\n parent: null | { label?: string; value?: number };\n}\n\nexport interface EditFolderDialogProps {\n parentFolderId?: string | number | null;\n location?: string;\n folder?: FolderDefinition;\n open?: boolean;\n onClose: (payload?: { created?: boolean | undefined } | boolean) => void;\n}\n\nexport const EditFolderContent = ({\n onClose,\n folder,\n location,\n parentFolderId,\n}: EditFolderDialogProps) => {\n const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n enabled: true,\n });\n const { canCreate, isLoading: isLoadingPermissions, canUpdate } = useMediaLibraryPermissions();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { editFolder, isLoading: isEditFolderLoading } = useEditFolder();\n const { remove } = useBulkRemove();\n const { toggleNotification } = useNotification();\n const isLoading = isLoadingPermissions || folderStructureIsLoading;\n const isEditing = !!folder;\n const formDisabled = (folder && !canUpdate) || (!folder && !canCreate);\n const initialFormData: ValuesSubmit = !folderStructureIsLoading\n ? {\n name: folder?.name ?? '',\n parent: {\n /* ideally we would use folderStructure[0].value, but since it is null\n react complains about rendering null as field value */\n value: parentFolderId ? parseInt(parentFolderId.toString(), 10) : undefined,\n label: parentFolderId\n ? folderStructure &&\n findRecursiveFolderByValue(folderStructure, parseInt(parentFolderId.toString(), 10))\n ?.label\n : folderStructure?.[0].label,\n },\n }\n : {\n name: '',\n parent: null,\n };\n\n const formRef = React.useRef<HTMLFormElement>(null);\n\n const handleKeyDown =\n (handleSubmit: (event: React.FormEvent<HTMLFormElement>) => void) =>\n (event: React.KeyboardEvent<HTMLFormElement>) => {\n if (event.key === 'Enter') {\n if (event.target instanceof HTMLInputElement) {\n handleSubmit(event);\n event.preventDefault();\n }\n }\n };\n\n const handleSubmit = async (\n values: ValuesSubmit,\n { setErrors }: { setErrors: (errors: FormikErrors<ValuesSubmit>) => void }\n ) => {\n try {\n await editFolder(\n {\n ...values,\n parent: values.parent?.value ?? null,\n },\n folder?.id\n );\n\n toggleNotification({\n type: 'success',\n message: isEditing\n ? formatMessage({\n id: getTrad('modal.folder-notification-edited-success'),\n defaultMessage: 'Folder successfully edited',\n })\n : formatMessage({\n id: getTrad('modal.folder-notification-created-success'),\n defaultMessage: 'Folder successfully created',\n }),\n });\n\n if (isEditing) {\n const didChangeLocation = parentFolderId\n ? parseInt(parentFolderId.toString(), 10) !== values.parent?.value\n : parentFolderId === null && !!values.parent?.value;\n trackUsage('didEditMediaLibraryElements', {\n location,\n type: 'folder',\n changeLocation: didChangeLocation,\n });\n } else {\n trackUsage('didAddMediaLibraryFolders', { location: location! });\n }\n\n onClose({ created: true });\n } catch (err) {\n const errors = getAPIInnerErrors(err as FetchError, { getTrad });\n const formikErrors = Object.entries(errors!).reduce(\n (acc: Record<string, string>, [key, error]) => {\n acc[key] = error.defaultMessage;\n\n return acc;\n },\n {}\n );\n\n if (!isEmpty(formikErrors)) {\n setErrors(formikErrors);\n }\n }\n };\n\n const handleDelete = async () => {\n if (folder) {\n await remove([folder]);\n }\n\n setShowConfirmDialog(false);\n onClose();\n };\n\n if (isLoading) {\n return (\n <>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Flex justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </Flex>\n </Modal.Body>\n </>\n );\n }\n\n return (\n <>\n <Formik\n validationSchema={folderSchema}\n validateOnChange={false}\n onSubmit={handleSubmit}\n initialValues={initialFormData}\n >\n {({ values, errors, handleChange, setFieldValue, handleSubmit }) => (\n <Form noValidate ref={formRef} onKeyDown={handleKeyDown(handleSubmit)}>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Grid.Root gap={4}>\n {isEditing && (\n <Grid.Item xs={12} col={12} direction=\"column\" alignItems=\"stretch\">\n <ContextInfo\n blocks={[\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.elements'),\n defaultMessage: 'Elements',\n }),\n value: formatMessage(\n {\n id: getTrad('modal.folder.elements.count'),\n defaultMessage: '{folderCount} folders, {assetCount} assets',\n },\n {\n assetCount: folder?.files?.count ?? 0,\n folderCount: folder?.children?.count ?? 0,\n }\n ),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.creation-date'),\n defaultMessage: 'Creation Date',\n }),\n value: formatDate(new Date(folder.createdAt!)),\n },\n ]}\n />\n </Grid.Item>\n )}\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={typeof errors.name === 'string' ? errors.name : undefined}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-name'),\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <Field.Input\n value={values.name}\n onChange={handleChange}\n disabled={formDisabled}\n />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root id=\"folder-parent\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n options={folderStructure!}\n onChange={(value) => {\n setFieldValue('parent', value);\n }}\n isDisabled={formDisabled}\n defaultValue={values.parent!}\n name=\"parent\"\n menuPortalTarget={document.querySelector('body')}\n inputId=\"folder-parent\"\n disabled={formDisabled}\n error={typeof errors.parent === 'string' ? errors.parent : undefined}\n ariaErrorMessage=\"folder-parent-error\"\n />\n\n {errors.parent && (\n <Typography\n variant=\"pi\"\n tag=\"p\"\n id=\"folder-parent-error\"\n textColor=\"danger600\"\n >\n {typeof errors.parent === 'string' ? errors.parent : undefined}\n </Typography>\n )}\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={() => onClose()} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Flex gap={2}>\n {isEditing && canUpdate && (\n <Button\n type=\"button\"\n variant=\"danger-light\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"delete\"\n disabled={!canUpdate || isEditFolderLoading}\n >\n {formatMessage({\n id: getTrad('modal.folder.create.delete'),\n defaultMessage: 'Delete folder',\n })}\n </Button>\n )}\n\n <Button\n name=\"submit\"\n loading={isEditFolderLoading}\n disabled={formDisabled}\n type=\"submit\"\n >\n {formatMessage(\n isEditing\n ? { id: getTrad('modal.folder.edit.submit'), defaultMessage: 'Save' }\n : { id: getTrad('modal.folder.create.submit'), defaultMessage: 'Create' }\n )}\n </Button>\n </Flex>\n </Modal.Footer>\n </Form>\n )}\n </Formik>\n <RemoveFolderDialog\n open={showConfirmDialog}\n onClose={() => setShowConfirmDialog(false)}\n onConfirm={handleDelete}\n />\n </>\n );\n};\n\nexport const EditFolderDialog = ({ open, onClose, ...restProps }: EditFolderDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <EditFolderContent {...restProps} onClose={onClose} open={open} />\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["folderSchema","yup","object","name","string","required","parent","label","value","number","nullable","EditFolderContent","onClose","folder","location","parentFolderId","data","folderStructure","isLoading","folderStructureIsLoading","useFolderStructure","enabled","canCreate","isLoadingPermissions","canUpdate","useMediaLibraryPermissions","showConfirmDialog","setShowConfirmDialog","React","useState","formatMessage","formatDate","useIntl","trackUsage","useTracking","editFolder","isEditFolderLoading","useEditFolder","remove","useBulkRemove","toggleNotification","useNotification","isEditing","formDisabled","initialFormData","parseInt","toString","undefined","findRecursiveFolderByValue","formRef","useRef","handleKeyDown","handleSubmit","event","key","target","HTMLInputElement","preventDefault","values","setErrors","id","type","message","getTrad","defaultMessage","didChangeLocation","changeLocation","created","err","errors","getAPIInnerErrors","formikErrors","Object","entries","reduce","acc","error","isEmpty","handleDelete","_jsxs","_Fragment","_jsx","EditFolderModalHeader","Modal","Body","Flex","justifyContent","paddingTop","paddingBottom","Loader","Formik","validationSchema","validateOnChange","onSubmit","initialValues","handleChange","setFieldValue","Form","noValidate","ref","onKeyDown","Grid","Root","gap","Item","xs","col","direction","alignItems","ContextInfo","blocks","assetCount","files","count","folderCount","children","Date","createdAt","Field","Label","Input","onChange","disabled","Error","SelectTree","options","isDisabled","defaultValue","menuPortalTarget","document","querySelector","inputId","ariaErrorMessage","Typography","variant","tag","textColor","Footer","Button","onClick","loading","RemoveFolderDialog","open","onConfirm","EditFolderDialog","restProps","onOpenChange","Content"],"mappings":"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"}
1
+ {"version":3,"file":"EditFolderDialog.js","sources":["../../../../admin/src/components/EditFolderDialog/EditFolderDialog.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport { Button, Field, Flex, Grid, Loader, Modal, Typography } from '@strapi/design-system';\nimport { Form, Formik, FormikErrors } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { useBulkRemove } from '../../hooks/useBulkRemove';\nimport { useEditFolder } from '../../hooks/useEditFolder';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { useTracking } from '../../hooks/useTracking';\nimport { findRecursiveFolderByValue, getTrad, getAPIInnerErrors } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { EditFolderModalHeader } from './ModalHeader/ModalHeader';\nimport { RemoveFolderDialog } from './RemoveFolderDialog';\n\nimport type { FolderDefinition } from '../../../../shared/contracts/folders';\nimport type { FetchError } from '@strapi/admin/strapi-admin';\n\nconst folderSchema = yup.object({\n name: yup.string().required(),\n parent: yup\n .object({\n label: yup.string(),\n value: yup.number().nullable(true),\n })\n .nullable(true),\n});\n\ninterface ValuesSubmit {\n name: string;\n parent: null | { label?: string; value?: number };\n}\n\nexport interface EditFolderDialogProps {\n parentFolderId?: string | number | null;\n location?: string;\n folder?: FolderDefinition;\n open?: boolean;\n onClose: (payload?: { created?: boolean | undefined } | boolean) => void;\n}\n\nexport const EditFolderContent = ({\n onClose,\n folder,\n location,\n parentFolderId,\n}: EditFolderDialogProps) => {\n const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n enabled: true,\n });\n const { canCreate, isLoading: isLoadingPermissions, canUpdate } = useMediaLibraryPermissions();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { editFolder, isLoading: isEditFolderLoading } = useEditFolder();\n const { remove } = useBulkRemove();\n const { toggleNotification } = useNotification();\n const isLoading = isLoadingPermissions || folderStructureIsLoading;\n const isEditing = !!folder;\n const formDisabled = (folder && !canUpdate) || (!folder && !canCreate);\n const initialFormData: ValuesSubmit = !folderStructureIsLoading\n ? {\n name: folder?.name ?? '',\n parent: {\n /* ideally we would use folderStructure[0].value, but since it is null\n react complains about rendering null as field value */\n value: parentFolderId ? parseInt(parentFolderId.toString(), 10) : undefined,\n label: parentFolderId\n ? folderStructure &&\n findRecursiveFolderByValue(folderStructure, parseInt(parentFolderId.toString(), 10))\n ?.label\n : folderStructure?.[0].label,\n },\n }\n : {\n name: '',\n parent: null,\n };\n\n const formRef = React.useRef<HTMLFormElement>(null);\n\n const handleKeyDown =\n (handleSubmit: (event: React.FormEvent<HTMLFormElement>) => void) =>\n (event: React.KeyboardEvent<HTMLFormElement>) => {\n if (event.key === 'Enter') {\n if (event.target instanceof HTMLInputElement) {\n handleSubmit(event);\n event.preventDefault();\n }\n }\n };\n\n const handleSubmit = async (\n values: ValuesSubmit,\n { setErrors }: { setErrors: (errors: FormikErrors<ValuesSubmit>) => void }\n ) => {\n try {\n await editFolder(\n {\n ...values,\n parent: values.parent?.value ?? null,\n },\n folder?.id\n );\n\n toggleNotification({\n type: 'success',\n message: isEditing\n ? formatMessage({\n id: getTrad('modal.folder-notification-edited-success'),\n defaultMessage: 'Folder successfully edited',\n })\n : formatMessage({\n id: getTrad('modal.folder-notification-created-success'),\n defaultMessage: 'Folder successfully created',\n }),\n });\n\n if (isEditing) {\n const didChangeLocation = parentFolderId\n ? parseInt(parentFolderId.toString(), 10) !== values.parent?.value\n : parentFolderId === null && !!values.parent?.value;\n trackUsage('didEditMediaLibraryElements', {\n location,\n type: 'folder',\n changeLocation: didChangeLocation,\n });\n } else {\n trackUsage('didAddMediaLibraryFolders', { location: location! });\n }\n\n onClose({ created: true });\n } catch (err) {\n const errors = getAPIInnerErrors(err as FetchError, { getTrad });\n const formikErrors = Object.entries(errors!).reduce(\n (acc: Record<string, string>, [key, error]) => {\n acc[key] = error.defaultMessage;\n\n return acc;\n },\n {}\n );\n\n if (!isEmpty(formikErrors)) {\n setErrors(formikErrors);\n }\n }\n };\n\n const handleDelete = async () => {\n if (folder) {\n await remove([folder]);\n }\n\n setShowConfirmDialog(false);\n onClose();\n };\n\n if (isLoading) {\n return (\n <>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Flex justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </Flex>\n </Modal.Body>\n </>\n );\n }\n\n return (\n <>\n <Formik\n validationSchema={folderSchema}\n validateOnChange={false}\n onSubmit={handleSubmit}\n initialValues={initialFormData}\n >\n {({ values, errors, handleChange, setFieldValue, handleSubmit }) => (\n <Form noValidate ref={formRef} onKeyDown={handleKeyDown(handleSubmit)}>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Grid.Root gap={4}>\n {isEditing && (\n <Grid.Item xs={12} col={12} direction=\"column\" alignItems=\"stretch\">\n <ContextInfo\n blocks={[\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.elements'),\n defaultMessage: 'Elements',\n }),\n value: formatMessage(\n {\n id: getTrad('modal.folder.elements.count'),\n defaultMessage: '{folderCount} folders, {assetCount} assets',\n },\n {\n assetCount: folder?.files?.count ?? 0,\n folderCount: folder?.children?.count ?? 0,\n }\n ),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.creation-date'),\n defaultMessage: 'Creation Date',\n }),\n value: formatDate(new Date(folder.createdAt!)),\n },\n ]}\n />\n </Grid.Item>\n )}\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={typeof errors.name === 'string' ? errors.name : undefined}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-name'),\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <Field.Input\n value={values.name}\n onChange={handleChange}\n disabled={formDisabled}\n />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root id=\"folder-parent\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n options={folderStructure!}\n onChange={(value) => {\n setFieldValue('parent', value);\n }}\n isDisabled={formDisabled}\n defaultValue={values.parent!}\n name=\"parent\"\n menuPortalTarget={document.querySelector('body')}\n inputId=\"folder-parent\"\n disabled={formDisabled}\n error={typeof errors.parent === 'string' ? errors.parent : undefined}\n ariaErrorMessage=\"folder-parent-error\"\n />\n\n {errors.parent && (\n <Typography\n variant=\"pi\"\n tag=\"p\"\n id=\"folder-parent-error\"\n textColor=\"danger600\"\n >\n {typeof errors.parent === 'string' ? errors.parent : undefined}\n </Typography>\n )}\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={() => onClose()} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Flex gap={2}>\n {isEditing && canUpdate && (\n <Button\n type=\"button\"\n variant=\"danger-light\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"delete\"\n disabled={!canUpdate || isEditFolderLoading}\n >\n {formatMessage({\n id: getTrad('modal.folder.create.delete'),\n defaultMessage: 'Delete folder',\n })}\n </Button>\n )}\n\n <Button\n name=\"submit\"\n loading={isEditFolderLoading}\n disabled={formDisabled}\n type=\"submit\"\n >\n {formatMessage(\n isEditing\n ? { id: getTrad('modal.folder.edit.submit'), defaultMessage: 'Save' }\n : { id: getTrad('modal.folder.create.submit'), defaultMessage: 'Create' }\n )}\n </Button>\n </Flex>\n </Modal.Footer>\n </Form>\n )}\n </Formik>\n <RemoveFolderDialog\n open={showConfirmDialog}\n onClose={() => setShowConfirmDialog(false)}\n onConfirm={handleDelete}\n />\n </>\n );\n};\n\nexport const EditFolderDialog = ({ open, onClose, ...restProps }: EditFolderDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <EditFolderContent {...restProps} onClose={onClose} open={open} />\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["folderSchema","yup","object","name","string","required","parent","label","value","number","nullable","EditFolderContent","onClose","folder","location","parentFolderId","data","folderStructure","isLoading","folderStructureIsLoading","useFolderStructure","enabled","canCreate","isLoadingPermissions","canUpdate","useMediaLibraryPermissions","showConfirmDialog","setShowConfirmDialog","React","useState","formatMessage","formatDate","useIntl","trackUsage","useTracking","editFolder","isEditFolderLoading","useEditFolder","remove","useBulkRemove","toggleNotification","useNotification","isEditing","formDisabled","initialFormData","parseInt","toString","undefined","findRecursiveFolderByValue","formRef","useRef","handleKeyDown","handleSubmit","event","key","target","HTMLInputElement","preventDefault","values","setErrors","id","type","message","getTrad","defaultMessage","didChangeLocation","changeLocation","created","err","errors","getAPIInnerErrors","formikErrors","Object","entries","reduce","acc","error","isEmpty","handleDelete","_jsxs","_Fragment","_jsx","EditFolderModalHeader","Modal","Body","Flex","justifyContent","paddingTop","paddingBottom","Loader","Formik","validationSchema","validateOnChange","onSubmit","initialValues","handleChange","setFieldValue","Form","noValidate","ref","onKeyDown","Grid","Root","gap","Item","xs","col","direction","alignItems","ContextInfo","blocks","assetCount","files","count","folderCount","children","Date","createdAt","Field","Label","Input","onChange","disabled","Error","SelectTree","options","isDisabled","defaultValue","menuPortalTarget","document","querySelector","inputId","ariaErrorMessage","Typography","variant","tag","textColor","Footer","Button","onClick","loading","RemoveFolderDialog","open","onConfirm","EditFolderDialog","restProps","onOpenChange","Content"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useTracking, useNotification } from '@strapi/admin/strapi-admin';
3
+ import { useNotification } from '@strapi/admin/strapi-admin';
4
4
  import { Modal, Flex, Loader, Grid, Field, Typography, Button } from '@strapi/design-system';
5
5
  import { Formik, Form } from 'formik';
6
6
  import isEmpty from 'lodash/isEmpty';
@@ -10,13 +10,14 @@ import { useBulkRemove } from '../../hooks/useBulkRemove.mjs';
10
10
  import { useEditFolder } from '../../hooks/useEditFolder.mjs';
11
11
  import { useFolderStructure } from '../../hooks/useFolderStructure.mjs';
12
12
  import { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions.mjs';
13
+ import { useTracking } from '../../hooks/useTracking.mjs';
13
14
  import { findRecursiveFolderByValue } from '../../utils/findRecursiveFolderByValue.mjs';
14
15
  import 'byte-size';
15
16
  import 'date-fns';
16
17
  import { getAPIInnerErrors } from '../../utils/getAPIInnerErrors.mjs';
17
18
  import { getTrad } from '../../utils/getTrad.mjs';
18
19
  import 'qs';
19
- import '../../constants.mjs';
20
+ import '../../utils/typeFromMime.mjs';
20
21
  import '../../utils/urlYupSchema.mjs';
21
22
  import { ContextInfo } from '../ContextInfo/ContextInfo.mjs';
22
23
  import { SelectTree } from '../SelectTree/SelectTree.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"EditFolderDialog.mjs","sources":["../../../../admin/src/components/EditFolderDialog/EditFolderDialog.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useNotification } from '@strapi/admin/strapi-admin';\nimport { Button, Field, Flex, Grid, Loader, Modal, Typography } from '@strapi/design-system';\nimport { Form, Formik, FormikErrors } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { useBulkRemove } from '../../hooks/useBulkRemove';\nimport { useEditFolder } from '../../hooks/useEditFolder';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { findRecursiveFolderByValue, getTrad, getAPIInnerErrors } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { EditFolderModalHeader } from './ModalHeader/ModalHeader';\nimport { RemoveFolderDialog } from './RemoveFolderDialog';\n\nimport type { FolderDefinition } from '../../../../shared/contracts/folders';\nimport type { FetchError } from '@strapi/admin/strapi-admin';\n\nconst folderSchema = yup.object({\n name: yup.string().required(),\n parent: yup\n .object({\n label: yup.string(),\n value: yup.number().nullable(true),\n })\n .nullable(true),\n});\n\ninterface ValuesSubmit {\n name: string;\n parent: null | { label?: string; value?: number };\n}\n\nexport interface EditFolderDialogProps {\n parentFolderId?: string | number | null;\n location?: string;\n folder?: FolderDefinition;\n open?: boolean;\n onClose: (payload?: { created?: boolean | undefined } | boolean) => void;\n}\n\nexport const EditFolderContent = ({\n onClose,\n folder,\n location,\n parentFolderId,\n}: EditFolderDialogProps) => {\n const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n enabled: true,\n });\n const { canCreate, isLoading: isLoadingPermissions, canUpdate } = useMediaLibraryPermissions();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { editFolder, isLoading: isEditFolderLoading } = useEditFolder();\n const { remove } = useBulkRemove();\n const { toggleNotification } = useNotification();\n const isLoading = isLoadingPermissions || folderStructureIsLoading;\n const isEditing = !!folder;\n const formDisabled = (folder && !canUpdate) || (!folder && !canCreate);\n const initialFormData: ValuesSubmit = !folderStructureIsLoading\n ? {\n name: folder?.name ?? '',\n parent: {\n /* ideally we would use folderStructure[0].value, but since it is null\n react complains about rendering null as field value */\n value: parentFolderId ? parseInt(parentFolderId.toString(), 10) : undefined,\n label: parentFolderId\n ? folderStructure &&\n findRecursiveFolderByValue(folderStructure, parseInt(parentFolderId.toString(), 10))\n ?.label\n : folderStructure?.[0].label,\n },\n }\n : {\n name: '',\n parent: null,\n };\n\n const formRef = React.useRef<HTMLFormElement>(null);\n\n const handleKeyDown =\n (handleSubmit: (event: React.FormEvent<HTMLFormElement>) => void) =>\n (event: React.KeyboardEvent<HTMLFormElement>) => {\n if (event.key === 'Enter') {\n if (event.target instanceof HTMLInputElement) {\n handleSubmit(event);\n event.preventDefault();\n }\n }\n };\n\n const handleSubmit = async (\n values: ValuesSubmit,\n { setErrors }: { setErrors: (errors: FormikErrors<ValuesSubmit>) => void }\n ) => {\n try {\n await editFolder(\n {\n ...values,\n parent: values.parent?.value ?? null,\n },\n folder?.id\n );\n\n toggleNotification({\n type: 'success',\n message: isEditing\n ? formatMessage({\n id: getTrad('modal.folder-notification-edited-success'),\n defaultMessage: 'Folder successfully edited',\n })\n : formatMessage({\n id: getTrad('modal.folder-notification-created-success'),\n defaultMessage: 'Folder successfully created',\n }),\n });\n\n if (isEditing) {\n const didChangeLocation = parentFolderId\n ? parseInt(parentFolderId.toString(), 10) !== values.parent?.value\n : parentFolderId === null && !!values.parent?.value;\n trackUsage('didEditMediaLibraryElements', {\n location,\n type: 'folder',\n changeLocation: didChangeLocation,\n });\n } else {\n trackUsage('didAddMediaLibraryFolders', { location: location! });\n }\n\n onClose({ created: true });\n } catch (err) {\n const errors = getAPIInnerErrors(err as FetchError, { getTrad });\n const formikErrors = Object.entries(errors!).reduce(\n (acc: Record<string, string>, [key, error]) => {\n acc[key] = error.defaultMessage;\n\n return acc;\n },\n {}\n );\n\n if (!isEmpty(formikErrors)) {\n setErrors(formikErrors);\n }\n }\n };\n\n const handleDelete = async () => {\n if (folder) {\n await remove([folder]);\n }\n\n setShowConfirmDialog(false);\n onClose();\n };\n\n if (isLoading) {\n return (\n <>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Flex justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </Flex>\n </Modal.Body>\n </>\n );\n }\n\n return (\n <>\n <Formik\n validationSchema={folderSchema}\n validateOnChange={false}\n onSubmit={handleSubmit}\n initialValues={initialFormData}\n >\n {({ values, errors, handleChange, setFieldValue, handleSubmit }) => (\n <Form noValidate ref={formRef} onKeyDown={handleKeyDown(handleSubmit)}>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Grid.Root gap={4}>\n {isEditing && (\n <Grid.Item xs={12} col={12} direction=\"column\" alignItems=\"stretch\">\n <ContextInfo\n blocks={[\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.elements'),\n defaultMessage: 'Elements',\n }),\n value: formatMessage(\n {\n id: getTrad('modal.folder.elements.count'),\n defaultMessage: '{folderCount} folders, {assetCount} assets',\n },\n {\n assetCount: folder?.files?.count ?? 0,\n folderCount: folder?.children?.count ?? 0,\n }\n ),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.creation-date'),\n defaultMessage: 'Creation Date',\n }),\n value: formatDate(new Date(folder.createdAt!)),\n },\n ]}\n />\n </Grid.Item>\n )}\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={typeof errors.name === 'string' ? errors.name : undefined}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-name'),\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <Field.Input\n value={values.name}\n onChange={handleChange}\n disabled={formDisabled}\n />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root id=\"folder-parent\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n options={folderStructure!}\n onChange={(value) => {\n setFieldValue('parent', value);\n }}\n isDisabled={formDisabled}\n defaultValue={values.parent!}\n name=\"parent\"\n menuPortalTarget={document.querySelector('body')}\n inputId=\"folder-parent\"\n disabled={formDisabled}\n error={typeof errors.parent === 'string' ? errors.parent : undefined}\n ariaErrorMessage=\"folder-parent-error\"\n />\n\n {errors.parent && (\n <Typography\n variant=\"pi\"\n tag=\"p\"\n id=\"folder-parent-error\"\n textColor=\"danger600\"\n >\n {typeof errors.parent === 'string' ? errors.parent : undefined}\n </Typography>\n )}\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={() => onClose()} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Flex gap={2}>\n {isEditing && canUpdate && (\n <Button\n type=\"button\"\n variant=\"danger-light\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"delete\"\n disabled={!canUpdate || isEditFolderLoading}\n >\n {formatMessage({\n id: getTrad('modal.folder.create.delete'),\n defaultMessage: 'Delete folder',\n })}\n </Button>\n )}\n\n <Button\n name=\"submit\"\n loading={isEditFolderLoading}\n disabled={formDisabled}\n type=\"submit\"\n >\n {formatMessage(\n isEditing\n ? { id: getTrad('modal.folder.edit.submit'), defaultMessage: 'Save' }\n : { id: getTrad('modal.folder.create.submit'), defaultMessage: 'Create' }\n )}\n </Button>\n </Flex>\n </Modal.Footer>\n </Form>\n )}\n </Formik>\n <RemoveFolderDialog\n open={showConfirmDialog}\n onClose={() => setShowConfirmDialog(false)}\n onConfirm={handleDelete}\n />\n </>\n );\n};\n\nexport const EditFolderDialog = ({ open, onClose, ...restProps }: EditFolderDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <EditFolderContent {...restProps} onClose={onClose} open={open} />\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["folderSchema","yup","object","name","string","required","parent","label","value","number","nullable","EditFolderContent","onClose","folder","location","parentFolderId","data","folderStructure","isLoading","folderStructureIsLoading","useFolderStructure","enabled","canCreate","isLoadingPermissions","canUpdate","useMediaLibraryPermissions","showConfirmDialog","setShowConfirmDialog","React","useState","formatMessage","formatDate","useIntl","trackUsage","useTracking","editFolder","isEditFolderLoading","useEditFolder","remove","useBulkRemove","toggleNotification","useNotification","isEditing","formDisabled","initialFormData","parseInt","toString","undefined","findRecursiveFolderByValue","formRef","useRef","handleKeyDown","handleSubmit","event","key","target","HTMLInputElement","preventDefault","values","setErrors","id","type","message","getTrad","defaultMessage","didChangeLocation","changeLocation","created","err","errors","getAPIInnerErrors","formikErrors","Object","entries","reduce","acc","error","isEmpty","handleDelete","_jsxs","_Fragment","_jsx","EditFolderModalHeader","Modal","Body","Flex","justifyContent","paddingTop","paddingBottom","Loader","Formik","validationSchema","validateOnChange","onSubmit","initialValues","handleChange","setFieldValue","Form","noValidate","ref","onKeyDown","Grid","Root","gap","Item","xs","col","direction","alignItems","ContextInfo","blocks","assetCount","files","count","folderCount","children","Date","createdAt","Field","Label","Input","onChange","disabled","Error","SelectTree","options","isDisabled","defaultValue","menuPortalTarget","document","querySelector","inputId","ariaErrorMessage","Typography","variant","tag","textColor","Footer","Button","onClick","loading","RemoveFolderDialog","open","onConfirm","EditFolderDialog","restProps","onOpenChange","Content"],"mappings":"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"}
1
+ {"version":3,"file":"EditFolderDialog.mjs","sources":["../../../../admin/src/components/EditFolderDialog/EditFolderDialog.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport { Button, Field, Flex, Grid, Loader, Modal, Typography } from '@strapi/design-system';\nimport { Form, Formik, FormikErrors } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { useBulkRemove } from '../../hooks/useBulkRemove';\nimport { useEditFolder } from '../../hooks/useEditFolder';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { useTracking } from '../../hooks/useTracking';\nimport { findRecursiveFolderByValue, getTrad, getAPIInnerErrors } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { EditFolderModalHeader } from './ModalHeader/ModalHeader';\nimport { RemoveFolderDialog } from './RemoveFolderDialog';\n\nimport type { FolderDefinition } from '../../../../shared/contracts/folders';\nimport type { FetchError } from '@strapi/admin/strapi-admin';\n\nconst folderSchema = yup.object({\n name: yup.string().required(),\n parent: yup\n .object({\n label: yup.string(),\n value: yup.number().nullable(true),\n })\n .nullable(true),\n});\n\ninterface ValuesSubmit {\n name: string;\n parent: null | { label?: string; value?: number };\n}\n\nexport interface EditFolderDialogProps {\n parentFolderId?: string | number | null;\n location?: string;\n folder?: FolderDefinition;\n open?: boolean;\n onClose: (payload?: { created?: boolean | undefined } | boolean) => void;\n}\n\nexport const EditFolderContent = ({\n onClose,\n folder,\n location,\n parentFolderId,\n}: EditFolderDialogProps) => {\n const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n enabled: true,\n });\n const { canCreate, isLoading: isLoadingPermissions, canUpdate } = useMediaLibraryPermissions();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { editFolder, isLoading: isEditFolderLoading } = useEditFolder();\n const { remove } = useBulkRemove();\n const { toggleNotification } = useNotification();\n const isLoading = isLoadingPermissions || folderStructureIsLoading;\n const isEditing = !!folder;\n const formDisabled = (folder && !canUpdate) || (!folder && !canCreate);\n const initialFormData: ValuesSubmit = !folderStructureIsLoading\n ? {\n name: folder?.name ?? '',\n parent: {\n /* ideally we would use folderStructure[0].value, but since it is null\n react complains about rendering null as field value */\n value: parentFolderId ? parseInt(parentFolderId.toString(), 10) : undefined,\n label: parentFolderId\n ? folderStructure &&\n findRecursiveFolderByValue(folderStructure, parseInt(parentFolderId.toString(), 10))\n ?.label\n : folderStructure?.[0].label,\n },\n }\n : {\n name: '',\n parent: null,\n };\n\n const formRef = React.useRef<HTMLFormElement>(null);\n\n const handleKeyDown =\n (handleSubmit: (event: React.FormEvent<HTMLFormElement>) => void) =>\n (event: React.KeyboardEvent<HTMLFormElement>) => {\n if (event.key === 'Enter') {\n if (event.target instanceof HTMLInputElement) {\n handleSubmit(event);\n event.preventDefault();\n }\n }\n };\n\n const handleSubmit = async (\n values: ValuesSubmit,\n { setErrors }: { setErrors: (errors: FormikErrors<ValuesSubmit>) => void }\n ) => {\n try {\n await editFolder(\n {\n ...values,\n parent: values.parent?.value ?? null,\n },\n folder?.id\n );\n\n toggleNotification({\n type: 'success',\n message: isEditing\n ? formatMessage({\n id: getTrad('modal.folder-notification-edited-success'),\n defaultMessage: 'Folder successfully edited',\n })\n : formatMessage({\n id: getTrad('modal.folder-notification-created-success'),\n defaultMessage: 'Folder successfully created',\n }),\n });\n\n if (isEditing) {\n const didChangeLocation = parentFolderId\n ? parseInt(parentFolderId.toString(), 10) !== values.parent?.value\n : parentFolderId === null && !!values.parent?.value;\n trackUsage('didEditMediaLibraryElements', {\n location,\n type: 'folder',\n changeLocation: didChangeLocation,\n });\n } else {\n trackUsage('didAddMediaLibraryFolders', { location: location! });\n }\n\n onClose({ created: true });\n } catch (err) {\n const errors = getAPIInnerErrors(err as FetchError, { getTrad });\n const formikErrors = Object.entries(errors!).reduce(\n (acc: Record<string, string>, [key, error]) => {\n acc[key] = error.defaultMessage;\n\n return acc;\n },\n {}\n );\n\n if (!isEmpty(formikErrors)) {\n setErrors(formikErrors);\n }\n }\n };\n\n const handleDelete = async () => {\n if (folder) {\n await remove([folder]);\n }\n\n setShowConfirmDialog(false);\n onClose();\n };\n\n if (isLoading) {\n return (\n <>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Flex justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </Flex>\n </Modal.Body>\n </>\n );\n }\n\n return (\n <>\n <Formik\n validationSchema={folderSchema}\n validateOnChange={false}\n onSubmit={handleSubmit}\n initialValues={initialFormData}\n >\n {({ values, errors, handleChange, setFieldValue, handleSubmit }) => (\n <Form noValidate ref={formRef} onKeyDown={handleKeyDown(handleSubmit)}>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Grid.Root gap={4}>\n {isEditing && (\n <Grid.Item xs={12} col={12} direction=\"column\" alignItems=\"stretch\">\n <ContextInfo\n blocks={[\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.elements'),\n defaultMessage: 'Elements',\n }),\n value: formatMessage(\n {\n id: getTrad('modal.folder.elements.count'),\n defaultMessage: '{folderCount} folders, {assetCount} assets',\n },\n {\n assetCount: folder?.files?.count ?? 0,\n folderCount: folder?.children?.count ?? 0,\n }\n ),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.creation-date'),\n defaultMessage: 'Creation Date',\n }),\n value: formatDate(new Date(folder.createdAt!)),\n },\n ]}\n />\n </Grid.Item>\n )}\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={typeof errors.name === 'string' ? errors.name : undefined}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-name'),\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <Field.Input\n value={values.name}\n onChange={handleChange}\n disabled={formDisabled}\n />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root id=\"folder-parent\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n options={folderStructure!}\n onChange={(value) => {\n setFieldValue('parent', value);\n }}\n isDisabled={formDisabled}\n defaultValue={values.parent!}\n name=\"parent\"\n menuPortalTarget={document.querySelector('body')}\n inputId=\"folder-parent\"\n disabled={formDisabled}\n error={typeof errors.parent === 'string' ? errors.parent : undefined}\n ariaErrorMessage=\"folder-parent-error\"\n />\n\n {errors.parent && (\n <Typography\n variant=\"pi\"\n tag=\"p\"\n id=\"folder-parent-error\"\n textColor=\"danger600\"\n >\n {typeof errors.parent === 'string' ? errors.parent : undefined}\n </Typography>\n )}\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={() => onClose()} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Flex gap={2}>\n {isEditing && canUpdate && (\n <Button\n type=\"button\"\n variant=\"danger-light\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"delete\"\n disabled={!canUpdate || isEditFolderLoading}\n >\n {formatMessage({\n id: getTrad('modal.folder.create.delete'),\n defaultMessage: 'Delete folder',\n })}\n </Button>\n )}\n\n <Button\n name=\"submit\"\n loading={isEditFolderLoading}\n disabled={formDisabled}\n type=\"submit\"\n >\n {formatMessage(\n isEditing\n ? { id: getTrad('modal.folder.edit.submit'), defaultMessage: 'Save' }\n : { id: getTrad('modal.folder.create.submit'), defaultMessage: 'Create' }\n )}\n </Button>\n </Flex>\n </Modal.Footer>\n </Form>\n )}\n </Formik>\n <RemoveFolderDialog\n open={showConfirmDialog}\n onClose={() => setShowConfirmDialog(false)}\n onConfirm={handleDelete}\n />\n </>\n );\n};\n\nexport const EditFolderDialog = ({ open, onClose, ...restProps }: EditFolderDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <EditFolderContent {...restProps} onClose={onClose} open={open} />\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["folderSchema","yup","object","name","string","required","parent","label","value","number","nullable","EditFolderContent","onClose","folder","location","parentFolderId","data","folderStructure","isLoading","folderStructureIsLoading","useFolderStructure","enabled","canCreate","isLoadingPermissions","canUpdate","useMediaLibraryPermissions","showConfirmDialog","setShowConfirmDialog","React","useState","formatMessage","formatDate","useIntl","trackUsage","useTracking","editFolder","isEditFolderLoading","useEditFolder","remove","useBulkRemove","toggleNotification","useNotification","isEditing","formDisabled","initialFormData","parseInt","toString","undefined","findRecursiveFolderByValue","formRef","useRef","handleKeyDown","handleSubmit","event","key","target","HTMLInputElement","preventDefault","values","setErrors","id","type","message","getTrad","defaultMessage","didChangeLocation","changeLocation","created","err","errors","getAPIInnerErrors","formikErrors","Object","entries","reduce","acc","error","isEmpty","handleDelete","_jsxs","_Fragment","_jsx","EditFolderModalHeader","Modal","Body","Flex","justifyContent","paddingTop","paddingBottom","Loader","Formik","validationSchema","validateOnChange","onSubmit","initialValues","handleChange","setFieldValue","Form","noValidate","ref","onKeyDown","Grid","Root","gap","Item","xs","col","direction","alignItems","ContextInfo","blocks","assetCount","files","count","folderCount","children","Date","createdAt","Field","Label","Input","onChange","disabled","Error","SelectTree","options","isDisabled","defaultValue","menuPortalTarget","document","querySelector","inputId","ariaErrorMessage","Typography","variant","tag","textColor","Footer","Button","onClick","loading","RemoveFolderDialog","open","onConfirm","EditFolderDialog","restProps","onOpenChange","Content"],"mappings":"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"}
@@ -7,7 +7,7 @@ require('byte-size');
7
7
  require('date-fns');
8
8
  var getTrad = require('../../../utils/getTrad.js');
9
9
  require('qs');
10
- require('../../../constants.js');
10
+ require('../../../utils/typeFromMime.js');
11
11
  require('../../../utils/urlYupSchema.js');
12
12
 
13
13
  const EditFolderModalHeader = ({ isEditing = false })=>{
@@ -5,7 +5,7 @@ import 'byte-size';
5
5
  import 'date-fns';
6
6
  import { getTrad } from '../../../utils/getTrad.mjs';
7
7
  import 'qs';
8
- import '../../../constants.mjs';
8
+ import '../../../utils/typeFromMime.mjs';
9
9
  import '../../../utils/urlYupSchema.mjs';
10
10
 
11
11
  const EditFolderModalHeader = ({ isEditing = false })=>{
@@ -1 +1 @@
1
- {"version":3,"file":"EmptyAssetGrid.js","sources":["../../../../admin/src/components/EmptyAssets/EmptyAssetGrid.tsx"],"sourcesContent":["import { Layouts } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nconst EmptyAssetCard = styled(Box)`\n background: linear-gradient(\n 180deg,\n rgba(234, 234, 239, 0) 0%,\n ${({ theme }) => theme.colors.neutral200} 100%\n );\n opacity: 0.33;\n`;\n\nconst PlaceholderSize = {\n S: 138,\n M: 234,\n};\n\ninterface EmptyAssetGridProps {\n count: number;\n size: 'S' | 'M';\n}\n\nexport const EmptyAssetGrid = ({ count, size }: EmptyAssetGridProps) => {\n return (\n <Layouts.Grid size={size}>\n {Array(count)\n .fill(null)\n .map((_, idx) => (\n <EmptyAssetCard\n // eslint-disable-next-line react/no-array-index-key\n key={`empty-asset-card-${idx}`}\n height={`${PlaceholderSize[size]}px`}\n hasRadius\n />\n ))}\n </Layouts.Grid>\n );\n};\n"],"names":["EmptyAssetCard","styled","Box","theme","colors","neutral200","PlaceholderSize","S","M","EmptyAssetGrid","count","size","_jsx","Layouts","Grid","Array","fill","map","_","idx","height","hasRadius"],"mappings":";;;;;;;AAIA,MAAMA,cAAAA,GAAiBC,uBAAOC,CAAAA,gBAAAA,CAAI;;;;IAI9B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;;AAG7C,CAAC;AAED,MAAMC,eAAkB,GAAA;IACtBC,CAAG,EAAA,GAAA;IACHC,CAAG,EAAA;AACL,CAAA;MAOaC,cAAiB,GAAA,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAuB,GAAA;IACjE,qBACEC,cAAA,CAACC,oBAAQC,IAAI,EAAA;QAACH,IAAMA,EAAAA,IAAAA;kBACjBI,KAAML,CAAAA,KAAAA,CAAAA,CACJM,IAAI,CAAC,IAAA,CAAA,CACLC,GAAG,CAAC,CAACC,CAAGC,EAAAA,GAAAA,iBACPP,cAACZ,CAAAA,cAAAA,EAAAA;AAGCoB,gBAAAA,MAAAA,EAAQ,CAAC,EAAEd,eAAe,CAACK,IAAK,CAAA,CAAC,EAAE,CAAC;gBACpCU,SAAS,EAAA;eAFJ,CAAC,iBAAiB,EAAEF,GAAAA,CAAI,CAAC,CAAA;;AAO1C;;;;"}
1
+ {"version":3,"file":"EmptyAssetGrid.js","sources":["../../../../admin/src/components/EmptyAssets/EmptyAssetGrid.tsx"],"sourcesContent":["import { Layouts } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nconst EmptyAssetCard = styled(Box)`\n background: linear-gradient(\n 180deg,\n rgba(234, 234, 239, 0) 0%,\n ${({ theme }) => theme.colors.neutral200} 100%\n );\n opacity: 0.33;\n`;\n\nconst PlaceholderSize = {\n S: 138,\n M: 234,\n};\n\ninterface EmptyAssetGridProps {\n count: number;\n size: 'S' | 'M';\n}\n\nexport const EmptyAssetGrid = ({ count, size }: EmptyAssetGridProps) => {\n return (\n <Layouts.Grid size={size}>\n {Array(count)\n .fill(null)\n .map((_, idx) => (\n <EmptyAssetCard\n // eslint-disable-next-line react/no-array-index-key\n key={`empty-asset-card-${idx}`}\n height={`${PlaceholderSize[size]}px`}\n hasRadius\n />\n ))}\n </Layouts.Grid>\n );\n};\n"],"names":["EmptyAssetCard","styled","Box","theme","colors","neutral200","PlaceholderSize","S","M","EmptyAssetGrid","count","size","_jsx","Layouts","Grid","Array","fill","map","_","idx","height","hasRadius"],"mappings":";;;;;;;AAIA,MAAMA,cAAAA,GAAiBC,uBAAOC,CAAAA,gBAAAA,CAAI;;;;IAI9B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;;AAG7C,CAAC;AAED,MAAMC,eAAkB,GAAA;IACtBC,CAAG,EAAA,GAAA;IACHC,CAAG,EAAA;AACL,CAAA;MAOaC,cAAiB,GAAA,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAuB,GAAA;IACjE,qBACEC,cAAA,CAACC,oBAAQC,IAAI,EAAA;QAACH,IAAMA,EAAAA,IAAAA;kBACjBI,KAAML,CAAAA,KAAAA,CAAAA,CACJM,IAAI,CAAC,IAAA,CAAA,CACLC,GAAG,CAAC,CAACC,CAAGC,EAAAA,GAAAA,iBACPP,cAACZ,CAAAA,cAAAA,EAAAA;AAGCoB,gBAAAA,MAAAA,EAAQ,GAAGd,eAAe,CAACK,IAAK,CAAA,CAAC,EAAE,CAAC;gBACpCU,SAAS,EAAA;eAFJ,CAAC,iBAAiB,EAAEF,GAAK,CAAA,CAAA,CAAA;;AAO1C;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"EmptyAssetGrid.mjs","sources":["../../../../admin/src/components/EmptyAssets/EmptyAssetGrid.tsx"],"sourcesContent":["import { Layouts } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nconst EmptyAssetCard = styled(Box)`\n background: linear-gradient(\n 180deg,\n rgba(234, 234, 239, 0) 0%,\n ${({ theme }) => theme.colors.neutral200} 100%\n );\n opacity: 0.33;\n`;\n\nconst PlaceholderSize = {\n S: 138,\n M: 234,\n};\n\ninterface EmptyAssetGridProps {\n count: number;\n size: 'S' | 'M';\n}\n\nexport const EmptyAssetGrid = ({ count, size }: EmptyAssetGridProps) => {\n return (\n <Layouts.Grid size={size}>\n {Array(count)\n .fill(null)\n .map((_, idx) => (\n <EmptyAssetCard\n // eslint-disable-next-line react/no-array-index-key\n key={`empty-asset-card-${idx}`}\n height={`${PlaceholderSize[size]}px`}\n hasRadius\n />\n ))}\n </Layouts.Grid>\n );\n};\n"],"names":["EmptyAssetCard","styled","Box","theme","colors","neutral200","PlaceholderSize","S","M","EmptyAssetGrid","count","size","_jsx","Layouts","Grid","Array","fill","map","_","idx","height","hasRadius"],"mappings":";;;;;AAIA,MAAMA,cAAAA,GAAiBC,MAAOC,CAAAA,GAAAA,CAAI;;;;IAI9B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;;AAG7C,CAAC;AAED,MAAMC,eAAkB,GAAA;IACtBC,CAAG,EAAA,GAAA;IACHC,CAAG,EAAA;AACL,CAAA;MAOaC,cAAiB,GAAA,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAuB,GAAA;IACjE,qBACEC,GAAA,CAACC,QAAQC,IAAI,EAAA;QAACH,IAAMA,EAAAA,IAAAA;kBACjBI,KAAML,CAAAA,KAAAA,CAAAA,CACJM,IAAI,CAAC,IAAA,CAAA,CACLC,GAAG,CAAC,CAACC,CAAGC,EAAAA,GAAAA,iBACPP,GAACZ,CAAAA,cAAAA,EAAAA;AAGCoB,gBAAAA,MAAAA,EAAQ,CAAC,EAAEd,eAAe,CAACK,IAAK,CAAA,CAAC,EAAE,CAAC;gBACpCU,SAAS,EAAA;eAFJ,CAAC,iBAAiB,EAAEF,GAAAA,CAAI,CAAC,CAAA;;AAO1C;;;;"}
1
+ {"version":3,"file":"EmptyAssetGrid.mjs","sources":["../../../../admin/src/components/EmptyAssets/EmptyAssetGrid.tsx"],"sourcesContent":["import { Layouts } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nconst EmptyAssetCard = styled(Box)`\n background: linear-gradient(\n 180deg,\n rgba(234, 234, 239, 0) 0%,\n ${({ theme }) => theme.colors.neutral200} 100%\n );\n opacity: 0.33;\n`;\n\nconst PlaceholderSize = {\n S: 138,\n M: 234,\n};\n\ninterface EmptyAssetGridProps {\n count: number;\n size: 'S' | 'M';\n}\n\nexport const EmptyAssetGrid = ({ count, size }: EmptyAssetGridProps) => {\n return (\n <Layouts.Grid size={size}>\n {Array(count)\n .fill(null)\n .map((_, idx) => (\n <EmptyAssetCard\n // eslint-disable-next-line react/no-array-index-key\n key={`empty-asset-card-${idx}`}\n height={`${PlaceholderSize[size]}px`}\n hasRadius\n />\n ))}\n </Layouts.Grid>\n );\n};\n"],"names":["EmptyAssetCard","styled","Box","theme","colors","neutral200","PlaceholderSize","S","M","EmptyAssetGrid","count","size","_jsx","Layouts","Grid","Array","fill","map","_","idx","height","hasRadius"],"mappings":";;;;;AAIA,MAAMA,cAAAA,GAAiBC,MAAOC,CAAAA,GAAAA,CAAI;;;;IAI9B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;;AAG7C,CAAC;AAED,MAAMC,eAAkB,GAAA;IACtBC,CAAG,EAAA,GAAA;IACHC,CAAG,EAAA;AACL,CAAA;MAOaC,cAAiB,GAAA,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAuB,GAAA;IACjE,qBACEC,GAAA,CAACC,QAAQC,IAAI,EAAA;QAACH,IAAMA,EAAAA,IAAAA;kBACjBI,KAAML,CAAAA,KAAAA,CAAAA,CACJM,IAAI,CAAC,IAAA,CAAA,CACLC,GAAG,CAAC,CAACC,CAAGC,EAAAA,GAAAA,iBACPP,GAACZ,CAAAA,cAAAA,EAAAA;AAGCoB,gBAAAA,MAAAA,EAAQ,GAAGd,eAAe,CAACK,IAAK,CAAA,CAAC,EAAE,CAAC;gBACpCU,SAAS,EAAA;eAFJ,CAAC,iBAAiB,EAAEF,GAAK,CAAA,CAAA,CAAA;;AAO1C;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"FilterList.js","sources":["../../../../admin/src/components/FilterList/FilterList.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterList\n *\n */\nimport { FilterTag } from './FilterTag';\n\ntype NumberKeyedObject = Record<number, string>;\n\ntype StringFilter = {\n [key: string]: string;\n};\n\ntype MimeFilter = {\n [key: string]:\n | string\n | NumberKeyedObject\n | Record<string, string | NumberKeyedObject>\n | undefined;\n};\n\nexport type FilterStructure = {\n [key: string]: MimeFilter | StringFilter | undefined;\n};\n\nexport interface FilterListProps {\n appliedFilters: FilterStructure[];\n filtersSchema: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema?: {\n type?: string;\n mainField?: {\n name: string;\n type: string;\n };\n options?: {\n label: string;\n value: string;\n }[];\n };\n }[];\n onRemoveFilter: (filters: FilterStructure[]) => void;\n}\n\nexport const FilterList = ({ appliedFilters, filtersSchema, onRemoveFilter }: FilterListProps) => {\n const handleClick = (filter: FilterStructure) => {\n const nextFilters = appliedFilters.filter((prevFilter) => {\n const name = Object.keys(filter)[0];\n const filterName = filter[name];\n if (filterName !== undefined) {\n const filterType = Object.keys(filterName)[0];\n const filterValue = filterName[filterType];\n if (typeof filterValue === 'string') {\n const decodedValue = decodeURIComponent(filterValue);\n return prevFilter[name]?.[filterType] !== decodedValue;\n }\n }\n\n return true;\n });\n\n onRemoveFilter(nextFilters);\n };\n\n return appliedFilters.map((filter, i) => {\n const attributeName = Object.keys(filter)[0];\n const attribute = filtersSchema.find(({ name }) => name === attributeName);\n\n if (!attribute) {\n // Handle the case where attribute is undefined\n return null;\n }\n\n const filterObj = filter[attributeName];\n const operator = Object.keys(filterObj!)[0];\n let value = filterObj![operator];\n\n if (Array.isArray(value)) {\n value = value.join(', ');\n } else if (typeof value === 'object') {\n value = Object.values(value).join(', ');\n } else {\n value =\n Array.isArray(value) || typeof value === 'object'\n ? Object.values(value).join(', ')\n : decodeURIComponent(value!);\n }\n\n let displayedOperator = operator;\n\n if (attribute?.name === 'mime') {\n displayedOperator = operator === '$contains' ? '$eq' : '$ne';\n\n // Type is file\n // The filter for the file is the following: { mime: {$not: {$contains: ['image', 'video']}}}\n if (operator === '$not') {\n value = 'file';\n displayedOperator = '$eq';\n }\n\n // Here the type is file and the filter is not file\n // { mime: {$contains: ['image', 'video'] }}\n if (['image', 'video'].includes(value[0]) && ['image', 'video'].includes(value[1])) {\n value = 'file';\n displayedOperator = '$ne';\n }\n }\n\n return (\n <FilterTag\n // eslint-disable-next-line react/no-array-index-key\n key={`${attributeName}-${i}`}\n attribute={attribute}\n filter={filter}\n onClick={handleClick}\n operator={displayedOperator}\n value={value as string}\n />\n );\n });\n};\n"],"names":["FilterList","appliedFilters","filtersSchema","onRemoveFilter","handleClick","filter","nextFilters","prevFilter","name","Object","keys","filterName","undefined","filterType","filterValue","decodedValue","decodeURIComponent","map","i","attributeName","attribute","find","filterObj","operator","value","Array","isArray","join","values","displayedOperator","includes","_jsx","FilterTag","onClick"],"mappings":";;;;;AAAA;AAgDO,MAAMA,aAAa,CAAC,EAAEC,cAAc,EAAEC,aAAa,EAAEC,cAAc,EAAmB,GAAA;AAC3F,IAAA,MAAMC,cAAc,CAACC,MAAAA,GAAAA;AACnB,QAAA,MAAMC,WAAcL,GAAAA,cAAAA,CAAeI,MAAM,CAAC,CAACE,UAAAA,GAAAA;AACzC,YAAA,MAAMC,OAAOC,MAAOC,CAAAA,IAAI,CAACL,MAAAA,CAAO,CAAC,CAAE,CAAA;YACnC,MAAMM,UAAAA,GAAaN,MAAM,CAACG,IAAK,CAAA;AAC/B,YAAA,IAAIG,eAAeC,SAAW,EAAA;AAC5B,gBAAA,MAAMC,aAAaJ,MAAOC,CAAAA,IAAI,CAACC,UAAAA,CAAW,CAAC,CAAE,CAAA;gBAC7C,MAAMG,WAAAA,GAAcH,UAAU,CAACE,UAAW,CAAA;gBAC1C,IAAI,OAAOC,gBAAgB,QAAU,EAAA;AACnC,oBAAA,MAAMC,eAAeC,kBAAmBF,CAAAA,WAAAA,CAAAA;AACxC,oBAAA,OAAOP,UAAU,CAACC,IAAAA,CAAK,GAAGK,WAAW,KAAKE,YAAAA;AAC5C;AACF;YAEA,OAAO,IAAA;AACT,SAAA,CAAA;QAEAZ,cAAeG,CAAAA,WAAAA,CAAAA;AACjB,KAAA;AAEA,IAAA,OAAOL,cAAegB,CAAAA,GAAG,CAAC,CAACZ,MAAQa,EAAAA,CAAAA,GAAAA;AACjC,QAAA,MAAMC,gBAAgBV,MAAOC,CAAAA,IAAI,CAACL,MAAAA,CAAO,CAAC,CAAE,CAAA;QAC5C,MAAMe,SAAAA,GAAYlB,cAAcmB,IAAI,CAAC,CAAC,EAAEb,IAAI,EAAE,GAAKA,IAASW,KAAAA,aAAAA,CAAAA;AAE5D,QAAA,IAAI,CAACC,SAAW,EAAA;;YAEd,OAAO,IAAA;AACT;QAEA,MAAME,SAAAA,GAAYjB,MAAM,CAACc,aAAc,CAAA;AACvC,QAAA,MAAMI,WAAWd,MAAOC,CAAAA,IAAI,CAACY,SAAAA,CAAW,CAAC,CAAE,CAAA;QAC3C,IAAIE,KAAAA,GAAQF,SAAU,CAACC,QAAS,CAAA;QAEhC,IAAIE,KAAAA,CAAMC,OAAO,CAACF,KAAQ,CAAA,EAAA;YACxBA,KAAQA,GAAAA,KAAAA,CAAMG,IAAI,CAAC,IAAA,CAAA;SACd,MAAA,IAAI,OAAOH,KAAAA,KAAU,QAAU,EAAA;AACpCA,YAAAA,KAAAA,GAAQf,MAAOmB,CAAAA,MAAM,CAACJ,KAAAA,CAAAA,CAAOG,IAAI,CAAC,IAAA,CAAA;SAC7B,MAAA;AACLH,YAAAA,KAAAA,GACEC,KAAMC,CAAAA,OAAO,CAACF,KAAAA,CAAAA,IAAU,OAAOA,KAAU,KAAA,QAAA,GACrCf,MAAOmB,CAAAA,MAAM,CAACJ,KAAAA,CAAAA,CAAOG,IAAI,CAAC,QAC1BX,kBAAmBQ,CAAAA,KAAAA,CAAAA;AAC3B;AAEA,QAAA,IAAIK,iBAAoBN,GAAAA,QAAAA;QAExB,IAAIH,SAAAA,EAAWZ,SAAS,MAAQ,EAAA;YAC9BqB,iBAAoBN,GAAAA,QAAAA,KAAa,cAAc,KAAQ,GAAA,KAAA;;;AAIvD,YAAA,IAAIA,aAAa,MAAQ,EAAA;gBACvBC,KAAQ,GAAA,MAAA;gBACRK,iBAAoB,GAAA,KAAA;AACtB;;;YAIA,IAAI;AAAC,gBAAA,OAAA;AAAS,gBAAA;AAAQ,aAAA,CAACC,QAAQ,CAACN,KAAK,CAAC,EAAE,CAAK,IAAA;AAAC,gBAAA,OAAA;AAAS,gBAAA;AAAQ,aAAA,CAACM,QAAQ,CAACN,KAAK,CAAC,EAAE,CAAG,EAAA;gBAClFA,KAAQ,GAAA,MAAA;gBACRK,iBAAoB,GAAA,KAAA;AACtB;AACF;AAEA,QAAA,qBACEE,cAACC,CAAAA,mBAAAA,EAAAA;YAGCZ,SAAWA,EAAAA,SAAAA;YACXf,MAAQA,EAAAA,MAAAA;YACR4B,OAAS7B,EAAAA,WAAAA;YACTmB,QAAUM,EAAAA,iBAAAA;YACVL,KAAOA,EAAAA;AALF,SAAA,EAAA,CAAC,EAAEL,aAAAA,CAAc,CAAC,EAAED,EAAE,CAAC,CAAA;AAQlC,KAAA,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"FilterList.js","sources":["../../../../admin/src/components/FilterList/FilterList.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterList\n *\n */\nimport { FilterTag } from './FilterTag';\n\ntype NumberKeyedObject = Record<number, string>;\n\ntype StringFilter = {\n [key: string]: string;\n};\n\ntype MimeFilter = {\n [key: string]:\n | string\n | NumberKeyedObject\n | Record<string, string | NumberKeyedObject>\n | undefined;\n};\n\nexport type FilterStructure = {\n [key: string]: MimeFilter | StringFilter | undefined;\n};\n\nexport interface FilterListProps {\n appliedFilters: FilterStructure[];\n filtersSchema: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema?: {\n type?: string;\n mainField?: {\n name: string;\n type: string;\n };\n options?: {\n label: string;\n value: string;\n }[];\n };\n }[];\n onRemoveFilter: (filters: FilterStructure[]) => void;\n}\n\nexport const FilterList = ({ appliedFilters, filtersSchema, onRemoveFilter }: FilterListProps) => {\n const handleClick = (filter: FilterStructure) => {\n const nextFilters = appliedFilters.filter((prevFilter) => {\n const name = Object.keys(filter)[0];\n const filterName = filter[name];\n if (filterName !== undefined) {\n const filterType = Object.keys(filterName)[0];\n const filterValue = filterName[filterType];\n if (typeof filterValue === 'string') {\n const decodedValue = decodeURIComponent(filterValue);\n return prevFilter[name]?.[filterType] !== decodedValue;\n }\n }\n\n return true;\n });\n\n onRemoveFilter(nextFilters);\n };\n\n return appliedFilters.map((filter, i) => {\n const attributeName = Object.keys(filter)[0];\n const attribute = filtersSchema.find(({ name }) => name === attributeName);\n\n if (!attribute) {\n // Handle the case where attribute is undefined\n return null;\n }\n\n const filterObj = filter[attributeName];\n const operator = Object.keys(filterObj!)[0];\n let value = filterObj![operator];\n\n if (Array.isArray(value)) {\n value = value.join(', ');\n } else if (typeof value === 'object') {\n value = Object.values(value).join(', ');\n } else {\n value =\n Array.isArray(value) || typeof value === 'object'\n ? Object.values(value).join(', ')\n : decodeURIComponent(value!);\n }\n\n let displayedOperator = operator;\n\n if (attribute?.name === 'mime') {\n displayedOperator = operator === '$contains' ? '$eq' : '$ne';\n\n // Type is file\n // The filter for the file is the following: { mime: {$not: {$contains: ['image', 'video']}}}\n if (operator === '$not') {\n value = 'file';\n displayedOperator = '$eq';\n }\n\n // Here the type is file and the filter is not file\n // { mime: {$contains: ['image', 'video'] }}\n if (['image', 'video'].includes(value[0]) && ['image', 'video'].includes(value[1])) {\n value = 'file';\n displayedOperator = '$ne';\n }\n }\n\n return (\n <FilterTag\n // eslint-disable-next-line react/no-array-index-key\n key={`${attributeName}-${i}`}\n attribute={attribute}\n filter={filter}\n onClick={handleClick}\n operator={displayedOperator}\n value={value as string}\n />\n );\n });\n};\n"],"names":["FilterList","appliedFilters","filtersSchema","onRemoveFilter","handleClick","filter","nextFilters","prevFilter","name","Object","keys","filterName","undefined","filterType","filterValue","decodedValue","decodeURIComponent","map","i","attributeName","attribute","find","filterObj","operator","value","Array","isArray","join","values","displayedOperator","includes","_jsx","FilterTag","onClick"],"mappings":"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"}