/*!
* 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;