1 import React from 'react';
2 import Dropzone from 'react-dropzone';
3 import classnames from 'classnames';
5 import i18n from 'nfvo-utils/i18n/i18n.js';
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 onClose: React.PropTypes.func
33 let {data = {}, isReadOnlyMode, onDataChanged, onClose} = this.props;
34 let {name, description, artifactName} = data;
40 isReadOnlyMode={isReadOnlyMode}
41 onSubmit={ () => this.submit() }
42 onReset={ () => onClose() }
43 className='vsp-processes-editor'>
44 <div className={classnames('vsp-processes-editor-data', {'disabled': isReadOnlyMode})}>
46 className={classnames('vsp-process-dropzone-view', {'active-dragging': this.state.dragging})}
47 onDrop={files => this.handleImportSubmit(files)}
48 onDragEnter={() => this.setState({dragging: true})}
49 onDragLeave={() => this.setState({dragging: false})}
52 ref='processEditorFileInput'
53 name='processEditorFileInput'
56 <div className='col-md-6'>
58 onChange={name => onDataChanged({name})}
61 validations={{validateName: true, maxLength: 120, required: true}}
64 label={i18n('Artifacts')}
69 <div className='col-md-6'>
70 <div className='file-upload-box'>
71 <div className='drag-text'>{i18n('Drag & drop for upload')}</div>
72 <div className='or-text'>{i18n('or')}</div>
73 <div className='upload-btn primary-btn' onClick={() => this.refs.processEditorFileInput.open()}>
74 <span className='primary-btn-text'>{i18n('Select file')}</span>
80 onChange={description => onDataChanged({description})}
83 name='vsp-process-description'
84 className='vsp-process-description'
85 validations={{maxLength: 1000}}
94 const {data: process, previousData: previousProcess} = this.props;
95 let {files} = this.state;
99 formData = new FormData();
100 formData.append('upload', file);
103 let updatedProcess = {
107 this.props.onSubmit({process: updatedProcess, previousProcess});
111 handleImportSubmit(files) {
112 let {onDataChanged} = this.props;
118 onDataChanged({artifactName: files[0].name});
122 export default SoftwareProductProcessesEditorView;