@girders-elements/core
Version:
Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.
130 lines (75 loc) • 6.74 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:true});exports.Engine=exports.EntryPoint=undefined;var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};var _jsxFileName='packages/core/src/engine/impl.js';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;};}();
var _ramda=require('ramda');var _ramda2=_interopRequireDefault(_ramda);
var _immutable=require('immutable');var _immutable2=_interopRequireDefault(_immutable);
var _react=require('react');var _react2=_interopRequireDefault(_react);
var _propTypes=require('prop-types');var _propTypes2=_interopRequireDefault(_propTypes);
var _kernel=require('../kernel');var Kernel=_interopRequireWildcard(_kernel);
var _subsystem=require('../subsystem');var Subsystem=_interopRequireWildcard(_subsystem);
var _core=require('../core');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 _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return call&&(typeof call==="object"||typeof call==="function")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass;}var
EntryPointImpl=function(_React$Component){_inherits(EntryPointImpl,_React$Component);
function EntryPointImpl(props,context){_classCallCheck(this,EntryPointImpl);var _this=_possibleConstructorReturn(this,(EntryPointImpl.__proto__||Object.getPrototypeOf(EntryPointImpl)).call(this,
props,context));
_this._reset(props);return _this;
}_createClass(EntryPointImpl,[{key:'componentWillReceiveProps',value:function componentWillReceiveProps(
nextProps){
this._reset(nextProps);
}},{key:'componentWillUnmount',value:function componentWillUnmount()
{
if(this._unsubscribe)this._unsubscribe();
}},{key:'_reset',value:function _reset(
props){var
kernel=props.kernel,keyPath=props.keyPath;
if(this._unsubscribe)this._unsubscribe();
this._unsubscribe=kernel.subscribe(this._reRender.bind(this));
this._rootPath=keyPath;
}},{key:'_reRender',value:function _reRender()
{
this.forceUpdate();
}},{key:'render',value:function render()
{
var kernel=this.props.kernel;
return kernel.subsystems.ui.uiFor(kernel.query(this._rootPath));
}}]);return EntryPointImpl;}(_react2.default.Component);EntryPointImpl.propTypes={kernel:_propTypes2.default.shape({subscribe:_propTypes2.default.function,query:_propTypes2.default.fuction,dispatch:_propTypes2.default.function}).isRequired,keyPath:_propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.oneOfType([_propTypes2.default.string,_propTypes2.default.number])),_propTypes2.default.string])};EntryPointImpl.defaultProps={keyPath:[]};var
EntryPoint=exports.EntryPoint=function(_React$Component2){_inherits(EntryPoint,_React$Component2);
function EntryPoint(props,context){_classCallCheck(this,EntryPoint);var _this2=_possibleConstructorReturn(this,(EntryPoint.__proto__||Object.getPrototypeOf(EntryPoint)).call(this,
props,context));
_this2._reset(props);return _this2;
}_createClass(EntryPoint,[{key:'componentWillReceiveProps',value:function componentWillReceiveProps(
nextProps){
this._reset(nextProps);
}},{key:'_reset',value:function _reset(
props){var
kernel=props.kernel;
var entryPointMixins=getCombinedMixins(kernel.subsystemSequence);
this.Impl=_ramda2.default.isEmpty(entryPointMixins)?
EntryPointImpl:
_ramda2.default.reduce(function(C,M){return M(C);},EntryPointImpl,entryPointMixins);
}},{key:'render',value:function render()
{
return _react2.default.createElement(this.Impl,_extends({},this.props,{__source:{fileName:_jsxFileName,lineNumber:86}}));
}}]);return EntryPoint;}(_react2.default.Component);EntryPoint.propTypes=EntryPointImpl.propTypes;var
Engine=exports.Engine=function(_React$Component3){_inherits(Engine,_React$Component3);
function Engine(props,context){_classCallCheck(this,Engine);var _this3=_possibleConstructorReturn(this,(Engine.__proto__||Object.getPrototypeOf(Engine)).call(this,
props,context));
_this3._reset(props);return _this3;
}_createClass(Engine,[{key:'componentWillReceiveProps',value:function componentWillReceiveProps(
nextProps){
var current=_immutable2.default.fromJS(this.props.initState);
var next=_immutable2.default.fromJS(nextProps.initState);
if(!_immutable2.default.is(current,next))this._reset(nextProps);
}},{key:'_reset',value:function _reset(
props){
var subsystems=props.subsystems||_core.defaultSubsystems;
if(props.additionalSubsystems!=null){
subsystems=subsystems.concat(props.additionalSubsystems);
}
if(props.customMiddleware!=null){
subsystems=subsystems.concat(
_ramda2.default.map(Subsystem.fromMiddleware,props.customMiddleware));
}
this._kernel=Kernel.create(subsystems,props.initState,props.config);
}},{key:'render',value:function render()
{
return _react2.default.createElement(EntryPoint,{kernel:this._kernel,keyPath:[],__source:{fileName:_jsxFileName,lineNumber:126}});
}}]);return Engine;}(_react2.default.Component);Engine.propType={initState:_propTypes2.default.object.isRequired,customMiddleware:_propTypes2.default.arrayOf(_propTypes2.default.func),subsystems:_propTypes2.default.arrayOf(_propTypes2.default.object),additionalSubsystems:_propTypes2.default.arrayOf(_propTypes2.default.object),config:_propTypes2.default.object};
var getCombinedMixins=_ramda2.default.chain(Subsystem.engineMixins);