2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing
14 * permissions and limitations under the License.
16 import React, { Component } from 'react';
17 import PropTypes from 'prop-types';
18 import accept from 'attr-accept';
19 import { SVGIcon, Tab, Tabs } from 'sdc-ui/lib/react';
20 import { tabsMapping } from './SoftwareProductAttachmentsConstants.js';
21 import i18n from 'nfvo-utils/i18n/i18n.js';
22 import HeatValidation from './validation/HeatValidation.js';
23 import { onboardingOriginTypes } from 'sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js';
24 import Button from 'sdc-ui/lib/react/Button.js';
26 class HeatScreenView extends Component {
28 isValidationAvailable: PropTypes.bool,
29 goToOverview: PropTypes.bool,
30 setActiveTab: PropTypes.func
34 if (!this.props.goToOverview && this.props.candidateInProcess) {
35 this.props.setActiveTab({ activeTab: tabsMapping.VALIDATION });
41 isValidationAvailable,
60 <div className="vsp-attachments-view">
61 <div className="attachments-view-controllers">
62 {activeTab === tabsMapping.SETUP &&
63 candidateInProcess && (
65 data-test-id="proceed-to-validation-btn"
66 disabled={!isValidationAvailable}
67 className="proceed-to-validation-btn"
68 onClick={() => this.validate()}>
69 {i18n('PROCEED TO VALIDATION')}
72 {candidateInProcess && (
74 onClick={onUploadAbort}
76 className="icon-component abort-btn"
80 data-test-id="abort-btn"
83 {activeTab === tabsMapping.VALIDATION &&
84 softwareProductId && (
87 data-test-id="go-to-overview"
88 disabled={this.props.goToOverview !== true}
89 className="go-to-overview-btn"
91 this.props.goToOverview
92 ? () => onGoToOverview({ version })
95 {i18n('GO TO OVERVIEW')}
98 <div className="separator" />
100 disabled={heatDataExist ? false : true}
102 className="icon-component"
108 heatCandidate: heatSetup,
116 data-test-id="download-heat"
120 className="icon-component"
122 disabled={isReadOnlyMode || candidateInProcess}
127 this.refs.hiddenImportFileInput.click(evt)
129 data-test-id="upload-heat"
132 ref="hiddenImportFileInput"
136 onChange={evt => this.handleImport(evt)}
140 className="attachments-tabs"
142 activeTab={activeTab}
143 onTabClick={key => this.handleTabPress(key)}>
145 tabId={tabsMapping.SETUP}
148 onboardingOrigin === onboardingOriginTypes.CSAR
151 heatDataExist={heatDataExist}
152 changeAttachmentsTab={tab =>
153 setActiveTab({ activeTab: tab })
155 onProcessAndValidate={onProcessAndValidate}
156 softwareProductId={softwareProductId}
157 isReadOnlyMode={isReadOnlyMode}
162 tabId={tabsMapping.VALIDATION}
164 disabled={!isValidationAvailable || candidateInProcess}>
165 <HeatValidation {...other} />
172 handleTabPress(key) {
173 let { setActiveTab } = this.props;
175 case tabsMapping.VALIDATION:
176 setActiveTab({ activeTab: tabsMapping.VALIDATION });
178 case tabsMapping.SETUP:
179 setActiveTab({ activeTab: tabsMapping.SETUP });
185 evt.preventDefault();
186 let file = this.refs.hiddenImportFileInput.files[0];
187 if (!(file && file.size && accept(file, ['.zip', '.csar']))) {
188 this.props.onInvalidFileUpload();
191 let { version } = this.props;
192 let formData = new FormData();
193 formData.append('upload', file);
194 this.refs.hiddenImportFileInput.value = '';
195 this.props.onUpload(formData, version);
201 onProcessAndValidate,
206 onProcessAndValidate({
208 heatDataCache: heatSetupCache,
211 }).then(() => setActiveTab({ activeTab: tabsMapping.VALIDATION }));
214 return this.props.onboardingOrigin === onboardingOriginTypes.ZIP
215 ? this.props.onSave(this.props.heatSetup, this.props.version)
220 export default HeatScreenView;