redux-form/redux-form

View on GitHub
src/types.js.flow

Summary

Maintainability
Test Coverage
// @flow
import type { Dispatch } from 'redux'

export type Action = {
  type: string,
  meta?: any,
  payload?: any,
  error?: any
}

export type Validator = (
  value: any,
  allValues: Object,
  props: Object,
  name: string
) => ?any

export interface Structure<M, L> {
  allowsArrayErrors: boolean;
  empty: M;
  emptyList: L;
  getIn(state: any, field: string): any;
  setIn(state: any, field: string, value: any): any;
  deepEqual(a: any, b: any): boolean;
  deleteIn(state: any, field: string): any;
  forEach(list: L, callback: { (item: any, index: number): void }): void;
  fromJS(value: any): any;
  keys(value: M): L;
  size(array: L): number;
  some(list: L, callback: { (item: any, index: number): boolean }): boolean;
  splice(array: L, index: number, removeNum: number, value: any): L;
  equals(a: any, b: any): boolean;
  orderChanged(a: any, b: any): boolean;
  toJS(value: M): any;
}

export type FieldType = 'Field' | 'FieldArray'

export type Values = any

export type GetFormState = { (state: any): any }

export type Option = {
  selected: boolean,
  value: any
}

export type Event = {
  preventDefault(): void,
  stopPropagation(): void,
  target: {
    value: any,
    type: string,
    options?: Array<Option>,
    checked?: boolean,
    files?: Array<Object>
  },
  dataTransfer: {
    files: Array<Object>,
    getData: { (key: string): any },
    setData: { (key: string, data: any): void }
  },
  nativeEvent?: {
    text?: string
  }
}

export type Context = {
  form: string,
  getFormState: GetFormState,
  asyncValidate: {
    (name: ?string, value: ?any, trigger: 'blur' | 'change'): Promise<any>
  },
  getValues: { (): Object },
  sectionPrefix?: string,
  prefixName?: string,
  register: (
    name: string,
    type: string,
    getValidator: ?() => ?(Validator | Validator[]),
    getWarner: ?() => ?(Validator | Validator[])
  ) => void,
  unregister: (name: string) => void,
  registerInnerOnSubmit: (innerOnSubmit: Function) => void,
  focus: (name: string) => void,
  change: (name: string, value: any) => void,
  blur: (name: string, value: any) => void
}

export type ReactContext = {
  _reduxForm: Context
}

export type SubmitFunction = (
  values: any,
  dispatch: Dispatch<any>,
  props: Object
) => any

type HandleSubmit = (event: ?Event) => void | Promise<any>

export type FormProps = {
  anyTouched: boolean,
  array: {
    insert: (field: string, index: number, value: any) => void,
    move: (field: string, from: number, to: number) => void,
    pop: (field: string) => void,
    push: (field: string, value: any) => void,
    remove: (field: string, index: number) => void,
    removeAll: (field: string) => void,
    shift: (field: string) => void,
    splice: (
      field: string,
      index: number,
      removeNum: number,
      value: any
    ) => void,
    swap: (field: string, indexA: number, indexB: number) => void,
    unshift: (field: string, value: any) => void
  },
  asyncValidate: () => void,
  asyncValidating: string | boolean,
  autofill: (field: string, value: any) => void,
  blur: (field: string, value: any) => void,
  change: (field: string, value: any) => void,
  clearAsyncError: (field: string) => void,
  clearSubmit: () => void,
  destroy: () => void,
  dirty: boolean,
  dispatch: Function,
  error: any,
  form: string,
  handleSubmit: HandleSubmit & (SubmitFunction => HandleSubmit), // '&' (intersection type) means function overloading
  initialize: (data: Object) => void,
  initialized: boolean,
  initialValues: Object,
  invalid: boolean,
  pristine: boolean,
  reset: () => void,
  resetSection: () => void,
  submitting: boolean,
  submitFailed: boolean,
  submitSucceeded: boolean,
  touch: (...fields: string[]) => void,
  untouch: (...fields: string[]) => void,
  valid: boolean,
  warning: any
}