1.0.0 • Published 8 years ago

redux-thunk-sync-creators v1.0.0

Weekly downloads
1
License
ISC
Repository
-
Last release
8 years ago

Redux Thunk Sync Creators

Generator functions for synchronous Redux actions commonly used with redux-thunk. The reducers use immutable state, which supports more efficient state diffing. The following API is described as if the 'resource' being passed in is 'user'. As the resource changes, so to do the names of the actions and action creators associated with that resource:

isImmutable(item)

Returns true if the item is immutable, and false otherwise.

actionTypesFor(resource)

Generates action types for a resource, which is a string. The return value will be an object that has three values:

  • USER_FETCH_START
  • USERFETCH_SUCCESS USER_FETCH_ERROR

These action types are used in the other methods in this API, such as actionCreatorsFor and reducersFor.

actionCreatorsFor(resource)

Generates the following action creators for a resource:

  • userFetchStart()
  • userFetchSuccess(users)
  • userFetchError(error)

These action creators create the expected action objects. See reducersFor for information on what new state these action creators will produce.

reducersFor(resource)

Generates a reducer that handles those actions described in actionCreatorsFor. The following action types are handled in the following ways:

USER_FETCH_START

Generated by calling the userFetchStart() function. This will produce the following variations in the next state returned by the reducer:

  • isFetching: true
  • error: null All other values will remain consistent with the previous state of the reducer.

USER_FETCH_SUCCESS

Generated by calling the userFetchSuccess(users) function. This will produce the following variations in the next state returned by the reducer:

  • users: the users argument passed into the creator
  • isFetching: false
  • error: null All other values will remain consistent with the previous state of the reducer.

USER_FETCH_ERROR

Generated by calling the userFetchError(error) function. This will produce the following variations in the next state returned by the reducer:

  • users: the users argument passed in
  • isFetching: false
  • error: the error argument passed into the creator All other values will remain consistent with the previous state of the reducer.

initialFrom(reducer)

This will generate the initial immutable state from a given reducer. For example, if the resource is 'user', the state will be an immutable object with the following characteristics:

  • users: null
  • isFetching: false
  • error: null

Extending reducers

The standard way to use the reducer generator is to provide the reducersFor function as a wrapper around the default case in your own cases. For example, your reducer might look something like this:

import {
  initialFrom,
  reducersFor
} from 'redux-thunk-sync-creators'

const defaultUserReducer = reducersFor('user')

export default (state = initialFrom(defaultUserReducer), action) => {
  switch (action.type) {
    /** ... Your own custom cases **/
    default:
      return defaultUserReducer(state, action)
  }
}