/*!
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
*
* 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, PropTypes} from 'react';
import i18n from 'nfvo-utils/i18n/i18n.js';
import sortByStringProperty from 'nfvo-utils/sortByStringProperty.js';
import Form from 'nfvo-components/input/validation/Form.jsx';
import Input from 'nfvo-components/input/validation/Input.jsx';
import InputOptions from 'nfvo-components/input/validation/InputOptions.jsx';
import GridSection from 'nfvo-components/grid/GridSection.jsx';
import GridItem from 'nfvo-components/grid/GridItem.jsx';
import SoftwareProductCategoriesHelper from 'sdc-app/onboarding/softwareProduct/SoftwareProductCategoriesHelper.js';
import {forms} from 'sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js';
class GeneralSection extends React.Component {
static propTypes = {
vendorId: PropTypes.string,
name: PropTypes.string,
description: PropTypes.string,
subCategory: PropTypes.string,
softwareProductCategories: PropTypes.array,
finalizedLicenseModelList: PropTypes.array,
onDataChanged: PropTypes.func.isRequired,
onVendorParamChanged: PropTypes.func.isRequired,
onSelectSubCategory: PropTypes.func.isRequired
};
onVendorParamChanged(e) {
const selectedIndex = e.target.selectedIndex;
const vendorId = e.target.options[selectedIndex].value;
this.props.onVendorParamChanged({vendorId}, forms.VENDOR_SOFTWARE_PRODUCT_DETAILS);
}
onSelectSubCategory(e) {
const selectedIndex = e.target.selectedIndex;
const subCategory = e.target.options[selectedIndex].value;
this.props.onSelectSubCategory(subCategory);
}
render (){
let {genericFieldInfo} = this.props;
return (
{genericFieldInfo &&
name.length <= 25 && this.props.onDataChanged({name}, forms.VENDOR_SOFTWARE_PRODUCT_DETAILS)}/>
this.onVendorParamChanged(e)}>
{sortByStringProperty(
this.props.finalizedLicenseModelList,
'vendorName'
).map(lm => {lm.vendorName} )
}
this.onSelectSubCategory(e)}>
{
this.props.softwareProductCategories.map(category =>
category.subcategories &&
{category.subcategories.map(sub =>
{`${sub.name} (${category.name})`} )}
)
}
this.props.onDataChanged({description}, forms.VENDOR_SOFTWARE_PRODUCT_DETAILS)}/>
}
);
}
}
class LicensesSection extends React.Component {
static propTypes = {
onVendorParamChanged: PropTypes.func.isRequired,
vendorId: PropTypes.string,
licensingVersion: PropTypes.object,
licensingVersionsList: PropTypes.array,
licensingData: PropTypes.shape({
licenceAgreement: PropTypes.string,
featureGroups: PropTypes.array
}),
onFeatureGroupsChanged: PropTypes.func.isRequired,
onLicensingDataChanged: PropTypes.func.isRequired,
featureGroupsList: PropTypes.array,
licenseAgreementList: PropTypes.array
};
onVendorParamChanged(e) {
const selectedIndex = e.target.selectedIndex;
const licensingVersion = e.target.options[selectedIndex].value;
this.props.onVendorParamChanged({vendorId: this.props.vendorId, licensingVersion:{id:licensingVersion, label: licensingVersion}}, forms.VENDOR_SOFTWARE_PRODUCT_DETAILS);
}
onLicensingDataChanged(e) {
const selectedIndex = e.target.selectedIndex;
const licenseAgreement = e.target.options[selectedIndex].value;
this.props.onLicensingDataChanged({licenseAgreement, featureGroups: []});
}
render(){
return (
this.onVendorParamChanged(e)}
value={this.props.licensingVersion ? this.props.licensingVersion.id : ''}
label={i18n('Licensing Version')}
type='select'>
{this.props.licensingVersionsList.map(version =>
{version.title}
)}
this.onLicensingDataChanged(e)}>
{i18n('Select...')}
{this.props.licenseAgreementList.map(la => {la.name} )}
{this.props.licensingData.licenseAgreement && (
{}}
onEnumChange={featureGroups => this.props.onFeatureGroupsChanged({featureGroups})}
multiSelectedEnum={this.props.licensingData.featureGroups}
name='feature-groups'
label={i18n('Feature Groups')}
clearable={false}
values={this.props.featureGroupsList}/>)
}
);
}
}
const AvailabilitySection = (props) => (
props.onQDataChanged({'general/availability/useAvailabilityZonesForHighAvailability' : aZone})} />
);
const RegionsSection = (props) => (
{}}
onEnumChange={(regions) => props.onQDataChanged({'general/regionsData/regions' : regions})}
multiSelectedEnum={props.dataMap['general/regionsData/regions']}
name='vsp-regions'
clearable={false}
values={props.genericFieldInfo['general/regionsData/regions'].enum} />
);
const StorageDataReplicationSection = (props) => (
props.onQDataChanged({'general/storageDataReplication/storageReplicationSize' : sRep})} />
props.onQDataChanged({'general/storageDataReplication/storageReplicationSource' : sRepSource})} />
props.onQDataChanged({'general/storageDataReplication/storageReplicationFrequency' : sRepFreq})} />
props.onQDataChanged({'general/storageDataReplication/storageReplicationDestination' : sRepDest})} />
);
class SoftwareProductDetails extends Component {
static propTypes = {
vendorName: PropTypes.string,
currentSoftwareProduct: PropTypes.shape({
id: PropTypes.string,
name: PropTypes.string,
description: PropTypes.string,
category: PropTypes.string,
subCategory: PropTypes.string,
vendorId: PropTypes.string,
vendorName: PropTypes.string,
licensingVersion: PropTypes.object,
licensingData: PropTypes.shape({
licenceAgreement: PropTypes.string,
featureGroups: PropTypes.array
})
}),
softwareProductCategories: PropTypes.array,
finalizedLicenseModelList: PropTypes.array,
licenseAgreementList: PropTypes.array,
featureGroupsList: PropTypes.array,
onSubmit: PropTypes.func.isRequired,
onDataChanged: PropTypes.func.isRequired,
onValidityChanged: PropTypes.func.isRequired,
qdata: PropTypes.object.isRequired,
onQDataChanged: PropTypes.func.isRequired,
onVendorParamChanged: PropTypes.func.isRequired
};
state = {
licensingVersionsList: []
};
prepareDataForGeneralSection(){
let {softwareProductCategories, finalizedLicenseModelList, onDataChanged, currentSoftwareProduct, genericFieldInfo} = this.props;
let {name, description, vendorId, subCategory} = currentSoftwareProduct;
return {
name,
description,
vendorId,
subCategory,
softwareProductCategories,
finalizedLicenseModelList,
onDataChanged,
onVendorParamChanged: args => this.onVendorParamChanged(args),
onSelectSubCategory: args => this.onSelectSubCategory(args),
genericFieldInfo
};
}
prepareDataForLicensesSection(){
let { featureGroupsList, licenseAgreementList, currentSoftwareProduct } = this.props;
let {vendorId, licensingVersion, licensingData = {}} = currentSoftwareProduct;
let licensingVersionsList = this.state.licensingVersionsList.length > 0 ? this.state.licensingVersionsList : this.refreshVendorVersionsList(vendorId);
return {
onVendorParamChanged: args => this.onVendorParamChanged(args),
vendorId,
licensingVersion,
licensingVersionsList,
licensingData,
onFeatureGroupsChanged: args => this.onFeatureGroupsChanged(args),
onLicensingDataChanged: args => this.onLicensingDataChanged(args),
featureGroupsList,
licenseAgreementList,
};
}
render() {
let {currentSoftwareProduct} = this.props;
let {qdata, onQDataChanged, dataMap, qGenericFieldInfo} = this.props;
let {isReadOnlyMode} = this.props;
return (
);
}
onVendorParamChanged({vendorId, licensingVersion}) {
let {finalizedLicenseModelList, onVendorParamChanged} = this.props;
if(!licensingVersion) {
const licensingVersionsList = this.refreshVendorVersionsList(vendorId);
licensingVersion = licensingVersionsList.length > 0 ? licensingVersionsList[0].enum : '';
}
let vendorName = finalizedLicenseModelList.find(licenseModelItem => licenseModelItem.id === vendorId).vendorName || '';
let deltaData = {
vendorId,
vendorName,
licensingVersion,
licensingData: {}
};
onVendorParamChanged(deltaData, forms.VENDOR_SOFTWARE_PRODUCT_DETAILS);
}
refreshVendorVersionsList(vendorId) {
if(!vendorId) {
return [];
}
let {finalVersions} = this.props.finalizedLicenseModelList.find(vendor => vendor.id === vendorId);
let licensingVersionsList = [{
enum: '',
title: i18n('Select...')
}];
if(finalVersions) {
finalVersions.forEach(version => licensingVersionsList.push({
enum: version.id,
title: version.label
}));
}
return licensingVersionsList;
}
onFeatureGroupsChanged({featureGroups}) {
this.onLicensingDataChanged({featureGroups});
}
onLicensingDataChanged(deltaData) {
this.props.onDataChanged({
licensingData: {
...this.props.currentSoftwareProduct.licensingData,
...deltaData
}
}, forms.VENDOR_SOFTWARE_PRODUCT_DETAILS);
}
onSelectSubCategory(subCategory) {
let {softwareProductCategories, onDataChanged} = this.props;
let category = SoftwareProductCategoriesHelper.getCurrentCategoryOfSubCategory(subCategory, softwareProductCategories);
onDataChanged({category, subCategory}, forms.VENDOR_SOFTWARE_PRODUCT_DETAILS);
}
save(){
return this.validationForm.handleFormSubmit(new Event('dummy'));
}
}
export default SoftwareProductDetails;