Skip to content

Commit 82a424c

Browse files
authored
feat: create Volume UI improvement, Automatically Filter Backing Image Based on v1 or v2 Selection (#891)
* feat: auto filter backing images Signed-off-by: Yi-Ya Chen <[email protected]> * feat: reposition data engine Signed-off-by: Yi-Ya Chen <[email protected]> --------- Signed-off-by: Yi-Ya Chen <[email protected]>
1 parent 1cc4da2 commit 82a424c

File tree

1 file changed

+35
-22
lines changed

1 file changed

+35
-22
lines changed

src/routes/volume/CreateVolume.js

+35-22
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react'
1+
import React, { useState, useEffect } from 'react'
22
import PropTypes from 'prop-types'
33
import {
44
Form,
@@ -124,6 +124,13 @@ const modal = ({
124124
setFieldsValue,
125125
},
126126
}) => {
127+
const [filteredBackingImages, setFilteredBackingImages] = useState([])
128+
129+
useEffect(() => {
130+
const dataEngine = getFieldValue('dataEngine')
131+
setFilteredBackingImages(backingImageOptions.filter(image => image.dataEngine === dataEngine))
132+
}, [])
133+
127134
function handleOk() {
128135
validateFields((errors) => {
129136
if (errors) {
@@ -190,6 +197,12 @@ const modal = ({
190197
}
191198
}
192199

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+
193206
const volumeSnapshots = snapshotsOptions?.length > 0 ? snapshotsOptions.filter(d => d.name !== 'volume-head') : []// no include volume-head
194207
sortByCreatedTime(volumeSnapshots)
195208
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 = ({
306319
<Option key={'ReadWriteMany'} value={'rwx'}>ReadWriteMany</Option>
307320
</Select>)}
308321
</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>
309342
<FormItem label="Backing Image" hasFeedback {...formItemLayout}>
310343
{getFieldDecorator('backingImage', {
311344
initialValue: '',
312345
})(<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>) }
314347
</Select>)}
315348
</FormItem>
316349
<div style={{ display: 'flex', flexDirection: 'column' }}>
@@ -363,26 +396,6 @@ const modal = ({
363396
)}
364397
</FormItem>
365398
}
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>
386399
<FormItem label="Backup Target" hasFeedback {...formItemLayout}>
387400
{getFieldDecorator('backupTargetName', {
388401
// init backup target is the default one

0 commit comments

Comments
 (0)