import React from 'react'; import Animate from 'rc-animate'; import Icon from '../icon'; const prefixCls = 'ant-upload'; import { Line } from '../progress'; import classNames from 'classnames'; // https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL const previewFile = function(file, callback) { if (typeof document === 'undefined' && typeof window === 'undefined') { return; } if (!window.FileReader) { return; } const reader = new FileReader(); reader.onloadend = function() { callback(reader.result); }; reader.readAsDataURL(file); }; export default React.createClass({ getDefaultProps() { return { listType: 'text', // or picture items: [], progressAttr: { strokeWidth: 3, showInfo: false } }; }, handleClose(file) { this.props.onRemove(file); }, componentDidUpdate(prevProps) { this.props.items.forEach(file => { if (!file.originFileObj || !(file.originFileObj instanceof File) || file.thumbUrl !== undefined) { return; } file.thumbUrl = ''; previewFile(file.originFileObj, (previewDataUrl) => { file.thumbUrl = previewDataUrl; this.forceUpdate(); }); }); }, render() { let list = this.props.items.map(file => { let progress; let icon = ; if (this.props.listType === 'picture') { icon = (file.status === 'uploading' || (!file.thumbUrl && !file.url)) ? : {file.name}; } if (file.status === 'uploading') { progress =
; } const infoUploadingClass = classNames({ [`${prefixCls}-list-item`]: true, [`${prefixCls}-list-item-${file.status}`]: true, }); return (
{icon} {file.name}
{ progress }
); }); const listClassNames = classNames({ [`${prefixCls}-list`]: true, [`${prefixCls}-list-${this.props.listType}`]: true, }); return
{list}
; } });