zp-bee
Version:
zp-bee,是一款基于 Dumi,由 React + TypeScript 开发的组件库 🎉。
305 lines (304 loc) • 7.75 kB
TypeScript
import Schema, { RuleItem } from 'async-validator';
export declare type CancellablePromise<T> = Promise<T> & {
cancel(): void;
};
export interface ErrorMessage {
message: string;
field: string;
}
export declare type ErrorType = ErrorMessage[] | undefined;
export declare type ErrorsType<T> = {
[U in keyof T]?: ErrorType;
};
export declare type ItemStores<T> = {
[P in keyof T]: ItemStoreInterface<T[P], T>;
};
export declare type Rules = RuleItem | RuleItem[];
export declare type SubmitCallbackType<T> = (props: SubmitCallbackProps<T>) => void;
export declare type SubmitType<T> = (callback: SubmitCallbackType<T>) => void;
export interface FunctionProperty {
[key: string]: any;
}
export declare type Parse<U> = (...args: any) => U | undefined;
export declare type Format<U> = (value?: U) => any;
export declare type CheckResult = 'loading' | 'error' | 'success' | 'default';
export interface OnChangeContext {
noParse?: boolean;
}
export interface ItemStoreInterface<U = any, T = {}> {
/**
* 字段
*/
key: keyof T;
/**
* 错误信息
*/
err: ErrorType;
/**
* 字段联合错误信息
*/
unionErr: {
[key: string]: ErrorMessage;
};
/**
* onChange上下文,每次onChange结束清空
*/
onChangeContext: OnChangeContext;
/**
* 设置onChange上下文
*/
setOnChangeContext(context?: OnChangeContext): void;
/**
* 清除上下文
*/
clearOnChangeContext: () => void;
/**
* 对外数据的错误信息(err and unionErr)
*/
errors?: ErrorType;
/**
* 父组件实例
*/
formStore: FormStoreInterface<T>;
/**
* 格式化输出的值
*/
value: U | undefined;
/**
* 当前输入后的值
*/
source: U | undefined;
/**
* 默认值
*/
defaultValue: U | undefined;
/**
* 是否输入过
*/
isChange: boolean;
/**
* 是否正在验证
*/
verifying: boolean;
/**
* 检测结果
*/
checkResult: CheckResult;
/**
* 验证规则,详情请查看相关链接
* @see {@link https://github.com/yiminghe/async-validator}
*/
rules?: Rules;
/**
* 验证规则实例
*/
schema?: Schema;
/**
* @summary 输入的值格式化
*/
parse?: Parse<U>;
/**
* 输出的值格式化
*/
format?: Format<U>;
/**
* 设置参数
*/
setProps: (props: Omit<ItemStoreProps<U, T>, 'key' | 'formStore'>) => void;
/**
* 设置验证状态
*/
setVerifying: (verifying: boolean) => void;
/**
* 设置解析
*/
setParse: (parse?: Parse<U>) => void;
/**
* 设置格式化
*/
setFormat: (format?: Format<U>) => void;
/**
* 设置联合验证错误
*/
setUnionErr: (props: {
[key: string]: ErrorMessage;
}) => void;
/**
* 删除联合验证错误
*/
delUnionErr: (keys: string[]) => void;
/**
* 修改数据
*/
onChange: (value: U | undefined, ...args: any) => void;
/**
* 设置默认数据
*/
setDefaultValue: (value: U | undefined) => void;
/**
* 设置校验规则
*/
setRules: (rules: Rules | undefined) => void;
/**
* @param rootId 根id,用于生成error key
* 验证
*/
validate: (rootId?: string) => CancellablePromise<ErrorType>;
/**
* 重置
*/
reset: () => void;
}
export interface ItemStoreProps<U = any, T = {}> {
key: keyof T;
formStore: FormStoreInterface<T>;
/**
* 默认值
*/
defaultValue?: U;
/**
* 验证规则,详情请查看相关链接
* @see {@link https://github.com/yiminghe/async-validator}
*/
rules?: Rules;
/**
* @summary 输入的值格式化
*/
parse?: Parse<U>;
/**
* 输出的值格式化
*/
format?: Format<U>;
}
export declare type SubmitCallbackProps<T> = {
values: T;
errs: undefined;
} | {
values: Partial<T>;
errs: ErrorsType<T>;
};
export interface FormStoreProps<T> {
initInstances: (formStore: FormStoreInterface<T>) => ItemStores<T>;
}
export interface FormStoreInterface<T extends {
[key: string]: any;
}> {
/**
* 全局disabled
*/
disabled: boolean;
setDisabled: (disabled: boolean) => void;
/**
* validate一个错误就停止
*/
validateOnlyFirst?: boolean;
/**
* 所有的item store
*/
itemStores: ItemStores<T>;
/**
* 联合错误(即多个字段联动产生的错误)
*/
unionValidatorDict: {
[P in keyof T]?: (() => void)[];
};
/**
* 提交
*/
submit: SubmitType<T>;
/**
* 表单是否输入过
*/
isChange: boolean;
/**
* 自动返回当前的所有错误
*/
errors?: ErrorType;
/**
* 表单变化触发
* @param key 触发的key
* @param value 触发的值(格式化过的)
* @param original 触发的原始值
* @param originalArgs 触发的原始值的其他参数
*/
onChange?(key: keyof T, value: any, original: any, originalOtherArgs: any): void;
setChangeState: (isChange: boolean) => void;
/**
* 重置
*/
reset: () => void;
getValue<K extends keyof T>(key: K): T[K] | undefined;
/**
* keys不传的情况下返回所有值
* @param keys 获取的值
*/
getValues<KEYS extends (keyof T)[]>(keys?: KEYS): Partial<{
[K in KEYS[number]]: T[K];
}>;
setValue(key: keyof T, value?: T[keyof T], onChangeContext?: OnChangeContext): void;
setValues(props: Partial<T>, onChangeContext?: OnChangeContext): void;
/**
* 跟上面 setValues 区别在于 此接口是把所有值更新成props,setValues({})不会更新任何值,setAllValues({})会把所有值更新成undefined
* @param props
*/
setAllValues(props: Partial<T>, onChangeContext?: OnChangeContext): void;
/**
* 触发全局验证
* @param rootId 根id,用于生成error key
*/
validate: (rootId?: string) => Promise<Partial<ErrorsType<T>> | undefined>;
/**
* 触发key对应的字段验证
* @param key
* @param rootId 用于生成error key
*/
validateValue(key: keyof T, rootId?: string): Promise<ErrorType>;
/**
* 触发keys对应的字段集验证
* @param keys
* @param rootId 用于生成error key
*/
validateValues<U extends ErrorsType<T> = ErrorsType<T>>(keys: (keyof T)[], rootId?: string): Promise<Partial<U>>;
}
/**
* 自动交联验证
*/
export interface AutoValidate<T, P extends keyof T = keyof T> {
/**
* 错误显示在那个key上
*/
primaryKey: P;
/**
* 除 primaryKey 外监听的其他key,primaryKey 与 key对应的值改变,即触发动作
*/
listenKey: (keyof T)[];
/**
* 验证方法
*/
validator: (arg: Partial<T>, formStore: FormStoreInterface<T>, value?: T[P]) => string | undefined;
}
/**
* 自动处理
*/
export interface AutoHandle<T> {
/**
* 监听的key,key对应的值改变,即触发动作
*/
listenKey: (keyof T)[];
/**
* 触发动作
*/
action: (arg: Partial<T>, formStore: FormStoreInterface<T>) => void;
}
export interface FormConfig<U> extends Omit<ItemStoreProps<U, {}>, 'key' | 'formStore'> {
}
export declare type FormConfigs<T = {}> = {
[P in keyof T]: FormConfig<T[P]>;
};
export declare type PartialUndefined<T> = {
[P in keyof T]: T[P] | undefined;
};
export interface Options<T> {
autoValidate?: AutoValidate<T> | AutoValidate<T>[];
autoHandle?: AutoHandle<T> | AutoHandle<T>[];
}