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) { 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() { if (this.props.listType !== 'picture') { 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; } 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}
); } });