@strapi/upload 5.25.0 → 5.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/admin/ai/components/AIAssetCard.js +589 -0
  2. package/dist/admin/ai/components/AIAssetCard.js.map +1 -0
  3. package/dist/admin/ai/components/AIAssetCard.mjs +567 -0
  4. package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -0
  5. package/dist/admin/ai/components/AIUploadModal.js +355 -0
  6. package/dist/admin/ai/components/AIUploadModal.js.map +1 -0
  7. package/dist/admin/ai/components/AIUploadModal.mjs +333 -0
  8. package/dist/admin/ai/components/AIUploadModal.mjs.map +1 -0
  9. package/dist/admin/components/AssetDialog/AssetDialog.js +1 -1
  10. package/dist/admin/components/AssetDialog/AssetDialog.js.map +1 -1
  11. package/dist/admin/components/AssetDialog/AssetDialog.mjs +1 -1
  12. package/dist/admin/components/AssetDialog/AssetDialog.mjs.map +1 -1
  13. package/dist/admin/components/EditAssetDialog/EditAssetContent.js +5 -5
  14. package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
  15. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +5 -5
  16. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
  17. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +0 -15
  18. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -1
  19. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs +1 -16
  20. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +1 -1
  21. package/dist/admin/hooks/useAiAvailability.js +22 -0
  22. package/dist/admin/hooks/useAiAvailability.js.map +1 -0
  23. package/dist/admin/hooks/useAiAvailability.mjs +20 -0
  24. package/dist/admin/hooks/useAiAvailability.mjs.map +1 -0
  25. package/dist/admin/hooks/useBulkEdit.js +66 -0
  26. package/dist/admin/hooks/useBulkEdit.js.map +1 -0
  27. package/dist/admin/hooks/useBulkEdit.mjs +64 -0
  28. package/dist/admin/hooks/useBulkEdit.mjs.map +1 -0
  29. package/dist/admin/hooks/useSettings.js +22 -0
  30. package/dist/admin/hooks/useSettings.js.map +1 -0
  31. package/dist/admin/hooks/useSettings.mjs +20 -0
  32. package/dist/admin/hooks/useSettings.mjs.map +1 -0
  33. package/dist/admin/hooks/useUpload.js +25 -14
  34. package/dist/admin/hooks/useUpload.js.map +1 -1
  35. package/dist/admin/hooks/useUpload.mjs +25 -14
  36. package/dist/admin/hooks/useUpload.mjs.map +1 -1
  37. package/dist/admin/package.json.js +5 -5
  38. package/dist/admin/package.json.mjs +5 -5
  39. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js +11 -4
  40. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js.map +1 -1
  41. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs +11 -4
  42. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs.map +1 -1
  43. package/dist/admin/pages/SettingsPage/SettingsPage.js +222 -144
  44. package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
  45. package/dist/admin/pages/SettingsPage/SettingsPage.mjs +225 -147
  46. package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
  47. package/dist/admin/pages/SettingsPage/reducer.js +9 -10
  48. package/dist/admin/pages/SettingsPage/reducer.js.map +1 -1
  49. package/dist/admin/pages/SettingsPage/reducer.mjs +9 -10
  50. package/dist/admin/pages/SettingsPage/reducer.mjs.map +1 -1
  51. package/dist/admin/src/ai/components/AIAssetCard.d.ts +13 -0
  52. package/dist/admin/src/ai/components/AIUploadModal.d.ts +55 -0
  53. package/dist/admin/src/components/EditAssetDialog/EditAssetContent.d.ts +3 -1
  54. package/dist/admin/src/hooks/useAiAvailability.d.ts +4 -0
  55. package/dist/admin/src/hooks/useBulkEdit.d.ts +91 -0
  56. package/dist/admin/src/hooks/useSettings.d.ts +7 -0
  57. package/dist/admin/src/hooks/useUpload.d.ts +1 -1
  58. package/dist/admin/src/pages/SettingsPage/reducer.d.ts +3 -12
  59. package/dist/admin/translations/en.json.js +7 -1
  60. package/dist/admin/translations/en.json.js.map +1 -1
  61. package/dist/admin/translations/en.json.mjs +7 -1
  62. package/dist/admin/translations/en.json.mjs.map +1 -1
  63. package/dist/server/bootstrap.js +2 -1
  64. package/dist/server/bootstrap.js.map +1 -1
  65. package/dist/server/bootstrap.mjs +2 -1
  66. package/dist/server/bootstrap.mjs.map +1 -1
  67. package/dist/server/controllers/admin-upload.js +54 -2
  68. package/dist/server/controllers/admin-upload.js.map +1 -1
  69. package/dist/server/controllers/admin-upload.mjs +56 -4
  70. package/dist/server/controllers/admin-upload.mjs.map +1 -1
  71. package/dist/server/controllers/content-api.js +3 -1
  72. package/dist/server/controllers/content-api.js.map +1 -1
  73. package/dist/server/controllers/content-api.mjs +3 -1
  74. package/dist/server/controllers/content-api.mjs.map +1 -1
  75. package/dist/server/controllers/validation/admin/settings.js +2 -1
  76. package/dist/server/controllers/validation/admin/settings.js.map +1 -1
  77. package/dist/server/controllers/validation/admin/settings.mjs +2 -1
  78. package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
  79. package/dist/server/controllers/validation/admin/upload.js +8 -0
  80. package/dist/server/controllers/validation/admin/upload.js.map +1 -1
  81. package/dist/server/controllers/validation/admin/upload.mjs +8 -1
  82. package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
  83. package/dist/server/routes/admin.js +18 -0
  84. package/dist/server/routes/admin.js.map +1 -1
  85. package/dist/server/routes/admin.mjs +18 -0
  86. package/dist/server/routes/admin.mjs.map +1 -1
  87. package/dist/server/services/ai-metadata.js +97 -0
  88. package/dist/server/services/ai-metadata.js.map +1 -0
  89. package/dist/server/services/ai-metadata.mjs +95 -0
  90. package/dist/server/services/ai-metadata.mjs.map +1 -0
  91. package/dist/server/services/index.js +3 -1
  92. package/dist/server/services/index.js.map +1 -1
  93. package/dist/server/services/index.mjs +3 -1
  94. package/dist/server/services/index.mjs.map +1 -1
  95. package/dist/server/services/upload.js.map +1 -1
  96. package/dist/server/services/upload.mjs.map +1 -1
  97. package/dist/server/src/bootstrap.d.ts.map +1 -1
  98. package/dist/server/src/controllers/admin-upload.d.ts +1 -0
  99. package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
  100. package/dist/server/src/controllers/index.d.ts +1 -0
  101. package/dist/server/src/controllers/index.d.ts.map +1 -1
  102. package/dist/server/src/controllers/validation/admin/settings.d.ts +3 -0
  103. package/dist/server/src/controllers/validation/admin/settings.d.ts.map +1 -1
  104. package/dist/server/src/controllers/validation/admin/upload.d.ts +42 -0
  105. package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
  106. package/dist/server/src/index.d.ts +13 -1
  107. package/dist/server/src/index.d.ts.map +1 -1
  108. package/dist/server/src/routes/admin.d.ts.map +1 -1
  109. package/dist/server/src/services/ai-metadata.d.ts +13 -0
  110. package/dist/server/src/services/ai-metadata.d.ts.map +1 -0
  111. package/dist/server/src/services/index.d.ts +12 -1
  112. package/dist/server/src/services/index.d.ts.map +1 -1
  113. package/dist/server/src/services/upload.d.ts +2 -1
  114. package/dist/server/src/services/upload.d.ts.map +1 -1
  115. package/dist/server/src/types.d.ts +1 -0
  116. package/dist/server/src/types.d.ts.map +1 -1
  117. package/dist/server/src/utils/index.d.ts +2 -0
  118. package/dist/server/src/utils/index.d.ts.map +1 -1
  119. package/dist/server/utils/index.js.map +1 -1
  120. package/dist/server/utils/index.mjs.map +1 -1
  121. package/dist/shared/contracts/files.d.ts +22 -0
  122. package/dist/shared/contracts/settings.d.ts +2 -0
  123. package/package.json +5 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAiAvailability.mjs","sources":["../../../admin/src/hooks/useAiAvailability.ts"],"sourcesContent":["import { useAIAvailability as useGlobalAIAvailability } from '@strapi/admin/strapi-admin/ee';\n\nimport { useSettings } from './useSettings';\n\nexport const useAIAvailability = () => {\n const isAiAvailable = useGlobalAIAvailability();\n const { status, data } = useSettings(isAiAvailable);\n\n if (!isAiAvailable) {\n return { status: 'success' as const, isEnabled: false };\n }\n\n return { status, isEnabled: data?.aiMetadata };\n};\n"],"names":["useAIAvailability","isAiAvailable","useGlobalAIAvailability","status","data","useSettings","isEnabled","aiMetadata"],"mappings":";;;MAIaA,iBAAoB,GAAA,IAAA;AAC/B,IAAA,MAAMC,aAAgBC,GAAAA,mBAAAA,EAAAA;AACtB,IAAA,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAE,GAAGC,WAAYJ,CAAAA,aAAAA,CAAAA;AAErC,IAAA,IAAI,CAACA,aAAe,EAAA;QAClB,OAAO;YAAEE,MAAQ,EAAA,SAAA;YAAoBG,SAAW,EAAA;AAAM,SAAA;AACxD;IAEA,OAAO;AAAEH,QAAAA,MAAAA;AAAQG,QAAAA,SAAAA,EAAWF,IAAMG,EAAAA;AAAW,KAAA;AAC/C;;;;"}
@@ -0,0 +1,66 @@
1
+ 'use strict';
2
+
3
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
4
+ var reactIntl = require('react-intl');
5
+ var reactQuery = require('react-query');
6
+ var pluginId = require('../pluginId.js');
7
+ require('byte-size');
8
+ require('date-fns');
9
+ var getTrad = require('../utils/getTrad.js');
10
+ require('qs');
11
+ require('../constants.js');
12
+ require('../utils/urlYupSchema.js');
13
+
14
+ const useBulkEdit = ()=>{
15
+ const { formatMessage } = reactIntl.useIntl();
16
+ const { toggleNotification } = strapiAdmin.useNotification();
17
+ const queryClient = reactQuery.useQueryClient();
18
+ const { post } = strapiAdmin.useFetchClient();
19
+ const bulkEditQuery = ({ updates })=>{
20
+ return post('/upload/actions/bulk-update', {
21
+ updates
22
+ });
23
+ };
24
+ const mutation = reactQuery.useMutation(bulkEditQuery, {
25
+ onSuccess (res) {
26
+ const { data } = res;
27
+ if (data && data.length > 0) {
28
+ queryClient.refetchQueries([
29
+ pluginId.pluginId,
30
+ 'assets'
31
+ ], {
32
+ active: true
33
+ });
34
+ queryClient.refetchQueries([
35
+ pluginId.pluginId,
36
+ 'asset-count'
37
+ ], {
38
+ active: true
39
+ });
40
+ queryClient.refetchQueries([
41
+ pluginId.pluginId,
42
+ 'folders'
43
+ ], {
44
+ active: true
45
+ });
46
+ }
47
+ toggleNotification({
48
+ type: 'success',
49
+ message: formatMessage({
50
+ id: getTrad.getTrad('modal.edit.success-label'),
51
+ defaultMessage: 'Files have been successfully updated.'
52
+ })
53
+ });
54
+ }
55
+ });
56
+ const edit = (updates)=>mutation.mutateAsync({
57
+ updates
58
+ });
59
+ return {
60
+ ...mutation,
61
+ edit
62
+ };
63
+ };
64
+
65
+ exports.useBulkEdit = useBulkEdit;
66
+ //# sourceMappingURL=useBulkEdit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBulkEdit.js","sources":["../../../admin/src/hooks/useBulkEdit.ts"],"sourcesContent":["import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport { BulkUpdateFiles } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\nimport { getTrad } from '../utils';\n\ninterface FileInfoUpdate {\n name: string;\n alternativeText: string | null;\n caption: string | null;\n folder: number | null;\n}\n\ninterface BulkEditParams {\n updates: Array<{\n id: number;\n fileInfo: FileInfoUpdate;\n }>;\n}\n\nexport const useBulkEdit = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const queryClient = useQueryClient();\n const { post } = useFetchClient();\n\n const bulkEditQuery = ({ updates }: BulkEditParams) => {\n return post('/upload/actions/bulk-update', { updates });\n };\n\n const mutation = useMutation<\n BulkUpdateFiles.Response,\n BulkUpdateFiles.Response['error'],\n BulkEditParams\n >(bulkEditQuery, {\n onSuccess(res) {\n const { data } = res;\n\n if (data && data.length > 0) {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n queryClient.refetchQueries([pluginId, 'folders'], { active: true });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('modal.edit.success-label'),\n defaultMessage: 'Files have been successfully updated.',\n }),\n });\n },\n });\n\n const edit = (\n updates: Array<{\n id: number;\n fileInfo: FileInfoUpdate;\n }>\n ) => mutation.mutateAsync({ updates });\n\n return { ...mutation, edit };\n};\n"],"names":["useBulkEdit","formatMessage","useIntl","toggleNotification","useNotification","queryClient","useQueryClient","post","useFetchClient","bulkEditQuery","updates","mutation","useMutation","onSuccess","res","data","length","refetchQueries","pluginId","active","type","message","id","getTrad","defaultMessage","edit","mutateAsync"],"mappings":";;;;;;;;;;;;;MAsBaA,WAAc,GAAA,IAAA;IACzB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAC/B,IAAA,MAAMC,WAAcC,GAAAA,yBAAAA,EAAAA;IACpB,MAAM,EAAEC,IAAI,EAAE,GAAGC,0BAAAA,EAAAA;AAEjB,IAAA,MAAMC,aAAgB,GAAA,CAAC,EAAEC,OAAO,EAAkB,GAAA;AAChD,QAAA,OAAOH,KAAK,6BAA+B,EAAA;AAAEG,YAAAA;AAAQ,SAAA,CAAA;AACvD,KAAA;IAEA,MAAMC,QAAAA,GAAWC,uBAIfH,aAAe,EAAA;AACfI,QAAAA,SAAAA,CAAAA,CAAUC,GAAG,EAAA;YACX,MAAM,EAAEC,IAAI,EAAE,GAAGD,GAAAA;AAEjB,YAAA,IAAIC,IAAQA,IAAAA,IAAAA,CAAKC,MAAM,GAAG,CAAG,EAAA;AAC3BX,gBAAAA,WAAAA,CAAYY,cAAc,CAAC;AAACC,oBAAAA,iBAAAA;AAAU,oBAAA;iBAAS,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AAChEd,gBAAAA,WAAAA,CAAYY,cAAc,CAAC;AAACC,oBAAAA,iBAAAA;AAAU,oBAAA;iBAAc,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AACrEd,gBAAAA,WAAAA,CAAYY,cAAc,CAAC;AAACC,oBAAAA,iBAAAA;AAAU,oBAAA;iBAAU,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AACnE;YAEAhB,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,SAAA;AACNC,gBAAAA,OAAAA,EAASpB,aAAc,CAAA;AACrBqB,oBAAAA,EAAAA,EAAIC,eAAQ,CAAA,0BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AAEA,IAAA,MAAMC,IAAO,GAAA,CACXf,OAIGC,GAAAA,QAAAA,CAASe,WAAW,CAAC;AAAEhB,YAAAA;AAAQ,SAAA,CAAA;IAEpC,OAAO;AAAE,QAAA,GAAGC,QAAQ;AAAEc,QAAAA;AAAK,KAAA;AAC7B;;;;"}
@@ -0,0 +1,64 @@
1
+ import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';
2
+ import { useIntl } from 'react-intl';
3
+ import { useQueryClient, useMutation } from 'react-query';
4
+ import { pluginId } from '../pluginId.mjs';
5
+ import 'byte-size';
6
+ import 'date-fns';
7
+ import { getTrad } from '../utils/getTrad.mjs';
8
+ import 'qs';
9
+ import '../constants.mjs';
10
+ import '../utils/urlYupSchema.mjs';
11
+
12
+ const useBulkEdit = ()=>{
13
+ const { formatMessage } = useIntl();
14
+ const { toggleNotification } = useNotification();
15
+ const queryClient = useQueryClient();
16
+ const { post } = useFetchClient();
17
+ const bulkEditQuery = ({ updates })=>{
18
+ return post('/upload/actions/bulk-update', {
19
+ updates
20
+ });
21
+ };
22
+ const mutation = useMutation(bulkEditQuery, {
23
+ onSuccess (res) {
24
+ const { data } = res;
25
+ if (data && data.length > 0) {
26
+ queryClient.refetchQueries([
27
+ pluginId,
28
+ 'assets'
29
+ ], {
30
+ active: true
31
+ });
32
+ queryClient.refetchQueries([
33
+ pluginId,
34
+ 'asset-count'
35
+ ], {
36
+ active: true
37
+ });
38
+ queryClient.refetchQueries([
39
+ pluginId,
40
+ 'folders'
41
+ ], {
42
+ active: true
43
+ });
44
+ }
45
+ toggleNotification({
46
+ type: 'success',
47
+ message: formatMessage({
48
+ id: getTrad('modal.edit.success-label'),
49
+ defaultMessage: 'Files have been successfully updated.'
50
+ })
51
+ });
52
+ }
53
+ });
54
+ const edit = (updates)=>mutation.mutateAsync({
55
+ updates
56
+ });
57
+ return {
58
+ ...mutation,
59
+ edit
60
+ };
61
+ };
62
+
63
+ export { useBulkEdit };
64
+ //# sourceMappingURL=useBulkEdit.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBulkEdit.mjs","sources":["../../../admin/src/hooks/useBulkEdit.ts"],"sourcesContent":["import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport { BulkUpdateFiles } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\nimport { getTrad } from '../utils';\n\ninterface FileInfoUpdate {\n name: string;\n alternativeText: string | null;\n caption: string | null;\n folder: number | null;\n}\n\ninterface BulkEditParams {\n updates: Array<{\n id: number;\n fileInfo: FileInfoUpdate;\n }>;\n}\n\nexport const useBulkEdit = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const queryClient = useQueryClient();\n const { post } = useFetchClient();\n\n const bulkEditQuery = ({ updates }: BulkEditParams) => {\n return post('/upload/actions/bulk-update', { updates });\n };\n\n const mutation = useMutation<\n BulkUpdateFiles.Response,\n BulkUpdateFiles.Response['error'],\n BulkEditParams\n >(bulkEditQuery, {\n onSuccess(res) {\n const { data } = res;\n\n if (data && data.length > 0) {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n queryClient.refetchQueries([pluginId, 'folders'], { active: true });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('modal.edit.success-label'),\n defaultMessage: 'Files have been successfully updated.',\n }),\n });\n },\n });\n\n const edit = (\n updates: Array<{\n id: number;\n fileInfo: FileInfoUpdate;\n }>\n ) => mutation.mutateAsync({ updates });\n\n return { ...mutation, edit };\n};\n"],"names":["useBulkEdit","formatMessage","useIntl","toggleNotification","useNotification","queryClient","useQueryClient","post","useFetchClient","bulkEditQuery","updates","mutation","useMutation","onSuccess","res","data","length","refetchQueries","pluginId","active","type","message","id","getTrad","defaultMessage","edit","mutateAsync"],"mappings":";;;;;;;;;;;MAsBaA,WAAc,GAAA,IAAA;IACzB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAMC,WAAcC,GAAAA,cAAAA,EAAAA;IACpB,MAAM,EAAEC,IAAI,EAAE,GAAGC,cAAAA,EAAAA;AAEjB,IAAA,MAAMC,aAAgB,GAAA,CAAC,EAAEC,OAAO,EAAkB,GAAA;AAChD,QAAA,OAAOH,KAAK,6BAA+B,EAAA;AAAEG,YAAAA;AAAQ,SAAA,CAAA;AACvD,KAAA;IAEA,MAAMC,QAAAA,GAAWC,YAIfH,aAAe,EAAA;AACfI,QAAAA,SAAAA,CAAAA,CAAUC,GAAG,EAAA;YACX,MAAM,EAAEC,IAAI,EAAE,GAAGD,GAAAA;AAEjB,YAAA,IAAIC,IAAQA,IAAAA,IAAAA,CAAKC,MAAM,GAAG,CAAG,EAAA;AAC3BX,gBAAAA,WAAAA,CAAYY,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAS,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AAChEd,gBAAAA,WAAAA,CAAYY,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAc,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AACrEd,gBAAAA,WAAAA,CAAYY,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAU,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AACnE;YAEAhB,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,SAAA;AACNC,gBAAAA,OAAAA,EAASpB,aAAc,CAAA;AACrBqB,oBAAAA,EAAAA,EAAIC,OAAQ,CAAA,0BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AAEA,IAAA,MAAMC,IAAO,GAAA,CACXf,OAIGC,GAAAA,QAAAA,CAASe,WAAW,CAAC;AAAEhB,YAAAA;AAAQ,SAAA,CAAA;IAEpC,OAAO;AAAE,QAAA,GAAGC,QAAQ;AAAEc,QAAAA;AAAK,KAAA;AAC7B;;;;"}
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
4
+ var reactQuery = require('react-query');
5
+
6
+ function useSettings(isEnabled = true) {
7
+ const { get } = strapiAdmin.useFetchClient();
8
+ return reactQuery.useQuery({
9
+ queryKey: [
10
+ 'upload',
11
+ 'settings'
12
+ ],
13
+ enabled: isEnabled,
14
+ async queryFn () {
15
+ const { data: { data } } = await get('/upload/settings');
16
+ return data;
17
+ }
18
+ });
19
+ }
20
+
21
+ exports.useSettings = useSettings;
22
+ //# sourceMappingURL=useSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSettings.js","sources":["../../../admin/src/hooks/useSettings.ts"],"sourcesContent":["import { useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useQuery } from 'react-query';\n\nimport type { GetSettings } from '../../../shared/contracts/settings';\n\nexport function useSettings(isEnabled: boolean = true) {\n const { get } = useFetchClient();\n\n return useQuery({\n queryKey: ['upload', 'settings'],\n enabled: isEnabled,\n async queryFn() {\n const {\n data: { data },\n } = await get<GetSettings.Response['data']>('/upload/settings');\n\n return data;\n },\n });\n}\n"],"names":["useSettings","isEnabled","get","useFetchClient","useQuery","queryKey","enabled","queryFn","data"],"mappings":";;;;;AAKO,SAASA,WAAYC,CAAAA,SAAAA,GAAqB,IAAI,EAAA;IACnD,MAAM,EAAEC,GAAG,EAAE,GAAGC,0BAAAA,EAAAA;AAEhB,IAAA,OAAOC,mBAAS,CAAA;QACdC,QAAU,EAAA;AAAC,YAAA,QAAA;AAAU,YAAA;AAAW,SAAA;QAChCC,OAASL,EAAAA,SAAAA;QACT,MAAMM,OAAAA,CAAAA,GAAAA;YACJ,MAAM,EACJC,MAAM,EAAEA,IAAI,EAAE,EACf,GAAG,MAAMN,GAAkC,CAAA,kBAAA,CAAA;YAE5C,OAAOM,IAAAA;AACT;AACF,KAAA,CAAA;AACF;;;;"}
@@ -0,0 +1,20 @@
1
+ import { useFetchClient } from '@strapi/admin/strapi-admin';
2
+ import { useQuery } from 'react-query';
3
+
4
+ function useSettings(isEnabled = true) {
5
+ const { get } = useFetchClient();
6
+ return useQuery({
7
+ queryKey: [
8
+ 'upload',
9
+ 'settings'
10
+ ],
11
+ enabled: isEnabled,
12
+ async queryFn () {
13
+ const { data: { data } } = await get('/upload/settings');
14
+ return data;
15
+ }
16
+ });
17
+ }
18
+
19
+ export { useSettings };
20
+ //# sourceMappingURL=useSettings.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSettings.mjs","sources":["../../../admin/src/hooks/useSettings.ts"],"sourcesContent":["import { useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useQuery } from 'react-query';\n\nimport type { GetSettings } from '../../../shared/contracts/settings';\n\nexport function useSettings(isEnabled: boolean = true) {\n const { get } = useFetchClient();\n\n return useQuery({\n queryKey: ['upload', 'settings'],\n enabled: isEnabled,\n async queryFn() {\n const {\n data: { data },\n } = await get<GetSettings.Response['data']>('/upload/settings');\n\n return data;\n },\n });\n}\n"],"names":["useSettings","isEnabled","get","useFetchClient","useQuery","queryKey","enabled","queryFn","data"],"mappings":";;;AAKO,SAASA,WAAYC,CAAAA,SAAAA,GAAqB,IAAI,EAAA;IACnD,MAAM,EAAEC,GAAG,EAAE,GAAGC,cAAAA,EAAAA;AAEhB,IAAA,OAAOC,QAAS,CAAA;QACdC,QAAU,EAAA;AAAC,YAAA,QAAA;AAAU,YAAA;AAAW,SAAA;QAChCC,OAASL,EAAAA,SAAAA;QACT,MAAMM,OAAAA,CAAAA,GAAAA;YACJ,MAAM,EACJC,MAAM,EAAEA,IAAI,EAAE,EACf,GAAG,MAAMN,GAAkC,CAAA,kBAAA,CAAA;YAE5C,OAAOM,IAAAA;AACT;AACF,KAAA,CAAA;AACF;;;;"}
@@ -26,16 +26,26 @@ function _interopNamespaceDefault(e) {
26
26
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
27
27
 
28
28
  const endpoint = `/${pluginId.pluginId}`;
29
- const uploadAsset = (asset, folderId, signal, onProgress, post)=>{
30
- const { rawFile, caption, name, alternativeText } = asset;
29
+ const uploadAssets = (assets, folderId, signal, onProgress, post)=>{
30
+ const assetsArray = Array.isArray(assets) ? assets : [
31
+ assets
32
+ ];
31
33
  const formData = new FormData();
32
- formData.append('files', rawFile);
33
- formData.append('fileInfo', JSON.stringify({
34
- name,
35
- caption,
36
- alternativeText,
37
- folder: folderId
38
- }));
34
+ // Add all files to the form data
35
+ assetsArray.forEach((asset)=>{
36
+ if (asset.rawFile) {
37
+ formData.append('files', asset.rawFile);
38
+ }
39
+ });
40
+ // Add each fileInfo as a separate stringified field
41
+ assetsArray.forEach((asset)=>{
42
+ formData.append('fileInfo', JSON.stringify({
43
+ name: asset.name,
44
+ caption: asset.caption,
45
+ alternativeText: asset.alternativeText,
46
+ folder: folderId
47
+ }));
48
+ });
39
49
  /**
40
50
  * onProgress is not possible using native fetch
41
51
  * need to look into an alternative to make it work
@@ -51,8 +61,8 @@ const useUpload = ()=>{
51
61
  const abortController = new AbortController();
52
62
  const signal = abortController.signal;
53
63
  const { post } = strapiAdmin.useFetchClient();
54
- const mutation = reactQuery.useMutation(({ asset, folderId })=>{
55
- return uploadAsset(asset, folderId, signal, setProgress, post);
64
+ const mutation = reactQuery.useMutation(({ assets, folderId })=>{
65
+ return uploadAssets(assets, folderId, signal, setProgress, post);
56
66
  }, {
57
67
  onSuccess () {
58
68
  queryClient.refetchQueries([
@@ -68,12 +78,13 @@ const useUpload = ()=>{
68
78
  active: true
69
79
  });
70
80
  dispatch(strapiAdmin.adminApi.util.invalidateTags([
71
- 'HomepageKeyStatistics'
81
+ 'HomepageKeyStatistics',
82
+ 'AIUsage'
72
83
  ]));
73
84
  }
74
85
  });
75
- const upload = (asset, folderId)=>mutation.mutateAsync({
76
- asset,
86
+ const upload = (assets, folderId)=>mutation.mutateAsync({
87
+ assets,
77
88
  folderId
78
89
  });
79
90
  const cancel = ()=>abortController.abort();
@@ -1 +1 @@
1
- {"version":3,"file":"useUpload.js","sources":["../../../admin/src/hooks/useUpload.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useFetchClient, FetchClient, adminApi } from '@strapi/admin/strapi-admin';\nimport { useMutation, useQueryClient } from 'react-query';\nimport { useDispatch } from 'react-redux';\n\nimport { File, RawFile, CreateFile } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\n\nconst endpoint = `/${pluginId}`;\n\ninterface Asset extends Omit<File, 'id' | 'hash'> {\n rawFile?: RawFile;\n id?: File['id'];\n hash?: File['hash'];\n}\n\nconst uploadAsset = (\n asset: Asset,\n folderId: number | null,\n signal: AbortSignal,\n onProgress: (progress: number) => void,\n post: FetchClient['post']\n) => {\n const { rawFile, caption, name, alternativeText } = asset;\n const formData = new FormData();\n\n formData.append('files', rawFile!);\n\n formData.append(\n 'fileInfo',\n JSON.stringify({\n name,\n caption,\n alternativeText,\n folder: folderId,\n })\n );\n\n /**\n * onProgress is not possible using native fetch\n * need to look into an alternative to make it work\n * perhaps using xhr like Axios does\n */\n return post(endpoint, formData, {\n signal,\n }).then((res) => res.data);\n};\n\nexport const useUpload = () => {\n const dispatch = useDispatch();\n const [progress, setProgress] = React.useState(0);\n const queryClient = useQueryClient();\n const abortController = new AbortController();\n const signal = abortController.signal;\n const { post } = useFetchClient();\n\n const mutation = useMutation<\n CreateFile.Response['data'],\n CreateFile.Response['error'],\n { asset: Asset; folderId: number | null }\n >(\n ({ asset, folderId }) => {\n return uploadAsset(asset, folderId, signal, setProgress, post);\n },\n {\n onSuccess() {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n dispatch(adminApi.util.invalidateTags(['HomepageKeyStatistics']));\n },\n }\n );\n\n const upload = (asset: Asset, folderId: number | null) =>\n mutation.mutateAsync({ asset, folderId });\n\n const cancel = () => abortController.abort();\n\n return {\n upload,\n isLoading: mutation.isLoading,\n cancel,\n error: mutation.error,\n progress,\n status: mutation.status,\n };\n};\n"],"names":["endpoint","pluginId","uploadAsset","asset","folderId","signal","onProgress","post","rawFile","caption","name","alternativeText","formData","FormData","append","JSON","stringify","folder","then","res","data","useUpload","dispatch","useDispatch","progress","setProgress","React","useState","queryClient","useQueryClient","abortController","AbortController","useFetchClient","mutation","useMutation","onSuccess","refetchQueries","active","adminApi","util","invalidateTags","upload","mutateAsync","cancel","abort","isLoading","error","status"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAMA,QAAW,GAAA,CAAC,CAAC,EAAEC,kBAAS,CAAC;AAQ/B,MAAMC,WAAc,GAAA,CAClBC,KACAC,EAAAA,QAAAA,EACAC,QACAC,UACAC,EAAAA,IAAAA,GAAAA;IAEA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,IAAI,EAAEC,eAAe,EAAE,GAAGR,KAAAA;AACpD,IAAA,MAAMS,WAAW,IAAIC,QAAAA,EAAAA;IAErBD,QAASE,CAAAA,MAAM,CAAC,OAASN,EAAAA,OAAAA,CAAAA;AAEzBI,IAAAA,QAAAA,CAASE,MAAM,CACb,UACAC,EAAAA,IAAAA,CAAKC,SAAS,CAAC;AACbN,QAAAA,IAAAA;AACAD,QAAAA,OAAAA;AACAE,QAAAA,eAAAA;QACAM,MAAQb,EAAAA;AACV,KAAA,CAAA,CAAA;AAGF;;;;MAKA,OAAOG,IAAKP,CAAAA,QAAAA,EAAUY,QAAU,EAAA;AAC9BP,QAAAA;AACF,KAAA,CAAA,CAAGa,IAAI,CAAC,CAACC,GAAAA,GAAQA,IAAIC,IAAI,CAAA;AAC3B,CAAA;MAEaC,SAAY,GAAA,IAAA;AACvB,IAAA,MAAMC,QAAWC,GAAAA,sBAAAA,EAAAA;AACjB,IAAA,MAAM,CAACC,QAAUC,EAAAA,WAAAA,CAAY,GAAGC,gBAAAA,CAAMC,QAAQ,CAAC,CAAA,CAAA;AAC/C,IAAA,MAAMC,WAAcC,GAAAA,yBAAAA,EAAAA;AACpB,IAAA,MAAMC,kBAAkB,IAAIC,eAAAA,EAAAA;IAC5B,MAAM1B,MAAAA,GAASyB,gBAAgBzB,MAAM;IACrC,MAAM,EAAEE,IAAI,EAAE,GAAGyB,0BAAAA,EAAAA;AAEjB,IAAA,MAAMC,WAAWC,sBAKf,CAAA,CAAC,EAAE/B,KAAK,EAAEC,QAAQ,EAAE,GAAA;AAClB,QAAA,OAAOF,WAAYC,CAAAA,KAAAA,EAAOC,QAAUC,EAAAA,MAAAA,EAAQoB,WAAalB,EAAAA,IAAAA,CAAAA;KAE3D,EAAA;AACE4B,QAAAA,SAAAA,CAAAA,GAAAA;AACEP,YAAAA,WAAAA,CAAYQ,cAAc,CAAC;AAACnC,gBAAAA,iBAAAA;AAAU,gBAAA;aAAS,EAAE;gBAAEoC,MAAQ,EAAA;AAAK,aAAA,CAAA;AAChET,YAAAA,WAAAA,CAAYQ,cAAc,CAAC;AAACnC,gBAAAA,iBAAAA;AAAU,gBAAA;aAAc,EAAE;gBAAEoC,MAAQ,EAAA;AAAK,aAAA,CAAA;AACrEf,YAAAA,QAAAA,CAASgB,oBAASC,CAAAA,IAAI,CAACC,cAAc,CAAC;AAAC,gBAAA;AAAwB,aAAA,CAAA,CAAA;AACjE;AACF,KAAA,CAAA;AAGF,IAAA,MAAMC,SAAS,CAACtC,KAAAA,EAAcC,QAC5B6B,GAAAA,QAAAA,CAASS,WAAW,CAAC;AAAEvC,YAAAA,KAAAA;AAAOC,YAAAA;AAAS,SAAA,CAAA;IAEzC,MAAMuC,MAAAA,GAAS,IAAMb,eAAAA,CAAgBc,KAAK,EAAA;IAE1C,OAAO;AACLH,QAAAA,MAAAA;AACAI,QAAAA,SAAAA,EAAWZ,SAASY,SAAS;AAC7BF,QAAAA,MAAAA;AACAG,QAAAA,KAAAA,EAAOb,SAASa,KAAK;AACrBtB,QAAAA,QAAAA;AACAuB,QAAAA,MAAAA,EAAQd,SAASc;AACnB,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"useUpload.js","sources":["../../../admin/src/hooks/useUpload.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useFetchClient, FetchClient, adminApi } from '@strapi/admin/strapi-admin';\nimport { useMutation, useQueryClient } from 'react-query';\nimport { useDispatch } from 'react-redux';\n\nimport { File, RawFile, CreateFile } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\n\nconst endpoint = `/${pluginId}`;\n\ninterface Asset extends Omit<File, 'id' | 'hash'> {\n rawFile?: RawFile;\n id?: File['id'];\n hash?: File['hash'];\n}\n\nconst uploadAssets = (\n assets: Asset | Asset[],\n folderId: number | null,\n signal: AbortSignal,\n onProgress: (progress: number) => void,\n post: FetchClient['post']\n) => {\n const assetsArray = Array.isArray(assets) ? assets : [assets];\n const formData = new FormData();\n\n // Add all files to the form data\n assetsArray.forEach((asset) => {\n if (asset.rawFile) {\n formData.append('files', asset.rawFile);\n }\n });\n\n // Add each fileInfo as a separate stringified field\n assetsArray.forEach((asset) => {\n formData.append(\n 'fileInfo',\n JSON.stringify({\n name: asset.name,\n caption: asset.caption,\n alternativeText: asset.alternativeText,\n folder: folderId,\n })\n );\n });\n\n /**\n * onProgress is not possible using native fetch\n * need to look into an alternative to make it work\n * perhaps using xhr like Axios does\n */\n return post(endpoint, formData, {\n signal,\n }).then((res) => res.data);\n};\n\nexport const useUpload = () => {\n const dispatch = useDispatch();\n const [progress, setProgress] = React.useState(0);\n const queryClient = useQueryClient();\n const abortController = new AbortController();\n const signal = abortController.signal;\n const { post } = useFetchClient();\n\n const mutation = useMutation<\n CreateFile.Response['data'],\n CreateFile.Response['error'],\n { assets: Asset | Asset[]; folderId: number | null }\n >(\n ({ assets, folderId }) => {\n return uploadAssets(assets, folderId, signal, setProgress, post);\n },\n {\n onSuccess() {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n dispatch(adminApi.util.invalidateTags(['HomepageKeyStatistics', 'AIUsage']));\n },\n }\n );\n\n const upload = (assets: Asset | Asset[], folderId: number | null) =>\n mutation.mutateAsync({ assets, folderId });\n\n const cancel = () => abortController.abort();\n\n return {\n upload,\n isLoading: mutation.isLoading,\n cancel,\n error: mutation.error,\n progress,\n status: mutation.status,\n };\n};\n"],"names":["endpoint","pluginId","uploadAssets","assets","folderId","signal","onProgress","post","assetsArray","Array","isArray","formData","FormData","forEach","asset","rawFile","append","JSON","stringify","name","caption","alternativeText","folder","then","res","data","useUpload","dispatch","useDispatch","progress","setProgress","React","useState","queryClient","useQueryClient","abortController","AbortController","useFetchClient","mutation","useMutation","onSuccess","refetchQueries","active","adminApi","util","invalidateTags","upload","mutateAsync","cancel","abort","isLoading","error","status"],"mappings":"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"}
@@ -5,16 +5,26 @@ import { useDispatch } from 'react-redux';
5
5
  import { pluginId } from '../pluginId.mjs';
6
6
 
7
7
  const endpoint = `/${pluginId}`;
8
- const uploadAsset = (asset, folderId, signal, onProgress, post)=>{
9
- const { rawFile, caption, name, alternativeText } = asset;
8
+ const uploadAssets = (assets, folderId, signal, onProgress, post)=>{
9
+ const assetsArray = Array.isArray(assets) ? assets : [
10
+ assets
11
+ ];
10
12
  const formData = new FormData();
11
- formData.append('files', rawFile);
12
- formData.append('fileInfo', JSON.stringify({
13
- name,
14
- caption,
15
- alternativeText,
16
- folder: folderId
17
- }));
13
+ // Add all files to the form data
14
+ assetsArray.forEach((asset)=>{
15
+ if (asset.rawFile) {
16
+ formData.append('files', asset.rawFile);
17
+ }
18
+ });
19
+ // Add each fileInfo as a separate stringified field
20
+ assetsArray.forEach((asset)=>{
21
+ formData.append('fileInfo', JSON.stringify({
22
+ name: asset.name,
23
+ caption: asset.caption,
24
+ alternativeText: asset.alternativeText,
25
+ folder: folderId
26
+ }));
27
+ });
18
28
  /**
19
29
  * onProgress is not possible using native fetch
20
30
  * need to look into an alternative to make it work
@@ -30,8 +40,8 @@ const useUpload = ()=>{
30
40
  const abortController = new AbortController();
31
41
  const signal = abortController.signal;
32
42
  const { post } = useFetchClient();
33
- const mutation = useMutation(({ asset, folderId })=>{
34
- return uploadAsset(asset, folderId, signal, setProgress, post);
43
+ const mutation = useMutation(({ assets, folderId })=>{
44
+ return uploadAssets(assets, folderId, signal, setProgress, post);
35
45
  }, {
36
46
  onSuccess () {
37
47
  queryClient.refetchQueries([
@@ -47,12 +57,13 @@ const useUpload = ()=>{
47
57
  active: true
48
58
  });
49
59
  dispatch(adminApi.util.invalidateTags([
50
- 'HomepageKeyStatistics'
60
+ 'HomepageKeyStatistics',
61
+ 'AIUsage'
51
62
  ]));
52
63
  }
53
64
  });
54
- const upload = (asset, folderId)=>mutation.mutateAsync({
55
- asset,
65
+ const upload = (assets, folderId)=>mutation.mutateAsync({
66
+ assets,
56
67
  folderId
57
68
  });
58
69
  const cancel = ()=>abortController.abort();
@@ -1 +1 @@
1
- {"version":3,"file":"useUpload.mjs","sources":["../../../admin/src/hooks/useUpload.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useFetchClient, FetchClient, adminApi } from '@strapi/admin/strapi-admin';\nimport { useMutation, useQueryClient } from 'react-query';\nimport { useDispatch } from 'react-redux';\n\nimport { File, RawFile, CreateFile } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\n\nconst endpoint = `/${pluginId}`;\n\ninterface Asset extends Omit<File, 'id' | 'hash'> {\n rawFile?: RawFile;\n id?: File['id'];\n hash?: File['hash'];\n}\n\nconst uploadAsset = (\n asset: Asset,\n folderId: number | null,\n signal: AbortSignal,\n onProgress: (progress: number) => void,\n post: FetchClient['post']\n) => {\n const { rawFile, caption, name, alternativeText } = asset;\n const formData = new FormData();\n\n formData.append('files', rawFile!);\n\n formData.append(\n 'fileInfo',\n JSON.stringify({\n name,\n caption,\n alternativeText,\n folder: folderId,\n })\n );\n\n /**\n * onProgress is not possible using native fetch\n * need to look into an alternative to make it work\n * perhaps using xhr like Axios does\n */\n return post(endpoint, formData, {\n signal,\n }).then((res) => res.data);\n};\n\nexport const useUpload = () => {\n const dispatch = useDispatch();\n const [progress, setProgress] = React.useState(0);\n const queryClient = useQueryClient();\n const abortController = new AbortController();\n const signal = abortController.signal;\n const { post } = useFetchClient();\n\n const mutation = useMutation<\n CreateFile.Response['data'],\n CreateFile.Response['error'],\n { asset: Asset; folderId: number | null }\n >(\n ({ asset, folderId }) => {\n return uploadAsset(asset, folderId, signal, setProgress, post);\n },\n {\n onSuccess() {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n dispatch(adminApi.util.invalidateTags(['HomepageKeyStatistics']));\n },\n }\n );\n\n const upload = (asset: Asset, folderId: number | null) =>\n mutation.mutateAsync({ asset, folderId });\n\n const cancel = () => abortController.abort();\n\n return {\n upload,\n isLoading: mutation.isLoading,\n cancel,\n error: mutation.error,\n progress,\n status: mutation.status,\n };\n};\n"],"names":["endpoint","pluginId","uploadAsset","asset","folderId","signal","onProgress","post","rawFile","caption","name","alternativeText","formData","FormData","append","JSON","stringify","folder","then","res","data","useUpload","dispatch","useDispatch","progress","setProgress","React","useState","queryClient","useQueryClient","abortController","AbortController","useFetchClient","mutation","useMutation","onSuccess","refetchQueries","active","adminApi","util","invalidateTags","upload","mutateAsync","cancel","abort","isLoading","error","status"],"mappings":";;;;;;AASA,MAAMA,QAAW,GAAA,CAAC,CAAC,EAAEC,SAAS,CAAC;AAQ/B,MAAMC,WAAc,GAAA,CAClBC,KACAC,EAAAA,QAAAA,EACAC,QACAC,UACAC,EAAAA,IAAAA,GAAAA;IAEA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,IAAI,EAAEC,eAAe,EAAE,GAAGR,KAAAA;AACpD,IAAA,MAAMS,WAAW,IAAIC,QAAAA,EAAAA;IAErBD,QAASE,CAAAA,MAAM,CAAC,OAASN,EAAAA,OAAAA,CAAAA;AAEzBI,IAAAA,QAAAA,CAASE,MAAM,CACb,UACAC,EAAAA,IAAAA,CAAKC,SAAS,CAAC;AACbN,QAAAA,IAAAA;AACAD,QAAAA,OAAAA;AACAE,QAAAA,eAAAA;QACAM,MAAQb,EAAAA;AACV,KAAA,CAAA,CAAA;AAGF;;;;MAKA,OAAOG,IAAKP,CAAAA,QAAAA,EAAUY,QAAU,EAAA;AAC9BP,QAAAA;AACF,KAAA,CAAA,CAAGa,IAAI,CAAC,CAACC,GAAAA,GAAQA,IAAIC,IAAI,CAAA;AAC3B,CAAA;MAEaC,SAAY,GAAA,IAAA;AACvB,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;AACjB,IAAA,MAAM,CAACC,QAAUC,EAAAA,WAAAA,CAAY,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,CAAA,CAAA;AAC/C,IAAA,MAAMC,WAAcC,GAAAA,cAAAA,EAAAA;AACpB,IAAA,MAAMC,kBAAkB,IAAIC,eAAAA,EAAAA;IAC5B,MAAM1B,MAAAA,GAASyB,gBAAgBzB,MAAM;IACrC,MAAM,EAAEE,IAAI,EAAE,GAAGyB,cAAAA,EAAAA;AAEjB,IAAA,MAAMC,WAAWC,WAKf,CAAA,CAAC,EAAE/B,KAAK,EAAEC,QAAQ,EAAE,GAAA;AAClB,QAAA,OAAOF,WAAYC,CAAAA,KAAAA,EAAOC,QAAUC,EAAAA,MAAAA,EAAQoB,WAAalB,EAAAA,IAAAA,CAAAA;KAE3D,EAAA;AACE4B,QAAAA,SAAAA,CAAAA,GAAAA;AACEP,YAAAA,WAAAA,CAAYQ,cAAc,CAAC;AAACnC,gBAAAA,QAAAA;AAAU,gBAAA;aAAS,EAAE;gBAAEoC,MAAQ,EAAA;AAAK,aAAA,CAAA;AAChET,YAAAA,WAAAA,CAAYQ,cAAc,CAAC;AAACnC,gBAAAA,QAAAA;AAAU,gBAAA;aAAc,EAAE;gBAAEoC,MAAQ,EAAA;AAAK,aAAA,CAAA;AACrEf,YAAAA,QAAAA,CAASgB,QAASC,CAAAA,IAAI,CAACC,cAAc,CAAC;AAAC,gBAAA;AAAwB,aAAA,CAAA,CAAA;AACjE;AACF,KAAA,CAAA;AAGF,IAAA,MAAMC,SAAS,CAACtC,KAAAA,EAAcC,QAC5B6B,GAAAA,QAAAA,CAASS,WAAW,CAAC;AAAEvC,YAAAA,KAAAA;AAAOC,YAAAA;AAAS,SAAA,CAAA;IAEzC,MAAMuC,MAAAA,GAAS,IAAMb,eAAAA,CAAgBc,KAAK,EAAA;IAE1C,OAAO;AACLH,QAAAA,MAAAA;AACAI,QAAAA,SAAAA,EAAWZ,SAASY,SAAS;AAC7BF,QAAAA,MAAAA;AACAG,QAAAA,KAAAA,EAAOb,SAASa,KAAK;AACrBtB,QAAAA,QAAAA;AACAuB,QAAAA,MAAAA,EAAQd,SAASc;AACnB,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"useUpload.mjs","sources":["../../../admin/src/hooks/useUpload.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useFetchClient, FetchClient, adminApi } from '@strapi/admin/strapi-admin';\nimport { useMutation, useQueryClient } from 'react-query';\nimport { useDispatch } from 'react-redux';\n\nimport { File, RawFile, CreateFile } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\n\nconst endpoint = `/${pluginId}`;\n\ninterface Asset extends Omit<File, 'id' | 'hash'> {\n rawFile?: RawFile;\n id?: File['id'];\n hash?: File['hash'];\n}\n\nconst uploadAssets = (\n assets: Asset | Asset[],\n folderId: number | null,\n signal: AbortSignal,\n onProgress: (progress: number) => void,\n post: FetchClient['post']\n) => {\n const assetsArray = Array.isArray(assets) ? assets : [assets];\n const formData = new FormData();\n\n // Add all files to the form data\n assetsArray.forEach((asset) => {\n if (asset.rawFile) {\n formData.append('files', asset.rawFile);\n }\n });\n\n // Add each fileInfo as a separate stringified field\n assetsArray.forEach((asset) => {\n formData.append(\n 'fileInfo',\n JSON.stringify({\n name: asset.name,\n caption: asset.caption,\n alternativeText: asset.alternativeText,\n folder: folderId,\n })\n );\n });\n\n /**\n * onProgress is not possible using native fetch\n * need to look into an alternative to make it work\n * perhaps using xhr like Axios does\n */\n return post(endpoint, formData, {\n signal,\n }).then((res) => res.data);\n};\n\nexport const useUpload = () => {\n const dispatch = useDispatch();\n const [progress, setProgress] = React.useState(0);\n const queryClient = useQueryClient();\n const abortController = new AbortController();\n const signal = abortController.signal;\n const { post } = useFetchClient();\n\n const mutation = useMutation<\n CreateFile.Response['data'],\n CreateFile.Response['error'],\n { assets: Asset | Asset[]; folderId: number | null }\n >(\n ({ assets, folderId }) => {\n return uploadAssets(assets, folderId, signal, setProgress, post);\n },\n {\n onSuccess() {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n dispatch(adminApi.util.invalidateTags(['HomepageKeyStatistics', 'AIUsage']));\n },\n }\n );\n\n const upload = (assets: Asset | Asset[], folderId: number | null) =>\n mutation.mutateAsync({ assets, folderId });\n\n const cancel = () => abortController.abort();\n\n return {\n upload,\n isLoading: mutation.isLoading,\n cancel,\n error: mutation.error,\n progress,\n status: mutation.status,\n };\n};\n"],"names":["endpoint","pluginId","uploadAssets","assets","folderId","signal","onProgress","post","assetsArray","Array","isArray","formData","FormData","forEach","asset","rawFile","append","JSON","stringify","name","caption","alternativeText","folder","then","res","data","useUpload","dispatch","useDispatch","progress","setProgress","React","useState","queryClient","useQueryClient","abortController","AbortController","useFetchClient","mutation","useMutation","onSuccess","refetchQueries","active","adminApi","util","invalidateTags","upload","mutateAsync","cancel","abort","isLoading","error","status"],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var name = "@strapi/upload";
6
- var version = "5.25.0";
6
+ var version = "5.27.0";
7
7
  var description = "Makes it easy to upload images and files to your Strapi Application.";
8
8
  var license = "SEE LICENSE IN LICENSE";
9
9
  var author = {
@@ -67,8 +67,8 @@ var dependencies = {
67
67
  "@reduxjs/toolkit": "1.9.7",
68
68
  "@strapi/design-system": "2.0.0-rc.30",
69
69
  "@strapi/icons": "2.0.0-rc.30",
70
- "@strapi/provider-upload-local": "5.25.0",
71
- "@strapi/utils": "5.25.0",
70
+ "@strapi/provider-upload-local": "5.27.0",
71
+ "@strapi/utils": "5.27.0",
72
72
  "byte-size": "8.1.1",
73
73
  cropperjs: "1.6.1",
74
74
  "date-fns": "2.30.0",
@@ -91,8 +91,8 @@ var dependencies = {
91
91
  zod: "3.25.67"
92
92
  };
93
93
  var devDependencies = {
94
- "@strapi/admin": "5.25.0",
95
- "@strapi/types": "5.25.0",
94
+ "@strapi/admin": "5.27.0",
95
+ "@strapi/types": "5.27.0",
96
96
  "@testing-library/dom": "10.1.0",
97
97
  "@testing-library/react": "15.0.7",
98
98
  "@testing-library/user-event": "14.5.2",
@@ -1,5 +1,5 @@
1
1
  var name = "@strapi/upload";
2
- var version = "5.25.0";
2
+ var version = "5.27.0";
3
3
  var description = "Makes it easy to upload images and files to your Strapi Application.";
4
4
  var license = "SEE LICENSE IN LICENSE";
5
5
  var author = {
@@ -63,8 +63,8 @@ var dependencies = {
63
63
  "@reduxjs/toolkit": "1.9.7",
64
64
  "@strapi/design-system": "2.0.0-rc.30",
65
65
  "@strapi/icons": "2.0.0-rc.30",
66
- "@strapi/provider-upload-local": "5.25.0",
67
- "@strapi/utils": "5.25.0",
66
+ "@strapi/provider-upload-local": "5.27.0",
67
+ "@strapi/utils": "5.27.0",
68
68
  "byte-size": "8.1.1",
69
69
  cropperjs: "1.6.1",
70
70
  "date-fns": "2.30.0",
@@ -87,8 +87,8 @@ var dependencies = {
87
87
  zod: "3.25.67"
88
88
  };
89
89
  var devDependencies = {
90
- "@strapi/admin": "5.25.0",
91
- "@strapi/types": "5.25.0",
90
+ "@strapi/admin": "5.27.0",
91
+ "@strapi/types": "5.27.0",
92
92
  "@testing-library/dom": "10.1.0",
93
93
  "@testing-library/react": "15.0.7",
94
94
  "@testing-library/user-event": "14.5.2",
@@ -9,6 +9,7 @@ var qs = require('qs');
9
9
  var reactIntl = require('react-intl');
10
10
  var reactRouterDom = require('react-router-dom');
11
11
  var styledComponents = require('styled-components');
12
+ var AIUploadModal = require('../../../ai/components/AIUploadModal.js');
12
13
  var AssetGridList = require('../../../components/AssetGridList/AssetGridList.js');
13
14
  var EditAssetContent = require('../../../components/EditAssetDialog/EditAssetContent.js');
14
15
  var EditFolderDialog = require('../../../components/EditFolderDialog/EditFolderDialog.js');
@@ -21,6 +22,7 @@ var SortPicker = require('../../../components/SortPicker/SortPicker.js');
21
22
  var TableList = require('../../../components/TableList/TableList.js');
22
23
  var UploadAssetDialog = require('../../../components/UploadAssetDialog/UploadAssetDialog.js');
23
24
  var constants = require('../../../constants.js');
25
+ var useAiAvailability = require('../../../hooks/useAiAvailability.js');
24
26
  var useAssets = require('../../../hooks/useAssets.js');
25
27
  var useFolder = require('../../../hooks/useFolder.js');
26
28
  var useFolders = require('../../../hooks/useFolders.js');
@@ -77,6 +79,7 @@ const ActionContainer = styledComponents.styled(designSystem.Box)`
77
79
  const MediaLibrary = ()=>{
78
80
  const navigate = reactRouterDom.useNavigate();
79
81
  const { canRead, canCreate, canUpdate, canCopyLink, canDownload, canConfigureView, isLoading: permissionsLoading } = useMediaLibraryPermissions.useMediaLibraryPermissions();
82
+ const { isEnabled: isAiEnabled, status: aiAvailabilityStatus } = useAiAvailability.useAIAvailability();
80
83
  const currentFolderToEditRef = React__namespace.useRef();
81
84
  const { formatMessage } = reactIntl.useIntl();
82
85
  const { pathname } = reactRouterDom.useLocation();
@@ -117,7 +120,7 @@ const MediaLibrary = ()=>{
117
120
  })) || [];
118
121
  const assetCount = assets?.length ?? 0;
119
122
  const totalAssetCount = assetsData?.pagination?.total;
120
- const isLoading = isCurrentFolderLoading || foldersLoading || permissionsLoading || assetsLoading;
123
+ const isLoading = isCurrentFolderLoading || foldersLoading || permissionsLoading || assetsLoading || aiAvailabilityStatus === 'loading';
121
124
  const [showUploadAssetDialog, setShowUploadAssetDialog] = React__namespace.useState(false);
122
125
  const [showEditFolderDialog, setShowEditFolderDialog] = React__namespace.useState(false);
123
126
  const [assetToEdit, setAssetToEdit] = React__namespace.useState(undefined);
@@ -181,7 +184,7 @@ const MediaLibrary = ()=>{
181
184
  if (isLoading) {
182
185
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
183
186
  }
184
- if (assetsError || foldersError) {
187
+ if (assetsError || foldersError || aiAvailabilityStatus === 'error') {
185
188
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
186
189
  }
187
190
  return /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Layouts.Root, {
@@ -417,12 +420,16 @@ const MediaLibrary = ()=>{
417
420
  })
418
421
  ]
419
422
  }),
420
- showUploadAssetDialog && /*#__PURE__*/ jsxRuntime.jsx(UploadAssetDialog.UploadAssetDialog, {
423
+ showUploadAssetDialog && (isAiEnabled ? /*#__PURE__*/ jsxRuntime.jsx(AIUploadModal.AIUploadModal, {
424
+ open: showUploadAssetDialog,
425
+ onClose: toggleUploadAssetDialog,
426
+ folderId: query?.folder ? Number(query.folder) : null
427
+ }) : /*#__PURE__*/ jsxRuntime.jsx(UploadAssetDialog.UploadAssetDialog, {
421
428
  open: showUploadAssetDialog,
422
429
  onClose: toggleUploadAssetDialog,
423
430
  trackedLocation: "upload",
424
431
  folderId: query?.folder
425
- }),
432
+ })),
426
433
  showEditFolderDialog && /*#__PURE__*/ jsxRuntime.jsx(EditFolderDialog.EditFolderDialog, {
427
434
  open: showEditFolderDialog,
428
435
  onClose: ()=>handleEditFolderClose(),