UNPKG

@skele/classic

Version:

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

1 lines 1.94 kB
'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.reducer=void 0;var R=_interopRequireWildcard(require("ramda"));var _core=require("@skele/core");var actions=_interopRequireWildcard(require("../action"));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 Cursor=_core.internal.Cursor;var warning=_core.log.warning;var memoize=_core.registry.memoize;var reducer=function reducer(config){var registry=config.registry;var updateFor=memoize(function(key){return registry.get(key);},_ActionRegistry.ActionRegistry.cacheKey);return function(state,action){if(!isApplicable(action))return state;var _actions$actionMeta=actions.actionMeta(action),fromPath=_actions$actionMeta.keyPath;var cursor=Cursor.from(state,fromPath);if(cursor==null){warning('Unable to perform local update, element has changed in meantime...');return state;}var type=action.type;if(type.startsWith('.')){var entry=(0,_ActionRegistry.findParentEntry)(updateFor,type,cursor);if(entry!=null){var _element=entry.element,_update=entry.entry;return state.setIn(_element._keyPath,_update(_element.deref(),action));}return state;}var update=updateFor(_ActionRegistry.ActionRegistry.keyFromAction(action));var element=state.getIn(fromPath);if(element){if(update){return state.setIn(fromPath,update(element,action));}else{return state;}}else{warning('Unable to perform local update, element has changed in meantime...');return state;}};};exports.reducer=reducer;var isApplicable=R.pipe(actions.actionMeta,R.complement(R.isNil));