@strapi/upload 5.14.0 → 5.15.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/components/MediaLibraryInput/MediaLibraryInput.js +5 -16
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +5 -16
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
- package/dist/admin/package.json.js +6 -6
- package/dist/admin/package.json.mjs +6 -6
- package/dist/admin/src/utils/getAllowedFiles.d.ts +1 -1
- package/dist/admin/utils/getAllowedFiles.js +3 -0
- package/dist/admin/utils/getAllowedFiles.js.map +1 -1
- package/dist/admin/utils/getAllowedFiles.mjs +3 -0
- package/dist/admin/utils/getAllowedFiles.mjs.map +1 -1
- package/package.json +6 -6
|
@@ -41,20 +41,9 @@ const STEPS = {
|
|
|
41
41
|
AssetUpload: 'UploadAsset',
|
|
42
42
|
FolderCreate: 'FolderCreate'
|
|
43
43
|
};
|
|
44
|
-
const MediaLibraryInput = /*#__PURE__*/ React__namespace.forwardRef(({ attribute: { allowedTypes =
|
|
45
|
-
'videos',
|
|
46
|
-
'files',
|
|
47
|
-
'images',
|
|
48
|
-
'audios'
|
|
49
|
-
], multiple = false } = {}, label, hint, disabled = false, labelAction = undefined, name, required = false }, forwardedRef)=>{
|
|
44
|
+
const MediaLibraryInput = /*#__PURE__*/ React__namespace.forwardRef(({ attribute: { allowedTypes = null, multiple = false } = {}, label, hint, disabled = false, labelAction = undefined, name, required = false }, forwardedRef)=>{
|
|
50
45
|
const { formatMessage } = reactIntl.useIntl();
|
|
51
46
|
const { onChange, value, error } = strapiAdmin.useField(name);
|
|
52
|
-
const fieldAllowedTypes = allowedTypes || [
|
|
53
|
-
'files',
|
|
54
|
-
'images',
|
|
55
|
-
'videos',
|
|
56
|
-
'audios'
|
|
57
|
-
];
|
|
58
47
|
const [uploadedFiles, setUploadedFiles] = React__namespace.useState([]);
|
|
59
48
|
const [step, setStep] = React__namespace.useState(undefined);
|
|
60
49
|
const [selectedIndex, setSelectedIndex] = React__namespace.useState(0);
|
|
@@ -110,7 +99,7 @@ const MediaLibraryInput = /*#__PURE__*/ React__namespace.forwardRef(({ attribute
|
|
|
110
99
|
onChange(name, multiple ? nextSelectedAssets : nextSelectedAssets[0]);
|
|
111
100
|
};
|
|
112
101
|
const validateAssetsTypes = (assets, callback)=>{
|
|
113
|
-
const allowedAssets = getAllowedFiles.getAllowedFiles(
|
|
102
|
+
const allowedAssets = getAllowedFiles.getAllowedFiles(allowedTypes, assets);
|
|
114
103
|
if (allowedAssets.length > 0) {
|
|
115
104
|
callback(allowedAssets);
|
|
116
105
|
} else {
|
|
@@ -121,7 +110,7 @@ const MediaLibraryInput = /*#__PURE__*/ React__namespace.forwardRef(({ attribute
|
|
|
121
110
|
id: getTrad.getTrad('input.notification.not-supported'),
|
|
122
111
|
defaultMessage: `You can't upload this type of file.`
|
|
123
112
|
}, {
|
|
124
|
-
fileTypes:
|
|
113
|
+
fileTypes: (allowedTypes ?? []).join(',')
|
|
125
114
|
})
|
|
126
115
|
});
|
|
127
116
|
}
|
|
@@ -149,7 +138,7 @@ const MediaLibraryInput = /*#__PURE__*/ React__namespace.forwardRef(({ attribute
|
|
|
149
138
|
};
|
|
150
139
|
let initiallySelectedAssets = selectedAssets;
|
|
151
140
|
if (uploadedFiles.length > 0) {
|
|
152
|
-
const allowedUploadedFiles = getAllowedFiles.getAllowedFiles(
|
|
141
|
+
const allowedUploadedFiles = getAllowedFiles.getAllowedFiles(allowedTypes, uploadedFiles);
|
|
153
142
|
initiallySelectedAssets = multiple ? [
|
|
154
143
|
...allowedUploadedFiles,
|
|
155
144
|
...selectedAssets
|
|
@@ -179,7 +168,7 @@ const MediaLibraryInput = /*#__PURE__*/ React__namespace.forwardRef(({ attribute
|
|
|
179
168
|
trackedLocation: "content-manager"
|
|
180
169
|
}),
|
|
181
170
|
step === STEPS.AssetSelect && /*#__PURE__*/ jsxRuntime.jsx(AssetDialog.AssetDialog, {
|
|
182
|
-
allowedTypes:
|
|
171
|
+
allowedTypes: allowedTypes,
|
|
183
172
|
initiallySelectedAssets: initiallySelectedAssets,
|
|
184
173
|
folderId: folderId,
|
|
185
174
|
onClose: ()=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibraryInput.js","sources":["../../../../admin/src/components/MediaLibraryInput/MediaLibraryInput.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { useField, useNotification } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad, getAllowedFiles, AllowedFiles } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { UploadAssetDialog, Asset } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../shared/contracts/files';\ntype AllowedTypes = 'files' | 'images' | 'videos' | 'audios';\n\nconst STEPS = {\n AssetSelect: 'SelectAsset',\n AssetUpload: 'UploadAsset',\n FolderCreate: 'FolderCreate',\n};\n\nexport interface MediaLibraryInputProps {\n required?: boolean;\n name: string;\n labelAction?: React.ReactNode;\n label?: string;\n hint?: string;\n disabled?: boolean;\n attribute?: {\n allowedTypes?: AllowedTypes[];\n multiple?: boolean;\n };\n}\n\nexport const MediaLibraryInput = React.forwardRef<CarouselAssetsProps, MediaLibraryInputProps>(\n (\n {\n attribute: { allowedTypes = ['videos', 'files', 'images', 'audios'], multiple = false } = {},\n label,\n hint,\n disabled = false,\n labelAction = undefined,\n name,\n required = false,\n },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const { onChange, value, error } = useField(name);\n const fieldAllowedTypes = allowedTypes || ['files', 'images', 'videos', 'audios'];\n const [uploadedFiles, setUploadedFiles] = React.useState<Asset[] | File[]>([]);\n const [step, setStep] = React.useState<string | undefined>(undefined);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const [droppedAssets, setDroppedAssets] = React.useState<AllowedFiles[]>();\n const [folderId, setFolderId] = React.useState<number | null>(null);\n const { toggleNotification } = useNotification();\n\n React.useEffect(() => {\n // Clear the uploaded files on close\n if (step === undefined) {\n setUploadedFiles([]);\n }\n }, [step]);\n\n let selectedAssets: File[] = [];\n\n if (Array.isArray(value)) {\n selectedAssets = value;\n } else if (value) {\n selectedAssets = [value];\n }\n\n const handleValidation = (nextSelectedAssets: File[]) => {\n const value = multiple ? nextSelectedAssets : nextSelectedAssets[0];\n onChange(name, value);\n setStep(undefined);\n };\n\n const handleDeleteAssetFromMediaLibrary = () => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter(\n (_, assetIndex) => assetIndex !== selectedIndex\n );\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n const value = nextValue;\n onChange(name, value);\n\n setSelectedIndex(0);\n };\n\n const handleDeleteAsset = (asset: File) => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter((prevAsset) => prevAsset.id !== asset.id);\n\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n onChange(name, nextValue);\n\n setSelectedIndex(0);\n };\n\n const handleAssetEdit = (asset: File) => {\n const nextSelectedAssets = selectedAssets.map((prevAsset) =>\n prevAsset.id === asset.id ? asset : prevAsset\n );\n\n onChange(name, multiple ? nextSelectedAssets : nextSelectedAssets[0]);\n };\n\n const validateAssetsTypes = (\n assets: FileWithoutIdHash[] | Asset[],\n callback: (assets?: AllowedFiles[], error?: string) => void\n ) => {\n const allowedAssets = getAllowedFiles(fieldAllowedTypes, assets as AllowedFiles[]);\n\n if (allowedAssets.length > 0) {\n callback(allowedAssets);\n } else {\n toggleNotification({\n type: 'danger',\n timeout: 4000,\n message: formatMessage(\n {\n id: getTrad('input.notification.not-supported'),\n defaultMessage: `You can't upload this type of file.`,\n },\n {\n fileTypes: fieldAllowedTypes.join(','),\n }\n ),\n });\n }\n };\n\n const handleAssetDrop = (assets: FileWithoutIdHash[]) => {\n validateAssetsTypes(assets, (allowedAssets?: AllowedFiles[]) => {\n setDroppedAssets(allowedAssets);\n setStep(STEPS.AssetUpload);\n });\n };\n\n if (multiple && selectedAssets.length > 0) {\n label = `${label} (${selectedIndex + 1} / ${selectedAssets.length})`;\n }\n\n const handleNext = () => {\n setSelectedIndex((current) => (current < selectedAssets.length - 1 ? current + 1 : 0));\n };\n\n const handlePrevious = () => {\n setSelectedIndex((current) => (current > 0 ? current - 1 : selectedAssets.length - 1));\n };\n\n const handleFilesUploadSucceeded = (uploadedFiles: Asset[] | File[]) => {\n setUploadedFiles((prev) => [...prev, ...uploadedFiles]);\n };\n\n let initiallySelectedAssets = selectedAssets;\n\n if (uploadedFiles.length > 0) {\n const allowedUploadedFiles = getAllowedFiles(\n fieldAllowedTypes,\n uploadedFiles as AllowedFiles[]\n );\n\n initiallySelectedAssets = multiple\n ? [...allowedUploadedFiles, ...selectedAssets]\n : [allowedUploadedFiles[0]];\n }\n\n return (\n <>\n <CarouselAssets\n ref={forwardedRef}\n assets={selectedAssets}\n disabled={disabled}\n label={label!}\n labelAction={labelAction}\n onDeleteAsset={handleDeleteAsset}\n onDeleteAssetFromMediaLibrary={handleDeleteAssetFromMediaLibrary}\n onAddAsset={() => setStep(STEPS.AssetSelect)}\n onDropAsset={handleAssetDrop}\n onEditAsset={handleAssetEdit}\n onNext={handleNext}\n onPrevious={handlePrevious}\n error={error}\n hint={hint}\n required={required}\n selectedAssetIndex={selectedIndex}\n trackedLocation=\"content-manager\"\n />\n\n {step === STEPS.AssetSelect && (\n <AssetDialog\n allowedTypes={fieldAllowedTypes as AllowedTypes[]}\n initiallySelectedAssets={initiallySelectedAssets}\n folderId={folderId}\n onClose={() => {\n setStep(undefined);\n setFolderId(null);\n }}\n open={step === STEPS.AssetSelect}\n onValidate={handleValidation}\n multiple={multiple}\n onAddAsset={() => setStep(STEPS.AssetUpload)}\n onAddFolder={() => setStep(STEPS.FolderCreate)}\n onChangeFolder={(folder) => setFolderId(folder)}\n trackedLocation=\"content-manager\"\n />\n )}\n\n {step === STEPS.AssetUpload && (\n <UploadAssetDialog\n open={step === STEPS.AssetUpload}\n onClose={() => setStep(STEPS.AssetSelect)}\n initialAssetsToAdd={droppedAssets as Asset[]}\n addUploadedFiles={handleFilesUploadSucceeded}\n trackedLocation=\"content-manager\"\n folderId={folderId}\n validateAssetsTypes={validateAssetsTypes}\n />\n )}\n\n {step === STEPS.FolderCreate && (\n <EditFolderDialog\n open={step === STEPS.FolderCreate}\n onClose={() => setStep(STEPS.AssetSelect)}\n parentFolderId={folderId}\n />\n )}\n </>\n );\n }\n);\n"],"names":["STEPS","AssetSelect","AssetUpload","FolderCreate","MediaLibraryInput","React","forwardRef","attribute","allowedTypes","multiple","label","hint","disabled","labelAction","undefined","name","required","forwardedRef","formatMessage","useIntl","onChange","value","error","useField","fieldAllowedTypes","uploadedFiles","setUploadedFiles","useState","step","setStep","selectedIndex","setSelectedIndex","droppedAssets","setDroppedAssets","folderId","setFolderId","toggleNotification","useNotification","useEffect","selectedAssets","Array","isArray","handleValidation","nextSelectedAssets","handleDeleteAssetFromMediaLibrary","nextValue","filter","_","assetIndex","length","handleDeleteAsset","asset","prevAsset","id","handleAssetEdit","map","validateAssetsTypes","assets","callback","allowedAssets","getAllowedFiles","type","timeout","message","getTrad","defaultMessage","fileTypes","join","handleAssetDrop","handleNext","current","handlePrevious","handleFilesUploadSucceeded","prev","initiallySelectedAssets","allowedUploadedFiles","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","selectedAssetIndex","trackedLocation","AssetDialog","onClose","open","onValidate","onAddFolder","onChangeFolder","folder","UploadAssetDialog","initialAssetsToAdd","addUploadedFiles","EditFolderDialog","parentFolderId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MediaLibraryInput.js","sources":["../../../../admin/src/components/MediaLibraryInput/MediaLibraryInput.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { useField, useNotification } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad, getAllowedFiles, AllowedFiles } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { UploadAssetDialog, Asset } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../shared/contracts/files';\ntype AllowedTypes = 'files' | 'images' | 'videos' | 'audios';\n\nconst STEPS = {\n AssetSelect: 'SelectAsset',\n AssetUpload: 'UploadAsset',\n FolderCreate: 'FolderCreate',\n};\n\nexport interface MediaLibraryInputProps {\n required?: boolean;\n name: string;\n labelAction?: React.ReactNode;\n label?: string;\n hint?: string;\n disabled?: boolean;\n attribute?: {\n allowedTypes?: AllowedTypes[];\n multiple?: boolean;\n };\n}\n\nexport const MediaLibraryInput = React.forwardRef<CarouselAssetsProps, MediaLibraryInputProps>(\n (\n {\n attribute: { allowedTypes = null, multiple = false } = {},\n label,\n hint,\n disabled = false,\n labelAction = undefined,\n name,\n required = false,\n },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const { onChange, value, error } = useField(name);\n const [uploadedFiles, setUploadedFiles] = React.useState<Asset[] | File[]>([]);\n const [step, setStep] = React.useState<string | undefined>(undefined);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const [droppedAssets, setDroppedAssets] = React.useState<AllowedFiles[]>();\n const [folderId, setFolderId] = React.useState<number | null>(null);\n const { toggleNotification } = useNotification();\n\n React.useEffect(() => {\n // Clear the uploaded files on close\n if (step === undefined) {\n setUploadedFiles([]);\n }\n }, [step]);\n\n let selectedAssets: File[] = [];\n\n if (Array.isArray(value)) {\n selectedAssets = value;\n } else if (value) {\n selectedAssets = [value];\n }\n\n const handleValidation = (nextSelectedAssets: File[]) => {\n const value = multiple ? nextSelectedAssets : nextSelectedAssets[0];\n onChange(name, value);\n setStep(undefined);\n };\n\n const handleDeleteAssetFromMediaLibrary = () => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter(\n (_, assetIndex) => assetIndex !== selectedIndex\n );\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n const value = nextValue;\n onChange(name, value);\n\n setSelectedIndex(0);\n };\n\n const handleDeleteAsset = (asset: File) => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter((prevAsset) => prevAsset.id !== asset.id);\n\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n onChange(name, nextValue);\n\n setSelectedIndex(0);\n };\n\n const handleAssetEdit = (asset: File) => {\n const nextSelectedAssets = selectedAssets.map((prevAsset) =>\n prevAsset.id === asset.id ? asset : prevAsset\n );\n\n onChange(name, multiple ? nextSelectedAssets : nextSelectedAssets[0]);\n };\n\n const validateAssetsTypes = (\n assets: FileWithoutIdHash[] | Asset[],\n callback: (assets?: AllowedFiles[], error?: string) => void\n ) => {\n const allowedAssets = getAllowedFiles(allowedTypes, assets as AllowedFiles[]);\n\n if (allowedAssets.length > 0) {\n callback(allowedAssets);\n } else {\n toggleNotification({\n type: 'danger',\n timeout: 4000,\n message: formatMessage(\n {\n id: getTrad('input.notification.not-supported'),\n defaultMessage: `You can't upload this type of file.`,\n },\n {\n fileTypes: (allowedTypes ?? []).join(','),\n }\n ),\n });\n }\n };\n\n const handleAssetDrop = (assets: FileWithoutIdHash[]) => {\n validateAssetsTypes(assets, (allowedAssets?: AllowedFiles[]) => {\n setDroppedAssets(allowedAssets);\n setStep(STEPS.AssetUpload);\n });\n };\n\n if (multiple && selectedAssets.length > 0) {\n label = `${label} (${selectedIndex + 1} / ${selectedAssets.length})`;\n }\n\n const handleNext = () => {\n setSelectedIndex((current) => (current < selectedAssets.length - 1 ? current + 1 : 0));\n };\n\n const handlePrevious = () => {\n setSelectedIndex((current) => (current > 0 ? current - 1 : selectedAssets.length - 1));\n };\n\n const handleFilesUploadSucceeded = (uploadedFiles: Asset[] | File[]) => {\n setUploadedFiles((prev) => [...prev, ...uploadedFiles]);\n };\n\n let initiallySelectedAssets = selectedAssets;\n\n if (uploadedFiles.length > 0) {\n const allowedUploadedFiles = getAllowedFiles(allowedTypes, uploadedFiles as AllowedFiles[]);\n\n initiallySelectedAssets = multiple\n ? [...allowedUploadedFiles, ...selectedAssets]\n : [allowedUploadedFiles[0]];\n }\n\n return (\n <>\n <CarouselAssets\n ref={forwardedRef}\n assets={selectedAssets}\n disabled={disabled}\n label={label!}\n labelAction={labelAction}\n onDeleteAsset={handleDeleteAsset}\n onDeleteAssetFromMediaLibrary={handleDeleteAssetFromMediaLibrary}\n onAddAsset={() => setStep(STEPS.AssetSelect)}\n onDropAsset={handleAssetDrop}\n onEditAsset={handleAssetEdit}\n onNext={handleNext}\n onPrevious={handlePrevious}\n error={error}\n hint={hint}\n required={required}\n selectedAssetIndex={selectedIndex}\n trackedLocation=\"content-manager\"\n />\n\n {step === STEPS.AssetSelect && (\n <AssetDialog\n allowedTypes={allowedTypes as AllowedTypes[]}\n initiallySelectedAssets={initiallySelectedAssets}\n folderId={folderId}\n onClose={() => {\n setStep(undefined);\n setFolderId(null);\n }}\n open={step === STEPS.AssetSelect}\n onValidate={handleValidation}\n multiple={multiple}\n onAddAsset={() => setStep(STEPS.AssetUpload)}\n onAddFolder={() => setStep(STEPS.FolderCreate)}\n onChangeFolder={(folder) => setFolderId(folder)}\n trackedLocation=\"content-manager\"\n />\n )}\n\n {step === STEPS.AssetUpload && (\n <UploadAssetDialog\n open={step === STEPS.AssetUpload}\n onClose={() => setStep(STEPS.AssetSelect)}\n initialAssetsToAdd={droppedAssets as Asset[]}\n addUploadedFiles={handleFilesUploadSucceeded}\n trackedLocation=\"content-manager\"\n folderId={folderId}\n validateAssetsTypes={validateAssetsTypes}\n />\n )}\n\n {step === STEPS.FolderCreate && (\n <EditFolderDialog\n open={step === STEPS.FolderCreate}\n onClose={() => setStep(STEPS.AssetSelect)}\n parentFolderId={folderId}\n />\n )}\n </>\n );\n }\n);\n"],"names":["STEPS","AssetSelect","AssetUpload","FolderCreate","MediaLibraryInput","React","forwardRef","attribute","allowedTypes","multiple","label","hint","disabled","labelAction","undefined","name","required","forwardedRef","formatMessage","useIntl","onChange","value","error","useField","uploadedFiles","setUploadedFiles","useState","step","setStep","selectedIndex","setSelectedIndex","droppedAssets","setDroppedAssets","folderId","setFolderId","toggleNotification","useNotification","useEffect","selectedAssets","Array","isArray","handleValidation","nextSelectedAssets","handleDeleteAssetFromMediaLibrary","nextValue","filter","_","assetIndex","length","handleDeleteAsset","asset","prevAsset","id","handleAssetEdit","map","validateAssetsTypes","assets","callback","allowedAssets","getAllowedFiles","type","timeout","message","getTrad","defaultMessage","fileTypes","join","handleAssetDrop","handleNext","current","handlePrevious","handleFilesUploadSucceeded","prev","initiallySelectedAssets","allowedUploadedFiles","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","selectedAssetIndex","trackedLocation","AssetDialog","onClose","open","onValidate","onAddFolder","onChangeFolder","folder","UploadAssetDialog","initialAssetsToAdd","addUploadedFiles","EditFolderDialog","parentFolderId"],"mappings":"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"}
|
|
@@ -20,20 +20,9 @@ const STEPS = {
|
|
|
20
20
|
AssetUpload: 'UploadAsset',
|
|
21
21
|
FolderCreate: 'FolderCreate'
|
|
22
22
|
};
|
|
23
|
-
const MediaLibraryInput = /*#__PURE__*/ React.forwardRef(({ attribute: { allowedTypes =
|
|
24
|
-
'videos',
|
|
25
|
-
'files',
|
|
26
|
-
'images',
|
|
27
|
-
'audios'
|
|
28
|
-
], multiple = false } = {}, label, hint, disabled = false, labelAction = undefined, name, required = false }, forwardedRef)=>{
|
|
23
|
+
const MediaLibraryInput = /*#__PURE__*/ React.forwardRef(({ attribute: { allowedTypes = null, multiple = false } = {}, label, hint, disabled = false, labelAction = undefined, name, required = false }, forwardedRef)=>{
|
|
29
24
|
const { formatMessage } = useIntl();
|
|
30
25
|
const { onChange, value, error } = useField(name);
|
|
31
|
-
const fieldAllowedTypes = allowedTypes || [
|
|
32
|
-
'files',
|
|
33
|
-
'images',
|
|
34
|
-
'videos',
|
|
35
|
-
'audios'
|
|
36
|
-
];
|
|
37
26
|
const [uploadedFiles, setUploadedFiles] = React.useState([]);
|
|
38
27
|
const [step, setStep] = React.useState(undefined);
|
|
39
28
|
const [selectedIndex, setSelectedIndex] = React.useState(0);
|
|
@@ -89,7 +78,7 @@ const MediaLibraryInput = /*#__PURE__*/ React.forwardRef(({ attribute: { allowed
|
|
|
89
78
|
onChange(name, multiple ? nextSelectedAssets : nextSelectedAssets[0]);
|
|
90
79
|
};
|
|
91
80
|
const validateAssetsTypes = (assets, callback)=>{
|
|
92
|
-
const allowedAssets = getAllowedFiles(
|
|
81
|
+
const allowedAssets = getAllowedFiles(allowedTypes, assets);
|
|
93
82
|
if (allowedAssets.length > 0) {
|
|
94
83
|
callback(allowedAssets);
|
|
95
84
|
} else {
|
|
@@ -100,7 +89,7 @@ const MediaLibraryInput = /*#__PURE__*/ React.forwardRef(({ attribute: { allowed
|
|
|
100
89
|
id: getTrad('input.notification.not-supported'),
|
|
101
90
|
defaultMessage: `You can't upload this type of file.`
|
|
102
91
|
}, {
|
|
103
|
-
fileTypes:
|
|
92
|
+
fileTypes: (allowedTypes ?? []).join(',')
|
|
104
93
|
})
|
|
105
94
|
});
|
|
106
95
|
}
|
|
@@ -128,7 +117,7 @@ const MediaLibraryInput = /*#__PURE__*/ React.forwardRef(({ attribute: { allowed
|
|
|
128
117
|
};
|
|
129
118
|
let initiallySelectedAssets = selectedAssets;
|
|
130
119
|
if (uploadedFiles.length > 0) {
|
|
131
|
-
const allowedUploadedFiles = getAllowedFiles(
|
|
120
|
+
const allowedUploadedFiles = getAllowedFiles(allowedTypes, uploadedFiles);
|
|
132
121
|
initiallySelectedAssets = multiple ? [
|
|
133
122
|
...allowedUploadedFiles,
|
|
134
123
|
...selectedAssets
|
|
@@ -158,7 +147,7 @@ const MediaLibraryInput = /*#__PURE__*/ React.forwardRef(({ attribute: { allowed
|
|
|
158
147
|
trackedLocation: "content-manager"
|
|
159
148
|
}),
|
|
160
149
|
step === STEPS.AssetSelect && /*#__PURE__*/ jsx(AssetDialog, {
|
|
161
|
-
allowedTypes:
|
|
150
|
+
allowedTypes: allowedTypes,
|
|
162
151
|
initiallySelectedAssets: initiallySelectedAssets,
|
|
163
152
|
folderId: folderId,
|
|
164
153
|
onClose: ()=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibraryInput.mjs","sources":["../../../../admin/src/components/MediaLibraryInput/MediaLibraryInput.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { useField, useNotification } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad, getAllowedFiles, AllowedFiles } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { UploadAssetDialog, Asset } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../shared/contracts/files';\ntype AllowedTypes = 'files' | 'images' | 'videos' | 'audios';\n\nconst STEPS = {\n AssetSelect: 'SelectAsset',\n AssetUpload: 'UploadAsset',\n FolderCreate: 'FolderCreate',\n};\n\nexport interface MediaLibraryInputProps {\n required?: boolean;\n name: string;\n labelAction?: React.ReactNode;\n label?: string;\n hint?: string;\n disabled?: boolean;\n attribute?: {\n allowedTypes?: AllowedTypes[];\n multiple?: boolean;\n };\n}\n\nexport const MediaLibraryInput = React.forwardRef<CarouselAssetsProps, MediaLibraryInputProps>(\n (\n {\n attribute: { allowedTypes = ['videos', 'files', 'images', 'audios'], multiple = false } = {},\n label,\n hint,\n disabled = false,\n labelAction = undefined,\n name,\n required = false,\n },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const { onChange, value, error } = useField(name);\n const fieldAllowedTypes = allowedTypes || ['files', 'images', 'videos', 'audios'];\n const [uploadedFiles, setUploadedFiles] = React.useState<Asset[] | File[]>([]);\n const [step, setStep] = React.useState<string | undefined>(undefined);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const [droppedAssets, setDroppedAssets] = React.useState<AllowedFiles[]>();\n const [folderId, setFolderId] = React.useState<number | null>(null);\n const { toggleNotification } = useNotification();\n\n React.useEffect(() => {\n // Clear the uploaded files on close\n if (step === undefined) {\n setUploadedFiles([]);\n }\n }, [step]);\n\n let selectedAssets: File[] = [];\n\n if (Array.isArray(value)) {\n selectedAssets = value;\n } else if (value) {\n selectedAssets = [value];\n }\n\n const handleValidation = (nextSelectedAssets: File[]) => {\n const value = multiple ? nextSelectedAssets : nextSelectedAssets[0];\n onChange(name, value);\n setStep(undefined);\n };\n\n const handleDeleteAssetFromMediaLibrary = () => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter(\n (_, assetIndex) => assetIndex !== selectedIndex\n );\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n const value = nextValue;\n onChange(name, value);\n\n setSelectedIndex(0);\n };\n\n const handleDeleteAsset = (asset: File) => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter((prevAsset) => prevAsset.id !== asset.id);\n\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n onChange(name, nextValue);\n\n setSelectedIndex(0);\n };\n\n const handleAssetEdit = (asset: File) => {\n const nextSelectedAssets = selectedAssets.map((prevAsset) =>\n prevAsset.id === asset.id ? asset : prevAsset\n );\n\n onChange(name, multiple ? nextSelectedAssets : nextSelectedAssets[0]);\n };\n\n const validateAssetsTypes = (\n assets: FileWithoutIdHash[] | Asset[],\n callback: (assets?: AllowedFiles[], error?: string) => void\n ) => {\n const allowedAssets = getAllowedFiles(fieldAllowedTypes, assets as AllowedFiles[]);\n\n if (allowedAssets.length > 0) {\n callback(allowedAssets);\n } else {\n toggleNotification({\n type: 'danger',\n timeout: 4000,\n message: formatMessage(\n {\n id: getTrad('input.notification.not-supported'),\n defaultMessage: `You can't upload this type of file.`,\n },\n {\n fileTypes: fieldAllowedTypes.join(','),\n }\n ),\n });\n }\n };\n\n const handleAssetDrop = (assets: FileWithoutIdHash[]) => {\n validateAssetsTypes(assets, (allowedAssets?: AllowedFiles[]) => {\n setDroppedAssets(allowedAssets);\n setStep(STEPS.AssetUpload);\n });\n };\n\n if (multiple && selectedAssets.length > 0) {\n label = `${label} (${selectedIndex + 1} / ${selectedAssets.length})`;\n }\n\n const handleNext = () => {\n setSelectedIndex((current) => (current < selectedAssets.length - 1 ? current + 1 : 0));\n };\n\n const handlePrevious = () => {\n setSelectedIndex((current) => (current > 0 ? current - 1 : selectedAssets.length - 1));\n };\n\n const handleFilesUploadSucceeded = (uploadedFiles: Asset[] | File[]) => {\n setUploadedFiles((prev) => [...prev, ...uploadedFiles]);\n };\n\n let initiallySelectedAssets = selectedAssets;\n\n if (uploadedFiles.length > 0) {\n const allowedUploadedFiles = getAllowedFiles(\n fieldAllowedTypes,\n uploadedFiles as AllowedFiles[]\n );\n\n initiallySelectedAssets = multiple\n ? [...allowedUploadedFiles, ...selectedAssets]\n : [allowedUploadedFiles[0]];\n }\n\n return (\n <>\n <CarouselAssets\n ref={forwardedRef}\n assets={selectedAssets}\n disabled={disabled}\n label={label!}\n labelAction={labelAction}\n onDeleteAsset={handleDeleteAsset}\n onDeleteAssetFromMediaLibrary={handleDeleteAssetFromMediaLibrary}\n onAddAsset={() => setStep(STEPS.AssetSelect)}\n onDropAsset={handleAssetDrop}\n onEditAsset={handleAssetEdit}\n onNext={handleNext}\n onPrevious={handlePrevious}\n error={error}\n hint={hint}\n required={required}\n selectedAssetIndex={selectedIndex}\n trackedLocation=\"content-manager\"\n />\n\n {step === STEPS.AssetSelect && (\n <AssetDialog\n allowedTypes={fieldAllowedTypes as AllowedTypes[]}\n initiallySelectedAssets={initiallySelectedAssets}\n folderId={folderId}\n onClose={() => {\n setStep(undefined);\n setFolderId(null);\n }}\n open={step === STEPS.AssetSelect}\n onValidate={handleValidation}\n multiple={multiple}\n onAddAsset={() => setStep(STEPS.AssetUpload)}\n onAddFolder={() => setStep(STEPS.FolderCreate)}\n onChangeFolder={(folder) => setFolderId(folder)}\n trackedLocation=\"content-manager\"\n />\n )}\n\n {step === STEPS.AssetUpload && (\n <UploadAssetDialog\n open={step === STEPS.AssetUpload}\n onClose={() => setStep(STEPS.AssetSelect)}\n initialAssetsToAdd={droppedAssets as Asset[]}\n addUploadedFiles={handleFilesUploadSucceeded}\n trackedLocation=\"content-manager\"\n folderId={folderId}\n validateAssetsTypes={validateAssetsTypes}\n />\n )}\n\n {step === STEPS.FolderCreate && (\n <EditFolderDialog\n open={step === STEPS.FolderCreate}\n onClose={() => setStep(STEPS.AssetSelect)}\n parentFolderId={folderId}\n />\n )}\n </>\n );\n }\n);\n"],"names":["STEPS","AssetSelect","AssetUpload","FolderCreate","MediaLibraryInput","React","forwardRef","attribute","allowedTypes","multiple","label","hint","disabled","labelAction","undefined","name","required","forwardedRef","formatMessage","useIntl","onChange","value","error","useField","fieldAllowedTypes","uploadedFiles","setUploadedFiles","useState","step","setStep","selectedIndex","setSelectedIndex","droppedAssets","setDroppedAssets","folderId","setFolderId","toggleNotification","useNotification","useEffect","selectedAssets","Array","isArray","handleValidation","nextSelectedAssets","handleDeleteAssetFromMediaLibrary","nextValue","filter","_","assetIndex","length","handleDeleteAsset","asset","prevAsset","id","handleAssetEdit","map","validateAssetsTypes","assets","callback","allowedAssets","getAllowedFiles","type","timeout","message","getTrad","defaultMessage","fileTypes","join","handleAssetDrop","handleNext","current","handlePrevious","handleFilesUploadSucceeded","prev","initiallySelectedAssets","allowedUploadedFiles","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","selectedAssetIndex","trackedLocation","AssetDialog","onClose","open","onValidate","onAddFolder","onChangeFolder","folder","UploadAssetDialog","initialAssetsToAdd","addUploadedFiles","EditFolderDialog","parentFolderId"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAgBA,MAAMA,KAAQ,GAAA;IACZC,WAAa,EAAA,aAAA;IACbC,WAAa,EAAA,aAAA;IACbC,YAAc,EAAA;AAChB,CAAA;AAeO,MAAMC,kCAAoBC,KAAMC,CAAAA,UAAU,CAC/C,CACE,EACEC,SAAW,EAAA,EAAEC,YAAe,GAAA;AAAC,IAAA,QAAA;AAAU,IAAA,OAAA;AAAS,IAAA,QAAA;AAAU,IAAA;CAAS,EAAEC,QAAAA,GAAW,KAAK,EAAE,GAAG,EAAE,EAC5FC,KAAK,EACLC,IAAI,EACJC,WAAW,KAAK,EAChBC,cAAcC,SAAS,EACvBC,IAAI,EACJC,QAAAA,GAAW,KAAK,EACjB,EACDC,YAAAA,GAAAA;IAEA,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGC,QAASR,CAAAA,IAAAA,CAAAA;AAC5C,IAAA,MAAMS,oBAAoBhB,YAAgB,IAAA;AAAC,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;AACjF,IAAA,MAAM,CAACiB,aAAeC,EAAAA,gBAAAA,CAAiB,GAAGrB,KAAMsB,CAAAA,QAAQ,CAAmB,EAAE,CAAA;AAC7E,IAAA,MAAM,CAACC,IAAMC,EAAAA,OAAAA,CAAQ,GAAGxB,KAAAA,CAAMsB,QAAQ,CAAqBb,SAAAA,CAAAA;AAC3D,IAAA,MAAM,CAACgB,aAAeC,EAAAA,gBAAAA,CAAiB,GAAG1B,KAAAA,CAAMsB,QAAQ,CAAC,CAAA,CAAA;AACzD,IAAA,MAAM,CAACK,aAAAA,EAAeC,gBAAiB,CAAA,GAAG5B,MAAMsB,QAAQ,EAAA;AACxD,IAAA,MAAM,CAACO,QAAUC,EAAAA,WAAAA,CAAY,GAAG9B,KAAAA,CAAMsB,QAAQ,CAAgB,IAAA,CAAA;IAC9D,MAAM,EAAES,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAE/BhC,IAAAA,KAAAA,CAAMiC,SAAS,CAAC,IAAA;;AAEd,QAAA,IAAIV,SAASd,SAAW,EAAA;AACtBY,YAAAA,gBAAAA,CAAiB,EAAE,CAAA;AACrB;KACC,EAAA;AAACE,QAAAA;AAAK,KAAA,CAAA;AAET,IAAA,IAAIW,iBAAyB,EAAE;IAE/B,IAAIC,KAAAA,CAAMC,OAAO,CAACpB,KAAQ,CAAA,EAAA;QACxBkB,cAAiBlB,GAAAA,KAAAA;AACnB,KAAA,MAAO,IAAIA,KAAO,EAAA;QAChBkB,cAAiB,GAAA;AAAClB,YAAAA;AAAM,SAAA;AAC1B;AAEA,IAAA,MAAMqB,mBAAmB,CAACC,kBAAAA,GAAAA;AACxB,QAAA,MAAMtB,KAAQZ,GAAAA,QAAAA,GAAWkC,kBAAqBA,GAAAA,kBAAkB,CAAC,CAAE,CAAA;AACnEvB,QAAAA,QAAAA,CAASL,IAAMM,EAAAA,KAAAA,CAAAA;QACfQ,OAAQf,CAAAA,SAAAA,CAAAA;AACV,KAAA;AAEA,IAAA,MAAM8B,iCAAoC,GAAA,IAAA;QACxC,IAAIC,SAAAA;AAEJ,QAAA,IAAIpC,QAAU,EAAA;AACZ,YAAA,MAAMkC,qBAAqBJ,cAAeO,CAAAA,MAAM,CAC9C,CAACC,CAAAA,EAAGC,aAAeA,UAAelB,KAAAA,aAAAA,CAAAA;AAEpCe,YAAAA,SAAAA,GAAYF,kBAAmBM,CAAAA,MAAM,GAAG,CAAA,GAAIN,kBAAqB,GAAA,IAAA;SAC5D,MAAA;YACLE,SAAY,GAAA,IAAA;AACd;AAEA,QAAA,MAAMxB,KAAQwB,GAAAA,SAAAA;AACdzB,QAAAA,QAAAA,CAASL,IAAMM,EAAAA,KAAAA,CAAAA;QAEfU,gBAAiB,CAAA,CAAA,CAAA;AACnB,KAAA;AAEA,IAAA,MAAMmB,oBAAoB,CAACC,KAAAA,GAAAA;QACzB,IAAIN,SAAAA;AAEJ,QAAA,IAAIpC,QAAU,EAAA;YACZ,MAAMkC,kBAAAA,GAAqBJ,cAAeO,CAAAA,MAAM,CAAC,CAACM,YAAcA,SAAUC,CAAAA,EAAE,KAAKF,KAAAA,CAAME,EAAE,CAAA;AAEzFR,YAAAA,SAAAA,GAAYF,kBAAmBM,CAAAA,MAAM,GAAG,CAAA,GAAIN,kBAAqB,GAAA,IAAA;SAC5D,MAAA;YACLE,SAAY,GAAA,IAAA;AACd;AAEAzB,QAAAA,QAAAA,CAASL,IAAM8B,EAAAA,SAAAA,CAAAA;QAEfd,gBAAiB,CAAA,CAAA,CAAA;AACnB,KAAA;AAEA,IAAA,MAAMuB,kBAAkB,CAACH,KAAAA,GAAAA;AACvB,QAAA,MAAMR,kBAAqBJ,GAAAA,cAAAA,CAAegB,GAAG,CAAC,CAACH,SAAAA,GAC7CA,SAAUC,CAAAA,EAAE,KAAKF,KAAAA,CAAME,EAAE,GAAGF,KAAQC,GAAAA,SAAAA,CAAAA;AAGtChC,QAAAA,QAAAA,CAASL,IAAMN,EAAAA,QAAAA,GAAWkC,kBAAqBA,GAAAA,kBAAkB,CAAC,CAAE,CAAA,CAAA;AACtE,KAAA;IAEA,MAAMa,mBAAAA,GAAsB,CAC1BC,MACAC,EAAAA,QAAAA,GAAAA;QAEA,MAAMC,aAAAA,GAAgBC,gBAAgBpC,iBAAmBiC,EAAAA,MAAAA,CAAAA;QAEzD,IAAIE,aAAAA,CAAcV,MAAM,GAAG,CAAG,EAAA;YAC5BS,QAASC,CAAAA,aAAAA,CAAAA;SACJ,MAAA;YACLvB,kBAAmB,CAAA;gBACjByB,IAAM,EAAA,QAAA;gBACNC,OAAS,EAAA,IAAA;AACTC,gBAAAA,OAAAA,EAAS7C,aACP,CAAA;AACEmC,oBAAAA,EAAAA,EAAIW,OAAQ,CAAA,kCAAA,CAAA;oBACZC,cAAgB,EAAA,CAAC,mCAAmC;iBAEtD,EAAA;oBACEC,SAAW1C,EAAAA,iBAAAA,CAAkB2C,IAAI,CAAC,GAAA;AACpC,iBAAA;AAEJ,aAAA,CAAA;AACF;AACF,KAAA;AAEA,IAAA,MAAMC,kBAAkB,CAACX,MAAAA,GAAAA;AACvBD,QAAAA,mBAAAA,CAAoBC,QAAQ,CAACE,aAAAA,GAAAA;YAC3B1B,gBAAiB0B,CAAAA,aAAAA,CAAAA;AACjB9B,YAAAA,OAAAA,CAAQ7B,MAAME,WAAW,CAAA;AAC3B,SAAA,CAAA;AACF,KAAA;AAEA,IAAA,IAAIO,QAAY8B,IAAAA,cAAAA,CAAeU,MAAM,GAAG,CAAG,EAAA;AACzCvC,QAAAA,KAAAA,GAAQ,CAAC,EAAEA,KAAM,CAAA,EAAE,EAAEoB,aAAAA,GAAgB,CAAE,CAAA,GAAG,EAAES,cAAAA,CAAeU,MAAM,CAAC,CAAC,CAAC;AACtE;AAEA,IAAA,MAAMoB,UAAa,GAAA,IAAA;QACjBtC,gBAAiB,CAAA,CAACuC,UAAaA,OAAU/B,GAAAA,cAAAA,CAAeU,MAAM,GAAG,CAAA,GAAIqB,UAAU,CAAI,GAAA,CAAA,CAAA;AACrF,KAAA;AAEA,IAAA,MAAMC,cAAiB,GAAA,IAAA;QACrBxC,gBAAiB,CAAA,CAACuC,UAAaA,OAAU,GAAA,CAAA,GAAIA,UAAU,CAAI/B,GAAAA,cAAAA,CAAeU,MAAM,GAAG,CAAA,CAAA;AACrF,KAAA;AAEA,IAAA,MAAMuB,6BAA6B,CAAC/C,aAAAA,GAAAA;AAClCC,QAAAA,gBAAAA,CAAiB,CAAC+C,IAAS,GAAA;AAAIA,gBAAAA,GAAAA,IAAAA;AAAShD,gBAAAA,GAAAA;AAAc,aAAA,CAAA;AACxD,KAAA;AAEA,IAAA,IAAIiD,uBAA0BnC,GAAAA,cAAAA;IAE9B,IAAId,aAAAA,CAAcwB,MAAM,GAAG,CAAG,EAAA;QAC5B,MAAM0B,oBAAAA,GAAuBf,gBAC3BpC,iBACAC,EAAAA,aAAAA,CAAAA;AAGFiD,QAAAA,uBAAAA,GAA0BjE,QACtB,GAAA;AAAIkE,YAAAA,GAAAA,oBAAAA;AAAyBpC,YAAAA,GAAAA;SAAe,GAC5C;AAACoC,YAAAA,oBAAoB,CAAC,CAAE;AAAC,SAAA;AAC/B;IAEA,qBACEC,IAAA,CAAAC,QAAA,EAAA;;0BACEC,GAACC,CAAAA,cAAAA,EAAAA;gBACCC,GAAK/D,EAAAA,YAAAA;gBACLwC,MAAQlB,EAAAA,cAAAA;gBACR3B,QAAUA,EAAAA,QAAAA;gBACVF,KAAOA,EAAAA,KAAAA;gBACPG,WAAaA,EAAAA,WAAAA;gBACboE,aAAe/B,EAAAA,iBAAAA;gBACfgC,6BAA+BtC,EAAAA,iCAAAA;gBAC/BuC,UAAY,EAAA,IAAMtD,OAAQ7B,CAAAA,KAAAA,CAAMC,WAAW,CAAA;gBAC3CmF,WAAahB,EAAAA,eAAAA;gBACbiB,WAAa/B,EAAAA,eAAAA;gBACbgC,MAAQjB,EAAAA,UAAAA;gBACRkB,UAAYhB,EAAAA,cAAAA;gBACZjD,KAAOA,EAAAA,KAAAA;gBACPX,IAAMA,EAAAA,IAAAA;gBACNK,QAAUA,EAAAA,QAAAA;gBACVwE,kBAAoB1D,EAAAA,aAAAA;gBACpB2D,eAAgB,EAAA;;YAGjB7D,IAAS5B,KAAAA,KAAAA,CAAMC,WAAW,kBACzB6E,GAACY,CAAAA,WAAAA,EAAAA;gBACClF,YAAcgB,EAAAA,iBAAAA;gBACdkD,uBAAyBA,EAAAA,uBAAAA;gBACzBxC,QAAUA,EAAAA,QAAAA;gBACVyD,OAAS,EAAA,IAAA;oBACP9D,OAAQf,CAAAA,SAAAA,CAAAA;oBACRqB,WAAY,CAAA,IAAA,CAAA;AACd,iBAAA;gBACAyD,IAAMhE,EAAAA,IAAAA,KAAS5B,MAAMC,WAAW;gBAChC4F,UAAYnD,EAAAA,gBAAAA;gBACZjC,QAAUA,EAAAA,QAAAA;gBACV0E,UAAY,EAAA,IAAMtD,OAAQ7B,CAAAA,KAAAA,CAAME,WAAW,CAAA;gBAC3C4F,WAAa,EAAA,IAAMjE,OAAQ7B,CAAAA,KAAAA,CAAMG,YAAY,CAAA;gBAC7C4F,cAAgB,EAAA,CAACC,SAAW7D,WAAY6D,CAAAA,MAAAA,CAAAA;gBACxCP,eAAgB,EAAA;;YAInB7D,IAAS5B,KAAAA,KAAAA,CAAME,WAAW,kBACzB4E,GAACmB,CAAAA,iBAAAA,EAAAA;gBACCL,IAAMhE,EAAAA,IAAAA,KAAS5B,MAAME,WAAW;gBAChCyF,OAAS,EAAA,IAAM9D,OAAQ7B,CAAAA,KAAAA,CAAMC,WAAW,CAAA;gBACxCiG,kBAAoBlE,EAAAA,aAAAA;gBACpBmE,gBAAkB3B,EAAAA,0BAAAA;gBAClBiB,eAAgB,EAAA,iBAAA;gBAChBvD,QAAUA,EAAAA,QAAAA;gBACVsB,mBAAqBA,EAAAA;;YAIxB5B,IAAS5B,KAAAA,KAAAA,CAAMG,YAAY,kBAC1B2E,GAACsB,CAAAA,gBAAAA,EAAAA;gBACCR,IAAMhE,EAAAA,IAAAA,KAAS5B,MAAMG,YAAY;gBACjCwF,OAAS,EAAA,IAAM9D,OAAQ7B,CAAAA,KAAAA,CAAMC,WAAW,CAAA;gBACxCoG,cAAgBnE,EAAAA;;;;AAK1B,CACA;;;;"}
|
|
1
|
+
{"version":3,"file":"MediaLibraryInput.mjs","sources":["../../../../admin/src/components/MediaLibraryInput/MediaLibraryInput.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { useField, useNotification } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad, getAllowedFiles, AllowedFiles } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { UploadAssetDialog, Asset } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../shared/contracts/files';\ntype AllowedTypes = 'files' | 'images' | 'videos' | 'audios';\n\nconst STEPS = {\n AssetSelect: 'SelectAsset',\n AssetUpload: 'UploadAsset',\n FolderCreate: 'FolderCreate',\n};\n\nexport interface MediaLibraryInputProps {\n required?: boolean;\n name: string;\n labelAction?: React.ReactNode;\n label?: string;\n hint?: string;\n disabled?: boolean;\n attribute?: {\n allowedTypes?: AllowedTypes[];\n multiple?: boolean;\n };\n}\n\nexport const MediaLibraryInput = React.forwardRef<CarouselAssetsProps, MediaLibraryInputProps>(\n (\n {\n attribute: { allowedTypes = null, multiple = false } = {},\n label,\n hint,\n disabled = false,\n labelAction = undefined,\n name,\n required = false,\n },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const { onChange, value, error } = useField(name);\n const [uploadedFiles, setUploadedFiles] = React.useState<Asset[] | File[]>([]);\n const [step, setStep] = React.useState<string | undefined>(undefined);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const [droppedAssets, setDroppedAssets] = React.useState<AllowedFiles[]>();\n const [folderId, setFolderId] = React.useState<number | null>(null);\n const { toggleNotification } = useNotification();\n\n React.useEffect(() => {\n // Clear the uploaded files on close\n if (step === undefined) {\n setUploadedFiles([]);\n }\n }, [step]);\n\n let selectedAssets: File[] = [];\n\n if (Array.isArray(value)) {\n selectedAssets = value;\n } else if (value) {\n selectedAssets = [value];\n }\n\n const handleValidation = (nextSelectedAssets: File[]) => {\n const value = multiple ? nextSelectedAssets : nextSelectedAssets[0];\n onChange(name, value);\n setStep(undefined);\n };\n\n const handleDeleteAssetFromMediaLibrary = () => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter(\n (_, assetIndex) => assetIndex !== selectedIndex\n );\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n const value = nextValue;\n onChange(name, value);\n\n setSelectedIndex(0);\n };\n\n const handleDeleteAsset = (asset: File) => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter((prevAsset) => prevAsset.id !== asset.id);\n\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n onChange(name, nextValue);\n\n setSelectedIndex(0);\n };\n\n const handleAssetEdit = (asset: File) => {\n const nextSelectedAssets = selectedAssets.map((prevAsset) =>\n prevAsset.id === asset.id ? asset : prevAsset\n );\n\n onChange(name, multiple ? nextSelectedAssets : nextSelectedAssets[0]);\n };\n\n const validateAssetsTypes = (\n assets: FileWithoutIdHash[] | Asset[],\n callback: (assets?: AllowedFiles[], error?: string) => void\n ) => {\n const allowedAssets = getAllowedFiles(allowedTypes, assets as AllowedFiles[]);\n\n if (allowedAssets.length > 0) {\n callback(allowedAssets);\n } else {\n toggleNotification({\n type: 'danger',\n timeout: 4000,\n message: formatMessage(\n {\n id: getTrad('input.notification.not-supported'),\n defaultMessage: `You can't upload this type of file.`,\n },\n {\n fileTypes: (allowedTypes ?? []).join(','),\n }\n ),\n });\n }\n };\n\n const handleAssetDrop = (assets: FileWithoutIdHash[]) => {\n validateAssetsTypes(assets, (allowedAssets?: AllowedFiles[]) => {\n setDroppedAssets(allowedAssets);\n setStep(STEPS.AssetUpload);\n });\n };\n\n if (multiple && selectedAssets.length > 0) {\n label = `${label} (${selectedIndex + 1} / ${selectedAssets.length})`;\n }\n\n const handleNext = () => {\n setSelectedIndex((current) => (current < selectedAssets.length - 1 ? current + 1 : 0));\n };\n\n const handlePrevious = () => {\n setSelectedIndex((current) => (current > 0 ? current - 1 : selectedAssets.length - 1));\n };\n\n const handleFilesUploadSucceeded = (uploadedFiles: Asset[] | File[]) => {\n setUploadedFiles((prev) => [...prev, ...uploadedFiles]);\n };\n\n let initiallySelectedAssets = selectedAssets;\n\n if (uploadedFiles.length > 0) {\n const allowedUploadedFiles = getAllowedFiles(allowedTypes, uploadedFiles as AllowedFiles[]);\n\n initiallySelectedAssets = multiple\n ? [...allowedUploadedFiles, ...selectedAssets]\n : [allowedUploadedFiles[0]];\n }\n\n return (\n <>\n <CarouselAssets\n ref={forwardedRef}\n assets={selectedAssets}\n disabled={disabled}\n label={label!}\n labelAction={labelAction}\n onDeleteAsset={handleDeleteAsset}\n onDeleteAssetFromMediaLibrary={handleDeleteAssetFromMediaLibrary}\n onAddAsset={() => setStep(STEPS.AssetSelect)}\n onDropAsset={handleAssetDrop}\n onEditAsset={handleAssetEdit}\n onNext={handleNext}\n onPrevious={handlePrevious}\n error={error}\n hint={hint}\n required={required}\n selectedAssetIndex={selectedIndex}\n trackedLocation=\"content-manager\"\n />\n\n {step === STEPS.AssetSelect && (\n <AssetDialog\n allowedTypes={allowedTypes as AllowedTypes[]}\n initiallySelectedAssets={initiallySelectedAssets}\n folderId={folderId}\n onClose={() => {\n setStep(undefined);\n setFolderId(null);\n }}\n open={step === STEPS.AssetSelect}\n onValidate={handleValidation}\n multiple={multiple}\n onAddAsset={() => setStep(STEPS.AssetUpload)}\n onAddFolder={() => setStep(STEPS.FolderCreate)}\n onChangeFolder={(folder) => setFolderId(folder)}\n trackedLocation=\"content-manager\"\n />\n )}\n\n {step === STEPS.AssetUpload && (\n <UploadAssetDialog\n open={step === STEPS.AssetUpload}\n onClose={() => setStep(STEPS.AssetSelect)}\n initialAssetsToAdd={droppedAssets as Asset[]}\n addUploadedFiles={handleFilesUploadSucceeded}\n trackedLocation=\"content-manager\"\n folderId={folderId}\n validateAssetsTypes={validateAssetsTypes}\n />\n )}\n\n {step === STEPS.FolderCreate && (\n <EditFolderDialog\n open={step === STEPS.FolderCreate}\n onClose={() => setStep(STEPS.AssetSelect)}\n parentFolderId={folderId}\n />\n )}\n </>\n );\n }\n);\n"],"names":["STEPS","AssetSelect","AssetUpload","FolderCreate","MediaLibraryInput","React","forwardRef","attribute","allowedTypes","multiple","label","hint","disabled","labelAction","undefined","name","required","forwardedRef","formatMessage","useIntl","onChange","value","error","useField","uploadedFiles","setUploadedFiles","useState","step","setStep","selectedIndex","setSelectedIndex","droppedAssets","setDroppedAssets","folderId","setFolderId","toggleNotification","useNotification","useEffect","selectedAssets","Array","isArray","handleValidation","nextSelectedAssets","handleDeleteAssetFromMediaLibrary","nextValue","filter","_","assetIndex","length","handleDeleteAsset","asset","prevAsset","id","handleAssetEdit","map","validateAssetsTypes","assets","callback","allowedAssets","getAllowedFiles","type","timeout","message","getTrad","defaultMessage","fileTypes","join","handleAssetDrop","handleNext","current","handlePrevious","handleFilesUploadSucceeded","prev","initiallySelectedAssets","allowedUploadedFiles","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","selectedAssetIndex","trackedLocation","AssetDialog","onClose","open","onValidate","onAddFolder","onChangeFolder","folder","UploadAssetDialog","initialAssetsToAdd","addUploadedFiles","EditFolderDialog","parentFolderId"],"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.14.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 = {
|
|
@@ -66,8 +66,8 @@ var dependencies = {
|
|
|
66
66
|
"@mux/mux-player-react": "3.1.0",
|
|
67
67
|
"@strapi/design-system": "2.0.0-rc.24",
|
|
68
68
|
"@strapi/icons": "2.0.0-rc.24",
|
|
69
|
-
"@strapi/provider-upload-local": "5.
|
|
70
|
-
"@strapi/utils": "5.
|
|
69
|
+
"@strapi/provider-upload-local": "5.14.0",
|
|
70
|
+
"@strapi/utils": "5.14.0",
|
|
71
71
|
"byte-size": "8.1.1",
|
|
72
72
|
cropperjs: "1.6.1",
|
|
73
73
|
"date-fns": "2.30.0",
|
|
@@ -89,8 +89,8 @@ var dependencies = {
|
|
|
89
89
|
yup: "0.32.9"
|
|
90
90
|
};
|
|
91
91
|
var devDependencies = {
|
|
92
|
-
"@strapi/admin": "5.
|
|
93
|
-
"@strapi/types": "5.
|
|
92
|
+
"@strapi/admin": "5.14.0",
|
|
93
|
+
"@strapi/types": "5.14.0",
|
|
94
94
|
"@testing-library/dom": "10.1.0",
|
|
95
95
|
"@testing-library/react": "15.0.7",
|
|
96
96
|
"@testing-library/user-event": "14.5.2",
|
|
@@ -100,7 +100,7 @@ var devDependencies = {
|
|
|
100
100
|
"@types/koa-range": "0.3.5",
|
|
101
101
|
"@types/koa-static": "4.0.2",
|
|
102
102
|
formidable: "3.5.1",
|
|
103
|
-
koa: "2.
|
|
103
|
+
koa: "2.16.1",
|
|
104
104
|
"koa-body": "6.0.1",
|
|
105
105
|
msw: "1.3.0",
|
|
106
106
|
react: "18.3.1",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "@strapi/upload";
|
|
2
|
-
var version = "5.
|
|
2
|
+
var version = "5.14.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 = {
|
|
@@ -62,8 +62,8 @@ var dependencies = {
|
|
|
62
62
|
"@mux/mux-player-react": "3.1.0",
|
|
63
63
|
"@strapi/design-system": "2.0.0-rc.24",
|
|
64
64
|
"@strapi/icons": "2.0.0-rc.24",
|
|
65
|
-
"@strapi/provider-upload-local": "5.
|
|
66
|
-
"@strapi/utils": "5.
|
|
65
|
+
"@strapi/provider-upload-local": "5.14.0",
|
|
66
|
+
"@strapi/utils": "5.14.0",
|
|
67
67
|
"byte-size": "8.1.1",
|
|
68
68
|
cropperjs: "1.6.1",
|
|
69
69
|
"date-fns": "2.30.0",
|
|
@@ -85,8 +85,8 @@ var dependencies = {
|
|
|
85
85
|
yup: "0.32.9"
|
|
86
86
|
};
|
|
87
87
|
var devDependencies = {
|
|
88
|
-
"@strapi/admin": "5.
|
|
89
|
-
"@strapi/types": "5.
|
|
88
|
+
"@strapi/admin": "5.14.0",
|
|
89
|
+
"@strapi/types": "5.14.0",
|
|
90
90
|
"@testing-library/dom": "10.1.0",
|
|
91
91
|
"@testing-library/react": "15.0.7",
|
|
92
92
|
"@testing-library/user-event": "14.5.2",
|
|
@@ -96,7 +96,7 @@ var devDependencies = {
|
|
|
96
96
|
"@types/koa-range": "0.3.5",
|
|
97
97
|
"@types/koa-static": "4.0.2",
|
|
98
98
|
formidable: "3.5.1",
|
|
99
|
-
koa: "2.
|
|
99
|
+
koa: "2.16.1",
|
|
100
100
|
"koa-body": "6.0.1",
|
|
101
101
|
msw: "1.3.0",
|
|
102
102
|
react: "18.3.1",
|
|
@@ -11,4 +11,4 @@ export interface AllowedFiles extends File {
|
|
|
11
11
|
locale: string | null;
|
|
12
12
|
type: string;
|
|
13
13
|
}
|
|
14
|
-
export declare const getAllowedFiles: (pluralTypes: string[], files: AllowedFiles[]) => AllowedFiles[];
|
|
14
|
+
export declare const getAllowedFiles: (pluralTypes: string[] | null, files: AllowedFiles[]) => AllowedFiles[];
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
var toSingularTypes = require('./toSingularTypes.js');
|
|
4
4
|
|
|
5
5
|
const getAllowedFiles = (pluralTypes, files)=>{
|
|
6
|
+
if (!pluralTypes) {
|
|
7
|
+
return files;
|
|
8
|
+
}
|
|
6
9
|
const singularTypes = toSingularTypes.toSingularTypes(pluralTypes);
|
|
7
10
|
const allowedFiles = files.filter((file)=>{
|
|
8
11
|
const fileType = file?.mime?.split('/')[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAllowedFiles.js","sources":["../../../admin/src/utils/getAllowedFiles.ts"],"sourcesContent":["import { toSingularTypes } from './toSingularTypes';\n\nimport type { File } from '../../../shared/contracts/files';\n/**\n * Returns the files that can be added to the media field\n * @param {Object[]} pluralTypes Array of string (allowedTypes)\n * @param {Object[]} files Array of files\n * @returns Object[]\n */\n\nexport interface AllowedFiles extends File {\n documentId: string;\n isSelectable: boolean;\n locale: string | null;\n type: string;\n}\n\nexport const getAllowedFiles = (pluralTypes: string[], files: AllowedFiles[]) => {\n const singularTypes = toSingularTypes(pluralTypes);\n\n const allowedFiles = files.filter((file) => {\n const fileType = file?.mime?.split('/')[0];\n\n if (!fileType) {\n return false;\n }\n\n if (singularTypes.includes('file') && !['video', 'image', 'audio'].includes(fileType)) {\n return true;\n }\n\n return singularTypes.includes(fileType);\n });\n\n return allowedFiles;\n};\n"],"names":["getAllowedFiles","pluralTypes","files","singularTypes","toSingularTypes","allowedFiles","filter","file","fileType","mime","split","includes"],"mappings":";;;;AAiBO,MAAMA,eAAkB,GAAA,CAACC,
|
|
1
|
+
{"version":3,"file":"getAllowedFiles.js","sources":["../../../admin/src/utils/getAllowedFiles.ts"],"sourcesContent":["import { toSingularTypes } from './toSingularTypes';\n\nimport type { File } from '../../../shared/contracts/files';\n/**\n * Returns the files that can be added to the media field\n * @param {Object[]} pluralTypes Array of string (allowedTypes)\n * @param {Object[]} files Array of files\n * @returns Object[]\n */\n\nexport interface AllowedFiles extends File {\n documentId: string;\n isSelectable: boolean;\n locale: string | null;\n type: string;\n}\n\nexport const getAllowedFiles = (pluralTypes: string[] | null, files: AllowedFiles[]) => {\n if (!pluralTypes) {\n return files;\n }\n\n const singularTypes = toSingularTypes(pluralTypes);\n\n const allowedFiles = files.filter((file) => {\n const fileType = file?.mime?.split('/')[0];\n\n if (!fileType) {\n return false;\n }\n\n if (singularTypes.includes('file') && !['video', 'image', 'audio'].includes(fileType)) {\n return true;\n }\n\n return singularTypes.includes(fileType);\n });\n\n return allowedFiles;\n};\n"],"names":["getAllowedFiles","pluralTypes","files","singularTypes","toSingularTypes","allowedFiles","filter","file","fileType","mime","split","includes"],"mappings":";;;;AAiBO,MAAMA,eAAkB,GAAA,CAACC,WAA8BC,EAAAA,KAAAA,GAAAA;AAC5D,IAAA,IAAI,CAACD,WAAa,EAAA;QAChB,OAAOC,KAAAA;AACT;AAEA,IAAA,MAAMC,gBAAgBC,+BAAgBH,CAAAA,WAAAA,CAAAA;AAEtC,IAAA,MAAMI,YAAeH,GAAAA,KAAAA,CAAMI,MAAM,CAAC,CAACC,IAAAA,GAAAA;AACjC,QAAA,MAAMC,WAAWD,IAAME,EAAAA,IAAAA,EAAMC,KAAM,CAAA,GAAA,CAAI,CAAC,CAAE,CAAA;AAE1C,QAAA,IAAI,CAACF,QAAU,EAAA;YACb,OAAO,KAAA;AACT;AAEA,QAAA,IAAIL,aAAcQ,CAAAA,QAAQ,CAAC,MAAA,CAAA,IAAW,CAAC;AAAC,YAAA,OAAA;AAAS,YAAA,OAAA;AAAS,YAAA;SAAQ,CAACA,QAAQ,CAACH,QAAW,CAAA,EAAA;YACrF,OAAO,IAAA;AACT;QAEA,OAAOL,aAAAA,CAAcQ,QAAQ,CAACH,QAAAA,CAAAA;AAChC,KAAA,CAAA;IAEA,OAAOH,YAAAA;AACT;;;;"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { toSingularTypes } from './toSingularTypes.mjs';
|
|
2
2
|
|
|
3
3
|
const getAllowedFiles = (pluralTypes, files)=>{
|
|
4
|
+
if (!pluralTypes) {
|
|
5
|
+
return files;
|
|
6
|
+
}
|
|
4
7
|
const singularTypes = toSingularTypes(pluralTypes);
|
|
5
8
|
const allowedFiles = files.filter((file)=>{
|
|
6
9
|
const fileType = file?.mime?.split('/')[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAllowedFiles.mjs","sources":["../../../admin/src/utils/getAllowedFiles.ts"],"sourcesContent":["import { toSingularTypes } from './toSingularTypes';\n\nimport type { File } from '../../../shared/contracts/files';\n/**\n * Returns the files that can be added to the media field\n * @param {Object[]} pluralTypes Array of string (allowedTypes)\n * @param {Object[]} files Array of files\n * @returns Object[]\n */\n\nexport interface AllowedFiles extends File {\n documentId: string;\n isSelectable: boolean;\n locale: string | null;\n type: string;\n}\n\nexport const getAllowedFiles = (pluralTypes: string[], files: AllowedFiles[]) => {\n const singularTypes = toSingularTypes(pluralTypes);\n\n const allowedFiles = files.filter((file) => {\n const fileType = file?.mime?.split('/')[0];\n\n if (!fileType) {\n return false;\n }\n\n if (singularTypes.includes('file') && !['video', 'image', 'audio'].includes(fileType)) {\n return true;\n }\n\n return singularTypes.includes(fileType);\n });\n\n return allowedFiles;\n};\n"],"names":["getAllowedFiles","pluralTypes","files","singularTypes","toSingularTypes","allowedFiles","filter","file","fileType","mime","split","includes"],"mappings":";;AAiBO,MAAMA,eAAkB,GAAA,CAACC,
|
|
1
|
+
{"version":3,"file":"getAllowedFiles.mjs","sources":["../../../admin/src/utils/getAllowedFiles.ts"],"sourcesContent":["import { toSingularTypes } from './toSingularTypes';\n\nimport type { File } from '../../../shared/contracts/files';\n/**\n * Returns the files that can be added to the media field\n * @param {Object[]} pluralTypes Array of string (allowedTypes)\n * @param {Object[]} files Array of files\n * @returns Object[]\n */\n\nexport interface AllowedFiles extends File {\n documentId: string;\n isSelectable: boolean;\n locale: string | null;\n type: string;\n}\n\nexport const getAllowedFiles = (pluralTypes: string[] | null, files: AllowedFiles[]) => {\n if (!pluralTypes) {\n return files;\n }\n\n const singularTypes = toSingularTypes(pluralTypes);\n\n const allowedFiles = files.filter((file) => {\n const fileType = file?.mime?.split('/')[0];\n\n if (!fileType) {\n return false;\n }\n\n if (singularTypes.includes('file') && !['video', 'image', 'audio'].includes(fileType)) {\n return true;\n }\n\n return singularTypes.includes(fileType);\n });\n\n return allowedFiles;\n};\n"],"names":["getAllowedFiles","pluralTypes","files","singularTypes","toSingularTypes","allowedFiles","filter","file","fileType","mime","split","includes"],"mappings":";;AAiBO,MAAMA,eAAkB,GAAA,CAACC,WAA8BC,EAAAA,KAAAA,GAAAA;AAC5D,IAAA,IAAI,CAACD,WAAa,EAAA;QAChB,OAAOC,KAAAA;AACT;AAEA,IAAA,MAAMC,gBAAgBC,eAAgBH,CAAAA,WAAAA,CAAAA;AAEtC,IAAA,MAAMI,YAAeH,GAAAA,KAAAA,CAAMI,MAAM,CAAC,CAACC,IAAAA,GAAAA;AACjC,QAAA,MAAMC,WAAWD,IAAME,EAAAA,IAAAA,EAAMC,KAAM,CAAA,GAAA,CAAI,CAAC,CAAE,CAAA;AAE1C,QAAA,IAAI,CAACF,QAAU,EAAA;YACb,OAAO,KAAA;AACT;AAEA,QAAA,IAAIL,aAAcQ,CAAAA,QAAQ,CAAC,MAAA,CAAA,IAAW,CAAC;AAAC,YAAA,OAAA;AAAS,YAAA,OAAA;AAAS,YAAA;SAAQ,CAACA,QAAQ,CAACH,QAAW,CAAA,EAAA;YACrF,OAAO,IAAA;AACT;QAEA,OAAOL,aAAAA,CAAcQ,QAAQ,CAACH,QAAAA,CAAAA;AAChC,KAAA,CAAA;IAEA,OAAOH,YAAAA;AACT;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/upload",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.15.0",
|
|
4
4
|
"description": "Makes it easy to upload images and files to your Strapi Application.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": {
|
|
@@ -63,8 +63,8 @@
|
|
|
63
63
|
"@mux/mux-player-react": "3.1.0",
|
|
64
64
|
"@strapi/design-system": "2.0.0-rc.24",
|
|
65
65
|
"@strapi/icons": "2.0.0-rc.24",
|
|
66
|
-
"@strapi/provider-upload-local": "5.
|
|
67
|
-
"@strapi/utils": "5.
|
|
66
|
+
"@strapi/provider-upload-local": "5.15.0",
|
|
67
|
+
"@strapi/utils": "5.15.0",
|
|
68
68
|
"byte-size": "8.1.1",
|
|
69
69
|
"cropperjs": "1.6.1",
|
|
70
70
|
"date-fns": "2.30.0",
|
|
@@ -86,8 +86,8 @@
|
|
|
86
86
|
"yup": "0.32.9"
|
|
87
87
|
},
|
|
88
88
|
"devDependencies": {
|
|
89
|
-
"@strapi/admin": "5.
|
|
90
|
-
"@strapi/types": "5.
|
|
89
|
+
"@strapi/admin": "5.15.0",
|
|
90
|
+
"@strapi/types": "5.15.0",
|
|
91
91
|
"@testing-library/dom": "10.1.0",
|
|
92
92
|
"@testing-library/react": "15.0.7",
|
|
93
93
|
"@testing-library/user-event": "14.5.2",
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"@types/koa-range": "0.3.5",
|
|
98
98
|
"@types/koa-static": "4.0.2",
|
|
99
99
|
"formidable": "3.5.1",
|
|
100
|
-
"koa": "2.
|
|
100
|
+
"koa": "2.16.1",
|
|
101
101
|
"koa-body": "6.0.1",
|
|
102
102
|
"msw": "1.3.0",
|
|
103
103
|
"react": "18.3.1",
|