JSPM

redux-normalizr

1.0.3
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • 0
  • Score
    100M100P100Q24006F
  • License MIT

Redux data normalization middleware which get actions with a meta.schema field an normalize her payload

Package Exports

  • redux-normalizr

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (redux-normalizr) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

redux-normalizr

Build Status

Installation

npm install --save redux-normalizr

Usage

Functions

Return a middleware for redux applyMiddleware function.

Typedefs

This callback fetch the data to normalize in the action

This callback trigger after normalization and can mutate data

  • OnNextCbObject

    This callback trigger just before leaving for mutate the action or dispatch actions

GetDataCb ⇒ Object

This callback fetch the data to normalize in the action

Kind: Callback Returns: Object - data to normalize

Param Type Description
store ReduxStore redux store
action ReduxAction redux action

PostNormalizeCb ⇒ Object

This callback trigger after normalization and can mutate data

Kind: Callback Returns: Object - mutated data

Param Type Description
normalizedData ReduxAction redux action

OnNextCb ⇒ Object

This callback trigger just before leaving for mutate the action or dispatch actions

Kind: Callback Returns: Object - normalized data

Param Type Description
store ReduxStore redux store
action ReduxAction redux action
normalizedData ReduxAction redux action

normalizrMiddleware(options) ⇒ Boolean

Return a normalizer-middleware for redux

Kind: global function
Returns: Boolean - shouldBeProcessed

Param Type Description
options Object middleware options
options.getActionData GetDataCb getData in action object
options.onNextAction OnNextCb mutate action before sending
options.onNormalizeData PostNormalizeCb mutate data after normalizr
options.actionFilter String | Regex filter of action type to handle
import normalizrMiddleware from 'redux-normalizer'

applyMiddleware(normalizrMiddleware({}));

Examples

Simple use case

A simple usage could be :

import { compose, createStore, applyMiddleware } from 'redux';
import normalizrMiddleware from 'redux-normalizr';
import reducers from './reducers';

export default initialState => createStore(
  reducers,
  initialState,
  compose(applyMiddleware(
      normalizrMiddleware({}),
    )
  ))

In this case all actions with a field :

{
  meta: {
    schema: normalizerSchema,
  }
}

will have it payload field replaced by :

normalize(payload, schema)

A use-case with redux-promise middleware

import reducers from './reducers'
/**
 *  Catch all resolved promise, normalize payload.data field,
 *  send normalized data to a reducer which act as localStore
 *  and send only id's to UI reducers
 */
const onNextAction = (store, action, normalizedData) => {
  store.dispatch({
    type: 'STORE_UPDATE',
    payload: normalizedData.entities,
  });

  return ({
    ...action,
    payload: {
      ...action.payload,
      data: normalizedData.result,
    },
  });
};

const getActionData = (store, action) => action.payload.data;

const normalizrConfig = {
  onNextAction,
  getActionData,
  actionFilter: /_FULFILLED$/,
};

/**
 * Create store with reducers and middlewares
 * @param  {Object}     initialState    store initial state
 * @return {ReduxStore} the redux store generated
 */
export default initialState => createStore(
  reducers,
  initialState,
  compose(applyMiddleware(
    promise(),
    normalizr(normalizrConfig),
    thunk,
  ))
);