{"version":3,"file":"PendingAssetStep.mjs","sources":["../../../../../admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport { Button, Flex, Grid, KeyboardNavigable, Modal, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { AssetType } from '../../../constants';\nimport { getTrad } from '../../../utils';\nimport { AssetCard } from '../../AssetCard/AssetCard';\nimport { UploadingAssetCard } from '../../AssetCard/UploadingAssetCard';\n\nimport type { File, RawFile } from '../../../../../shared/contracts/files';\n\nconst Status = {\n  Idle: 'IDLE',\n  Uploading: 'UPLOADING',\n  Intermediate: 'INTERMEDIATE',\n};\n\ninterface Asset extends File {\n  rawFile?: RawFile;\n  type?: AssetType;\n}\n\ninterface PendingAssetStepProps {\n  addUploadedFiles?: (files: File[]) => void;\n  folderId?: string | number | null;\n  onClose: () => void;\n  onEditAsset: (asset: File) => void;\n  onRemoveAsset: (asset: File) => void;\n  onAddAsset?: (asset: File) => void;\n  assets: Asset[];\n  onClickAddAsset: () => void;\n  onCancelUpload: (rawFile: RawFile) => void;\n  onUploadSucceed: (file: RawFile) => void;\n  trackedLocation?: string;\n  initialAssetsToAdd?: File[];\n}\n\nexport const PendingAssetStep = ({\n  addUploadedFiles,\n  folderId,\n  onClose,\n  onEditAsset,\n  onRemoveAsset,\n  assets,\n  onClickAddAsset,\n  onCancelUpload,\n  onUploadSucceed,\n  trackedLocation,\n}: PendingAssetStepProps) => {\n  const assetCountRef = React.useRef(0);\n  const { formatMessage } = useIntl();\n  const { trackUsage } = useTracking();\n  const [uploadStatus, setUploadStatus] = React.useState(Status.Idle);\n\n  const handleSubmit = async (e: React.MouseEvent<HTMLButtonElement>) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    const assetsCountByType = assets.reduce(\n      (acc: Record<AssetType, string | number>, asset) => {\n        const { type } = asset;\n\n        if (type !== undefined && !acc[type]) {\n          acc[type] = 0;\n        }\n\n        if (type !== undefined) {\n          const accType = acc[type];\n          const currentCount = typeof accType === 'string' ? accType : accType.toString();\n          acc[type] = `${parseInt(currentCount, 10) + 1}`;\n        }\n\n        return acc;\n      },\n      {} as Record<AssetType, string | number>\n    );\n\n    trackUsage('willAddMediaLibraryAssets', {\n      location: trackedLocation!,\n      ...assetsCountByType,\n    });\n\n    setUploadStatus(Status.Uploading);\n  };\n\n  const handleStatusChange = (status: string, file: RawFile) => {\n    if (status === 'success' || status === 'error') {\n      assetCountRef.current++;\n\n      // There's no \"terminated\" status. When all the files have called their\n      // onUploadSucceed callback, the parent component filters the asset list\n      // and closes the modal when the asset list is empty\n      if (assetCountRef.current === assets.length) {\n        assetCountRef.current = 0;\n        setUploadStatus(Status.Intermediate);\n      }\n    }\n\n    if (status === 'success') {\n      onUploadSucceed(file);\n    }\n  };\n\n  return (\n    <>\n      <Modal.Header>\n        <Modal.Title>\n          {formatMessage({\n            id: getTrad('header.actions.add-assets'),\n            defaultMessage: 'Add new assets',\n          })}\n        </Modal.Title>\n      </Modal.Header>\n\n      <Modal.Body>\n        <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n          <Flex justifyContent=\"space-between\">\n            <Flex direction=\"column\" alignItems=\"stretch\" gap={0}>\n              <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\n                {formatMessage(\n                  {\n                    id: getTrad('list.assets.to-upload'),\n                    defaultMessage:\n                      '{number, plural, =0 {No asset} one {1 asset} other {# assets}} ready to upload',\n                  },\n                  { number: assets.length }\n                )}\n              </Typography>\n              <Typography variant=\"pi\" textColor=\"neutral600\">\n                {formatMessage({\n                  id: getTrad('modal.upload-list.sub-header-subtitle'),\n                  defaultMessage: 'Manage the assets before adding them to the Media Library',\n                })}\n              </Typography>\n            </Flex>\n            <Button size=\"S\" onClick={onClickAddAsset}>\n              {formatMessage({\n                id: getTrad('header.actions.add-assets'),\n                defaultMessage: 'Add new assets',\n              })}\n            </Button>\n          </Flex>\n          <KeyboardNavigable tagName=\"article\">\n            <Grid.Root gap={4}>\n              {assets.map((asset) => {\n                const assetKey = asset.url;\n\n                if (uploadStatus === Status.Uploading || uploadStatus === Status.Intermediate) {\n                  return (\n                    <Grid.Item col={4} key={assetKey} direction=\"column\" alignItems=\"stretch\">\n                      <UploadingAssetCard\n                        // Props used to store the newly uploaded files\n                        addUploadedFiles={addUploadedFiles!}\n                        asset={asset}\n                        id={assetKey}\n                        onCancel={onCancelUpload}\n                        onStatusChange={(status) => handleStatusChange(status, asset.rawFile!)}\n                        size=\"S\"\n                        folderId={folderId}\n                      />\n                    </Grid.Item>\n                  );\n                }\n\n                return (\n                  <Grid.Item col={4} key={assetKey} direction=\"column\" alignItems=\"stretch\">\n                    <AssetCard\n                      asset={asset}\n                      size=\"S\"\n                      key={assetKey}\n                      local\n                      alt={asset.name}\n                      onEdit={onEditAsset}\n                      onRemove={onRemoveAsset}\n                    />\n                  </Grid.Item>\n                );\n              })}\n            </Grid.Root>\n          </KeyboardNavigable>\n        </Flex>\n      </Modal.Body>\n      <Modal.Footer>\n        <Button onClick={onClose} variant=\"tertiary\">\n          {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'cancel' })}\n        </Button>\n        <Button onClick={handleSubmit} loading={uploadStatus === Status.Uploading}>\n          {formatMessage(\n            {\n              id: getTrad('modal.upload-list.footer.button'),\n              defaultMessage:\n                'Upload {number, plural, one {# asset} other {# assets}} to the library',\n            },\n            { number: assets.length }\n          )}\n        </Button>\n      </Modal.Footer>\n    </>\n  );\n};\n"],"names":["Status","Idle","Uploading","Intermediate","PendingAssetStep","addUploadedFiles","folderId","onClose","onEditAsset","onRemoveAsset","assets","onClickAddAsset","onCancelUpload","onUploadSucceed","trackedLocation","assetCountRef","React","useRef","formatMessage","useIntl","trackUsage","useTracking","uploadStatus","setUploadStatus","useState","handleSubmit","e","preventDefault","stopPropagation","assetsCountByType","reduce","acc","asset","type","undefined","accType","currentCount","toString","parseInt","location","handleStatusChange","status","file","current","length","_jsxs","_Fragment","_jsx","Modal","Header","Title","id","getTrad","defaultMessage","Body","Flex","direction","alignItems","gap","justifyContent","Typography","variant","fontWeight","textColor","number","Button","size","onClick","KeyboardNavigable","tagName","Grid","Root","map","assetKey","url","Item","col","UploadingAssetCard","onCancel","onStatusChange","rawFile","AssetCard","local","alt","name","onEdit","onRemove","Footer","loading"],"mappings":"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"}