{"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 { AllowedFiles, getAllowedFiles, getTrad } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { Asset, UploadAssetDialog } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../shared/contracts/files';\n\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(\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([]);\n const [step, setStep] = React.useState(undefined);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const [droppedAssets, setDroppedAssets] = React.useState();\n const [folderId, setFolderId] = React.useState(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 !== null && value !== undefined) {\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 const handleDoubleClickAsset = (asset: File) => {\n if (disabled) return;\n handleAssetEdit(asset);\n };\n\n return (\n <>\n setStep(STEPS.AssetSelect)}\n onDropAsset={handleAssetDrop}\n onEditAsset={handleAssetEdit}\n onNext={handleNext}\n onPrevious={handlePrevious}\n onDoubleClickAsset={handleDoubleClickAsset}\n error={error}\n hint={hint}\n required={required}\n selectedAssetIndex={selectedIndex}\n trackedLocation=\"content-manager\"\n />\n\n {step === STEPS.AssetSelect && (\n {\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 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 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","handleDoubleClickAsset","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","onDoubleClickAsset","selectedAssetIndex","trackedLocation","AssetDialog","onClose","open","onValidate","onAddFolder","onChangeFolder","folder","UploadAssetDialog","initialAssetsToAdd","addUploadedFiles","EditFolderDialog","parentFolderId"],"mappings":"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"}