/*!
* 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 GridSection from 'nfvo-components/grid/GridSection.jsx';
import GridItem from 'nfvo-components/grid/GridItem.jsx';
import {TabsForm as Form} from 'nfvo-components/input/validation/Form.jsx';
import Tabs from 'nfvo-components/input/validation/Tabs.jsx';
import Tab from 'react-bootstrap/lib/Tab.js';
import Input from 'nfvo-components/input/validation/Input.jsx';
import DualListboxView from 'nfvo-components/input/dualListbox/DualListboxView.jsx';
import i18n from 'nfvo-utils/i18n/i18n.js';
import Validator from 'nfvo-utils/Validator.js';
import {enums as LicenseAgreementEnums, optionsInputValues as LicenseAgreementOptionsInputValues, LA_EDITOR_FORM} from './LicenseAgreementConstants.js';
const dualBoxFilterTitle = {
left: i18n('Available Feature Groups'),
right: i18n('Selected Feature Groups')
};
const LicenseAgreementPropType = React.PropTypes.shape({
id: React.PropTypes.string,
name: React.PropTypes.string,
description: React.PropTypes.string,
requirementsAndConstrains: React.PropTypes.string,
licenseTerm: React.PropTypes.object,
featureGroupsIds: React.PropTypes.arrayOf(React.PropTypes.string),
version: React.PropTypes.object
});
const GeneralTabContent = ({data, genericFieldInfo, onDataChanged, validateName, validateLTChoice}) => {
let {name, description, requirementsAndConstrains, licenseTerm} = data;
return (
onDataChanged({name}, LA_EDITOR_FORM, { name: validateName })}
label={i18n('Name')}
value={name}
data-test-id='create-la-name'
name='license-agreement-name'
isRequired={true}
type='text'/>
onDataChanged({requirementsAndConstrains}, LA_EDITOR_FORM)}
label={i18n('Requirements and Constraints')}
value={requirementsAndConstrains}
data-test-id='create-la-requirements-constants'
name='license-agreement-requirements-and-constraints'
type='textarea'/>
{
const selectedIndex = e.target.selectedIndex;
const licenseTerm = e.target.options[selectedIndex].value;
onDataChanged({licenseTerm:{choice: licenseTerm, other: ''}}, LA_EDITOR_FORM, { licenseTerm: validateLTChoice });
}}
isValid={genericFieldInfo.licenseTerm.isValid}
errorText={genericFieldInfo.licenseTerm.errorText}
className='input-options-select'
groupClassName='bootstrap-input-options'
data-test-id='create-la-license-term' >
{LicenseAgreementOptionsInputValues.LICENSE_MODEL_TYPE.map(mtype =>
)}
onDataChanged({description}, LA_EDITOR_FORM)}
label={i18n('Description')}
value={description}
overlayPos='bottom'
data-test-id='create-la-description'
name='license-agreement-description'
isRequired={true}
type='textarea'/>
);
};
class LicenseAgreementEditorView extends React.Component {
static propTypes = {
data: LicenseAgreementPropType,
previousData: LicenseAgreementPropType,
LANames: React.PropTypes.object,
isReadOnlyMode: React.PropTypes.bool,
onDataChanged: React.PropTypes.func.isRequired,
onSubmit: React.PropTypes.func.isRequired,
onCancel: React.PropTypes.func.isRequired,
selectedTab: React.PropTypes.number,
onTabSelect: React.PropTypes.func,
selectedFeatureGroupsButtonTab: React.PropTypes.number,
onFeatureGroupsButtonTabSelect: React.PropTypes.func,
featureGroupsList: DualListboxView.propTypes.availableList
};
static defaultProps = {
selectedTab: LicenseAgreementEnums.SELECTED_LICENSE_AGREEMENT_TAB.GENERAL,
data: {}
};
state = {
localFeatureGroupsListFilter: ''
};
render() {
let {selectedTab, onTabSelect, isReadOnlyMode, featureGroupsList, data, onDataChanged, genericFieldInfo} = this.props;
return (
);
}
submit() {
const {data: licenseAgreement, previousData: previousLicenseAgreement} = this.props;
this.props.onSubmit({licenseAgreement, previousLicenseAgreement});
}
validateLTChoice(value) {
if (!value.choice) {
return {isValid: false, errorText: i18n('Field is required')};
}
return {isValid: true, errorText: ''};
}
validateName(value) {
const {data: {id}, LANames} = this.props;
const isExists = Validator.isItemNameAlreadyExistsInList({itemId: id, itemName: value, list: LANames});
return !isExists ? {isValid: true, errorText: ''} :
{isValid: false, errorText: i18n('License Agreement by the name \'' + value + '\' already exists. License agreement name must be unique')};
}
}
export default LicenseAgreementEditorView;