48 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
 | 
						|
 | 
						|
import compose from './compose';
 | 
						|
 | 
						|
/**
 | 
						|
 * Creates a store enhancer that applies middleware to the dispatch method
 | 
						|
 * of the Redux store. This is handy for a variety of tasks, such as expressing
 | 
						|
 * asynchronous actions in a concise manner, or logging every action payload.
 | 
						|
 *
 | 
						|
 * See `redux-thunk` package as an example of the Redux middleware.
 | 
						|
 *
 | 
						|
 * Because middleware is potentially asynchronous, this should be the first
 | 
						|
 * store enhancer in the composition chain.
 | 
						|
 *
 | 
						|
 * Note that each middleware will be given the `dispatch` and `getState` functions
 | 
						|
 * as named arguments.
 | 
						|
 *
 | 
						|
 * @param {...Function} middlewares The middleware chain to be applied.
 | 
						|
 * @returns {Function} A store enhancer applying the middleware.
 | 
						|
 */
 | 
						|
export default function applyMiddleware() {
 | 
						|
  for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {
 | 
						|
    middlewares[_key] = arguments[_key];
 | 
						|
  }
 | 
						|
 | 
						|
  return function (createStore) {
 | 
						|
    return function (reducer, preloadedState, enhancer) {
 | 
						|
      var store = createStore(reducer, preloadedState, enhancer);
 | 
						|
      var _dispatch = store.dispatch;
 | 
						|
      var chain = [];
 | 
						|
 | 
						|
      var middlewareAPI = {
 | 
						|
        getState: store.getState,
 | 
						|
        dispatch: function dispatch(action) {
 | 
						|
          return _dispatch(action);
 | 
						|
        }
 | 
						|
      };
 | 
						|
      chain = middlewares.map(function (middleware) {
 | 
						|
        return middleware(middlewareAPI);
 | 
						|
      });
 | 
						|
      _dispatch = compose.apply(undefined, chain)(store.dispatch);
 | 
						|
 | 
						|
      return _extends({}, store, {
 | 
						|
        dispatch: _dispatch
 | 
						|
      });
 | 
						|
    };
 | 
						|
  };
 | 
						|
} |