// @flow strict import * as React from 'react'; import classify from '../../../utils/classify'; import {ClickableIcon, CloseIcon, Icon} from '../../Icon'; import {LinearLoader} from '../../LinearLoader'; import {Truncate} from '../../Truncate'; import type {FileObject} from '../FileUpload'; import css from '../FileUpload.module.css'; type ClassNames = $ReadOnly<{ wrapper?: string, }>; export type FileBlockProps = { classNames?: ClassNames, fileObject: FileObject, onFileRefreshClick?: (file: FileObject) => mixed, handleFileClear?: (id: string) => mixed, }; export const FileBlock: React$AbstractComponent< FileBlockProps, HTMLDivElement, > = React.forwardRef( ( { classNames, fileObject, onFileRefreshClick, handleFileClear, }: FileBlockProps, ref, ): React.Node => ( <>
{fileObject.file.name}
{fileObject.success && !!fileObject.successMessage && !fileObject.progress && (
{fileObject.successMessage}
)} {fileObject.reject && !!fileObject.rejectReason && !fileObject.progress && (
{fileObject.rejectReason}
)} {!!fileObject.progress && (
)}
{fileObject.showReUpload && (
onFileRefreshClick?.(fileObject)} />
)}
handleFileClear?.(fileObject.id)} />
), ); // This function returns the status of a file const getFileStatus = (fileObject: FileObject) => { if (fileObject.progress) { return 'progress'; } if (fileObject.success) { return 'success'; } if (fileObject.reject) { return 'error'; } return 'default'; }; // This component renders the status icon for a file const FileStatusIcon = ({fileObject}: {fileObject: FileObject}) => { const status = getFileStatus(fileObject); switch (status) { case 'progress': return ; case 'success': return ; case 'error': return ( ); default: return ; } };