UNPKG

redux-dispatcher

Version:

All-in-one simple solution to manage actions with less code

74 lines (57 loc) 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = createFacade; var _dispatcherMiddleware = require("./dispatcherMiddleware"); var _createReducer = require("./createReducer"); var _injectResult = require("./enhancer/injectResult"); var _injectEvent = _interopRequireDefault(require("./enhancer/injectEvent")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * @param: mapDispatchToAction: Object<string: function or object> */ function createFacade(key, mapDispatchToAction, enhancer) { const facade = (0, _createReducer.createReducer)(key, enhancer); facade.key = key; for (const dispatch in mapDispatchToAction) if (mapDispatchToAction.hasOwnProperty(dispatch)) { const { type, creator } = mapDispatchToAction[dispatch]; facade[dispatch] = createDispatcher(type, creator); } return facade; } ; const createDispatcher = (actionType, actionCreator) => { const dispatcher = (...args) => { let payload = typeof actionCreator === 'function' ? actionCreator.apply(null, args) : actionCreator; if (typeof payload === 'function') // support for thunk { const effect = payload; payload = args; if (effect.constructor.name === 'AsyncFunction') // you can await on dispatch to get result return new Promise(resolve => { resolve(effect({ ..._dispatcherMiddleware.context, dispatch: _dispatcherMiddleware.store.dispatch, getState: _dispatcherMiddleware.store.getState })); }); effect({ ..._dispatcherMiddleware.context, dispatch: _dispatcherMiddleware.store.dispatch, getState: _dispatcherMiddleware.store.getState }); } let action = (0, _injectResult.injectResult)({ type: payload.type || actionType, ...payload }); action = (0, _injectEvent.default)(action); _dispatcherMiddleware.store.dispatch(action); return action; }; dispatcher.toString = () => actionType; dispatcher.type = actionType; return dispatcher; };