Merge "refactor: refactor NameInput component"

This commit is contained in:
Zuul 2024-04-03 08:12:26 +00:00 committed by Gerrit Code Review
commit 01c0dd08fd

View File

@ -47,30 +47,19 @@ const {
export default class index extends Component { export default class index extends Component {
static isFormItem = true; static isFormItem = true;
getRules({ getRuleValidator(props) {
names, const {
rules, withoutChinese,
withoutChinese, isFile,
isFile, isKeypair,
isKeypair, isStack,
isStack, isCrontab,
isCrontab, isImage,
isImage, isInstance,
isInstance, isSwiftFile,
isSwiftFile, isDatabaseName,
isDatabaseName, isDatabaseUserName,
isDatabaseUserName, } = props;
}) {
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; let validator = nameValidate;
if (isFile) { if (isFile) {
validator = fileNameValidate; validator = fileNameValidate;
@ -93,8 +82,24 @@ export default class index extends Component {
} else if (isDatabaseUserName) { } else if (isDatabaseUserName) {
validator = databaseUserNameValidate; validator = databaseUserNameValidate;
} }
return validator;
}
getRules(ruleProps) {
const { names, rules, ...rest } = ruleProps;
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,
};
const newRules = { const newRules = {
validator, validator: this.getRuleValidator(rest),
}; };
if (rules && rules.length > 0) { if (rules && rules.length > 0) {
return [...rules, newRules, uniqueRule]; return [...rules, newRules, uniqueRule];
@ -147,8 +152,8 @@ export default class index extends Component {
return nameMessage; return nameMessage;
} }
render() { getPropsFromComponentProps() {
const { componentProps, formItemProps } = this.props; const { componentProps } = this.props;
const { const {
withoutChinese = false, withoutChinese = false,
isFile = false, isFile = false,
@ -163,48 +168,82 @@ export default class index extends Component {
names, names,
...componentRest ...componentRest
} = componentProps; } = componentProps;
return {
ruleProps: {
names,
withoutChinese,
isFile,
isKeypair,
isStack,
isCrontab,
isImage,
isInstance,
isSwiftFile,
isDatabaseName,
isDatabaseUserName,
},
messageProps: {
withoutChinese,
isFile,
isKeypair,
isStack,
isCrontab,
isImage,
isInstance,
isSwiftFile,
isDatabaseName,
isDatabaseUserName,
},
restProps: componentRest,
};
}
get ruleProps() {
const { formItemProps } = this.props;
const { rules } = formItemProps;
const { ruleProps } = this.getPropsFromComponentProps();
return {
...ruleProps,
rules,
};
}
get messageProps() {
const { messageProps } = this.getPropsFromComponentProps();
return messageProps;
}
get formItemProps() {
const { formItemProps } = this.props;
const { rules, ...rest } = formItemProps;
const newRules = this.getRules(this.ruleProps);
const message = this.getMessage(this.messageProps);
return {
...rest,
rules: newRules,
extra: message,
};
}
get inputProps() {
const { isFile } = this.ruleProps;
const { restProps } = this.getPropsFromComponentProps();
const placeholder = isFile const placeholder = isFile
? t('Please input file name') ? t('Please input file name')
: t('Please input name'); : t('Please input name');
const props = { const props = {
placeholder, placeholder,
...componentRest, ...restProps,
};
const { rules, ...rest } = formItemProps;
const newRules = this.getRules({
names,
rules,
withoutChinese,
isFile,
isKeypair,
isStack,
isCrontab,
isImage,
isInstance,
isSwiftFile,
isDatabaseName,
isDatabaseUserName,
});
const message = this.getMessage({
withoutChinese,
isFile,
isKeypair,
isStack,
isCrontab,
isImage,
isInstance,
isSwiftFile,
isDatabaseName,
isDatabaseUserName,
});
const newFormItemProps = {
...rest,
rules: newRules,
extra: message,
}; };
return props;
}
render() {
const newFormItemProps = this.formItemProps;
const { inputProps } = this;
return ( return (
<Form.Item {...newFormItemProps}> <Form.Item {...newFormItemProps}>
<Input {...props} /> <Input {...inputProps} />
</Form.Item> </Form.Item>
); );
} }