UNPKG

@girders-elements/core

Version:

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

66 lines (52 loc) 2.37 kB
'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.reducer=exports.middleware=undefined; var _ramda=require('ramda');var _ramda2=_interopRequireDefault(_ramda); var _action=require('../action');var actions=_interopRequireWildcard(_action); var _actions=require('./actions'); var _data=require('../data');var data=_interopRequireWildcard(_data); var _registry=require('../registry'); var _cursor=require('../impl/cursor'); var _log=require('../impl/log');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))newObj[key]=obj[key];}}newObj.default=obj;return newObj;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};} var updateStateAction='@@girders-elements/_effects.updateState'; var middleware=exports.middleware=_ramda2.default.curry(function(config,store,next,action){var kernel=config.kernel,effectsRegistry=config.effectsRegistry; var actionMeta=actions.actionMeta(action); if(actionMeta==null)return next(action); var key=_registry.ActionRegistry.keyFromAction(action); var effect=effectsRegistry.get(key); var context=kernel.focusOn(actionMeta.keyPath); if(effect==null&&action.type.startsWith('.')){ var keyFn=function keyFn(el){return _registry.ActionRegistry.keyFor(data.kindOf(el),action.type);}; var entry=(0,_cursor.findParentEntry)(effectsRegistry,keyFn,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}); (0,_log.error)('Exception while executing an effect: ',e); }); }else if(typeof result==='function'){ context.dispatch({type:updateStateAction,result:result}); } }else{ return next(action); } }); var reducer=exports.reducer=_ramda2.default.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; });