import React from 'react'; 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'; import GridSection from 'nfvo-components/grid/GridSection.jsx'; import GridItem from 'nfvo-components/grid/GridItem.jsx'; import SelectInput from 'nfvo-components/input/SelectInput.jsx'; import SelectActionTable from 'nfvo-components/table/SelectActionTable.jsx'; import SelectActionTableRow from 'nfvo-components/table/SelectActionTableRow.jsx'; import SelectActionTableCell from 'nfvo-components/table/SelectActionTableCell.jsx'; import Validator from 'nfvo-utils/Validator.js'; export default class SoftwareProductDeploymentEditorView extends React.Component { render() { let { data, isEdit, onClose, onDataChanged, isReadOnlyMode, selectedFeatureGroupsList, componentsList, computesList, genericFieldInfo } = this.props; let { model, description, featureGroupId, componentComputeAssociations = [] } = data; let featureGroupsExist = selectedFeatureGroupsList.length > 0; return (
{genericFieldInfo && (
this.submit()} submitButtonText={ isEdit ? i18n('Save') : i18n('Create') } onReset={() => onClose()} onValidateForm={() => this.validate()} isValid={this.props.isFormValid} formReady={this.props.formReady} className="vsp-deployment-editor"> onDataChanged( { model }, { model: model => this.validateName(model) } ) } label={i18n('Model')} value={model} data-test-id="deployment-model" isValid={genericFieldInfo.model.isValid} errorText={genericFieldInfo.model.errorText} isRequired={true} type="text" /> onDataChanged({ description }) } label={i18n('Description')} value={description} data-test-id="deployment-description" isValid={ genericFieldInfo.description.isValid } errorText={ genericFieldInfo.description.errorText } type="text" /> onDataChanged({ featureGroupId: featureGroup ? featureGroup.value : null }) } type="select" clearable={true} disabled={ isReadOnlyMode || !featureGroupsExist } className="field-section" options={selectedFeatureGroupsList} /> {!featureGroupsExist && ( {i18n( 'Please assign Feature Groups in VSP General' )} )} {componentComputeAssociations.map( (association, index) => ( ({ value: component.id, label: component.displayName }) )} selected={ association.componentId } onChange={componentId => { let newAssociations = [ ...componentComputeAssociations ]; newAssociations[ index ] = { ...newAssociations[ index ], componentId }; onDataChanged({ componentComputeAssociations: newAssociations }); }} disabled={true} /> compute.componentId === association.componentId ) .map(compute => ({ value: compute.computeFlavorId, label: compute.name }))} selected={ association.computeFlavorId } onChange={computeFlavorId => { let newAssociations = [ ...componentComputeAssociations ]; newAssociations[ index ] = { ...newAssociations[ index ], computeFlavorId }; onDataChanged({ componentComputeAssociations: newAssociations }); }} disabled={isReadOnlyMode} /> ) )}
)}
); } validateName(value) { const { data: { id = '' }, DFNames } = this.props; const isExists = Validator.isItemNameAlreadyExistsInList({ itemId: id, itemName: value, list: DFNames }); return !isExists ? { isValid: true, errorText: '' } : { isValid: false, errorText: i18n( "Deployment flavor by the name '" + value + "' already exists. Deployment flavor name must be unique" ) }; } submit() { let { isEdit, onCreate, onEdit, onClose, data } = this.props; if (isEdit) { onEdit(data); } else { onCreate(data); } onClose(); } validate() { this.props.onValidateForm(); } }