1
0
mirror of https://github.com/ascribe/onion.git synced 2024-12-23 01:39:36 +01:00
onion/js/components/ascribe_forms/input_fineuploader.js

146 lines
4.7 KiB
JavaScript
Raw Permalink Normal View History

2015-09-10 10:51:47 +02:00
'use strict';
import React from 'react';
import ReactS3FineUploader from '../ascribe_uploader/react_s3_fine_uploader';
import FileDragAndDrop from '../ascribe_uploader/ascribe_file_drag_and_drop/file_drag_and_drop';
2015-09-10 10:51:47 +02:00
import AppConstants from '../../constants/application_constants';
import { getCookie } from '../../utils/fetch_api_utils';
const { func, bool, shape, string, number, element, oneOf, oneOfType, arrayOf } = React.PropTypes;
const InputFineUploader = React.createClass({
2015-09-10 10:51:47 +02:00
propTypes: {
// isFineUploaderActive is used to lock react fine uploader in case
// a user is actually not logged in already to prevent him from droping files
// before login in
isFineUploaderActive: bool,
2015-09-10 10:51:47 +02:00
// provided by Property
disabled: bool,
2015-12-08 20:55:13 +01:00
onChange: func,
// Props for ReactS3FineUploader
areAssetsDownloadable: bool,
2016-02-05 17:06:16 +01:00
createBlobRoutine: ReactS3FineUploader.propTypes.createBlobRoutine,
enableLocalHashing: bool,
fileClassToUpload: ReactS3FineUploader.propTypes.fileClassToUpload,
fileInputElement: ReactS3FineUploader.propTypes.fileInputElement,
isReadyForFormSubmission: func,
keyRoutine: ReactS3FineUploader.propTypes.keyRoutine,
handleChangedFile: func, // TODO: rename to onChangedFile
submitFile: func, // TODO: rename to onSubmitFile
2015-12-21 11:53:27 +01:00
onValidationFailed: func,
setIsUploadReady: func, //TODO: rename to setIsUploaderValidated
2016-02-05 17:06:16 +01:00
setWarning: func,
showErrorPrompt: bool,
uploadMethod: oneOf(['hash', 'upload']),
2016-02-05 17:06:16 +01:00
validation: ReactS3FineUploader.propTypes.validation,
2015-09-10 10:51:47 +02:00
},
getDefaultProps() {
return {
fileInputElement: FileDragAndDrop
};
2015-09-10 10:51:47 +02:00
},
getInitialState() {
return {
value: null,
file: null
2015-09-10 10:51:47 +02:00
};
},
submitFile(file) {
2015-09-10 10:51:47 +02:00
this.setState({
file,
value: file.key
2015-09-10 10:51:47 +02:00
});
2015-09-14 16:15:01 +02:00
if (this.state.value && typeof this.props.onChange === 'function') {
this.props.onChange({ target: { value: this.state.value } });
}
if (typeof this.props.submitFile === 'function') {
this.props.submitFile(file);
2015-09-14 16:15:01 +02:00
}
2015-09-10 10:51:47 +02:00
},
2015-09-10 11:22:42 +02:00
reset() {
this.refs.fineuploader.reset();
},
2015-09-10 10:51:47 +02:00
createBlobRoutine() {
const { fineuploader } = this.refs;
const { file } = this.state;
fineuploader.createBlob(file);
},
2015-09-10 11:22:42 +02:00
render() {
const { areAssetsDownloadable,
createBlobRoutine,
2016-02-08 14:08:54 +01:00
enableLocalHashing,
disabled,
fileClassToUpload,
fileInputElement,
2016-02-08 14:08:54 +01:00
handleChangedFile,
isFineUploaderActive,
isReadyForFormSubmission,
keyRoutine,
onValidationFailed,
setIsUploadReady,
2016-02-08 14:08:54 +01:00
setWarning,
showErrorPrompt,
uploadMethod,
2016-02-08 14:08:54 +01:00
validation } = this.props;
2015-12-04 16:34:25 +01:00
let editable = isFineUploaderActive;
2015-09-10 10:51:47 +02:00
// if disabled is actually set by property, we want to override
// isFineUploaderActive
if (typeof disabled !== 'undefined') {
editable = !disabled;
2015-09-10 10:51:47 +02:00
}
return (
<ReactS3FineUploader
2015-09-10 11:22:42 +02:00
ref="fineuploader"
fileInputElement={fileInputElement}
keyRoutine={keyRoutine}
createBlobRoutine={createBlobRoutine}
validation={validation}
submitFile={this.submitFile}
2015-12-21 11:53:27 +01:00
onValidationFailed={onValidationFailed}
setIsUploadReady={setIsUploadReady}
isReadyForFormSubmission={isReadyForFormSubmission}
areAssetsDownloadable={areAssetsDownloadable}
2015-09-10 10:51:47 +02:00
areAssetsEditable={editable}
setWarning={setWarning}
2015-12-08 18:22:11 +01:00
showErrorPrompt={showErrorPrompt}
2015-09-10 10:51:47 +02:00
signature={{
endpoint: AppConstants.serverUrl + 's3/signature/',
customHeaders: {
'X-CSRFToken': getCookie(AppConstants.csrftoken)
}
}}
deleteFile={{
enabled: true,
method: 'DELETE',
endpoint: AppConstants.serverUrl + 's3/delete',
customHeaders: {
'X-CSRFToken': getCookie(AppConstants.csrftoken)
}
}}
enableLocalHashing={enableLocalHashing}
uploadMethod={uploadMethod}
fileClassToUpload={fileClassToUpload}
handleChangedFile={handleChangedFile} />
2015-09-10 10:51:47 +02:00
);
}
});
export default InputFineUploader;