@girders-elements/core
Version:
Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.
69 lines (39 loc) • 2.13 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:true});exports.findParentEntry=undefined;
var _ramda=require('ramda');var _ramda2=_interopRequireDefault(_ramda);
var _immutable=require('immutable');
var _cursor=require('immutable/contrib/cursor');var _cursor2=_interopRequireDefault(_cursor);
var _data=require('../data');var data=_interopRequireWildcard(_data);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 findParentEntry=exports.findParentEntry=_ramda2.default.curry(function(registry,keyfn,cursor){return(
data.flow(
cursor,
parents,
function(ps){return ps.filter(data.isElement);},
function(ps){return ps.map(entry(registry,keyfn));},
function(ps){return ps.filterNot(_ramda2.default.isNil);},
function(ps){return ps.first();}));});
var entry=_ramda2.default.curry(function(registry,keyfn,cursor){return(
data.flow(
cursor,
function(c){return registry.get(keyfn(c));},
_ramda2.default.when(_ramda2.default.complement(_ramda2.default.isNil),function(en){return{element:cursor,entry:en};})));});
function parent(cursor){
if(cursor==null){
return null;
}
var root=cursor._rootData;
var onChange=cursor._onChange;
var keyPath=cursor._keyPath;
if(keyPath.length===0){
return null;
}
var newPath=keyPath.slice(0,-1);
return _cursor2.default.from(root,newPath,onChange);
}
function parents(cursor){var _marked=regeneratorRuntime.mark(
_ancestors);if(cursor==null){return(0,_immutable.List)();}var self=cursor;function _ancestors(){var current;return regeneratorRuntime.wrap(function _ancestors$(_context){while(1){switch(_context.prev=_context.next){case 0:
current=self;case 1:if(!(
current!=null)){_context.next=7;break;}_context.next=4;return(
current);case 4:
current=parent(current);_context.next=1;break;case 7:case'end':return _context.stop();}}},_marked,this);}
return(0,_immutable.Seq)(_ancestors());
}