@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.
- package/dist/admin/ai/components/AIAssetCard.js +589 -0
- package/dist/admin/ai/components/AIAssetCard.js.map +1 -0
- package/dist/admin/ai/components/AIAssetCard.mjs +567 -0
- package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -0
- package/dist/admin/ai/components/AIUploadModal.js +355 -0
- package/dist/admin/ai/components/AIUploadModal.js.map +1 -0
- package/dist/admin/ai/components/AIUploadModal.mjs +333 -0
- package/dist/admin/ai/components/AIUploadModal.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/AssetDialog.js +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.js.map +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.mjs +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js +5 -5
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +5 -5
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +0 -15
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs +1 -16
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +1 -1
- package/dist/admin/hooks/useAiAvailability.js +22 -0
- package/dist/admin/hooks/useAiAvailability.js.map +1 -0
- package/dist/admin/hooks/useAiAvailability.mjs +20 -0
- package/dist/admin/hooks/useAiAvailability.mjs.map +1 -0
- package/dist/admin/hooks/useBulkEdit.js +66 -0
- package/dist/admin/hooks/useBulkEdit.js.map +1 -0
- package/dist/admin/hooks/useBulkEdit.mjs +64 -0
- package/dist/admin/hooks/useBulkEdit.mjs.map +1 -0
- package/dist/admin/hooks/useSettings.js +22 -0
- package/dist/admin/hooks/useSettings.js.map +1 -0
- package/dist/admin/hooks/useSettings.mjs +20 -0
- package/dist/admin/hooks/useSettings.mjs.map +1 -0
- package/dist/admin/hooks/useUpload.js +25 -14
- package/dist/admin/hooks/useUpload.js.map +1 -1
- package/dist/admin/hooks/useUpload.mjs +25 -14
- package/dist/admin/hooks/useUpload.mjs.map +1 -1
- package/dist/admin/package.json.js +5 -5
- package/dist/admin/package.json.mjs +5 -5
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js +11 -4
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs +11 -4
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.js +222 -144
- package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs +225 -147
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/reducer.js +9 -10
- package/dist/admin/pages/SettingsPage/reducer.js.map +1 -1
- package/dist/admin/pages/SettingsPage/reducer.mjs +9 -10
- package/dist/admin/pages/SettingsPage/reducer.mjs.map +1 -1
- package/dist/admin/src/ai/components/AIAssetCard.d.ts +13 -0
- package/dist/admin/src/ai/components/AIUploadModal.d.ts +55 -0
- package/dist/admin/src/components/EditAssetDialog/EditAssetContent.d.ts +3 -1
- package/dist/admin/src/hooks/useAiAvailability.d.ts +4 -0
- package/dist/admin/src/hooks/useBulkEdit.d.ts +91 -0
- package/dist/admin/src/hooks/useSettings.d.ts +7 -0
- package/dist/admin/src/hooks/useUpload.d.ts +1 -1
- package/dist/admin/src/pages/SettingsPage/reducer.d.ts +3 -12
- package/dist/admin/translations/en.json.js +7 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +7 -1
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/bootstrap.js +2 -1
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +2 -1
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/admin-upload.js +54 -2
- package/dist/server/controllers/admin-upload.js.map +1 -1
- package/dist/server/controllers/admin-upload.mjs +56 -4
- package/dist/server/controllers/admin-upload.mjs.map +1 -1
- package/dist/server/controllers/content-api.js +3 -1
- package/dist/server/controllers/content-api.js.map +1 -1
- package/dist/server/controllers/content-api.mjs +3 -1
- package/dist/server/controllers/content-api.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/settings.js +2 -1
- package/dist/server/controllers/validation/admin/settings.js.map +1 -1
- package/dist/server/controllers/validation/admin/settings.mjs +2 -1
- package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/upload.js +8 -0
- package/dist/server/controllers/validation/admin/upload.js.map +1 -1
- package/dist/server/controllers/validation/admin/upload.mjs +8 -1
- package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
- package/dist/server/routes/admin.js +18 -0
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/admin.mjs +18 -0
- package/dist/server/routes/admin.mjs.map +1 -1
- package/dist/server/services/ai-metadata.js +97 -0
- package/dist/server/services/ai-metadata.js.map +1 -0
- package/dist/server/services/ai-metadata.mjs +95 -0
- package/dist/server/services/ai-metadata.mjs.map +1 -0
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +3 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-upload.d.ts +1 -0
- package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/settings.d.ts +3 -0
- package/dist/server/src/controllers/validation/admin/settings.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/upload.d.ts +42 -0
- package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +13 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/admin.d.ts.map +1 -1
- package/dist/server/src/services/ai-metadata.d.ts +13 -0
- package/dist/server/src/services/ai-metadata.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +12 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/upload.d.ts +2 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/dist/server/src/types.d.ts +1 -0
- package/dist/server/src/types.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/contracts/files.d.ts +22 -0
- package/dist/shared/contracts/settings.d.ts +2 -0
- 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
|
|
30
|
-
const
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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(({
|
|
55
|
-
return
|
|
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 = (
|
|
76
|
-
|
|
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
|
|
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
|
|
9
|
-
const
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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(({
|
|
34
|
-
return
|
|
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 = (
|
|
55
|
-
|
|
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
|
|
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.
|
|
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.
|
|
71
|
-
"@strapi/utils": "5.
|
|
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.
|
|
95
|
-
"@strapi/types": "5.
|
|
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.
|
|
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.
|
|
67
|
-
"@strapi/utils": "5.
|
|
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.
|
|
91
|
-
"@strapi/types": "5.
|
|
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(
|
|
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(),
|