UNPKG

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