feat(Form): support async validation

This commit is contained in:
陈嘉涵
2020-02-12 10:38:05 +08:00
parent 35260e024a
commit 080d1828c8
5 changed files with 120 additions and 46 deletions
+33 -23
View File
@@ -3,7 +3,7 @@ import { formatNumber } from './utils';
import { isIOS } from '../utils/validate/system';
import { preventDefault } from '../utils/dom/event';
import { resetScroll } from '../utils/dom/reset-scroll';
import { createNamespace, isObject, isDef, addUnit } from '../utils';
import { createNamespace, isObject, isDef, addUnit, isPromise } from '../utils';
// Components
import Icon from '../icon';
@@ -151,31 +151,41 @@ export default createComponent({
resolve();
}
const messages = [];
this.rules.forEach(rule => {
if (rule.required && this.formValueEmpty) {
messages.push(rule.message);
}
if (rule.validator) {
const result = rule.validator(this.formValue);
if (!result) {
messages.push(rule.message);
Promise.all(
this.rules.map(rule => {
if (rule.required && this.formValueEmpty) {
return Promise.resolve(rule.message);
}
if (rule.validator) {
const returnVal = rule.validator(this.formValue);
if (returnVal === false) {
return Promise.resolve(rule.message);
}
if (isPromise(returnVal)) {
return returnVal.then(
result => result === false && rule.message
);
}
}
return Promise.resolve();
})
).then(messages => {
messages = messages.filter(item => item);
if (messages.length) {
this.validateMessage = messages[0];
resolve({
name: this.name,
messages,
});
} else {
resolve();
}
});
if (messages.length) {
this.validateMessage = messages[0];
resolve({
name: this.name,
messages,
});
} else {
resolve();
}
});
},