react-bulk-form
Version:
A simple React library for managing form-related states in bulk.
42 lines (33 loc) • 1.29 kB
text/typescript
import type { ReactNode } from 'react';
export type FormValues<V> = { [P in keyof V]: undefined extends V[P] ? never : V[P] };
export type FormRuleKey = string;
export type FormRule<V extends FormValues<V>> = (values: V) => boolean;
export type FormRules<V extends FormValues<V>, R extends FormRuleKey> = Record<R, FormRule<V>>;
export type FormErrors<R extends FormRuleKey> = { [P in R]?: true } & {
[key: string]: true | undefined;
};
export type UseFormOptions<V extends FormValues<V>, R extends FormRuleKey> = {
defaultValues: V;
} & ([R] extends [never] ? {} : { rules: FormRules<V, R> });
export type UseFormReturn<V extends FormValues<V>, R extends FormRuleKey> = {
values: V;
errors: FormErrors<R>;
dirtyFields: { [K in keyof V]?: true };
touchedFields: { [K in keyof V]?: true };
flags: {
isValid: boolean;
isDirty: boolean;
};
setValues: (valuesOrCallback: Partial<V> | ((prevValues: V) => Partial<V>)) => void;
setErrors: (
errorsOrCallback:
| Record<string, boolean>
| ((prevErrors: FormErrors<R>) => Record<string, boolean>)
) => void;
reset: () => void;
commit: () => void;
};
export type FormProviderProps<V extends FormValues<V>, R extends FormRuleKey> = {
form: UseFormReturn<V, R>;
children: ReactNode;
};