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