UNPKG

@shopify/react-form-state

Version:
74 lines (73 loc) 2.44 kB
import * as React from 'react'; import { FieldDescriptors, FieldStates, ValidationFunction } from './types'; import { List, Nested } from './components'; export interface RemoteError { field?: string[] | null; message: string; } declare type MaybeArray<T> = T | T[]; declare type MaybePromise<T> = T | Promise<T>; interface SubmitHandler<Fields> { (formDetails: FormData<Fields>): MaybePromise<RemoteError[]> | MaybePromise<void>; } export declare type Validator<T, F> = MaybeArray<ValidationFunction<T, F>>; export declare type ValidatorDictionary<FieldMap> = { [FieldPath in keyof FieldMap]: Validator<FieldMap[FieldPath], FieldMap>; }; export interface FormData<Fields> { fields: FieldDescriptors<Fields>; dirty: boolean; valid: boolean; errors: RemoteError[]; } export interface FormDetails<Fields> extends FormData<Fields> { submitting: boolean; reset(): void; submit(): void; } interface Props<Fields> { initialValues: Fields; children(form: FormDetails<Fields>): React.ReactNode; validators?: Partial<ValidatorDictionary<Fields>>; onSubmit?: SubmitHandler<Fields>; validateOnSubmit?: boolean; onInitialValuesChange?: 'reset-all' | 'reset-where-changed' | 'ignore'; externalErrors?: RemoteError[]; } interface State<Fields> { submitting: boolean; fields: FieldStates<Fields>; dirtyFields: (keyof Fields)[]; errors: RemoteError[]; externalErrors: RemoteError[]; } export default class FormState<Fields extends Object> extends React.PureComponent<Props<Fields>, State<Fields>> { static List: typeof List; static Nested: typeof Nested; static getDerivedStateFromProps<T>(newProps: Props<T>, oldState: State<T>): { externalErrors: RemoteError[]; fields: FieldStates<T>; } | null; state: State<Fields>; private mounted; private fieldsWithHandlers; componentDidMount(): void; componentWillUnmount(): void; render(): React.ReactNode; validateForm(): Promise<{}>; reset: () => Promise<{}>; private readonly formData; private readonly dirty; private readonly valid; private readonly hasClientErrors; private readonly fields; private submit; private fieldWithHandlers; private updateField; private getUpdatedDirtyFields; private getUpdatedField; private blurField; private validateFieldValue; private updateRemoteErrors; } export {};