@strapi/upload 5.52.1 → 5.52.2
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/future/components/UploadProgressDialog.js +36 -1
- package/dist/admin/future/components/UploadProgressDialog.js.map +1 -1
- package/dist/admin/future/components/UploadProgressDialog.mjs +37 -2
- package/dist/admin/future/components/UploadProgressDialog.mjs.map +1 -1
- package/dist/admin/future/hooks/useApiErrorMessage.js +61 -0
- package/dist/admin/future/hooks/useApiErrorMessage.js.map +1 -0
- package/dist/admin/future/hooks/useApiErrorMessage.mjs +39 -0
- package/dist/admin/future/hooks/useApiErrorMessage.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js +4 -5
- package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs +4 -5
- package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +41 -50
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +41 -50
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +10 -1
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +10 -1
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js +3 -2
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs +3 -2
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +4 -2
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +4 -2
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/hooks/useIsAssetDetailsOpen.js +30 -0
- package/dist/admin/future/pages/Assets/hooks/useIsAssetDetailsOpen.js.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useIsAssetDetailsOpen.mjs +26 -0
- package/dist/admin/future/pages/Assets/hooks/useIsAssetDetailsOpen.mjs.map +1 -0
- package/dist/admin/future/services/api.js +116 -11
- package/dist/admin/future/services/api.js.map +1 -1
- package/dist/admin/future/services/api.mjs +118 -13
- package/dist/admin/future/services/api.mjs.map +1 -1
- package/dist/admin/future/services/uploadFileViaXHR.js +9 -3
- package/dist/admin/future/services/uploadFileViaXHR.js.map +1 -1
- package/dist/admin/future/services/uploadFileViaXHR.mjs +9 -3
- package/dist/admin/future/services/uploadFileViaXHR.mjs.map +1 -1
- package/dist/admin/future/store/uploadProgress.js +44 -5
- package/dist/admin/future/store/uploadProgress.js.map +1 -1
- package/dist/admin/future/store/uploadProgress.mjs +43 -6
- package/dist/admin/future/store/uploadProgress.mjs.map +1 -1
- package/dist/admin/future/utils/getApiErrorMessage.js +20 -0
- package/dist/admin/future/utils/getApiErrorMessage.js.map +1 -0
- package/dist/admin/future/utils/getApiErrorMessage.mjs +18 -0
- package/dist/admin/future/utils/getApiErrorMessage.mjs.map +1 -0
- package/dist/admin/src/future/hooks/useApiErrorMessage.d.ts +17 -0
- package/dist/admin/src/future/pages/Assets/hooks/useIsAssetDetailsOpen.d.ts +18 -0
- package/dist/admin/src/future/services/uploadFileViaXHR.d.ts +6 -1
- package/dist/admin/src/future/store/uploadProgress.d.ts +16 -1
- package/dist/admin/src/future/utils/getApiErrorMessage.d.ts +1 -0
- package/dist/admin/translations/ca.json.js +1 -1
- package/dist/admin/translations/ca.json.mjs +1 -1
- package/dist/admin/translations/de.json.js +1 -1
- package/dist/admin/translations/de.json.mjs +1 -1
- package/dist/admin/translations/en.json.js +2 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +2 -1
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +1 -1
- package/dist/admin/translations/es.json.mjs +1 -1
- package/dist/admin/translations/fr.json.js +1 -1
- package/dist/admin/translations/fr.json.mjs +1 -1
- package/dist/admin/translations/ja.json.js +1 -1
- package/dist/admin/translations/ja.json.mjs +1 -1
- package/dist/admin/translations/ko.json.js +1 -1
- package/dist/admin/translations/ko.json.mjs +1 -1
- package/dist/admin/translations/nl.json.js +1 -1
- package/dist/admin/translations/nl.json.mjs +1 -1
- package/dist/admin/translations/pl.json.js +1 -1
- package/dist/admin/translations/pl.json.mjs +1 -1
- package/dist/admin/translations/pt-BR.json.js +1 -1
- package/dist/admin/translations/pt-BR.json.mjs +1 -1
- package/dist/admin/translations/ru.json.js +1 -1
- package/dist/admin/translations/ru.json.mjs +1 -1
- package/dist/admin/translations/sk.json.js +1 -1
- package/dist/admin/translations/sk.json.mjs +1 -1
- package/dist/admin/translations/tr.json.js +1 -1
- package/dist/admin/translations/tr.json.mjs +1 -1
- package/dist/admin/translations/uk.json.js +1 -1
- package/dist/admin/translations/uk.json.mjs +1 -1
- package/dist/admin/translations/zh-Hans.json.js +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs +1 -1
- package/dist/admin/translations/zh.json.js +1 -1
- package/dist/admin/translations/zh.json.mjs +1 -1
- package/dist/server/services/ai-metadata.js +25 -5
- package/dist/server/services/ai-metadata.js.map +1 -1
- package/dist/server/services/ai-metadata.mjs +1 -1
- package/dist/server/services/ai-metadata.mjs.map +1 -1
- package/dist/server/services/upload.js +4 -0
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs +4 -0
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/admin/future/utils/getBulkMoveErrorMessage.js +0 -23
- package/dist/admin/future/utils/getBulkMoveErrorMessage.js.map +0 -1
- package/dist/admin/future/utils/getBulkMoveErrorMessage.mjs +0 -21
- package/dist/admin/future/utils/getBulkMoveErrorMessage.mjs.map +0 -1
- package/dist/admin/src/future/utils/getBulkMoveErrorMessage.d.ts +0 -1
|
@@ -10,6 +10,7 @@ var styledComponents = require('styled-components');
|
|
|
10
10
|
var enums = require('../../../../../enums.js');
|
|
11
11
|
var Drawer = require('../../../../components/Drawer.js');
|
|
12
12
|
var useAIMetadataEnabled = require('../../../../hooks/useAIMetadataEnabled.js');
|
|
13
|
+
var useApiErrorMessage = require('../../../../hooks/useApiErrorMessage.js');
|
|
13
14
|
var useMediaLibraryPermissions = require('../../../../hooks/useMediaLibraryPermissions.js');
|
|
14
15
|
var useTracking = require('../../../../hooks/useTracking.js');
|
|
15
16
|
var api = require('../../../../services/api.js');
|
|
@@ -20,6 +21,7 @@ var files = require('../../../../utils/files.js');
|
|
|
20
21
|
var getAssetIcon = require('../../../../utils/getAssetIcon.js');
|
|
21
22
|
var translations = require('../../../../utils/translations.js');
|
|
22
23
|
var useFolderInfo = require('../../hooks/useFolderInfo.js');
|
|
24
|
+
var useIsAssetDetailsOpen = require('../../hooks/useIsAssetDetailsOpen.js');
|
|
23
25
|
var BusyOverlay = require('../BusyOverlay.js');
|
|
24
26
|
var AssetCropEditor = require('./AssetCropEditor.js');
|
|
25
27
|
var AssetPreview = require('./AssetPreview.js');
|
|
@@ -44,8 +46,6 @@ function _interopNamespace(e) {
|
|
|
44
46
|
|
|
45
47
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
46
48
|
|
|
47
|
-
// Name of the parameter to look for in the URL to open the drawer
|
|
48
|
-
const URL_PARAM = 'assetId';
|
|
49
49
|
const DrawerNotifyContext = /*#__PURE__*/ React__namespace.createContext(null);
|
|
50
50
|
const useDrawerNotify = ()=>{
|
|
51
51
|
const ctx = React__namespace.useContext(DrawerNotifyContext);
|
|
@@ -63,12 +63,11 @@ const useAssetOperation = ()=>{
|
|
|
63
63
|
return ctx;
|
|
64
64
|
};
|
|
65
65
|
/* -------------------------------------------------------------------------------------------------
|
|
66
|
-
* useAssetDetailsParam - sync drawer visibility with URL ?{
|
|
66
|
+
* useAssetDetailsParam - sync drawer visibility with URL ?{ASSET_DETAILS_URL_PARAM}={id}
|
|
67
67
|
* -----------------------------------------------------------------------------------------------*/ const useAssetDetailsParam = ()=>{
|
|
68
68
|
const [{ query }, setQuery] = strapiAdmin.useQueryParams();
|
|
69
|
-
const
|
|
70
|
-
const
|
|
71
|
-
const hasValidId = assetId !== null && !Number.isNaN(assetId);
|
|
69
|
+
const assetId = useIsAssetDetailsOpen.parseAssetDetailsId(query?.[useIsAssetDetailsOpen.ASSET_DETAILS_URL_PARAM]);
|
|
70
|
+
const hasValidId = assetId !== null;
|
|
72
71
|
// Closing is driven by removing the URL param (a navigation), so navigation
|
|
73
72
|
// guards like <Blocker> can intercept it. `isMounted` keeps the drawer in the
|
|
74
73
|
// tree through the slide-out: it stays true once opened and only flips false
|
|
@@ -95,14 +94,14 @@ const useAssetOperation = ()=>{
|
|
|
95
94
|
]);
|
|
96
95
|
const openDetails = React__namespace.useCallback((id)=>{
|
|
97
96
|
setQuery({
|
|
98
|
-
[
|
|
97
|
+
[useIsAssetDetailsOpen.ASSET_DETAILS_URL_PARAM]: String(id)
|
|
99
98
|
}, 'push', true);
|
|
100
99
|
}, [
|
|
101
100
|
setQuery
|
|
102
101
|
]);
|
|
103
102
|
const closeDetails = React__namespace.useCallback(()=>{
|
|
104
103
|
setQuery({
|
|
105
|
-
[
|
|
104
|
+
[useIsAssetDetailsOpen.ASSET_DETAILS_URL_PARAM]: undefined
|
|
106
105
|
}, 'remove', true);
|
|
107
106
|
}, [
|
|
108
107
|
setQuery
|
|
@@ -308,7 +307,6 @@ const LocationField = ({ label, rootLabel, folders, disabled })=>{
|
|
|
308
307
|
children: [
|
|
309
308
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Trigger, {
|
|
310
309
|
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
311
|
-
withTooltip: false,
|
|
312
310
|
label: triggerLabel,
|
|
313
311
|
variant: "danger-light",
|
|
314
312
|
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Trash, {})
|
|
@@ -386,7 +384,6 @@ const CopyLinkButton = ({ asset })=>{
|
|
|
386
384
|
});
|
|
387
385
|
};
|
|
388
386
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
389
|
-
withTooltip: false,
|
|
390
387
|
label: formatMessage({
|
|
391
388
|
id: translations.getTranslationKey('asset-details.copy-link.trigger'),
|
|
392
389
|
defaultMessage: 'Copy link'
|
|
@@ -419,7 +416,6 @@ const DownloadAssetButton = ({ asset })=>{
|
|
|
419
416
|
}
|
|
420
417
|
};
|
|
421
418
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
422
|
-
withTooltip: false,
|
|
423
419
|
label: formatMessage({
|
|
424
420
|
id: translations.getTranslationKey('asset-details.download.trigger'),
|
|
425
421
|
defaultMessage: 'Download'
|
|
@@ -463,6 +459,7 @@ const ReplaceAssetButton = ({ mime })=>{
|
|
|
463
459
|
children: /*#__PURE__*/ jsxRuntime.jsx("input", {
|
|
464
460
|
ref: fileInputRef,
|
|
465
461
|
type: "file",
|
|
462
|
+
accept: mime ?? '',
|
|
466
463
|
multiple: false,
|
|
467
464
|
onChange: handleFileChange,
|
|
468
465
|
"aria-hidden": true,
|
|
@@ -470,7 +467,6 @@ const ReplaceAssetButton = ({ mime })=>{
|
|
|
470
467
|
})
|
|
471
468
|
}),
|
|
472
469
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
473
|
-
withTooltip: false,
|
|
474
470
|
label: formatMessage({
|
|
475
471
|
id: translations.getTranslationKey('asset-details.replace.trigger'),
|
|
476
472
|
defaultMessage: 'Replace this file'
|
|
@@ -545,32 +541,27 @@ const ReplaceAssetButton = ({ mime })=>{
|
|
|
545
541
|
]
|
|
546
542
|
});
|
|
547
543
|
};
|
|
548
|
-
const AssetImageActions = ({ onCrop
|
|
544
|
+
const AssetImageActions = ({ onCrop })=>{
|
|
549
545
|
const { formatMessage } = reactIntl.useIntl();
|
|
550
546
|
const isSubmitting = strapiAdmin.useForm('AssetImageActions', (state)=>state.isSubmitting);
|
|
551
|
-
return /*#__PURE__*/ jsxRuntime.
|
|
547
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
552
548
|
direction: "column",
|
|
553
549
|
gap: 2,
|
|
554
|
-
children:
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
id: translations.getTranslationKey('asset-details.crop.trigger'),
|
|
559
|
-
defaultMessage: 'Crop'
|
|
560
|
-
}),
|
|
561
|
-
variant: "tertiary",
|
|
562
|
-
onClick: onCrop,
|
|
563
|
-
disabled: isSubmitting || !onCrop,
|
|
564
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Crop, {})
|
|
550
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
551
|
+
label: formatMessage({
|
|
552
|
+
id: translations.getTranslationKey('asset-details.crop.trigger'),
|
|
553
|
+
defaultMessage: 'Crop'
|
|
565
554
|
}),
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
555
|
+
variant: "tertiary",
|
|
556
|
+
onClick: onCrop,
|
|
557
|
+
disabled: isSubmitting || !onCrop,
|
|
558
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Crop, {})
|
|
559
|
+
})
|
|
570
560
|
});
|
|
571
561
|
};
|
|
572
562
|
const AssetDetails = ({ asset, closeDetails })=>{
|
|
573
563
|
const { formatMessage, formatDate } = reactIntl.useIntl();
|
|
564
|
+
const getErrorMessage = useApiErrorMessage.useApiErrorMessage();
|
|
574
565
|
const { canCreate, canUpdate, canDownload, canCopyLink } = useMediaLibraryPermissions.useMediaLibraryPermissions();
|
|
575
566
|
const { data: folders$1 = [] } = folders.useGetAllFoldersQuery();
|
|
576
567
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
@@ -613,10 +604,10 @@ const AssetDetails = ({ asset, closeDetails })=>{
|
|
|
613
604
|
if ('error' in res) {
|
|
614
605
|
notify({
|
|
615
606
|
type: 'danger',
|
|
616
|
-
message: formatMessage({
|
|
607
|
+
message: getErrorMessage(res.error, formatMessage({
|
|
617
608
|
id: translations.getTranslationKey('asset-details.update.error'),
|
|
618
609
|
defaultMessage: 'Failed to update the file.'
|
|
619
|
-
})
|
|
610
|
+
}))
|
|
620
611
|
});
|
|
621
612
|
return;
|
|
622
613
|
}
|
|
@@ -642,14 +633,12 @@ const AssetDetails = ({ asset, closeDetails })=>{
|
|
|
642
633
|
file
|
|
643
634
|
});
|
|
644
635
|
if ('error' in res) {
|
|
645
|
-
const error = res.error;
|
|
646
|
-
const message = error?.data?.error?.message ?? error?.data?.message ?? formatMessage({
|
|
647
|
-
id: translations.getTranslationKey('asset-details.replace.error'),
|
|
648
|
-
defaultMessage: 'Failed to replace the file.'
|
|
649
|
-
});
|
|
650
636
|
notify({
|
|
651
637
|
type: 'danger',
|
|
652
|
-
message
|
|
638
|
+
message: getErrorMessage(res.error, formatMessage({
|
|
639
|
+
id: translations.getTranslationKey('asset-details.replace.error'),
|
|
640
|
+
defaultMessage: 'Failed to replace the file.'
|
|
641
|
+
}))
|
|
653
642
|
});
|
|
654
643
|
return;
|
|
655
644
|
}
|
|
@@ -666,6 +655,7 @@ const AssetDetails = ({ asset, closeDetails })=>{
|
|
|
666
655
|
}, [
|
|
667
656
|
asset.id,
|
|
668
657
|
formatMessage,
|
|
658
|
+
getErrorMessage,
|
|
669
659
|
notify,
|
|
670
660
|
replaceMutation,
|
|
671
661
|
trackUsage
|
|
@@ -675,14 +665,12 @@ const AssetDetails = ({ asset, closeDetails })=>{
|
|
|
675
665
|
const handleDelete = React__namespace.useCallback(async ()=>{
|
|
676
666
|
const res = await deleteMutation(asset.id);
|
|
677
667
|
if ('error' in res) {
|
|
678
|
-
const error = res.error;
|
|
679
|
-
const message = error?.data?.error?.message ?? error?.data?.message ?? formatMessage({
|
|
680
|
-
id: translations.getTranslationKey('asset-details.delete.error'),
|
|
681
|
-
defaultMessage: 'Failed to delete the asset.'
|
|
682
|
-
});
|
|
683
668
|
notify({
|
|
684
669
|
type: 'danger',
|
|
685
|
-
message
|
|
670
|
+
message: getErrorMessage(res.error, formatMessage({
|
|
671
|
+
id: translations.getTranslationKey('asset-details.delete.error'),
|
|
672
|
+
defaultMessage: 'Failed to delete the asset.'
|
|
673
|
+
}))
|
|
686
674
|
});
|
|
687
675
|
return;
|
|
688
676
|
}
|
|
@@ -702,16 +690,17 @@ const AssetDetails = ({ asset, closeDetails })=>{
|
|
|
702
690
|
deleteMutation,
|
|
703
691
|
folderName,
|
|
704
692
|
formatMessage,
|
|
693
|
+
getErrorMessage,
|
|
705
694
|
notify,
|
|
706
695
|
toggleNotification
|
|
707
696
|
]);
|
|
708
|
-
const notifyCropError = ()=>{
|
|
697
|
+
const notifyCropError = (error)=>{
|
|
709
698
|
notify({
|
|
710
699
|
type: 'danger',
|
|
711
|
-
message: formatMessage({
|
|
700
|
+
message: getErrorMessage(error, formatMessage({
|
|
712
701
|
id: translations.getTranslationKey('asset-details.crop.error'),
|
|
713
702
|
defaultMessage: 'Failed to crop the file.'
|
|
714
|
-
})
|
|
703
|
+
}))
|
|
715
704
|
});
|
|
716
705
|
};
|
|
717
706
|
// Apply: replace the original binary with the cropped file + focal point.
|
|
@@ -727,7 +716,7 @@ const AssetDetails = ({ asset, closeDetails })=>{
|
|
|
727
716
|
}
|
|
728
717
|
});
|
|
729
718
|
if ('error' in res) {
|
|
730
|
-
notifyCropError();
|
|
719
|
+
notifyCropError(res.error);
|
|
731
720
|
return;
|
|
732
721
|
}
|
|
733
722
|
trackUsage('didCropFile', {
|
|
@@ -758,7 +747,7 @@ const AssetDetails = ({ asset, closeDetails })=>{
|
|
|
758
747
|
}
|
|
759
748
|
});
|
|
760
749
|
if ('error' in res) {
|
|
761
|
-
notifyCropError();
|
|
750
|
+
notifyCropError(res.error);
|
|
762
751
|
return;
|
|
763
752
|
}
|
|
764
753
|
trackUsage('didCropFile', {
|
|
@@ -833,8 +822,7 @@ const AssetDetails = ({ asset, closeDetails })=>{
|
|
|
833
822
|
/*#__PURE__*/ jsxRuntime.jsx(AssetPreview.AssetPreview, {
|
|
834
823
|
asset: asset,
|
|
835
824
|
actions: isImage && canUpdate ? /*#__PURE__*/ jsxRuntime.jsx(AssetImageActions, {
|
|
836
|
-
onCrop: ()=>setIsCropOpen(true)
|
|
837
|
-
mime: asset.mime
|
|
825
|
+
onCrop: ()=>setIsCropOpen(true)
|
|
838
826
|
}) : null
|
|
839
827
|
}),
|
|
840
828
|
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
@@ -987,6 +975,9 @@ const AssetDetails = ({ asset, closeDetails })=>{
|
|
|
987
975
|
}),
|
|
988
976
|
canDownload && /*#__PURE__*/ jsxRuntime.jsx(DownloadAssetButton, {
|
|
989
977
|
asset: asset
|
|
978
|
+
}),
|
|
979
|
+
canUpdate && /*#__PURE__*/ jsxRuntime.jsx(ReplaceAssetButton, {
|
|
980
|
+
mime: asset.mime
|
|
990
981
|
})
|
|
991
982
|
]
|
|
992
983
|
}),
|