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