use-state-validate
Version:
Clean featherweight state validation
45 lines (44 loc) • 2.23 kB
TypeScript
import type { DependencyList, ReactNode } from "react";
declare type IFieldObjectCustomConfig<T, P> = Pick<P, Exclude<keyof P, keyof IFieldValidationConfigBase<T>>>;
interface IFieldValidationStateBase<T> {
changed: boolean;
cue: boolean;
cueInvalid: boolean;
errors: ReactNode[];
label?: string;
required: boolean;
valid: boolean;
value: T;
}
interface IFieldObjectBase<T> extends IFieldValidationStateBase<T> {
restore: () => void;
setCue: (cue: boolean) => void;
setValue: (newValue: T) => void;
}
export declare type IFieldObject<T, P = {}> = IFieldObjectCustomConfig<T, P> & IFieldObjectBase<T>;
export declare type RuleCallback<T> = (value: T) => boolean;
interface IFieldValidationConfigBase<T> {
cueDelay?: number;
deps?: DependencyList;
label?: string;
required?: boolean | ReactNode;
rules?: [RuleCallback<T>, ReactNode?][];
}
export declare type IFieldValidationConfig<T, P = {}> = P & IFieldValidationConfigBase<T>;
export declare const useStateValidate: <T, P extends IFieldValidationConfigBase<T>>(initial: T, config: P) => IFieldObject<T, P>;
export declare const fieldBagChanged: <T, P = {}>(fieldBag: object) => boolean;
export declare const fieldBagValid: <T, P = {}>(fieldBag: object) => boolean;
export declare const fieldBagReduceToValues: <T, F extends object>(fieldBag: F) => { [key in keyof F]: string; };
export declare const fieldBagTraverse: <T, P = {}>(fieldBag: object, cb: (field: IFieldObject<T, P>) => void) => void;
export declare const ruleEmail: () => (value: string) => boolean;
export declare const ruleEnum: (list: string[]) => (value: string) => boolean;
export declare const ruleLength: ({ min, max }: {
min?: number | undefined;
max?: number | undefined;
}) => (value: string) => boolean;
export declare const ruleMatch: (pattern: RegExp) => (value: string) => boolean;
export declare const ruleNumeric: () => (value: string) => boolean;
export declare const rulePhone: () => (value: string) => boolean;
export declare const ruleZip: () => (value: string) => boolean;
export declare const defineConfig: <T, P = {}>(rule: IFieldValidationConfig<T, P>) => IFieldValidationConfig<T, P>;
export default useStateValidate;