UNPKG

@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
'use strict';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()); }