ant-design/components/upload/index.jsx

117 lines
3.0 KiB
React
Raw Normal View History

2015-08-08 23:37:35 +08:00
import React from 'react';
import Upload from 'rc-upload';
import assign from 'object-assign';
import Message from '../message';
import UploadList from './uploadList';
2015-08-08 23:37:35 +08:00
const prefixCls = 'ant-upload';
let AntUpload = React.createClass({
2015-08-08 23:37:35 +08:00
getInitialState() {
return {
downloadList: []
};
},
handleStart(file) {
var i = this.state.downloadList.length;
var nextDownloadList = this.state.downloadList;
nextDownloadList.push({
id: i,
uid: file.uid || '',
filename: file.name,
status: 'downloading'
});
this.setState({
downloadList: nextDownloadList
});
2015-08-08 23:37:35 +08:00
},
handleSuccess(ret, file) {
var matchWay = file.uid === '' ? 'byName' : 'byUid';
Message.success(file.name + '上传完成');
2015-08-09 18:13:46 +08:00
for (var i = 0; i < this.state.downloadList.length; i++) {
if (matchWay === 'byName') {
if (this.state.downloadList[i].filename === file.name) {
2015-08-08 23:37:35 +08:00
this.state.downloadList[i].status = 'done';
}
2015-08-09 18:13:46 +08:00
} else {
if (this.state.downloadList[i].uid === file.uid) {
2015-08-08 23:37:35 +08:00
this.state.downloadList[i].status = 'done';
}
}
}
this.setState({
downloadList: this.state.downloadList
});
2015-08-08 23:37:35 +08:00
},
handleProgress() {
},
handleError() {
Message.error('上传失败');
},
getDefaultProps() {
return {
type: 'select',
name: '',
2015-08-08 23:37:35 +08:00
multipart: false,
action: '',
data: {},
accept: '',
uploadTip: '',
start: function() {},
error: function() {},
success: function() {},
progress: function() {}
};
},
render() {
var type = this.props.type || 'select';
2015-08-08 23:37:35 +08:00
var props = assign({}, this.props);
props.onStart = (file) => {
this.handleStart(file);
props.start.call(this, file);
};
props.onSuccess = (ret, file) => {
this.handleSuccess(ret, file);
props.success.call(this, ret, file);
};
props.onProgress = (step) => {
this.handleProgress(step);
props.progress.call(this, step);
};
props.onError = (err, responce, file) => {
2015-08-08 23:37:35 +08:00
this.handleError(err);
props.error.call(this, err, responce, file);
2015-08-08 23:37:35 +08:00
};
if (type === 'drag') {
2015-08-08 23:37:35 +08:00
return (
<Upload {...props}>
<div className={prefixCls + ' ' + prefixCls + '-drag'}>
<div className={prefixCls + '-drag-container'}>
{this.props.children}
2015-08-08 23:37:35 +08:00
</div>
</div>
</Upload>
2015-08-08 23:37:35 +08:00
);
} else if (type === 'select') {
2015-08-08 23:37:35 +08:00
return (
<div className={prefixCls + ' ' + prefixCls + '-select'}>
2015-08-08 23:37:35 +08:00
<Upload {...props}>
<button className='ant-btn ant-btn-ghost'>
{this.props.children}
</button>
2015-08-08 23:37:35 +08:00
</Upload>
<UploadList items={this.state.downloadList} />
2015-08-08 23:37:35 +08:00
</div>
);
}
}
});
AntUpload.Dragger = React.createClass({
render() {
return <AntUpload {...this.props} type="drag" style={{height: this.props.height}} />;
}
});
export default AntUpload;