/*! * 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 Tabs from 'nfvo-components/input/validation/Tabs.jsx'; import { Tab } from 'onap-ui-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 DualListboxView from 'nfvo-components/input/dualListbox/DualListboxView.jsx'; import Input from 'nfvo-components/input/validation/Input.jsx'; import i18n from 'nfvo-utils/i18n/i18n.js'; import Validator from 'nfvo-utils/Validator.js'; import { state as FeatureGroupStateConstants, FG_EDITOR_FORM } from './FeatureGroupsConstants.js'; const FeatureGroupsPropType = PropTypes.shape({ id: PropTypes.string, name: PropTypes.string, description: PropTypes.string, partNumber: PropTypes.string, manufacturerReferenceNumber: PropTypes.string, entitlementPoolsIds: PropTypes.arrayOf(PropTypes.string), licenseKeyGroupsIds: PropTypes.arrayOf(PropTypes.string) }); const GeneralTab = ({ data = {}, onDataChanged, genericFieldInfo, validateName }) => { let { name, description, partNumber } = data; return ( onDataChanged({ name }, FG_EDITOR_FORM, { name: validateName }) } label={i18n('Name')} data-test-id="create-fg-name" value={name} name="feature-group-name" type="text" isRequired={true} isValid={genericFieldInfo.name.isValid} errorText={genericFieldInfo.name.errorText} /> onDataChanged({ description }, FG_EDITOR_FORM) } data-test-id="create-fg-description" label={i18n('Description')} value={description} name="feature-group-description" type="textarea" isValid={genericFieldInfo.description.isValid} errorText={genericFieldInfo.description.errorText} /> onDataChanged({ partNumber }, FG_EDITOR_FORM) } label={i18n('Part Number')} data-test-id="create-fg-part-number" value={partNumber} isRequired={true} type="text" isValid={genericFieldInfo.partNumber.isValid} errorText={genericFieldInfo.partNumber.errorText} /> ); }; const EntitlementPoolsTab = ({ entitlementPoolsList, data, onDataChanged, isReadOnlyMode }) => { const dualBoxFilterTitle = { left: i18n('Available Entitlement Pools'), right: i18n('Selected Entitlement Pools') }; if (entitlementPoolsList.length > 0) { return ( onDataChanged( { entitlementPoolsIds: selectedValuesList }, FG_EDITOR_FORM ) } /> ); } else { return

{i18n('There are no available entitlement pools')}

; } }; const LKGTab = ({ licenseKeyGroupsList, data, onDataChanged, isReadOnlyMode }) => { const dualBoxFilterTitle = { left: i18n('Available License Key Groups'), right: i18n('Selected License Key Groups') }; if (licenseKeyGroupsList.length > 0) { return ( onDataChanged( { licenseKeyGroupsIds: selectedValuesList }, FG_EDITOR_FORM ) } /> ); } else { return

{i18n('There are no available license key groups')}

; } }; class FeatureGroupEditorView extends React.Component { static propTypes = { data: FeatureGroupsPropType, previousData: FeatureGroupsPropType, isReadOnlyMode: PropTypes.bool, FGNames: PropTypes.object, onSubmit: PropTypes.func, onCancel: PropTypes.func, selectedTab: PropTypes.number, onTabSelect: PropTypes.func, entitlementPoolsList: DualListboxView.propTypes.availableList, licenseKeyGroupsList: DualListboxView.propTypes.availableList }; static defaultProps = { data: {}, selectedTab: FeatureGroupStateConstants.SELECTED_FEATURE_GROUP_TAB.GENERAL }; state = { localEntitlementPoolsListFilter: '', localLicenseKeyGroupsListFilter: '' }; render() { let { selectedTab, onTabSelect, isReadOnlyMode, invalidTabs, data, onDataChanged, genericFieldInfo, entitlementPoolsList, licenseKeyGroupsList } = this.props; return (
{genericFieldInfo && (
this.submit()} isValid={this.props.isFormValid} formReady={this.props.formReady} onValidateForm={() => this.props.onValidateForm(FG_EDITOR_FORM) } onReset={() => this.props.onCancel()} labledButtons={true} isReadOnlyMode={isReadOnlyMode} name="feature-group-validation-form" btnClassName="sdc-modal__footer" className="license-model-form feature-group-form">
this.validateName(value) } />
)}
); } submit() { const { data: featureGroup, previousData: previousFeatureGroup } = this.props; this.props.onSubmit(previousFeatureGroup, featureGroup); } validateName(value) { const { data: { id }, FGNames } = this.props; const isExists = Validator.isItemNameAlreadyExistsInList({ itemId: id, itemName: value, list: FGNames }); return !isExists ? { isValid: true, errorText: '' } : { isValid: false, errorText: i18n( "Feature group by the name '" + value + "' already exists. Feature group name must be unique" ) }; } } export default FeatureGroupEditorView;