UNPKG

@girders-elements/core

Version:

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

65 lines (41 loc) 2.04 kB
'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.reducer=undefined; var _ramda=require('ramda');var _ramda2=_interopRequireDefault(_ramda); var _invariant=require('invariant');var _invariant2=_interopRequireDefault(_invariant); var _log=require('../impl/log'); var _data=require('../data');var data=_interopRequireWildcard(_data); var _action=require('../action');var actions=_interopRequireWildcard(_action); var _cursor=require('../impl/cursor'); var _registry=require('../registry');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 reducer=exports.reducer=_ramda2.default.curry(function(config,cursor,action){ if(!isApplicable(action))return cursor; (0,_invariant2.default)( cursor!=null&&cursor._keyPath!=null, 'The reducer is meant to work only with cursors');var _actions$actionMeta= actions.actionMeta(action),fromPath=_actions$actionMeta.keyPath; var type=action.type;var registry=config.registry; if(type.startsWith('.')){ var keyFn=function keyFn(el){return _registry.ActionRegistry.keyFor(data.kindOf(el),type);}; var entry=(0,_cursor.findParentEntry)(registry,keyFn,cursor.getIn(fromPath)); if(entry!=null){var _element=entry.element,_update=entry.entry; return cursor.setIn(_element._keyPath,_update(_element.deref(),action)); } return cursor; } var update=registry.get(_registry.ActionRegistry.keyFromAction(action)); var element=cursor.getIn(fromPath); if(element){ if(update){ return cursor.setIn(fromPath,update(element.deref(),action)); }else{ return cursor; } }else{ (0,_log.warning)( 'Unable to perform local update, element has changed in meantime...'); return cursor; } return cursor; }); var isApplicable=_ramda2.default.pipe(actions.actionMeta,_ramda2.default.complement(_ramda2.default.isNil));