From 8dac045ee24525afc700b45cd10df97a61efc892 Mon Sep 17 00:00:00 2001 From: zhangjingwei Date: Wed, 14 Jul 2021 16:20:15 +0800 Subject: [PATCH] fix: Fix unique name when create/edit volume type 1. Check unique name when create volume type 2. Check unique name when edit volume type Change-Id: I4d736c3b30ff718a8dd00d05890cb67cdbabec94 --- src/components/FormItem/NameInput/index.jsx | 22 ++++++++++++++----- .../VolumeType/VolumeType/actions/Create.jsx | 2 +- .../VolumeType/VolumeType/actions/Edit.jsx | 4 +++- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/components/FormItem/NameInput/index.jsx b/src/components/FormItem/NameInput/index.jsx index 6b8add6c..b91c56c5 100644 --- a/src/components/FormItem/NameInput/index.jsx +++ b/src/components/FormItem/NameInput/index.jsx @@ -42,6 +42,7 @@ export default class index extends Component { static isFormItem = true; getRules({ + names, rules, withoutChinese, isFile, @@ -51,6 +52,16 @@ export default class index extends Component { isImage, isInstance, }) { + const uniqueNameValidate = (rule, value) => { + if (names && names.length && names.includes(value)) { + const message = t('Name can not be duplicated'); + return Promise.reject(new Error(`${t('Invalid: ')}${message}`)); + } + return Promise.resolve(true); + }; + const uniqueRule = { + validator: uniqueNameValidate, + }; let validator = nameValidate; if (isFile) { validator = fileNameValidate; @@ -67,16 +78,13 @@ export default class index extends Component { } else if (isCrontab) { validator = crontabNameValidate; } - let newRules = { + const newRules = { validator, }; if (rules && rules.length > 0) { - newRules = { - ...newRules, - ...rules[0], - }; + return [...rules, newRules, uniqueRule]; } - return [newRules]; + return [newRules, uniqueRule]; } getMessage({ @@ -122,6 +130,7 @@ export default class index extends Component { isCrontab, isImage, isInstance, + names, ...componentRest } = componentProps; const placeholder = isFile @@ -133,6 +142,7 @@ export default class index extends Component { }; const { rules, ...rest } = formItemProps; const newRules = this.getRules({ + names, rules, withoutChinese, isFile, diff --git a/src/pages/storage/containers/VolumeType/VolumeType/actions/Create.jsx b/src/pages/storage/containers/VolumeType/VolumeType/actions/Create.jsx index 1e3980b6..22096186 100644 --- a/src/pages/storage/containers/VolumeType/VolumeType/actions/Create.jsx +++ b/src/pages/storage/containers/VolumeType/VolumeType/actions/Create.jsx @@ -111,7 +111,7 @@ export default class Create extends ModalAction { name: 'name', label: t('Name'), type: 'input-name', - placeholder: t('Please input name'), + names: this.store.list.data.map((it) => it.name), required: true, }, // TODO: get cinder service list diff --git a/src/pages/storage/containers/VolumeType/VolumeType/actions/Edit.jsx b/src/pages/storage/containers/VolumeType/VolumeType/actions/Edit.jsx index 00920888..f4306bff 100644 --- a/src/pages/storage/containers/VolumeType/VolumeType/actions/Edit.jsx +++ b/src/pages/storage/containers/VolumeType/VolumeType/actions/Edit.jsx @@ -42,7 +42,9 @@ export default class EditAction extends ModalAction { name: 'name', label: t('Name'), type: 'input-name', - placeholder: t('Please input name'), + names: this.store.list.data + .filter((it) => it.id !== this.item.id) + .map((it) => it.name), required: true, }, {