import cn from 'classnames'; import * as React from 'react'; import Icon from '../../../icon'; import InlineLoading from '../../../loading/InlineLoading'; import { FILE_UPLOAD_STATUS } from '../../constants'; import { useItemHandler } from '../../hooks/item-handler'; import { INormalUploadItemProps, IUploadFileItem } from '../../types'; const getFileIcon = (item: IUploadFileItem) => { const { status } = item; // 上传失败 icon if (status === FILE_UPLOAD_STATUS.failed) { return ( ); } // 上传中 icon if (status === FILE_UPLOAD_STATUS.uploading) { return ( ); } return null; }; /** * 通用上传组件上传项 */ const SingleUploadItem: React.FC = props => { const { i18n, item } = props; const { deleteHandler, retryHandler } = useItemHandler(props); const isFailed = item.status === FILE_UPLOAD_STATUS.failed; const isUploading = item.status === FILE_UPLOAD_STATUS.uploading; const displayName = [ FILE_UPLOAD_STATUS.beforeUpload, FILE_UPLOAD_STATUS.uploading, ].includes(item.status) ? i18n.uploading : item.name; const cls = cn('zent-single-upload-item', { ['zent-single-upload-item__failed']: isFailed, ['zent-single-upload-item__uploading']: isUploading, }); const actions = { retry: ( {i18n.retry} ), cancel: ( {i18n.cancel} ), delete: ( {i18n.delete} ), }; const statusActions = { [FILE_UPLOAD_STATUS.uploading]: [actions.cancel], [FILE_UPLOAD_STATUS.failed]: [actions.retry, actions.delete], [FILE_UPLOAD_STATUS.success]: [actions.delete], }; return (
{getFileIcon(item)}
{displayName}
{statusActions[item.status]}
); }; export default SingleUploadItem;