UNPKG

easy-peasy

Version:

Vegetarian friendly state for React

58 lines (52 loc) 1.57 kB
import { get } from './lib'; export function createListenerMiddleware(_r) { return () => (next) => (action) => { const result = next(action); if ( action && _r._i._lAM[action.type] && _r._i._lAM[action.type].length > 0 ) { const sourceAction = _r._i._aCD[action.type]; _r._i._lAM[action.type].forEach((actionCreator) => { actionCreator({ type: sourceAction ? sourceAction.def.meta.type : action.type, payload: action.payload, error: action.error, result: action.result, }); }); } return result; }; } export function bindListenerdefs(listenerdefs, _aC, _aCD, _lAM) { listenerdefs.forEach((def) => { const targets = def.targetResolver(get(def.meta.parent, _aC), _aC); const targetTypes = (Array.isArray(targets) ? targets : [targets]).reduce( (acc, target) => { if ( typeof target === 'function' && target.def.meta.type && _aCD[target.def.meta.type] ) { if (target.def.meta.successType) { acc.push(target.def.meta.successType); } else { acc.push(target.def.meta.type); } } else if (typeof target === 'string') { acc.push(target); } return acc; }, [], ); def.meta.resolvedTargets = targetTypes; targetTypes.forEach((targetType) => { const listenerReg = _lAM[targetType] || []; listenerReg.push(_aCD[def.meta.type]); _lAM[targetType] = listenerReg; }); }); }