2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 import React from 'react';
17 import i18n from 'nfvo-utils/i18n/i18n.js';
19 import Input from 'nfvo-components/input/validation/Input.jsx';
20 import Form from 'nfvo-components/input/validation/Form.jsx';
21 import GridSection from 'nfvo-components/grid/GridSection.jsx';
22 import GridItem from 'nfvo-components/grid/GridItem.jsx';
24 const GeneralSection = ({
35 <GridSection title={i18n('General')}>
36 {/* disabled until backend will be ready to implement it
37 <div className='validation-input-wrapper'>
38 <div className='form-group'>
39 <label className='control-label'>{i18n('Name')}</label>
50 disabled={!isManual || isReadOnlyMode}
55 data-test-id="vfcCode"
56 label={i18n('Naming Code')}
57 disabled={isReadOnlyMode}
59 onChange={nfcFunction =>
60 onQDataChanged({ 'general/nfcNamingCode': nfcFunction })
62 isValid={qgenericFieldInfo['general/nfcNamingCode'].isValid}
64 qgenericFieldInfo['general/nfcNamingCode'].errorText
66 value={dataMap['general/nfcNamingCode']}
70 data-test-id="nfcFunction"
71 label={i18n('Function')}
72 disabled={isReadOnlyMode}
74 onChange={nfcFunction =>
75 onQDataChanged({ 'general/nfcFunction': nfcFunction })
77 isValid={qgenericFieldInfo['general/nfcFunction'].isValid}
78 errorText={qgenericFieldInfo['general/nfcFunction'].errorText}
79 value={dataMap['general/nfcFunction']}
82 <GridItem colSpan={2}>
84 label={i18n('Description')}
85 isValid={genericFieldInfo.description.isValid}
86 errorText={genericFieldInfo.description.errorText}
87 onChange={description => onDataChanged({ description })}
88 disabled={isReadOnlyMode}
90 groupClassName="multi-line-textarea"
91 data-test-id="description"
99 const HypervisorSection = ({ dataMap, onQDataChanged, qgenericFieldInfo }) => (
100 <GridSection title={i18n('Hypervisor')}>
103 data-test-id="hypervisor"
104 label={i18n('Supported Hypervisors')}
106 className="input-options-select"
107 groupClassName="bootstrap-input-options"
109 qgenericFieldInfo['general/hypervisor/hypervisor'].isValid
112 qgenericFieldInfo['general/hypervisor/hypervisor'].errorText
114 value={dataMap['general/hypervisor/hypervisor']}
116 const selectedIndex = e.target.selectedIndex;
117 const val = e.target.options[selectedIndex].value;
118 onQDataChanged({ 'general/hypervisor/hypervisor': val });
120 <option key="placeholder" value="">
123 {qgenericFieldInfo['general/hypervisor/hypervisor'].enum.map(
125 <option value={hv.enum} key={hv.enum}>
132 <GridItem colSpan={2}>
134 data-test-id="drivers"
136 onQDataChanged({ 'general/hypervisor/drivers': driver })
138 label={i18n('Hypervisor Drivers')}
141 qgenericFieldInfo['general/hypervisor/drivers'].isValid
144 qgenericFieldInfo['general/hypervisor/drivers'].errorText
146 value={dataMap['general/hypervisor/drivers']}
149 <GridItem colSpan={3}>
151 data-test-id="containerFeaturesDescription"
152 label={i18n('Describe Container Features')}
154 onChange={containerFeaturesDescription =>
156 'general/hypervisor/containerFeaturesDescription': containerFeaturesDescription
161 'general/hypervisor/containerFeaturesDescription'
166 'general/hypervisor/containerFeaturesDescription'
170 dataMap['general/hypervisor/containerFeaturesDescription']
177 const ImageSection = ({ dataMap, onQDataChanged, qgenericFieldInfo }) => (
178 <GridSection title={i18n('Disk')}>
181 data-test-id="bootDiskSizePerVM"
182 onChange={bootDiskSizePerVM =>
184 'general/disk/bootDiskSizePerVM': bootDiskSizePerVM
187 label={i18n('Size of boot disk per VM (GB)')}
190 qgenericFieldInfo['general/disk/bootDiskSizePerVM'].isValid
193 qgenericFieldInfo['general/disk/bootDiskSizePerVM']
196 value={dataMap['general/disk/bootDiskSizePerVM']}
201 data-test-id="ephemeralDiskSizePerVM"
202 onChange={ephemeralDiskSizePerVM =>
204 'general/disk/ephemeralDiskSizePerVM': ephemeralDiskSizePerVM
207 label={i18n('Size of ephemeral disk per VM (GB)')}
210 qgenericFieldInfo['general/disk/ephemeralDiskSizePerVM']
214 qgenericFieldInfo['general/disk/ephemeralDiskSizePerVM']
217 value={dataMap['general/disk/ephemeralDiskSizePerVM']}
223 const RecoverySection = ({ dataMap, onQDataChanged, qgenericFieldInfo }) => (
224 <GridSection title={i18n('Recovery')}>
227 data-test-id="pointObjective"
228 label={i18n('VM Recovery Point Objective (Minutes)')}
230 onChange={pointObjective =>
232 'general/recovery/pointObjective': pointObjective
236 qgenericFieldInfo['general/recovery/pointObjective'].isValid
239 qgenericFieldInfo['general/recovery/pointObjective']
242 value={dataMap['general/recovery/pointObjective']}
247 data-test-id="timeObjective"
248 label={i18n('VM Recovery Time Objective (Minutes)')}
250 onChange={timeObjective =>
252 'general/recovery/timeObjective': timeObjective
256 qgenericFieldInfo['general/recovery/timeObjective'].isValid
259 qgenericFieldInfo['general/recovery/timeObjective']
262 value={dataMap['general/recovery/timeObjective']}
264 <div className="empty-two-col" />
266 <GridItem colSpan={2} />
267 <GridItem colSpan={2}>
269 data-test-id="vmProcessFailuresHandling"
271 label={i18n('How are in VM process failures handled?')}
273 onChange={vmProcessFailuresHandling =>
275 'general/recovery/vmProcessFailuresHandling': vmProcessFailuresHandling
280 'general/recovery/vmProcessFailuresHandling'
285 'general/recovery/vmProcessFailuresHandling'
288 value={dataMap['general/recovery/vmProcessFailuresHandling']}
290 <div className="empty-two-col" />
292 {/** disabled until backend will be ready to implement it
293 <div className='row'>
294 <div className='col-md-3'>
296 label={i18n('VM Recovery Document')}
298 pointer='/general/recovery/VMRecoveryDocument'/>
305 const DNSConfigurationSection = ({
310 <GridSection title={i18n('DNS Configuration')}>
311 <GridItem colSpan={2}>
313 data-test-id="dnsConfiguration"
315 'Do you have a need for DNS as a Service? Please describe.'
318 onChange={dnsConfiguration =>
320 'general/dnsConfiguration': dnsConfiguration
323 isValid={qgenericFieldInfo['general/dnsConfiguration'].isValid}
325 qgenericFieldInfo['general/dnsConfiguration'].errorText
327 value={dataMap['general/dnsConfiguration']}
333 const CloneSection = ({ dataMap, onQDataChanged, qgenericFieldInfo }) => (
334 <GridSection title={i18n('Clone')}>
335 <GridItem colSpan={2}>
337 data-test-id="vmCloneUsage"
338 label={i18n('Describe VM Clone Use')}
340 onChange={vmCloneUsage =>
341 onQDataChanged({ 'general/vmCloneUsage': vmCloneUsage })
343 isValid={qgenericFieldInfo['general/vmCloneUsage'].isValid}
344 errorText={qgenericFieldInfo['general/vmCloneUsage'].errorText}
345 value={dataMap['general/vmCloneUsage']}
351 class SoftwareProductComponentsGeneralView extends React.Component {
360 componentData: { displayName, vfcCode, description },
364 <div className="vsp-components-general">
365 <div className="general-data">
367 qGenericFieldInfo && (
369 isValid={this.props.isFormValid}
371 isReadOnlyMode={isReadOnlyMode}
372 onValidityChanged={isValidityData =>
373 this.props.onValidityChanged(isValidityData)
377 onDataChanged={onDataChanged}
378 displayName={displayName}
380 description={description}
382 isReadOnlyMode={isReadOnlyMode}
383 genericFieldInfo={genericFieldInfo}
385 onQDataChanged={onQDataChanged}
386 qgenericFieldInfo={qGenericFieldInfo}
389 onQDataChanged={onQDataChanged}
391 qgenericFieldInfo={qGenericFieldInfo}
394 onQDataChanged={onQDataChanged}
396 qgenericFieldInfo={qGenericFieldInfo}
399 onQDataChanged={onQDataChanged}
401 qgenericFieldInfo={qGenericFieldInfo}
403 <DNSConfigurationSection
404 onQDataChanged={onQDataChanged}
406 qgenericFieldInfo={qGenericFieldInfo}
409 onQDataChanged={onQDataChanged}
411 qgenericFieldInfo={qGenericFieldInfo}
421 let { onSubmit, componentData, qdata } = this.props;
422 return onSubmit({ componentData, qdata });
426 export default SoftwareProductComponentsGeneralView;