{"version":3,"file":"UploadAssetDialog.mjs","sources":["../../../../admin/src/components/UploadAssetDialog/UploadAssetDialog.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Modal } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { EditAssetContent } from '../EditAssetDialog/EditAssetContent';\n\nimport { AddAssetStep } from './AddAssetStep/AddAssetStep';\nimport { PendingAssetStep } from './PendingAssetStep/PendingAssetStep';\n\nimport type { File, RawFile } from '../../../../shared/contracts/files';\nimport type { AllowedFiles } from '../../utils';\n\nconst Steps = {\n  AddAsset: 'AddAsset',\n  PendingAsset: 'PendingAsset',\n};\n\ninterface FileWithRawFile extends Omit<File, 'id' | 'hash'> {\n  id?: string;\n  hash?: string;\n  rawFile: RawFile;\n}\n\ntype FileWithoutIdHash = Omit<File, 'id' | 'hash'>;\n\nexport interface Asset extends Omit<File, 'folder'> {\n  isLocal?: boolean;\n  rawFile?: RawFile;\n  folder?: File['folder'] & { id: number };\n}\n\nexport interface UploadAssetDialogProps {\n  addUploadedFiles?: (files: Asset[] | File[]) => void;\n  folderId?: string | number | null;\n  initialAssetsToAdd?: Asset[];\n  onClose: () => void;\n  open: boolean;\n  trackedLocation?: string;\n  validateAssetsTypes?: (\n    assets: FileWithoutIdHash[] | Asset[],\n    cb: (assets?: AllowedFiles[], error?: string) => void\n  ) => void;\n}\n\nexport const UploadAssetDialog = ({\n  initialAssetsToAdd,\n  folderId = null,\n  onClose = () => {},\n  addUploadedFiles,\n  trackedLocation,\n  open,\n  validateAssetsTypes = (_, cb) => cb(),\n}: UploadAssetDialogProps) => {\n  const { formatMessage } = useIntl();\n  const [step, setStep] = React.useState(initialAssetsToAdd ? Steps.PendingAsset : Steps.AddAsset);\n  const [assets, setAssets] = React.useState(initialAssetsToAdd || []);\n  const [assetToEdit, setAssetToEdit] = React.useState<File | Asset | undefined>(undefined);\n\n  const handleAddToPendingAssets = (nextAssets: Asset[]) => {\n    validateAssetsTypes(nextAssets, () => {\n      setAssets((prevAssets) => prevAssets.concat(nextAssets));\n      setStep(Steps.PendingAsset);\n    });\n  };\n\n  const moveToAddAsset = () => {\n    setStep(Steps.AddAsset);\n  };\n\n  const handleCancelUpload = (file: RawFile) => {\n    const nextAssets = assets.filter((asset) => asset.rawFile !== file);\n    setAssets(nextAssets);\n\n    // When there's no asset, transition to the AddAsset step\n    if (nextAssets.length === 0) {\n      moveToAddAsset();\n    }\n  };\n\n  const handleUploadSuccess = (file: RawFile) => {\n    const nextAssets = assets.filter((asset) => asset.rawFile !== file);\n    setAssets(nextAssets);\n\n    if (nextAssets.length === 0) {\n      onClose();\n    }\n  };\n\n  const handleAssetEditValidation = (nextAsset?: Asset | boolean | null) => {\n    if (nextAsset && typeof nextAsset !== 'boolean') {\n      const nextAssets = assets.map((asset) => (asset === assetToEdit ? nextAsset : asset));\n      setAssets(nextAssets);\n    }\n\n    setAssetToEdit(undefined);\n  };\n\n  const handleClose = () => {\n    if (step === Steps.PendingAsset && assets.length > 0) {\n      // eslint-disable-next-line no-alert\n      const confirm = window.confirm(\n        formatMessage({\n          id: 'window.confirm.close-modal.files',\n          defaultMessage: 'Are you sure? You have some files that have not been uploaded yet.',\n        })\n      );\n\n      if (confirm) {\n        onClose();\n      }\n    } else {\n      onClose();\n    }\n  };\n\n  const handleRemoveAsset = (assetToRemove: File) => {\n    const nextAssets = assets.filter((asset) => asset !== assetToRemove);\n    setAssets(nextAssets);\n  };\n\n  return (\n    <Modal.Root open={open} onOpenChange={handleClose}>\n      {step === Steps.AddAsset && (\n        <Modal.Content>\n          <AddAssetStep\n            onClose={onClose}\n            onAddAsset={(assets: FileWithRawFile[]) =>\n              handleAddToPendingAssets(assets as unknown as Asset[])\n            }\n            trackedLocation={trackedLocation}\n          />\n        </Modal.Content>\n      )}\n\n      {step === Steps.PendingAsset && (\n        <Modal.Content>\n          <PendingAssetStep\n            onClose={handleClose}\n            assets={assets}\n            onEditAsset={setAssetToEdit}\n            onRemoveAsset={handleRemoveAsset}\n            onClickAddAsset={moveToAddAsset}\n            onCancelUpload={handleCancelUpload}\n            onUploadSucceed={handleUploadSuccess}\n            initialAssetsToAdd={initialAssetsToAdd}\n            addUploadedFiles={addUploadedFiles}\n            folderId={folderId}\n            trackedLocation={trackedLocation}\n          />\n        </Modal.Content>\n      )}\n\n      {assetToEdit && (\n        <Modal.Content>\n          <EditAssetContent\n            onClose={handleAssetEditValidation}\n            asset={assetToEdit as Asset}\n            canUpdate\n            canCopyLink={false}\n            canDownload={false}\n            trackedLocation={trackedLocation}\n          />\n        </Modal.Content>\n      )}\n    </Modal.Root>\n  );\n};\n"],"names":["Steps","AddAsset","PendingAsset","UploadAssetDialog","initialAssetsToAdd","folderId","onClose","addUploadedFiles","trackedLocation","open","validateAssetsTypes","_","cb","formatMessage","useIntl","step","setStep","React","useState","assets","setAssets","assetToEdit","setAssetToEdit","undefined","handleAddToPendingAssets","nextAssets","prevAssets","concat","moveToAddAsset","handleCancelUpload","file","filter","asset","rawFile","length","handleUploadSuccess","handleAssetEditValidation","nextAsset","map","handleClose","confirm","window","id","defaultMessage","handleRemoveAsset","assetToRemove","_jsxs","Modal","Root","onOpenChange","_jsx","Content","AddAssetStep","onAddAsset","PendingAssetStep","onEditAsset","onRemoveAsset","onClickAddAsset","onCancelUpload","onUploadSucceed","EditAssetContent","canUpdate","canCopyLink","canDownload"],"mappings":"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"}