Translate dispatched actions to other actions, for compatibility with reducers/middleware you don't control. E.g. when an action should trigger a history change in redux-router
It's preferable to update your reducers/middleware to acknowledge the source action, but that's not always possible.
$ npm install redux-action-translator
Installing the middleware:
import translator from 'redux-action-translator'
import {createStore, applyMiddleware} from 'redux'
const translation = translator({})
applyMiddleware(translation)(createStore)
Translations match on action.type and expect a value of the type [Action] | (a: Action, getState: () => State) => [Action]
E.g.
const evenAction = (n) => ({ type: "even", payload: a.payload })
const oddAction = (n) => ({ type: "odd", payload: n })
const translation = translator({
"login_complete": [replace("/")],
"registration_complete": [replace("/"), welcome()],
"number": a => a.payload % 2 ? [oddAction(a.payload)] : [evenAction(a.payload)],
"unauthorized": (a, getState) => [redirect(`/login?redirect=${getState().router.location.pathname}`)],
});
applyMiddleware(translation)(createStore)
...
// dispatches registrationComplete, then replace("/), then welcome()
dispatch(registrationComplete())
// dispatches numberAction, then oddAction if it's odd, or evenAction if it's even
dispatch(numberAction(n))