UNPKG

@skele/classic

Version:

Skele is an architectural framework that assists with building data-driven apps with React or React Native.

1 lines 2.36 kB
'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.reducer=exports.middleware=void 0;var R=_interopRequireWildcard(require("ramda"));var actions=_interopRequireWildcard(require("../action"));var _actions=require("./actions");var _core=require("@skele/core");var _ActionRegistry=require("../registry/ActionRegistry");function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){var desc=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):{};if(desc.get||desc.set){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}}newObj.default=obj;return newObj;}}var memoize=_core.registry.memoize;var updateStateAction='@@skele/_effects.updateState';var error=_core.log.error;var middleware=function middleware(config){var kernel=config.kernel,effectsRegistry=config.effectsRegistry;var effectFor=memoize(function(key){return effectsRegistry.get(key);},_ActionRegistry.ActionRegistry.cacheKey);return R.curry(function(store,next,action){var actionMeta=actions.actionMeta(action);if(actionMeta==null)return next(action);var key=_ActionRegistry.ActionRegistry.keyFromAction(action);var effect=effectFor(key);var context=kernel.focusOn(actionMeta.keyPath);if(effect==null&&action.type.startsWith('.')){var entry=(0,_ActionRegistry.findParentEntry)(effectFor,action.type,context.query());if(entry!=null){var element=entry.element,eff=entry.entry;effect=eff;context=kernel.focusOn(element._keyPath);}}if(effect!=null){var result=effect(context,action);if(result&&typeof result.then==='function'){result.then(function(updateFn){if(typeof updateFn==='function'){context.dispatch({type:updateStateAction,updateFn:updateFn});}}).catch(function(e){kernel.dispatch({type:_actions.types.fail,error:e});error('Exception while executing an effect: ',e);});}else if(typeof result==='function'){context.dispatch({type:updateStateAction,updateFn:result});}}else{return next(action);}});};exports.middleware=middleware;var reducer=R.curry(function(config,state,action){if(action.type===updateStateAction){var _actions$actionMeta=actions.actionMeta(action),keyPath=_actions$actionMeta.keyPath;return state.updateIn(keyPath,action.updateFn);}return state;});exports.reducer=reducer;