/* * Copyright © 2016-2018 European Support Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import React from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import Dropzone from 'react-dropzone'; import i18n from 'nfvo-utils/i18n/i18n.js'; import DraggableUploadFileBox from 'nfvo-components/fileupload/DraggableUploadFileBox.jsx'; import SVGIcon from 'sdc-ui/lib/react/SVGIcon.js'; import SoftwareProductComponentsList from 'sdc-app/onboarding/softwareProduct/components/SoftwareProductComponents.js'; const SoftwareProductPropType = PropTypes.shape({ name: PropTypes.string, description: PropTypes.string, version: PropTypes.string, id: PropTypes.string, categoryId: PropTypes.string, vendorId: PropTypes.string, status: PropTypes.string, licensingData: PropTypes.object, validationData: PropTypes.object }); const ComponentPropType = PropTypes.shape({ id: PropTypes.string, name: PropTypes.string, displayName: PropTypes.string, description: PropTypes.string }); class SoftwareProductLandingPageView extends React.Component { state = { fileName: '', dragging: false, files: [] }; static propTypes = { currentSoftwareProduct: SoftwareProductPropType, isReadOnlyMode: PropTypes.bool, componentsList: PropTypes.arrayOf(ComponentPropType), version: PropTypes.object, onDetailsSelect: PropTypes.func, onUpload: PropTypes.func, onUploadConfirmation: PropTypes.func, onInvalidFileSizeUpload: PropTypes.func, onComponentSelect: PropTypes.func, onAddComponent: PropTypes.func }; componentDidMount() { const {onCandidateInProcess, currentSoftwareProduct} = this.props; if (currentSoftwareProduct.candidateOnboardingOrigin) { onCandidateInProcess(currentSoftwareProduct.id); } } render() { let {currentSoftwareProduct, isReadOnlyMode, isManual, onDetailsSelect} = this.props; return (
this.handleImportSubmit(files, isReadOnlyMode, isManual)} onDragEnter={() => this.handleOnDragEnter(isReadOnlyMode, isManual)} onDragLeave={() => this.setState({dragging:false})} multiple={false} disableClick={true} ref='fileInput' name='fileInput' accept='.zip, .csar'>
{this.renderProductDetails(isManual, isReadOnlyMode)}
); } handleOnDragEnter(isReadOnlyMode, isManual) { if (!isReadOnlyMode && !isManual) { this.setState({dragging: true}); } } renderProductDetails(isManual, isReadOnlyMode) { return (
{ !isManual &&
{i18n('Software Product Attachments')}
this.refs.fileInput.open()}/>
}
); } handleImportSubmit(files, isReadOnlyMode, isManual) { if (isReadOnlyMode || isManual) { return; } if (files[0] && files[0].size) { this.setState({ fileName: files[0].name, dragging: false, complete: '0', }); this.startUploading(files); } else { this.setState({ dragging: false }); this.props.onInvalidFileSizeUpload(); } } startUploading(files) { let {onUpload, currentSoftwareProduct, onUploadConfirmation} = this.props; let {validationData} = currentSoftwareProduct; if (!(files && files.length)) { return; } let file = files[0]; let formData = new FormData(); formData.append('upload', file); this.refs.fileInput.value = ''; if (validationData) { onUploadConfirmation(currentSoftwareProduct.id, formData); }else { onUpload(currentSoftwareProduct.id, formData); } } } const ProductSummary = ({currentSoftwareProduct, onDetailsSelect}) => { let {name = '', description = '', vendorName = '', fullCategoryDisplayName = '', licenseAgreementName = ''} = currentSoftwareProduct; return (
{i18n('Software Product Details')}
onDetailsSelect(currentSoftwareProduct)}>
{name}
{i18n('Vendor')}
{vendorName}
{i18n('Category')}
{fullCategoryDisplayName}
{i18n('License Agreement')}
{i18n('Description')}
{description}
); }; const LicenseAgreement = ({licenseAgreementName}) => { if (!licenseAgreementName) { return (
{i18n('Missing')}
); } return
{licenseAgreementName}
; }; export default SoftwareProductLandingPageView;