1 import React, {Component, PropTypes} from 'react';
2 import Dropzone from 'react-dropzone';
3 import ButtonGroup from 'react-bootstrap/lib/ButtonGroup.js';
4 import ButtonToolbar from 'react-bootstrap/lib/ButtonToolbar.js';
5 import Button from 'react-bootstrap/lib/Button.js';
6 import i18n from 'nfvo-utils/i18n/i18n.js';
7 import SoftwareProductComponentsMonitoringConstants from './SoftwareProductComponentsMonitoringConstants.js';
9 class SoftwareProductComponentsMonitoringView extends Component {
12 isReadOnlyMode: PropTypes.bool,
13 trapFilename: PropTypes.string,
14 pollFilename: PropTypes.string,
15 softwareProductId: PropTypes.string,
17 onDropMibFileToUpload: PropTypes.func,
18 onDeleteSnmpFile: PropTypes.func
28 <div className='vsp-component-monitoring'>
29 {this.renderDropzoneWithType(SoftwareProductComponentsMonitoringConstants.SNMP_TRAP)}
30 {this.renderDropzoneWithType(SoftwareProductComponentsMonitoringConstants.SNMP_POLL)}
35 renderDropzoneWithType(type) {
36 let {isReadOnlyMode, trapFilename, pollFilename} = this.props;
38 if (type === SoftwareProductComponentsMonitoringConstants.SNMP_TRAP) {
39 fileName = trapFilename;
42 fileName = pollFilename;
44 let refAndName = `fileInput${type.toString()}`;
45 let typeDisplayName = this.getFileTypeDisplayName(type);
48 className={`snmp-dropzone ${this.state.dragging ? 'active-dragging' : ''}`}
49 onDrop={files => this.handleImport(files, {isReadOnlyMode, type, refAndName})}
50 onDragEnter={() => this.handleOnDragEnter(isReadOnlyMode)}
51 onDragLeave={() => this.setState({dragging:false})}
58 <div className='draggable-wrapper'>
59 <div className='section-title'>{typeDisplayName}</div>
60 {fileName ? this.renderUploadedFileName(fileName, type) : this.renderUploadButton(refAndName)}
66 renderUploadButton(refAndName) {
67 let {isReadOnlyMode} = this.props;
70 className={`software-product-landing-view-top-block-col-upl${isReadOnlyMode ? ' disabled' : ''}`}>
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[refAndName].open()}>
74 <span className='primary-btn-text'>{i18n('Select file')}</span>
80 renderUploadedFileName(filename, type) {
84 <Button disabled>{filename}</Button>
85 <Button className='delete-button' onClick={()=>this.props.onDeleteSnmpFile(type)}>X</Button>
92 handleOnDragEnter(isReadOnlyMode) {
93 if (!isReadOnlyMode) {
94 this.setState({dragging: true});
98 handleImport(files, {isReadOnlyMode, type, refAndName}) {
103 this.setState({dragging: false});
105 let formData = new FormData();
106 formData.append('upload', file);
107 this.refs[refAndName].value = '';
108 this.props.onDropMibFileToUpload(formData, type);
111 getFileTypeDisplayName(type) {
112 return type === SoftwareProductComponentsMonitoringConstants.SNMP_TRAP ? 'SNMP Trap' : 'SNMP Poll';
117 export default SoftwareProductComponentsMonitoringView;