1.1.1 • Published 5 years ago

@zzwing/react-form-wrapper v1.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
5 years ago

React-form-wrapper

CircleCI codecov

Edit react-form-wrapper demo

Document

Document

Base Usage

npm install @zzwing/react-form-wrapper

import FormWrapperHoc from '@zzwing/react-form-wrapper'
FormWrapperHoc(WrappedComponent, defaultState)

WrappedComponent can get formWrapper from this.props

FormWrapper props

nametypedesc
itemWrapper(element: JSX.Element, opt: FormItemWrapperOpt) => JSX.Elementwrap component
getState() => stategetState from wrapper
setWrapperState(state, callback) => voidsetState like React.setState

FormItemWrapperOpt

nametypedescdefault
valuePropNamestringname for wrapped's value prop, eg: checkedvalue
getValueFromEvent(e: any) => anychange event to value(e) => e.target[valuePropName]
defaultValueanyset defaultValue once when value is undefinedundefined
eventTriggerstringcustom event trigger, eg: onCheck, onChangeonChange
import * as React from 'react'
import FormWrapperHoc, { FormWrapperHocProp } from '@zzwing/react-form-wrapper'

class Form extends React.PureComponent<FormWrapperHocProp> {
  render() {
    const { itemWrapper, getState } = this.props.formWrapper
    // use itemWrapper to wrap sub-comp
    const Input = itemWrapper('valueKey')(<input />)
    const value = getState().valueKey
    return (
      <>
        {Input}
        you can get value for {key}
      </>
    )
  }
}

Types

type PlainObject = {
  [key: string]: any;
}

interface FormItemWrapperOpt {
  valuePropName?: string
  getValueFromEvent?: (e: any) => any
  defaultValue?: any
  eventTrigger?: string
}

 interface FormItemWrapper {
  (key: string, props?: FormItemWrapperOpt): (
    element: JSX.Element
  ) => JSX.Element
}

interface FormWrapperHocRef<T = any> {
  setWrapperState: (state: T) => void
  getState: () => T
}

type PropWithRef<P> = P & {
  getRef?: (arg: FormWrapperHocRef) => void;
}

function FormWrapperHoc<
    P = any,
    T extends PlainObject = PlainObject
  >(
    Wrapped: React.ComponentType<any>,
    initialState?: T
  ): React.ComponentClass<PropWithRef<P>>
}
1.1.1

5 years ago

1.1.0

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago