|
1 |
| -import React from 'react' |
| 1 | +import React, { useState, useEffect } from 'react' |
2 | 2 | import PropTypes from 'prop-types'
|
3 | 3 | import {
|
4 | 4 | Form,
|
@@ -124,6 +124,13 @@ const modal = ({
|
124 | 124 | setFieldsValue,
|
125 | 125 | },
|
126 | 126 | }) => {
|
| 127 | + const [filteredBackingImages, setFilteredBackingImages] = useState([]) |
| 128 | + |
| 129 | + useEffect(() => { |
| 130 | + const dataEngine = getFieldValue('dataEngine') |
| 131 | + setFilteredBackingImages(backingImageOptions.filter(image => image.dataEngine === dataEngine)) |
| 132 | + }, []) |
| 133 | + |
127 | 134 | function handleOk() {
|
128 | 135 | validateFields((errors) => {
|
129 | 136 | if (errors) {
|
@@ -190,6 +197,12 @@ const modal = ({
|
190 | 197 | }
|
191 | 198 | }
|
192 | 199 |
|
| 200 | + // filter backing image options based on selected data engine version |
| 201 | + const handleDataEngineChange = (value) => { |
| 202 | + setFieldsValue({ ...getFieldsValue(), backingImage: '' }) // reset selected backing image |
| 203 | + setFilteredBackingImages(backingImageOptions.filter(image => image.dataEngine === value)) |
| 204 | + } |
| 205 | + |
193 | 206 | const volumeSnapshots = snapshotsOptions?.length > 0 ? snapshotsOptions.filter(d => d.name !== 'volume-head') : []// no include volume-head
|
194 | 207 | sortByCreatedTime(volumeSnapshots)
|
195 | 208 | const dataSourceAlertMsg = 'The volume size is set to the selected volume size. Mismatched size will cause create volume failed.'
|
@@ -306,11 +319,31 @@ const modal = ({
|
306 | 319 | <Option key={'ReadWriteMany'} value={'rwx'}>ReadWriteMany</Option>
|
307 | 320 | </Select>)}
|
308 | 321 | </FormItem>
|
| 322 | + <FormItem label="Data Engine" hasFeedback {...formItemLayout}> |
| 323 | + {getFieldDecorator('dataEngine', { |
| 324 | + initialValue: v1DataEngineEnabled ? 'v1' : 'v2', |
| 325 | + rules: [ |
| 326 | + { |
| 327 | + validator: (_rule, value, callback) => { |
| 328 | + if (value === 'v1' && !v1DataEngineEnabled) { |
| 329 | + callback('v1 data engine is not enabled') |
| 330 | + } else if (value === 'v2' && !v2DataEngineEnabled) { |
| 331 | + callback('v2 data engine is not enabled') |
| 332 | + } |
| 333 | + callback() |
| 334 | + }, |
| 335 | + }, |
| 336 | + ], |
| 337 | + })(<Select onChange={handleDataEngineChange}> |
| 338 | + <Option key={'v1'} value={'v1'}>v1</Option> |
| 339 | + <Option key={'v2'} value={'v2'}>v2</Option> |
| 340 | + </Select>)} |
| 341 | + </FormItem> |
309 | 342 | <FormItem label="Backing Image" hasFeedback {...formItemLayout}>
|
310 | 343 | {getFieldDecorator('backingImage', {
|
311 | 344 | initialValue: '',
|
312 | 345 | })(<Select allowClear>
|
313 |
| - { backingImageOptions.map(backingImage => <Option key={backingImage.name} value={backingImage.name}>{backingImage.name}</Option>) } |
| 346 | + { filteredBackingImages.map(backingImage => <Option key={backingImage.name} value={backingImage.name}>{backingImage.name}</Option>) } |
314 | 347 | </Select>)}
|
315 | 348 | </FormItem>
|
316 | 349 | <div style={{ display: 'flex', flexDirection: 'column' }}>
|
@@ -363,26 +396,6 @@ const modal = ({
|
363 | 396 | )}
|
364 | 397 | </FormItem>
|
365 | 398 | }
|
366 |
| - <FormItem label="Data Engine" hasFeedback {...formItemLayout}> |
367 |
| - {getFieldDecorator('dataEngine', { |
368 |
| - initialValue: v1DataEngineEnabled ? 'v1' : 'v2', |
369 |
| - rules: [ |
370 |
| - { |
371 |
| - validator: (_rule, value, callback) => { |
372 |
| - if (value === 'v1' && !v1DataEngineEnabled) { |
373 |
| - callback('v1 data engine is not enabled') |
374 |
| - } else if (value === 'v2' && !v2DataEngineEnabled) { |
375 |
| - callback('v2 data engine is not enabled') |
376 |
| - } |
377 |
| - callback() |
378 |
| - }, |
379 |
| - }, |
380 |
| - ], |
381 |
| - })(<Select> |
382 |
| - <Option key={'v1'} value={'v1'}>v1</Option> |
383 |
| - <Option key={'v2'} value={'v2'}>v2</Option> |
384 |
| - </Select>)} |
385 |
| - </FormItem> |
386 | 399 | <FormItem label="Backup Target" hasFeedback {...formItemLayout}>
|
387 | 400 | {getFieldDecorator('backupTargetName', {
|
388 | 401 | // init backup target is the default one
|
|
0 commit comments