{"version":3,"file":"UploadProgressDialog.mjs","sources":["../../../../admin/src/future/components/UploadProgressDialog.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, IconButton, TextButton, Typography } from '@strapi/design-system';\nimport {\n  ArrowsCounterClockwise,\n  Check,\n  CheckCircle,\n  ChevronDown,\n  Cross,\n  CrossCircle,\n  MinusCircle,\n  Upload,\n} from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, keyframes } from 'styled-components';\n\nimport { abortUpload, useRetryCancelledFilesStreamMutation } from '../services/api';\nimport { useTypedDispatch, useTypedSelector } from '../store/hooks';\nimport { closeUploadProgress, toggleMinimize, cancelUpload } from '../store/uploadProgress';\nimport { getTranslationKey } from '../utils/translations';\n\nimport { Drawer } from './Drawer';\n\nimport type { FileProgress, FileProgressStatus } from '../store/uploadProgress';\n\n/* -------------------------------------------------------------------------------------------------\n * DialogHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst HeaderStatusMessage = ({ title, subtitle }: { title: string; subtitle?: string }) => {\n  return (\n    <Flex direction=\"column\" alignItems=\"flex-start\" paddingLeft={2}>\n      <Drawer.Title>\n        <Typography variant=\"omega\">{title}</Typography>\n      </Drawer.Title>\n      <Drawer.Description>\n        <Typography variant=\"pi\" textColor=\"neutral600\">\n          {subtitle}\n        </Typography>\n      </Drawer.Description>\n    </Flex>\n  );\n};\n\nconst HeaderStatusIcon = styled(Flex)`\n  padding: ${({ theme }) => theme.spaces[3]};\n  border-radius: ${({ theme }) => `${theme.borderRadius} 0 0 ${theme.borderRadius}`};\n\n  > svg {\n    height: 24px;\n    width: 24px;\n  }\n`;\n\nconst HeaderStatusWrapper = styled(Flex)`\n  align-items: center;\n`;\n\ntype HeaderStatusProps = {\n  status: 'uploading' | 'success' | 'error' | 'canceled';\n  progress?: number;\n  totalFiles: number;\n  successfulCount: number;\n  errorCount: number;\n};\n\nconst HeaderStatus = ({\n  status,\n  progress,\n  totalFiles,\n  successfulCount,\n  errorCount,\n}: HeaderStatusProps) => {\n  const { formatMessage } = useIntl();\n\n  if (status === 'error') {\n    return (\n      <HeaderStatusWrapper>\n        <HeaderStatusIcon background=\"danger200\">\n          <Cross fill=\"danger700\" />\n        </HeaderStatusIcon>\n        <HeaderStatusMessage\n          title={formatMessage({\n            id: getTranslationKey('upload.progress.failed'),\n            defaultMessage: 'Upload failed',\n          })}\n          subtitle={formatMessage({\n            id: getTranslationKey('upload.progress.failed.subtitle'),\n            defaultMessage: 'Please try to upload files again',\n          })}\n        />\n      </HeaderStatusWrapper>\n    );\n  }\n\n  if (status === 'success') {\n    const subtitle =\n      errorCount > 0\n        ? formatMessage(\n            {\n              id: getTranslationKey('upload.progress.success.subtitle.withErrors'),\n              defaultMessage: '{successCount} uploaded, {errorCount} failed',\n            },\n            { successCount: successfulCount, errorCount }\n          )\n        : formatMessage(\n            {\n              id: getTranslationKey('upload.progress.success.subtitle'),\n              defaultMessage: '{count} files uploaded successfully',\n            },\n            { count: successfulCount }\n          );\n\n    return (\n      <HeaderStatusWrapper>\n        <HeaderStatusIcon background=\"success200\">\n          <Check fill=\"success700\" />\n        </HeaderStatusIcon>\n        <HeaderStatusMessage\n          title={formatMessage({\n            id: getTranslationKey('upload.progress.success'),\n            defaultMessage: 'Upload successful!',\n          })}\n          subtitle={subtitle}\n        />\n      </HeaderStatusWrapper>\n    );\n  }\n\n  if (status === 'canceled') {\n    return (\n      <HeaderStatusWrapper>\n        <HeaderStatusIcon background=\"neutral200\">\n          <MinusCircle fill=\"neutral700\" />\n        </HeaderStatusIcon>\n        <HeaderStatusMessage\n          title={formatMessage({\n            id: getTranslationKey('upload.progress.canceled'),\n            defaultMessage: 'Upload canceled',\n          })}\n          subtitle={formatMessage({\n            id: getTranslationKey('upload.progress.canceled.subtitle'),\n            defaultMessage: 'Some files were not uploaded',\n          })}\n        />\n      </HeaderStatusWrapper>\n    );\n  }\n\n  if (status === 'uploading') {\n    const progressPercentage = progress ? Math.round(progress) : 0;\n\n    return (\n      <HeaderStatusWrapper>\n        <HeaderStatusIcon background=\"primary200\">\n          <Upload fill=\"primary700\" />\n        </HeaderStatusIcon>\n        <HeaderStatusMessage\n          title={formatMessage(\n            {\n              id: getTranslationKey('upload.progress.uploading.withCount'),\n              defaultMessage: 'Uploading {total} items ({percentage}%)',\n            },\n            {\n              total: totalFiles,\n              percentage: progressPercentage,\n            }\n          )}\n        />\n      </HeaderStatusWrapper>\n    );\n  }\n\n  return null;\n};\n\nconst HeaderIconButton = styled(IconButton)`\n  &:hover {\n    background: transparent;\n  }\n`;\n\nconst ChevronWrapper = styled.span<{ $isMinimized: boolean }>`\n  display: flex;\n  transition: transform 0.5s ease-in-out;\n  transform: ${({ $isMinimized }) => ($isMinimized ? 'rotate(180deg)' : 'rotate(0deg)')};\n`;\n\nconst HEADER_COLOR_MAP = {\n  uploading: { background: 'primary100' },\n  canceled: { background: 'neutral100' },\n  success: { background: 'success100' },\n  error: { background: 'danger100' },\n} as const;\n\nconst DialogHeader = ({ handleClose }: { handleClose: () => void }) => {\n  const { formatMessage } = useIntl();\n\n  const { isMinimized, progress, files, uploadId, totalFiles } = useTypedSelector(\n    (state) => state.uploadProgress\n  );\n  const dispatch = useTypedDispatch();\n  const [retryCancelledFiles] = useRetryCancelledFilesStreamMutation();\n\n  const isComplete = progress === 100;\n  const isAllUploaded = isComplete && files.every((f) => f.status !== 'uploading');\n  const isAllErrored = isComplete && files.length > 0 && files.every((f) => f.status === 'error');\n  const hasCancelledFiles = files.some((f) => f.status === 'cancelled');\n  const successfulCount = files.filter((f) => f.status === 'complete').length;\n  const errorCount = files.filter((f) => f.status === 'error').length;\n  // Success includes partial success (some files succeeded, even if some failed)\n  const isSuccess = isComplete && isAllUploaded && successfulCount > 0 && !hasCancelledFiles;\n  const status = ((): HeaderStatusProps['status'] => {\n    if (isAllErrored) return 'error';\n    if (isSuccess) return 'success';\n    if (hasCancelledFiles) return 'canceled';\n\n    return 'uploading';\n  })();\n\n  const handleCancel = () => {\n    abortUpload(uploadId);\n    dispatch(cancelUpload());\n  };\n\n  const handleRetry = async () => {\n    try {\n      await retryCancelledFiles().unwrap();\n    } catch {\n      // Error is already dispatched to store from the API queryFn\n    }\n  };\n\n  const handleToggleMinimize = () => {\n    dispatch(toggleMinimize());\n  };\n\n  return (\n    <Flex\n      background={HEADER_COLOR_MAP[status].background}\n      justifyContent=\"space-between\"\n      margin={1}\n      hasRadius\n    >\n      <HeaderStatus\n        status={status}\n        progress={progress}\n        totalFiles={totalFiles}\n        successfulCount={successfulCount}\n        errorCount={errorCount}\n      />\n      <Flex gap={1}>\n        {!isAllUploaded && (\n          <TextButton onClick={handleCancel} fontWeight=\"bold\">\n            {formatMessage({\n              id: getTranslationKey('upload.progress.cancel'),\n              defaultMessage: 'Cancel',\n            })}\n          </TextButton>\n        )}\n        {hasCancelledFiles && (\n          <TextButton onClick={handleRetry} fontWeight=\"bold\">\n            {formatMessage({\n              id: getTranslationKey('upload.progress.retry'),\n              defaultMessage: 'Retry',\n            })}\n          </TextButton>\n        )}\n        <HeaderIconButton\n          onClick={handleToggleMinimize}\n          label={formatMessage({\n            id: getTranslationKey(\n              isMinimized ? 'upload.progress.maximize' : 'upload.progress.minimize'\n            ),\n            defaultMessage: isMinimized ? 'Maximize' : 'Minimize',\n          })}\n          variant=\"ghost\"\n        >\n          <ChevronWrapper $isMinimized={isMinimized}>\n            <ChevronDown />\n          </ChevronWrapper>\n        </HeaderIconButton>\n        {isComplete && (\n          <Drawer.CloseButton\n            onClose={handleClose}\n            label={formatMessage({\n              id: getTranslationKey('upload.progress.close'),\n              defaultMessage: 'Close',\n            })}\n          />\n        )}\n      </Flex>\n    </Flex>\n  );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * UploadProgressDialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst indeterminate = keyframes`\n  0% {\n    transform: translateX(-100%);\n  }\n  100% {\n    transform: translateX(400%);\n  }\n`;\n\nconst IndeterminateBar = styled.div`\n  width: 100%;\n  height: ${({ theme }) => theme.spaces[1]};\n  background-color: ${({ theme }) => theme.colors.neutral200};\n  border-radius: 4px;\n  overflow: hidden;\n  position: relative;\n\n  &::after {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    height: 100%;\n    width: 25%;\n    background-color: ${({ theme }) => theme.colors.primary700};\n    border-radius: 4px;\n    animation: ${indeterminate} 1.5s ease-in-out infinite;\n  }\n`;\n\nconst FileRow = ({\n  icon,\n  fileName,\n  children,\n}: {\n  icon: React.ReactNode;\n  fileName: string;\n  children: React.ReactNode;\n}) => {\n  return (\n    <Flex direction=\"column\" alignItems=\"stretch\" justifyContent=\"center\" gap={1} width=\"100%\">\n      <Flex gap={2}>\n        {icon}\n        <Typography variant=\"omega\" fontWeight=\"semiBold\" ellipsis>\n          {fileName}\n        </Typography>\n      </Flex>\n      {children}\n    </Flex>\n  );\n};\n\nconst FileRowRenderer = ({ file }: { file: FileProgress }) => {\n  const { formatMessage } = useIntl();\n  const isError = file.status === 'error';\n  const isCurrentFile = file.status === 'uploading';\n  const isCompleted = file.status === 'complete';\n  const isCancelled = file.status === 'cancelled';\n\n  if (isCurrentFile) {\n    return (\n      <FileRow icon={<ArrowsCounterClockwise fill=\"secondary600\" />} fileName={file.name}>\n        <Typography variant=\"pi\" textColor=\"neutral600\">\n          {formatMessage({\n            id: getTranslationKey('upload.progress.file.uploading'),\n            defaultMessage: 'Uploading...',\n          })}\n        </Typography>\n        <IndeterminateBar />\n      </FileRow>\n    );\n  }\n\n  if (isError) {\n    return (\n      <FileRow icon={<CrossCircle fill=\"danger500\" />} fileName={file.name}>\n        <Typography variant=\"pi\" textColor=\"neutral600\">\n          {file.error}\n        </Typography>\n      </FileRow>\n    );\n  }\n\n  if (isCancelled) {\n    return (\n      <FileRow icon={<MinusCircle fill=\"neutral600\" />} fileName={file.name}>\n        <Typography variant=\"pi\" textColor=\"neutral600\">\n          {formatMessage({\n            id: getTranslationKey('upload.progress.file.canceled'),\n            defaultMessage: 'Canceled',\n          })}\n        </Typography>\n      </FileRow>\n    );\n  }\n\n  if (isCompleted) {\n    return (\n      <FileRow icon={<CheckCircle fill=\"success500\" />} fileName={file.name}>\n        <Typography variant=\"pi\" textColor=\"neutral600\">\n          {formatMessage({\n            id: getTranslationKey('upload.progress.file.uploaded'),\n            defaultMessage: 'Uploaded',\n          })}\n        </Typography>\n      </FileRow>\n    );\n  }\n\n  return null;\n};\n\nconst CompletedFilesList = styled(Flex)`\n  flex-direction: column;\n  gap: ${({ theme }) => theme.spaces[2]};\n  width: 100%;\n`;\n\nexport const UploadProgressDialog = () => {\n  const dispatch = useTypedDispatch();\n  const { isVisible, isMinimized, files } = useTypedSelector((state) => state.uploadProgress);\n\n  const currentFile = files.find((f) => f.status === 'uploading');\n  const completedFiles = files\n    .filter((f) => f.status === 'complete' || f.status === 'error' || f.status === 'cancelled')\n    .sort((a, b) => {\n      // Sort priority: error > cancelled > complete\n      const priority: Record<FileProgressStatus, number> = {\n        error: 0,\n        cancelled: 1,\n        complete: 2,\n        uploading: 3,\n        pending: 4,\n      };\n      return priority[a.status] - priority[b.status];\n    });\n\n  const handleClose = () => {\n    dispatch(closeUploadProgress());\n  };\n\n  return (\n    <Drawer.Root isVisible={isVisible} onClose={handleClose}>\n      <Drawer.Body animationDirection=\"up\" width=\"41.6rem\" maxHeight=\"34.2rem\">\n        <DialogHeader handleClose={handleClose} />\n        <Drawer.ScrollableContent isContentExpanded={!isMinimized}>\n          <Flex\n            direction=\"column\"\n            alignItems=\"stretch\"\n            gap={4}\n            paddingTop={4}\n            paddingBottom={4}\n            paddingLeft={4}\n            paddingRight={4}\n          >\n            {currentFile && <FileRowRenderer file={currentFile} />}\n\n            {completedFiles.length > 0 && (\n              <CompletedFilesList>\n                {completedFiles.map((file) => (\n                  <FileRowRenderer key={file.index} file={file} />\n                ))}\n              </CompletedFilesList>\n            )}\n          </Flex>\n        </Drawer.ScrollableContent>\n      </Drawer.Body>\n    </Drawer.Root>\n  );\n};\n"],"names":["HeaderStatusMessage","title","subtitle","_jsxs","Flex","direction","alignItems","paddingLeft","_jsx","Drawer","Title","Typography","variant","Description","textColor","HeaderStatusIcon","styled","theme","spaces","borderRadius","HeaderStatusWrapper","HeaderStatus","status","progress","totalFiles","successfulCount","errorCount","formatMessage","useIntl","background","Cross","fill","id","getTranslationKey","defaultMessage","successCount","count","Check","MinusCircle","progressPercentage","Math","round","Upload","total","percentage","HeaderIconButton","IconButton","ChevronWrapper","span","$isMinimized","HEADER_COLOR_MAP","uploading","canceled","success","error","DialogHeader","handleClose","isMinimized","files","uploadId","useTypedSelector","state","uploadProgress","dispatch","useTypedDispatch","retryCancelledFiles","useRetryCancelledFilesStreamMutation","isComplete","isAllUploaded","every","f","isAllErrored","length","hasCancelledFiles","some","filter","isSuccess","handleCancel","abortUpload","cancelUpload","handleRetry","unwrap","handleToggleMinimize","toggleMinimize","justifyContent","margin","hasRadius","gap","TextButton","onClick","fontWeight","label","ChevronDown","CloseButton","onClose","indeterminate","keyframes","IndeterminateBar","div","colors","neutral200","primary700","FileRow","icon","fileName","children","width","ellipsis","FileRowRenderer","file","isError","isCurrentFile","isCompleted","isCancelled","ArrowsCounterClockwise","name","CrossCircle","CheckCircle","CompletedFilesList","UploadProgressDialog","isVisible","currentFile","find","completedFiles","sort","a","b","priority","cancelled","complete","pending","closeUploadProgress","Root","Body","animationDirection","maxHeight","ScrollableContent","isContentExpanded","paddingTop","paddingBottom","paddingRight","map","index"],"mappings":"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"}