1 import React from 'react';
2 import i18n from 'nfvo-utils/i18n/i18n.js';
3 import Dropzone from 'react-dropzone';
6 import ValidationForm from 'nfvo-components/input/validation/ValidationForm.jsx';
7 import ValidationInput from 'nfvo-components/input/validation/ValidationInput.jsx';
9 const SoftwareProductProcessEditorPropType = React.PropTypes.shape({
10 id: React.PropTypes.string,
11 name: React.PropTypes.string,
12 description: React.PropTypes.string,
13 artifactName: React.PropTypes.string
16 class SoftwareProductProcessesEditorView extends React.Component {
24 data: SoftwareProductProcessEditorPropType,
25 previousData: SoftwareProductProcessEditorPropType,
26 isReadOnlyMode: React.PropTypes.bool,
27 onDataChanged: React.PropTypes.func,
28 onSubmit: React.PropTypes.func,
29 onCancel: React.PropTypes.func
33 let {isReadOnlyMode, onCancel, onDataChanged, data = {}} = this.props;
34 let {name, description, artifactName} = data;
40 isReadOnlyMode={isReadOnlyMode}
43 onSubmit={ () => this.submit() }
44 onReset={ () => onCancel() }
45 className='vsp-processes-editor'>
46 <div className={`vsp-processes-editor-data${isReadOnlyMode ? ' disabled' : '' }`}>
48 className={`vsp-process-dropzone-view ${this.state.dragging ? 'active-dragging' : ''}`}
49 onDrop={files => this.handleImportSubmit(files)}
50 onDragEnter={() => this.setState({dragging:true})}
51 onDragLeave={() => this.setState({dragging:false})}
54 ref='processEditorFileInput'
55 name='processEditorFileInput'
58 <div className='col-md-6'>
60 onChange={name => onDataChanged({name})}
63 validations={{validateName: true, maxLength: 120, required: true}}
66 label={i18n('Artifacts')}
71 <div className='col-md-6'>
72 <div className='file-upload-box'>
73 <div className='drag-text'>{i18n('Drag & drop for upload')}</div>
74 <div className='or-text'>{i18n('or')}</div>
75 <div className='upload-btn primary-btn' onClick={() => this.refs.processEditorFileInput.open()}>
76 <span className='primary-btn-text'>{i18n('Select file')}</span>
82 onChange={description => onDataChanged({description})}
85 name='vsp-process-description'
86 className='vsp-process-description'
87 validations={{maxLength: 1000}}
97 const {data: process, previousData: previousProcess} = this.props;
98 let {files} = this.state;
99 let formData = new FormData();
102 formData.append('upload', file);
105 let updatedProcess = {
107 formData: files.length ? formData : false
109 this.props.onSubmit({process: updatedProcess, previousProcess});
113 handleImportSubmit(files) {
114 let {onDataChanged} = this.props;
120 onDataChanged({artifactName: files[0].name});
124 export default SoftwareProductProcessesEditorView;