use-form-fields
Version:
[Demo](https://vlad88vlad.github.io/use-form-fields)
90 lines (89 loc) • 2.8 kB
TypeScript
import React from 'react';
export declare type ReactOnChangeType = React.ChangeEvent<HTMLInputElement> | React.ChangeEvent<HTMLTextAreaElement> | React.ChangeEvent<HTMLSelectElement>;
export declare type validFuncType = (_e: any) => string | null;
export declare type onChangeType = (_e: ReactOnChangeType) => void;
export declare type onChangeHandlerType = (_e: string) => void;
export declare type toValidType = (_e: string) => string | null;
export declare type valueType = string | number | boolean;
export declare type valueCallbackTypeArg = {
prevValue: valueType;
};
export declare type valueCallbackType = (_value: valueCallbackTypeArg) => valueType;
declare type radioOptionType = {
option: any;
};
declare type fieldBase = {
error?: string;
immediatelyValidate?: boolean;
required?: boolean;
toValid?: () => void;
validations?: validFuncType[];
minLen?: number;
maxLen?: number;
fieldProps?: object;
[key: string]: unknown;
};
declare type customFieldType = fieldBase & {
type: 'custom';
value: any;
checked?: never;
};
declare type inputFieldType = fieldBase & {
type?: 'text' | 'password' | 'email' | 'range' | 'color' | 'search' | 'date' | 'datetime' | 'datetime-local' | 'tel' | 'time' | 'url' | 'month' | 'week';
value?: string | number;
checked?: never;
};
declare type numberFieldType = fieldBase & {
type: 'number';
value?: number;
checked?: never;
};
declare type radioFieldType = fieldBase & {
type: 'radio';
value: string | number;
checked?: boolean;
options: radioOptionType[];
};
declare type checkboxFieldType = fieldBase & {
type: 'checkbox';
checked: boolean;
value?: never;
};
export declare type getFormFieldsType = {
fields: formSchemaType;
onChange: onChangeHandlerType;
toValid: toValidType;
setValue: (_value: any) => void;
setError: (_errorMessage: any) => void;
};
export declare type formSchemaType = {
[key: string]: checkboxFieldType | radioFieldType | inputFieldType | customFieldType | numberFieldType;
};
export declare type formField = {
value: any;
fieldProps: {
value: any;
name: string;
required?: boolean;
onChange: onChangeType;
};
error?: string;
setValue: (_value: any) => void;
setError: (_errorMessage: any) => void;
toValid?: () => void;
radioOptions?: any[];
};
export declare type formFields = {
[key: string]: formField;
};
export declare type toJSONType = <T = {
[key: string]: any;
}>() => T;
export declare type useFormType = {
form: {
fields: formFields;
toJSON: toJSONType;
toValidate: () => boolean;
};
};
export {};