2016-07-19 22:49:46 +02:00
|
|
|
import React, { PropTypes } from 'react';
|
2016-07-16 01:05:18 +02:00
|
|
|
import Dropzone from 'dropzone';
|
2016-07-21 02:30:40 +02:00
|
|
|
const s3Bucket = `http://${process.env.S3_BUCKET}.s3.amazonaws.com/`;
|
2016-07-19 22:49:46 +02:00
|
|
|
import * as UploaderActions from '../actions/uploader';
|
|
|
|
import { bindActionCreators } from 'redux';
|
|
|
|
import { connect } from 'react-redux';
|
2016-07-16 01:05:18 +02:00
|
|
|
|
|
|
|
class FileUploader extends React.Component {
|
|
|
|
componentDidMount() {
|
2016-07-21 00:37:49 +02:00
|
|
|
this.createDropzone();
|
2016-07-16 02:01:21 +02:00
|
|
|
Dropzone.autoDiscover = false;
|
2016-07-21 00:37:49 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
createDropzone() {
|
2016-07-16 02:01:21 +02:00
|
|
|
this.uploader = new Dropzone('div#uploader', {
|
2016-07-16 01:05:18 +02:00
|
|
|
url: s3Bucket,
|
|
|
|
method: 'post',
|
|
|
|
autoProcessQueue: true,
|
|
|
|
clickable: true,
|
|
|
|
maxFiles: 1,
|
|
|
|
parallelUploads: 1,
|
|
|
|
maxFilesize: 10, // in mb
|
|
|
|
maxThumbnailFilesize: 8, // 3MB
|
2016-07-20 03:42:33 +02:00
|
|
|
thumbnailWidth: 200,
|
|
|
|
thumbnailHeight: 200,
|
2016-08-25 06:18:28 +02:00
|
|
|
// TODO what is a good list of MIME types????
|
2016-08-25 18:39:36 +02:00
|
|
|
acceptedFiles: 'image/*,audio/*,text/javascript,text/html,text/css,application/json,application/x-font-ttf,application/x-font-truetype',
|
2016-07-20 03:42:33 +02:00
|
|
|
dictDefaultMessage: 'Drop files here to upload or click to use the file browser',
|
2016-07-19 22:49:46 +02:00
|
|
|
accept: this.props.dropzoneAcceptCallback,
|
|
|
|
sending: this.props.dropzoneSendingCallback,
|
2016-08-25 18:39:36 +02:00
|
|
|
complete: this.props.dropzoneCompleteCallback,
|
|
|
|
error: (file, errorMessage) => {
|
|
|
|
console.log(file);
|
|
|
|
console.log(errorMessage);
|
|
|
|
}
|
2016-07-16 02:01:21 +02:00
|
|
|
});
|
2016-07-16 01:05:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
render() {
|
|
|
|
return (
|
|
|
|
<div id="uploader" className="uploader dropzone"></div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-07-19 22:49:46 +02:00
|
|
|
FileUploader.propTypes = {
|
|
|
|
dropzoneAcceptCallback: PropTypes.func.isRequired,
|
|
|
|
dropzoneSendingCallback: PropTypes.func.isRequired,
|
|
|
|
dropzoneCompleteCallback: PropTypes.func.isRequired
|
|
|
|
};
|
|
|
|
|
|
|
|
function mapStateToProps(state) {
|
|
|
|
return {
|
|
|
|
files: state.files,
|
|
|
|
project: state.project
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function mapDispatchToProps(dispatch) {
|
|
|
|
return bindActionCreators(UploaderActions, dispatch);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default connect(mapStateToProps, mapDispatchToProps)(FileUploader);
|