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
This commit is contained in:
zhangjingwei 2021-07-14 16:20:15 +08:00 committed by Jingwei.Zhang
parent 542f0bc94b
commit 8dac045ee2
3 changed files with 20 additions and 8 deletions

View File

@ -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,

View File

@ -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

View File

@ -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,
},
{