UNPKG

zent

Version:

一套前端设计语言和基于React的实现

52 lines (48 loc) 1.4 kB
import { IValidator, isAsyncValidator, createAsyncValidator, IMaybeError, ValidatorContext, } from '../validate'; import { of, from } from 'rxjs'; import { switchMap } from 'rxjs/operators'; import { markForRequired, isRequiredValidator } from '../validators'; function withMessage<V = unknown>( maybeError: IMaybeError<V>, messagenerator: (ctx: ValidatorContext<V>) => string, ctx: ValidatorContext<V> ) { return maybeError && { ...maybeError, message: messagenerator(ctx) }; } /** * 为校验错误设定动态的message * @param messagenerator */ export function message<V = unknown>( messagenerator: (ctx: ValidatorContext<V>) => string ) { return (validator: IValidator<V>) => { const next: IValidator<V> = isAsyncValidator(validator) ? createAsyncValidator<V>((value, context) => { const result = validator.validator(value, context); return ( result && from(result).pipe( switchMap(maybeError => of(withMessage(maybeError, messagenerator, context)) ) ) ); }) : (value: V, context: ValidatorContext<V>) => { return withMessage( validator(value, context), messagenerator, context ); }; isRequiredValidator(validator) && markForRequired(next); return next; }; }