@girders-elements/core
Version:
Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.
49 lines (26 loc) • 2.44 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:true});exports.
runEnhancers=runEnhancers;exports.
applyEnhancements=applyEnhancements;var _ramda=require('ramda');var _ramda2=_interopRequireDefault(_ramda);var _immutable=require('immutable');var _immutable2=_interopRequireDefault(_immutable);var _zip=require('../zip');var zip=_interopRequireWildcard(_zip);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};}function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i];}return arr2;}else{return Array.from(arr);}}function runEnhancers(el,context,enhancers){return regeneratorRuntime.async(function runEnhancers$(_context){while(1){switch(_context.prev=_context.next){case 0:return _context.abrupt('return',Promise.all(asArray(enhancers).map(function(e){return el==null?e(context):e(el,context);})));case 1:case'end':return _context.stop();}}},null,this);}function applyEnhancements(result,context,enhancements){var
elementZipper=context.elementZipper;
var updates=compressUpdates(asArray(enhancements),elementZipper);
return _ramda2.default.reduce(function(el,update){return update(el);},result,updates);
}
function compressUpdates(updates,elementZipper){
var slices=partitionBy(Array.isArray,updates);
return _ramda2.default.chain(
_ramda2.default.when(_ramda2.default.pipe(_ramda2.default.head,Array.isArray),function(slice){return[
_ramda2.default.pipe(elementZipper,zip.editCond(concatAll(slice)),zip.value)];}),
slices);
}
function partitionBy(fn,list){
if(!_ramda2.default.isEmpty(list)){
var v=_ramda2.default.head(list);
var fv=fn(v);
var run=[v].concat(_toConsumableArray(_ramda2.default.takeWhile(function(x){return _ramda2.default.equals(fv,fn(x));},_ramda2.default.tail(list))));
return[run].concat(_toConsumableArray(partitionBy(fn,_ramda2.default.drop(_ramda2.default.length(run),list))));
}
return[];
}
var concatAll=function concatAll(lists){return _ramda2.default.reduce(_ramda2.default.concat,[],lists);};
var asArray=function asArray(enhancements){return(
_immutable2.default.Iterable.isIterable(enhancements)?enhancements.toArray():enhancements);};