1 import React from 'react';
2 import i18n from 'nfvo-utils/i18n/i18n.js';
3 import ValidationInput from 'nfvo-components/input/validation/ValidationInput.jsx';
4 import ValidationForm from 'nfvo-components/input/validation/ValidationForm.jsx';
6 import SoftwareProductCategoriesHelper from 'sdc-app/onboarding/softwareProduct/SoftwareProductCategoriesHelper.js';
9 const SoftwareProductPropType = React.PropTypes.shape({
10 id: React.PropTypes.string,
11 name: React.PropTypes.string,
12 description: React.PropTypes.string,
13 category: React.PropTypes.string,
14 subCategory: React.PropTypes.string,
15 vendorId: React.PropTypes.string
18 class SoftwareProductCreationView extends React.Component {
21 data: SoftwareProductPropType,
22 finalizedLicenseModelList: React.PropTypes.array,
23 softwareProductCategories: React.PropTypes.array,
24 onDataChanged: React.PropTypes.func.isRequired,
25 onSubmit: React.PropTypes.func.isRequired,
26 onCancel: React.PropTypes.func.isRequired
30 let {softwareProductCategories, data = {}, onDataChanged, onCancel} = this.props;
31 let {name, description, vendorId, subCategory} = data;
33 const vendorList = this.getVendorList();
36 <div className='software-product-creation-page'>
40 onSubmit={() => this.submit() }
41 onReset={() => onCancel() }
43 <div className='software-product-form-row'>
44 <div className='software-product-inline-section'>
48 ref='software-product-name'
49 onChange={name => onDataChanged({name})}
50 validations={{validateName: true, maxLength: 25, required: true}}
52 className='field-section'/>
54 onEnumChange={vendorId => onDataChanged({vendorId})}
56 label={i18n('Vendor')}
58 validations={{required: true}}
60 className='field-section'/>
62 label={i18n('Category')}
65 onChange={subCategory => this.onSelectSubCategory(subCategory)}
66 validations={{required: true}}
67 className='options-input-category'>
68 <option key='' value=''>{i18n('please select…')}</option>
69 {softwareProductCategories.map(category =>
70 category.subcategories &&
73 label={category.name}>{category.subcategories.map(sub =>
74 <option key={sub.uniqueId} value={sub.uniqueId}>{`${sub.name} (${category.name})`}</option>)}
79 <div className='software-product-inline-section'>
82 label={i18n('Description')}
84 onChange={description => onDataChanged({description})}
85 validations={{freeEnglishText: true, maxLength: 1000, required: true}}
87 className='field-section'/>
96 let {finalizedLicenseModelList} = this.props;
98 return [{enum: '', title: i18n('please select...')}].concat(finalizedLicenseModelList.map(vendor => {
101 title: vendor.vendorName
106 onSelectSubCategory(subCategory) {
107 let {softwareProductCategories, onDataChanged} = this.props;
108 let category = SoftwareProductCategoriesHelper.getCurrentCategoryOfSubCategory(subCategory, softwareProductCategories);
109 onDataChanged({category, subCategory});
113 this.refs.validationForm.handleFormSubmit(new Event('dummy'));
117 const {data:softwareProduct, finalizedLicenseModelList} = this.props;
118 softwareProduct.vendorName = finalizedLicenseModelList.find(vendor => vendor.id === softwareProduct.vendorId).vendorName;
119 this.props.onSubmit(softwareProduct);
123 export default SoftwareProductCreationView;