/* * Copyright © 2016-2018 European Support Limited * * 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 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 'sdc-ui/lib/react/Tab.js'; import Input from 'nfvo-components/input/validation/Input.jsx'; import InputOptions from 'nfvo-components/input/validation/InputOptions.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 { other as optionInputOther } from 'nfvo-components/input/validation/InputOptions.jsx'; 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 = PropTypes.shape({ id: PropTypes.string, name: PropTypes.string, description: PropTypes.string, licenseTerm: PropTypes.object, featureGroupsIds: PropTypes.arrayOf(PropTypes.string), version: PropTypes.object }); const GeneralTabContent = ({ data, genericFieldInfo, onDataChanged, validateName }) => { let { name, description, 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" /> {}} isMultiSelect={false} onEnumChange={licenseTerm => onDataChanged( { licenseTerm: { choice: licenseTerm, other: '' } }, LA_EDITOR_FORM ) } onOtherChange={licenseTerm => onDataChanged( { licenseTerm: { choice: optionInputOther.OTHER, other: licenseTerm } }, LA_EDITOR_FORM ) } label={i18n('License Term')} data-test-id="create-la-license-term" isRequired={true} type="select" selectedEnum={licenseTerm && licenseTerm.choice} otherValue={licenseTerm && licenseTerm.other} values={ LicenseAgreementOptionsInputValues.LICENSE_MODEL_TYPE } isValid={genericFieldInfo.licenseTerm.isValid} errorText={genericFieldInfo.licenseTerm.errorText} /> onDataChanged({ description }, LA_EDITOR_FORM) } label={i18n('Description')} value={description} overlayPos="bottom" data-test-id="create-la-description" name="license-agreement-description" type="textarea" /> ); }; class LicenseAgreementEditorView extends React.Component { static propTypes = { data: LicenseAgreementPropType, previousData: LicenseAgreementPropType, LANames: PropTypes.object, isReadOnlyMode: PropTypes.bool, onDataChanged: PropTypes.func.isRequired, onSubmit: PropTypes.func.isRequired, onCancel: PropTypes.func.isRequired, selectedTab: PropTypes.number, onTabSelect: PropTypes.func, selectedFeatureGroupsButtonTab: PropTypes.number, onFeatureGroupsButtonTabSelect: 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 (
{genericFieldInfo && (
this.submit()} onReset={() => this.props.onCancel()} labledButtons={true} isReadOnlyMode={isReadOnlyMode} isValid={this.props.isFormValid} formReady={this.props.formReady} onValidateForm={() => this.props.onValidateForm(LA_EDITOR_FORM) } className="license-model-form license-agreement-form" btnClassName="sdc-modal__footer">
this.validateLTChoice(value) } validateName={value => this.validateName(value) } />
{featureGroupsList.length > 0 ? ( onDataChanged( { featureGroupsIds: selectedValuesList }, LA_EDITOR_FORM ) } /> ) : (

{i18n( 'There are no available feature groups' )}

)}
)}
); } 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;