UNPKG

powerform

Version:
105 lines (104 loc) 3.55 kB
declare type Optional<T> = T | undefined; declare type Error = string; declare type Decoder<T> = (val: string) => [T, Error]; declare type ChangeHandler<T> = (val: T) => void; declare type InputHandler = (val: string, preVal: string) => string; declare type ErrorHandler = (error: string) => void; export declare class Field<T> { private decoder; changeHandler?: ChangeHandler<T>; inputHandler?: InputHandler; errorHandler?: ErrorHandler; fieldName: string; form?: any; private _error; private initialValue; private previousValue; private currentValue; private validators; constructor(decoder: Decoder<T>, ...validators: Validator<NoUndefined<T>>[]); optional(): Field<Optional<T>>; initValue(val: any): this; onInput(i: InputHandler): this; onError(i: ErrorHandler): this; onChange(c: ChangeHandler<T>): this; triggerOnError(): void; triggerOnChange(): void; setValue(val: any, skipTrigger?: boolean): void; get raw(): T; get value(): T; _validate(): string | undefined; validate(): boolean; isValid(): boolean; setError(error: string, skipTrigger?: boolean): void; get error(): string; isDirty(): boolean; makePristine(): void; reset(): void; setAndValidate(value: T): string; } declare type Schema<T> = { [K in keyof T]: Field<T[K]>; }; declare type Values<T> = { [K in keyof T]: T[K]; }; export declare const defaultConfig: { multipleErrors: boolean; stopOnError: boolean; }; declare type FormConfig = { multipleErrors?: boolean; stopOnError?: boolean; }; declare type FormErrorHandler<T> = (errors: Errors<T>) => void; declare type FormChangeHandler<T> = (values: Values<T>) => void; export declare class Form<T> { fields: Schema<T>; private config; getNotified: boolean; errorHandler?: FormErrorHandler<T>; changeHandler?: FormChangeHandler<T>; constructor(fields: Schema<T>, config?: FormConfig); initValue(values: Values<T>): this; onError(handler: FormErrorHandler<T>): this; onChange(handler: FormChangeHandler<T>): this; toggleGetNotified(): void; setValue(data: T, skipTrigger?: boolean): void; triggerOnChange(): void; triggerOnError(): void; get value(): T; get raw(): Values<T>; getUpdates(): T; setError(errors: Errors<T>, skipTrigger?: boolean): void; get error(): Errors<T>; isDirty(): boolean; makePristine(): void; reset(): void; _validate(skipAttachError: boolean): boolean; validate(): boolean; isValid(): boolean; } declare type Errors<T> = { [K in keyof T]: string; }; export declare type Config<T> = { onChange?: (data: T, form: Form<T>) => void; onError?: (error: Errors<T>, form: Form<T>) => void; multipleErrors: boolean; stopOnError: boolean; }; export declare type Context<T> = { prevValue: T; fieldName: string; all: Record<string, any>; }; declare type NoUndefined<T> = T extends undefined ? never : T; export declare type Validator<T> = (val: T, ctx?: Context<T>) => string | undefined; export declare function strDecoder(val: string): [string, Error]; export declare function numDecoder(val: string): [number, Error]; export declare function boolDecoder(val: string): [boolean, Error]; export declare function str(...validators: Validator<string>[]): Field<string>; export declare function num(...validators: Validator<number>[]): Field<number>; export declare function bool(...validators: Validator<boolean>[]): Field<boolean>; export {};