/*! * 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/inputOptions/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 => ) } this.onSelectSubCategory(e)}> { this.props.softwareProductCategories.map(category => category.subcategories && {category.subcategories.map(sub => )} ) } 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 => )} this.onLicensingDataChanged(e)}> {this.props.licenseAgreementList.map(la => )} {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 (
this.validationForm = validationForm} className='vsp-general-tab' hasButtons={false} formReady={null} isValid={this.props.isFormValid} onSubmit={() => this.props.onSubmit(currentSoftwareProduct, qdata)} onValidityChanged={(isValidityData) => this.props.onValidityChanged(isValidityData)} isReadOnlyMode={isReadOnlyMode}>
); } 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;