2015-09-01 14:42:09 +02:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
import React from 'react';
|
|
|
|
|
|
|
|
import Form from '../ascribe_forms/form';
|
|
|
|
import Property from '../ascribe_forms/property';
|
2015-09-01 16:57:12 +02:00
|
|
|
import InputCheckbox from '../ascribe_forms/input_checkbox';
|
2015-09-01 14:42:09 +02:00
|
|
|
|
2015-09-02 16:34:43 +02:00
|
|
|
import GlobalNotificationModel from '../../models/global_notification_model';
|
|
|
|
import GlobalNotificationActions from '../../actions/global_notification_actions';
|
|
|
|
|
2015-09-01 14:42:09 +02:00
|
|
|
import ReactS3FineUploader from '../ascribe_uploader/react_s3_fine_uploader';
|
|
|
|
|
|
|
|
import AppConstants from '../../constants/application_constants';
|
|
|
|
import ApiUrls from '../../constants/api_urls';
|
|
|
|
|
|
|
|
import { getLangText } from '../../utils/lang_utils';
|
|
|
|
import { getCookie } from '../../utils/fetch_api_utils';
|
|
|
|
import { formSubmissionValidation } from '../ascribe_uploader/react_s3_fine_uploader_utils';
|
|
|
|
|
|
|
|
let CreateContractForm = React.createClass({
|
|
|
|
|
|
|
|
getInitialState() {
|
|
|
|
return {
|
2015-09-02 13:57:41 +02:00
|
|
|
contractKey: null,
|
2015-09-01 14:42:09 +02:00
|
|
|
isUploadReady: false
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
2015-09-02 13:57:41 +02:00
|
|
|
getFormData(){
|
|
|
|
return {
|
|
|
|
blob: this.state.contractKey
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
2015-09-01 14:42:09 +02:00
|
|
|
submitKey(key) {
|
|
|
|
this.setState({
|
2015-09-02 13:57:41 +02:00
|
|
|
contractKey: key
|
2015-09-01 14:42:09 +02:00
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
setIsUploadReady(isReady) {
|
|
|
|
this.setState({
|
|
|
|
isUploadReady: isReady
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
2015-09-02 16:34:43 +02:00
|
|
|
handleCreateSuccess(response) {
|
|
|
|
let notification = new GlobalNotificationModel(getLangText('Contract %s successfully created', response.name), 'success', 5000);
|
|
|
|
GlobalNotificationActions.appendGlobalNotification(notification);
|
|
|
|
},
|
|
|
|
|
|
|
|
|
2015-09-01 14:42:09 +02:00
|
|
|
render() {
|
|
|
|
return (
|
|
|
|
<Form
|
2015-09-03 15:53:02 +02:00
|
|
|
url={ApiUrls.ownership_contract_list}
|
2015-09-02 13:57:41 +02:00
|
|
|
getFormData={this.getFormData}
|
2015-09-02 16:34:43 +02:00
|
|
|
handleSuccess={this.handleCreateSuccess}
|
2015-09-01 14:42:09 +02:00
|
|
|
buttons={
|
|
|
|
<button
|
|
|
|
type="submit"
|
|
|
|
className="btn ascribe-btn ascribe-btn-login"
|
|
|
|
disabled={!this.state.isUploadReady}>
|
|
|
|
{getLangText('Create new contract')}
|
|
|
|
</button>
|
|
|
|
}
|
|
|
|
spinner={
|
|
|
|
<span className="btn ascribe-btn ascribe-btn-login ascribe-btn-login-spinner">
|
|
|
|
<img src="https://s3-us-west-2.amazonaws.com/ascribe0/media/thumbnails/ascribe_animated_medium.gif" />
|
|
|
|
</span>
|
|
|
|
}>
|
|
|
|
<Property
|
|
|
|
label="Contract file">
|
|
|
|
<ReactS3FineUploader
|
|
|
|
keyRoutine={{
|
|
|
|
url: AppConstants.serverUrl + 's3/key/',
|
|
|
|
fileClass: 'contract'
|
|
|
|
}}
|
|
|
|
createBlobRoutine={{
|
|
|
|
url: ApiUrls.blob_contracts
|
|
|
|
}}
|
|
|
|
validation={{
|
|
|
|
itemLimit: 100000,
|
|
|
|
sizeLimit: '50000000'
|
|
|
|
}}
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
}}
|
|
|
|
areAssetsDownloadable={true}
|
|
|
|
areAssetsEditable={true}
|
|
|
|
submitKey={this.submitKey}
|
|
|
|
setIsUploadReady={this.setIsUploadReady}
|
|
|
|
isReadyForFormSubmission={formSubmissionValidation.atLeastOneUploadedFile}/>
|
|
|
|
</Property>
|
|
|
|
<Property
|
2015-09-02 16:34:43 +02:00
|
|
|
name='name'
|
2015-09-01 14:42:09 +02:00
|
|
|
label={getLangText('Contract name')}>
|
|
|
|
<input
|
|
|
|
type="text"
|
|
|
|
placeholder="(e.g. Loan agreement #1)"
|
|
|
|
required/>
|
|
|
|
</Property>
|
2015-09-01 16:57:12 +02:00
|
|
|
<Property
|
|
|
|
name="public"
|
|
|
|
className="ascribe-settings-property-collapsible-toggle"
|
|
|
|
style={{paddingBottom: 0}}>
|
|
|
|
<InputCheckbox>
|
|
|
|
<span>
|
|
|
|
{' ' + getLangText('I agree to the Terms of Service') + ' '}
|
|
|
|
(<a href="https://www.ascribe.io/terms" target="_blank" style={{fontSize: '0.9em', color: 'rgba(0,0,0,0.7)'}}>
|
|
|
|
{getLangText('read')}
|
|
|
|
</a>)
|
|
|
|
</span>
|
|
|
|
</InputCheckbox>
|
|
|
|
</Property>
|
2015-09-01 14:42:09 +02:00
|
|
|
</Form>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
export default CreateContractForm;
|