import React from 'react'; import { ComponentClassName, translate } from '@aws-amplify/ui'; import { FileState, PreviewerProps } from '../types'; import { Alert, Button, ComponentClassNames, Loader, Text, View, } from '../../../../primitives'; export function UploadPreviewer({ aggregatePercentage, children, dropZone, fileStatuses, isLoading, isSuccessful, hasMaxFilesError, maxFileCount, onClear, onFileClick, }: PreviewerProps): JSX.Element { const headingMaxFiles = `${translate( 'Cannot choose more than' )} ${maxFileCount}`; const getUploadedFilesLength = () => fileStatuses.filter((file) => file?.fileState === FileState.SUCCESS).length; const remainingFilesLength = fileStatuses.length - getUploadedFilesLength(); const remainingFilesText = `${remainingFilesLength} ${ remainingFilesLength === 1 ? translate('file') : translate('files') }`; const uploadedFilesText = `${getUploadedFilesLength()} ${ getUploadedFilesLength() === 1 ? translate('file uploaded') : translate('files uploaded') }`; const isDisabled = fileStatuses.some((status) => [FileState.ERROR, FileState.EDITING].includes(status?.fileState!) ) || remainingFilesLength === 0 || hasMaxFilesError; return ( {dropZone} {isSuccessful ? ( uploadedFilesText ) : ( <>{`${remainingFilesText} ${translate('selected')}`} )} {children} {isLoading && ( <> {translate('Uploading')} {aggregatePercentage > 0 ? `: ${aggregatePercentage}%` : ''} )} {!isLoading && !isSuccessful && ( <> )} {isSuccessful && ( )} {hasMaxFilesError && ( )} ); }