UNPKG

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