UNPKG

@girders-elements/core

Version:

Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.

169 lines (6 loc) 5.61 kB
'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();exports. create=create;var _immutable=require('immutable');var _immutable2=_interopRequireDefault(_immutable);var _cursor=require('immutable/contrib/cursor');var _cursor2=_interopRequireDefault(_cursor);var _ramda=require('ramda');var _ramda2=_interopRequireDefault(_ramda);var _zip=require('./zip');var zip=_interopRequireWildcard(_zip);var _action=require('./action');var actions=_interopRequireWildcard(_action);var _data=require('./data');var data=_interopRequireWildcard(_data);var _redux=require('redux');var _subsystem=require('./subsystem');var SubSystem=_interopRequireWildcard(_subsystem);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 _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}var Kernel=function(){function Kernel(subsystems,init,config){_classCallCheck(this,Kernel);this._config=config;this._init=_cursor2.default.from(_immutable2.default.fromJS(init||{}));var ssMap=_ramda2.default.reduce(function(ss,s){return _ramda2.default.assoc(s.name,s,ss);},{},subsystems);this._subsystems=ssMap;this._subsystemSequence=subsystems;var instantiatedSeq=[];var instantatedMap={};for(var _iterator=subsystems,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:_iterator[typeof Symbol==='function'?Symbol.iterator:'@@iterator']();;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var s=_ref;var instantiated=SubSystem.instantiate(this,instantatedMap,s);instantiatedSeq.push(instantiated);instantatedMap[instantiated.name]=instantiated;}this._subsystems=instantatedMap;this._subsystemSequence=instantiatedSeq;var middleware=getMiddleware(this.subsystemSequence);var reducer=buildReducer(this.subsystemSequence);if(_ramda2.default.isEmpty(middleware)){this._store=(0,_redux.createStore)(reducer,this._init);}else{this._store=(0,_redux.createStore)(reducer,this._init,_redux.applyMiddleware.apply(undefined,_toConsumableArray(middleware)));}for(var _iterator2=this.subsystemSequence,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:_iterator2[typeof Symbol==='function'?Symbol.iterator:'@@iterator']();;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var _s=_ref2;if(_s.start)_s.start();}}_createClass(Kernel,[{key:'subscribe',value:function subscribe(listener){return this._store.subscribe(listener);}},{key:'dispatch',value:function dispatch(action){this._store.dispatch(action);}},{key:'query',value:function query(path){var p=data.asList(path);var root=_cursor2.default.from(this._store.getState());var result=p.isEmpty()?root:root.getIn(p);return result;}},{key:'focusOn',value:function focusOn(path){var self=this;return{dispatch:function dispatch(action){self.dispatch(actions.atCursor(self.query(path),action));},query:function query(subPath){return self.query(data.asList(path).concat(data.asList(subPath)));},focusOn:function focusOn(subPath){return self.focusOn(data.asList(path).concat(data.asList(subPath)));},get config(){return self.config;},get subsystems(){return self.subsystems;},get subsystemSequence(){return self.subsystemSequence;},get elementZipper(){return self.elementZipper;},subscribe:function subscribe(listener){return self.subscribe(listener);}};}},{key:'subsystems',get:function get(){return this._subsystems;}},{key:'subsystemSequence',get:function get(){return this._subsystemSequence;}},{key:'config',get:function get(){return this._config;}},{key:'elementZipper',get:function get(){return zip.elementZipper({defaultChildPositions:getChildPostions(this.config)});}}]);return Kernel;}();function buildReducer(subsystems){var reducers=_ramda2.default.pipe(_ramda2.default.map(SubSystem.reducer),_ramda2.default.reject(_ramda2.default.isNil))(subsystems);return function(state,action){return _ramda2.default.reduce(function(s,r){return r(s,action);},state,reducers);};}var getMiddleware=_ramda2.default.pipe(_ramda2.default.map(SubSystem.middleware),_ramda2.default.reject(_ramda2.default.isNil));var getChildPostions=_ramda2.default.either(_ramda2.default.path(['data','defaultChildPositions']),_ramda2.default.path(['transform','childrenElements']));function create(subsystems,init,config){ return new Kernel(subsystems,init,config); }exports.default= { create:create};