@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
JavaScript
;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));