blob: ba92d26067d982f6b38f9b4c47d9a3f1331c3d2a [file] [log] [blame]
/*!
* 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 from 'react';
import PropTypes from 'prop-types';
import i18n from 'nfvo-utils/i18n/i18n.js';
import Input from 'nfvo-components/input/validation/Input.jsx';
import Form from 'nfvo-components/input/validation/Form.jsx';
const VersionPropType = PropTypes.shape({
name: PropTypes.string,
description: PropTypes.string,
creationMethod: PropTypes.string
});
class VersionsPageCreationView extends React.Component {
static propTypes = {
data: VersionPropType,
availableMethods: PropTypes.array,
onDataChanged: PropTypes.func.isRequired,
onSubmit: PropTypes.func.isRequired,
onCancel: PropTypes.func.isRequired
};
render() {
let {
data = {},
genericFieldInfo,
baseVersion,
onDataChanged,
onCancel
} = this.props;
let { additionalInfo: { OptionalCreationMethods } } = baseVersion;
let { description, creationMethod } = data;
return (
<div className="version-creation-page">
{genericFieldInfo && (
<Form
ref={validationForm =>
(this.validationForm = validationForm)
}
hasButtons={true}
onSubmit={() => this.submit()}
submitButtonText={i18n('Create')}
onReset={() => onCancel()}
labledButtons={true}
isValid={this.props.isFormValid}
formReady={this.props.formReady}
onValidateForm={() => this.validate()}>
<div className="version-form-row">
<Input
label={i18n('Version Category')}
value={creationMethod}
onChange={e => this.onSelectMethod(e)}
type="select"
overlayPos="bottom"
data-test-id="new-version-category"
isValid={
genericFieldInfo.creationMethod.isValid
}
errorText={
genericFieldInfo.creationMethod.errorText
}
isRequired>
<option key="" value="">
{i18n('Please select…')}
</option>
{OptionalCreationMethods.map(method => (
<option key={method} value={method}>
{i18n(method)}
</option>
))}
</Input>
</div>
<div className="version-form-row">
<Input
label={i18n('Description')}
value={description}
type="text"
overlayPos="bottom"
data-test-id="new-version-description"
isValid={genericFieldInfo.description.isValid}
errorText={
genericFieldInfo.description.errorText
}
onChange={description =>
onDataChanged({ description })
}
isRequired
/>
</div>
</Form>
)}
</div>
);
}
onSelectMethod(e) {
const selectedIndex = e.target.selectedIndex;
const creationMethod = e.target.options[selectedIndex].value;
this.props.onDataChanged({ creationMethod });
}
submit() {
let { baseVersion, data: { description, creationMethod } } = this.props;
this.props.onSubmit({
baseVersion,
payload: { description, creationMethod }
});
}
validate() {
this.props.onValidateForm();
}
}
export default VersionsPageCreationView;
/*
<div className='software-product-inline-section'>
<Input
value={name}
label={i18n('Name')}
isRequired={true}
onChange={name => onDataChanged({name},V_CREATION_FORM_NAME, {name: name => this.validateName(name)})}
isValid={genericFieldInfo.name.isValid}
errorText={genericFieldInfo.name.errorText}
type='text'
className='field-section'
data-test-id='new-vsp-name' />
<Input
label={i18n('Vendor')}
type='select'
value={vendorId}
isRequired={true}
disabled={disableVendor}
onChange={e => this.onSelectVendor(e)}
isValid={genericFieldInfo.vendorId.isValid}
errorText={genericFieldInfo.vendorId.errorText}
className='input-options-select'
groupClassName='bootstrap-input-options'
data-test-id='new-vsp-vendor' >
{vendorList.map(vendor =>
<option key={vendor.title} value={vendor.enum}>{vendor.title}</option>)}
</Input>
<Input
label={i18n('Category')}
type='select'
value={subCategory}
isRequired={true}
onChange={e => this.onSelectSubCategory(e)}
isValid={genericFieldInfo.subCategory.isValid}
errorText={genericFieldInfo.subCategory.errorText}
className='input-options-select'
groupClassName='bootstrap-input-options'
data-test-id='new-vsp-category' >
<option key='' value=''>{i18n('please select…')}</option>
{softwareProductCategories.map(category =>
category.subcategories &&
<optgroup
key={category.name}
label={category.name}>{category.subcategories.map(sub =>
<option key={sub.uniqueId} value={sub.uniqueId}>{`${sub.name} (${category.name})`}</option>)}
</optgroup>)
}
</Input>
</div>
<div className='software-product-inline-section'>
<Input
value={description}
label={i18n('Description')}
isRequired={true}
overlayPos='bottom'
onChange={description => onDataChanged({description},V_CREATION_FORM_NAME)}
isValid={genericFieldInfo.description.isValid}
errorText={genericFieldInfo.description.errorText}
type='textarea'
className='field-section'
data-test-id='new-vsp-description' />
</div>
</div>
</Form>}
</div>
);
}
getAvailableMethodsList() {
let {availableMethods} = this.props;
return [...availableMethods];
}
onSelectVendor(e) {
const selectedIndex = e.target.selectedIndex;
const vendorId = e.target.options[selectedIndex].value;
this.props.onDataChanged({vendorId},V_CREATION_FORM_NAME);
}
onSelectSubCategory(e) {
const selectedIndex = e.target.selectedIndex;
const subCategory = e.target.options[selectedIndex].value;
let {softwareProductCategories, onDataChanged} = this.props;
let category = SoftwareProductCategoriesHelper.getCurrentCategoryOfSubCategory(subCategory, softwareProductCategories);
onDataChanged({category, subCategory},V_CREATION_FORM_NAME);
}
submit() {
let {data:softwareProduct, finalizedLicenseModelList} = this.props;
softwareProduct.vendorName = finalizedLicenseModelList.find(vendor => vendor.id === softwareProduct.vendorId).name;
this.props.onSubmit(softwareProduct);
}
validateName(value) {
const {data: {id}, VSPNames} = this.props;
const isExists = Validator.isItemNameAlreadyExistsInList({itemId: id, itemName: value, list: VSPNames});
return !isExists ? {isValid: true, errorText: ''} :
{isValid: false, errorText: i18n('Software product by the name \'' + value + '\' already exists. Software product name must be unique')};
}
validate() {
this.props.onValidateForm(SP_CREATION_FORM_NAME);
}
}
export default SoftwareProductCreationView;
*/