2017-06-29 12:54:02 -06:00
|
|
|
import thunk from "redux-thunk";
|
|
|
|
import { applyMiddleware, compose, Middleware } from "redux";
|
|
|
|
import { EnvName } from "./interfaces";
|
|
|
|
|
|
|
|
interface MiddlewareConfig {
|
|
|
|
fn: Middleware;
|
|
|
|
env: EnvName;
|
|
|
|
}
|
|
|
|
|
|
|
|
/** To make it easier to manage all things watching the state tree,
|
|
|
|
* we keep subscriber functions in this array. */
|
|
|
|
export let mwConfig: MiddlewareConfig[] = [
|
|
|
|
{
|
|
|
|
env: "*",
|
|
|
|
fn: thunk
|
|
|
|
}
|
|
|
|
, {
|
|
|
|
env: "development",
|
2017-06-30 11:34:06 -06:00
|
|
|
fn: require("redux-immutable-state-invariant").default()
|
2017-06-29 12:54:02 -06:00
|
|
|
}
|
|
|
|
];
|
|
|
|
|
|
|
|
export function getMiddleware(env: EnvName) {
|
2017-08-28 05:49:13 -06:00
|
|
|
const middlewareFns = mwConfig
|
2017-06-29 12:54:02 -06:00
|
|
|
.filter(function (mwc) { return (mwc.env === env) || (mwc.env === "*"); })
|
|
|
|
.map((mwc) => mwc.fn);
|
2017-08-28 13:54:47 -06:00
|
|
|
const dtCompose = (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__;
|
2017-06-29 12:54:02 -06:00
|
|
|
const composeEnhancers = dtCompose || compose;
|
2017-08-28 05:49:13 -06:00
|
|
|
const middlewares = applyMiddleware(...middlewareFns);
|
2017-06-29 12:54:02 -06:00
|
|
|
|
|
|
|
return composeEnhancers(middlewares);
|
|
|
|
}
|