{"version":3,"file":"PendingAssetStep.mjs","sources":["../../../../../admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Grid, KeyboardNavigable, Modal, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { AssetType } from '../../../enums';\nimport { useTracking } from '../../../hooks/useTracking';\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\n                      m={4}\n                      s={6}\n                      xs={12}\n                      key={assetKey}\n                      direction=\"column\"\n                      alignItems=\"stretch\"\n                    >\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","m","s","xs","UploadingAssetCard","onCancel","onStatusChange","rawFile","col","AssetCard","local","alt","name","onEdit","onRemove","Footer","loading"],"mappings":";;;;;;;;;;;;;;AAaA,MAAMA,MAAAA,GAAS;IACbC,IAAAA,EAAM,MAAA;IACNC,SAAAA,EAAW,WAAA;IACXC,YAAAA,EAAc;AAChB,CAAA;AAsBO,MAAMC,mBAAmB,CAAC,EAC/BC,gBAAgB,EAChBC,QAAQ,EACRC,OAAO,EACPC,WAAW,EACXC,aAAa,EACbC,MAAM,EACNC,eAAe,EACfC,cAAc,EACdC,eAAe,EACfC,eAAe,EACO,GAAA;IACtB,MAAMC,aAAAA,GAAgBC,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAA;IACnC,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;IACvB,MAAM,CAACC,cAAcC,eAAAA,CAAgB,GAAGP,MAAMQ,QAAQ,CAACxB,OAAOC,IAAI,CAAA;AAElE,IAAA,MAAMwB,eAAe,OAAOC,CAAAA,GAAAA;AAC1BA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;AAChBD,QAAAA,CAAAA,CAAEE,eAAe,EAAA;AAEjB,QAAA,MAAMC,iBAAAA,GAAoBnB,MAAAA,CAAOoB,MAAM,CACrC,CAACC,GAAAA,EAAyCC,KAAAA,GAAAA;YACxC,MAAM,EAAEC,IAAI,EAAE,GAAGD,KAAAA;AAEjB,YAAA,IAAIC,SAASC,SAAAA,IAAa,CAACH,GAAG,CAACE,KAAK,EAAE;gBACpCF,GAAG,CAACE,KAAK,GAAG,CAAA;AACd,YAAA;AAEA,YAAA,IAAIA,SAASC,SAAAA,EAAW;gBACtB,MAAMC,OAAAA,GAAUJ,GAAG,CAACE,IAAAA,CAAK;AACzB,gBAAA,MAAMG,eAAe,OAAOD,OAAAA,KAAY,QAAA,GAAWA,OAAAA,GAAUA,QAAQE,QAAQ,EAAA;AAC7EN,gBAAAA,GAAG,CAACE,IAAAA,CAAK,GAAG,GAAGK,QAAAA,CAASF,YAAAA,EAAc,MAAM,CAAA,CAAA,CAAG;AACjD,YAAA;YAEA,OAAOL,GAAAA;AACT,QAAA,CAAA,EACA,EAAC,CAAA;AAGHX,QAAAA,UAAAA,CAAW,2BAAA,EAA6B;YACtCmB,QAAAA,EAAUzB,eAAAA;AACV,YAAA,GAAGe;AACL,SAAA,CAAA;AAEAN,QAAAA,eAAAA,CAAgBvB,OAAOE,SAAS,CAAA;AAClC,IAAA,CAAA;IAEA,MAAMsC,kBAAAA,GAAqB,CAACC,MAAAA,EAAgBC,IAAAA,GAAAA;QAC1C,IAAID,MAAAA,KAAW,SAAA,IAAaA,MAAAA,KAAW,OAAA,EAAS;AAC9C1B,YAAAA,aAAAA,CAAc4B,OAAO,EAAA;;;;AAKrB,YAAA,IAAI5B,aAAAA,CAAc4B,OAAO,KAAKjC,MAAAA,CAAOkC,MAAM,EAAE;AAC3C7B,gBAAAA,aAAAA,CAAc4B,OAAO,GAAG,CAAA;AACxBpB,gBAAAA,eAAAA,CAAgBvB,OAAOG,YAAY,CAAA;AACrC,YAAA;AACF,QAAA;AAEA,QAAA,IAAIsC,WAAW,SAAA,EAAW;YACxB5B,eAAAA,CAAgB6B,IAAAA,CAAAA;AAClB,QAAA;AACF,IAAA,CAAA;IAEA,qBACEG,IAAA,CAAAC,QAAA,EAAA;;AACE,0BAAAC,GAAA,CAACC,MAAMC,MAAM,EAAA;wCACXF,GAAA,CAACC,MAAME,KAAK,EAAA;8BACThC,aAAAA,CAAc;AACbiC,wBAAAA,EAAAA,EAAIC,OAAAA,CAAQ,2BAAA,CAAA;wBACZC,cAAAA,EAAgB;AAClB,qBAAA;;;AAIJ,0BAAAN,GAAA,CAACC,MAAMM,IAAI,EAAA;AACT,gBAAA,QAAA,gBAAAT,IAAA,CAACU,IAAAA,EAAAA;oBAAKC,SAAAA,EAAU,QAAA;oBAASC,UAAAA,EAAW,SAAA;oBAAUC,GAAAA,EAAK,CAAA;;sCACjDb,IAAA,CAACU,IAAAA,EAAAA;4BAAKI,cAAAA,EAAe,eAAA;;8CACnBd,IAAA,CAACU,IAAAA,EAAAA;oCAAKC,SAAAA,EAAU,QAAA;oCAASC,UAAAA,EAAW,SAAA;oCAAUC,GAAAA,EAAK,CAAA;;sDACjDX,GAAA,CAACa,UAAAA,EAAAA;4CAAWC,OAAAA,EAAQ,IAAA;4CAAKC,UAAAA,EAAW,MAAA;4CAAOC,SAAAA,EAAU,YAAA;sDAClD7C,aAAAA,CACC;AACEiC,gDAAAA,EAAAA,EAAIC,OAAAA,CAAQ,uBAAA,CAAA;gDACZC,cAAAA,EACE;6CACJ,EACA;AAAEW,gDAAAA,MAAAA,EAAQtD,OAAOkC;AAAO,6CAAA;;sDAG5BG,GAAA,CAACa,UAAAA,EAAAA;4CAAWC,OAAAA,EAAQ,IAAA;4CAAKE,SAAAA,EAAU,YAAA;sDAChC7C,aAAAA,CAAc;AACbiC,gDAAAA,EAAAA,EAAIC,OAAAA,CAAQ,uCAAA,CAAA;gDACZC,cAAAA,EAAgB;AAClB,6CAAA;;;;8CAGJN,GAAA,CAACkB,MAAAA,EAAAA;oCAAOC,IAAAA,EAAK,GAAA;oCAAIC,OAAAA,EAASxD,eAAAA;8CACvBO,aAAAA,CAAc;AACbiC,wCAAAA,EAAAA,EAAIC,OAAAA,CAAQ,2BAAA,CAAA;wCACZC,cAAAA,EAAgB;AAClB,qCAAA;;;;sCAGJN,GAAA,CAACqB,iBAAAA,EAAAA;4BAAkBC,OAAAA,EAAQ,SAAA;oDACzBtB,GAAA,CAACuB,KAAKC,IAAI,EAAA;gCAACb,GAAAA,EAAK,CAAA;0CACbhD,MAAAA,CAAO8D,GAAG,CAAC,CAACxC,KAAAA,GAAAA;oCACX,MAAMyC,QAAAA,GAAWzC,MAAM0C,GAAG;AAE1B,oCAAA,IAAIpD,iBAAiBtB,MAAAA,CAAOE,SAAS,IAAIoB,YAAAA,KAAiBtB,MAAAA,CAAOG,YAAY,EAAE;wCAC7E,qBACE4C,GAAA,CAACuB,KAAKK,IAAI,EAAA;4CACRC,CAAAA,EAAG,CAAA;4CACHC,CAAAA,EAAG,CAAA;4CACHC,EAAAA,EAAI,EAAA;4CAEJtB,SAAAA,EAAU,QAAA;4CACVC,UAAAA,EAAW,SAAA;AAEX,4CAAA,QAAA,gBAAAV,GAAA,CAACgC,kBAAAA,EAAAA;;gDAEC1E,gBAAAA,EAAkBA,gBAAAA;gDAClB2B,KAAAA,EAAOA,KAAAA;gDACPmB,EAAAA,EAAIsB,QAAAA;gDACJO,QAAAA,EAAUpE,cAAAA;AACVqE,gDAAAA,cAAAA,EAAgB,CAACxC,MAAAA,GAAWD,kBAAAA,CAAmBC,MAAAA,EAAQT,MAAMkD,OAAO,CAAA;gDACpEhB,IAAAA,EAAK,GAAA;gDACL5D,QAAAA,EAAUA;;AAZPmE,yCAAAA,EAAAA,QAAAA,CAAAA;AAgBX,oCAAA;oCAEA,qBACE1B,GAAA,CAACuB,KAAKK,IAAI,EAAA;wCAACQ,GAAAA,EAAK,CAAA;wCAAkB3B,SAAAA,EAAU,QAAA;wCAASC,UAAAA,EAAW,SAAA;AAC9D,wCAAA,QAAA,gBAAAV,GAAA,CAACqC,SAAAA,EAAAA;4CACCpD,KAAAA,EAAOA,KAAAA;4CACPkC,IAAAA,EAAK,GAAA;4CAELmB,KAAK,EAAA,IAAA;AACLC,4CAAAA,GAAAA,EAAKtD,MAAMuD,IAAI;4CACfC,MAAAA,EAAQhF,WAAAA;4CACRiF,QAAAA,EAAUhF;AAJLgE,yCAAAA,EAAAA,QAAAA;AAJeA,qCAAAA,EAAAA,QAAAA,CAAAA;AAY5B,gCAAA,CAAA;;;;;;AAKR,0BAAA5B,IAAA,CAACG,MAAM0C,MAAM,EAAA;;kCACX3C,GAAA,CAACkB,MAAAA,EAAAA;wBAAOE,OAAAA,EAAS5D,OAAAA;wBAASsD,OAAAA,EAAQ,UAAA;kCAC/B3C,aAAAA,CAAc;4BAAEiC,EAAAA,EAAI,8BAAA;4BAAgCE,cAAAA,EAAgB;AAAS,yBAAA;;kCAEhFN,GAAA,CAACkB,MAAAA,EAAAA;wBAAOE,OAAAA,EAAS1C,YAAAA;wBAAckE,OAAAA,EAASrE,YAAAA,KAAiBtB,OAAOE,SAAS;kCACtEgB,aAAAA,CACC;AACEiC,4BAAAA,EAAAA,EAAIC,OAAAA,CAAQ,iCAAA,CAAA;4BACZC,cAAAA,EACE;yBACJ,EACA;AAAEW,4BAAAA,MAAAA,EAAQtD,OAAOkC;AAAO,yBAAA;;;;;;AAMpC;;;;"}