chore(Field): extract some utils

This commit is contained in:
chenjiahan 2020-10-06 17:00:15 +08:00
parent 9aabb42f9d
commit 608bd3de39
3 changed files with 32 additions and 23 deletions

View File

@ -21,6 +21,7 @@ import {
preventDefault, preventDefault,
createNamespace, createNamespace,
} from '../utils'; } from '../utils';
import { runSyncRule } from './utils';
// Composition // Composition
import { useParent } from '@vant/use'; import { useParent } from '@vant/use';
@ -133,26 +134,6 @@ export default createComponent({
resolve(returnVal); resolve(returnVal);
}); });
const isEmptyValue = (value) => {
if (Array.isArray(value)) {
return !value.length;
}
if (value === 0) {
return false;
}
return !value;
};
const runSyncRule = (value, rule) => {
if (rule.required && isEmptyValue(value)) {
return false;
}
if (rule.pattern && !rule.pattern.test(value)) {
return false;
}
return true;
};
const getRuleMessage = (value, rule) => { const getRuleMessage = (value, rule) => {
const { message } = rule; const { message } = rule;
@ -337,7 +318,6 @@ export default createComponent({
if (isDef(props[key])) { if (isDef(props[key])) {
return props[key]; return props[key];
} }
if (form && isDef(form.props[key])) { if (form && isDef(form.props[key])) {
return form.props[key]; return form.props[key];
} }
@ -423,7 +403,6 @@ export default createComponent({
ref: inputRef, ref: inputRef,
name: props.name, name: props.name,
rows: props.rows, rows: props.rows,
style: null,
class: bem('control', inputAlign), class: bem('control', inputAlign),
value: props.modelValue, value: props.modelValue,
disabled: props.disabled, disabled: props.disabled,

30
src/field/utils.ts Normal file
View File

@ -0,0 +1,30 @@
export type FieldValidateTrigger = 'onSubmit' | 'onChange' | 'onBlur';
export type FieldRule = {
pattern?: RegExp;
trigger?: FieldValidateTrigger;
message?: string | ((value: unknown, rule: FieldRule) => string);
required?: boolean;
validator?: (value: unknown, rule: FieldRule) => boolean | Promise<boolean>;
formatter?: (value: unknown, rule: FieldRule) => unknown;
};
function isEmptyValue(value: unknown) {
if (Array.isArray(value)) {
return !value.length;
}
if (value === 0) {
return false;
}
return !value;
}
export function runSyncRule(value: unknown, rule: FieldRule) {
if (rule.required && isEmptyValue(value)) {
return false;
}
if (rule.pattern && !rule.pattern.test(String(value))) {
return false;
}
return true;
}