import React from 'react'; import Animate from 'rc-animate'; import Icon from '../icon'; const prefixCls = 'ant-upload'; import Progress from '../progress'; import classNames from 'classnames'; // https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL const previewFile = (file, callback) => { const reader = new FileReader(); reader.onloadend = () => callback(reader.result); reader.readAsDataURL(file); }; export default class UploadList extends React.Component { static defaultProps = { listType: 'text', // or picture items: [], progressAttr: { strokeWidth: 3, showInfo: false, }, }; handleClose = (file) => { this.props.onRemove(file); } handlePreview = (file, e) => { e.preventDefault(); return this.props.onPreview(file); } componentDidUpdate() { if (this.props.listType !== 'picture' && this.props.listType !== 'picture-card') { return; } this.props.items.forEach(file => { if (typeof document === 'undefined' || typeof window === 'undefined' || !window.FileReader || !window.File || !(file.originFileObj instanceof File) || file.thumbUrl !== undefined) { return; } /*eslint-disable */ file.thumbUrl = ''; /*eslint-enable */ previewFile(file.originFileObj, (previewDataUrl) => { /*eslint-disable */ file.thumbUrl = previewDataUrl; /*eslint-enable */ this.forceUpdate(); }); }); } render() { let list = this.props.items.map(file => { let progress; let icon = ; if (this.props.listType === 'picture' || this.props.listType === 'picture-card') { if (file.status === 'uploading' || (!file.thumbUrl && !file.url)) { if (this.props.listType === 'picture-card') { icon =
文件上传中
; } else { icon = ; } } else { icon = ( this.handlePreview(file, e)} href={file.url} target="_blank" > {file.name} ); } } if (file.status === 'uploading') { progress = (
); } const infoUploadingClass = classNames({ [`${prefixCls}-list-item`]: true, [`${prefixCls}-list-item-${file.status}`]: true, }); return (
{icon} { file.url ? ( this.handlePreview(file, e)} href={file.url} target="_blank" className={`${prefixCls}-list-item-name`} > {file.name} ) : {file.name} } { this.props.listType === 'picture-card' && file.status !== 'uploading' ? ( this.handlePreview(file, e)} href={file.url} target="_blank" style={{ pointerEvents: file.url ? '' : 'none' }} > this.handleClose(file)} /> ) : this.handleClose(file)} /> }
{progress}
); }); const listClassNames = classNames({ [`${prefixCls}-list`]: true, [`${prefixCls}-list-${this.props.listType}`]: true, }); return (
{list}
); } }