/*! * 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, { Component } from 'react'; import PropTypes from 'prop-types'; import accept from 'attr-accept'; import { SVGIcon, Tab, Tabs } from 'sdc-ui/lib/react'; import { tabsMapping } from './SoftwareProductAttachmentsConstants.js'; import i18n from 'nfvo-utils/i18n/i18n.js'; import HeatValidation from './validation/HeatValidation.js'; import { onboardingOriginTypes } from 'sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js'; import Button from 'sdc-ui/lib/react/Button.js'; class HeatScreenView extends Component { static propTypes = { isValidationAvailable: PropTypes.bool, goToOverview: PropTypes.bool, setActiveTab: PropTypes.func }; componentDidMount() { if (!this.props.goToOverview && this.props.candidateInProcess) { this.props.setActiveTab({ activeTab: tabsMapping.VALIDATION }); } } render() { let { isValidationAvailable, isReadOnlyMode, heatDataExist, onDownload, softwareProductId, onProcessAndValidate, onUploadAbort, candidateInProcess, heatSetup, HeatSetupComponent, onGoToOverview, version, onboardingOrigin, activeTab, setActiveTab, ...other } = this.props; return (
{activeTab === tabsMapping.SETUP && candidateInProcess && ( )} {candidateInProcess && ( )} {activeTab === tabsMapping.VALIDATION && softwareProductId && ( )}
onDownload({ heatCandidate: heatSetup, isReadOnlyMode: isReadOnlyMode || !candidateInProcess, version }) : undefined } data-test-id="download-heat" /> this.refs.hiddenImportFileInput.click(evt) } data-test-id="upload-heat" /> this.handleImport(evt)} />
this.handleTabPress(key)}> setActiveTab({ activeTab: tab }) } onProcessAndValidate={onProcessAndValidate} softwareProductId={softwareProductId} isReadOnlyMode={isReadOnlyMode} version={version} />
); } handleTabPress(key) { let { setActiveTab } = this.props; switch (key) { case tabsMapping.VALIDATION: setActiveTab({ activeTab: tabsMapping.VALIDATION }); return; case tabsMapping.SETUP: setActiveTab({ activeTab: tabsMapping.SETUP }); return; } } handleImport(evt) { evt.preventDefault(); let file = this.refs.hiddenImportFileInput.files[0]; if (!(file && file.size && accept(file, ['.zip', '.csar']))) { this.props.onInvalidFileUpload(); return; } let { version } = this.props; let formData = new FormData(); formData.append('upload', file); this.refs.hiddenImportFileInput.value = ''; this.props.onUpload(formData, version); } validate() { let { heatSetup, heatSetupCache, onProcessAndValidate, isReadOnlyMode, version, setActiveTab } = this.props; onProcessAndValidate({ heatData: heatSetup, heatDataCache: heatSetupCache, isReadOnlyMode, version }).then(() => setActiveTab({ activeTab: tabsMapping.VALIDATION })); } save() { return this.props.onboardingOrigin === onboardingOriginTypes.ZIP ? this.props.onSave(this.props.heatSetup, this.props.version) : Promise.resolve(); } } export default HeatScreenView;