@skele/classic
Version:
Skele is an architectural framework that assists with building data-driven apps with React or React Native.
1 lines • 6.86 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:true});exports.Engine=exports.EntryPoint=void 0;var R=_interopRequireWildcard(require("ramda"));var _react=_interopRequireDefault(require("react"));var _propTypes=_interopRequireDefault(require("prop-types"));var Kernel=_interopRequireWildcard(require("../kernel"));var Subsystem=_interopRequireWildcard(require("../subsystem"));var _core=require("../core");var _memoizeOne=_interopRequireDefault(require("../impl/memoize-one"));var _jsxFileName="/Users/bevkoski/code/skele/packages/classic/src/engine/impl.js";function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}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)){var desc=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):{};if(desc.get||desc.set){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}}newObj.default=obj;return newObj;}}function _extends(){_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;};return _extends.apply(this,arguments);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a 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);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _possibleConstructorReturn(self,call){if(call&&(typeof call==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}var EntryPointImpl=function(_React$Component){_inherits(EntryPointImpl,_React$Component);function EntryPointImpl(props,context){var _this;_classCallCheck(this,EntryPointImpl);_this=_possibleConstructorReturn(this,_getPrototypeOf(EntryPointImpl).call(this,props,context));_this._unsubscribe=_this.props.kernel.subscribe(_this._reRender.bind(_assertThisInitialized(_assertThisInitialized(_this))));return _this;}_createClass(EntryPointImpl,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.kernel!==prevProps.kernel||!R.equals(this.props.keyPath,prevProps.keyPath)){if(this._unsubscribe)this._unsubscribe();this._unsubscribe=this.props.kernel.subscribe(this._reRender.bind(this));}}},{key:"componentWillUnmount",value:function componentWillUnmount(){if(this._unsubscribe)this._unsubscribe();}},{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.props.keyPath));}}]);return EntryPointImpl;}(_react.default.Component);EntryPointImpl.propTypes={kernel:_propTypes.default.shape({subscribe:_propTypes.default.function,query:_propTypes.default.fuction,dispatch:_propTypes.default.function}).isRequired,keyPath:_propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string,_propTypes.default.number])),_propTypes.default.string])};EntryPointImpl.defaultProps={keyPath:[]};var buildImpl=(0,_memoizeOne.default)(function(kernel){var entryPointMixins=getCombinedMixins(kernel.subsystemSequence);return R.isEmpty(entryPointMixins)?EntryPointImpl:R.reduce(function(C,M){return M(C);},EntryPointImpl,entryPointMixins);});var EntryPoint=function(_React$Component2){_inherits(EntryPoint,_React$Component2);function EntryPoint(props,context){_classCallCheck(this,EntryPoint);return _possibleConstructorReturn(this,_getPrototypeOf(EntryPoint).call(this,props,context));}_createClass(EntryPoint,[{key:"render",value:function render(){var Impl=buildImpl(this.props.kernel);return _react.default.createElement(Impl,_extends({},this.props,{__source:{fileName:_jsxFileName,lineNumber:79}}));}}]);return EntryPoint;}(_react.default.Component);exports.EntryPoint=EntryPoint;EntryPoint.propTypes=EntryPointImpl.propTypes;var buildKernel=(0,_memoizeOne.default)(function(initState,subsystems,additionalSubsystems,customMiddleware,config){subsystems=subsystems||_core.defaultSubsystems;if(additionalSubsystems!=null){subsystems=subsystems.concat(additionalSubsystems);}if(customMiddleware!=null){subsystems=subsystems.concat(R.map(Subsystem.fromMiddleware,customMiddleware));}return Kernel.create(subsystems,initState,config);});var Engine=function(_React$Component3){_inherits(Engine,_React$Component3);function Engine(props,context){_classCallCheck(this,Engine);return _possibleConstructorReturn(this,_getPrototypeOf(Engine).call(this,props,context));}_createClass(Engine,[{key:"render",value:function render(){var _this$props=this.props,initState=_this$props.initState,customMiddleware=_this$props.customMiddleware,subsystems=_this$props.subsystems,additionalSubsystems=_this$props.additionalSubsystems,config=_this$props.config;var kernel=buildKernel(initState,subsystems,additionalSubsystems,customMiddleware,config);return _react.default.createElement(EntryPoint,{kernel:kernel,keyPath:[],__source:{fileName:_jsxFileName,lineNumber:128}});}}]);return Engine;}(_react.default.Component);exports.Engine=Engine;Engine.propType={initState:_propTypes.default.object.isRequired,customMiddleware:_propTypes.default.arrayOf(_propTypes.default.func),subsystems:_propTypes.default.arrayOf(_propTypes.default.object),additionalSubsystems:_propTypes.default.arrayOf(_propTypes.default.object),config:_propTypes.default.object};var getCombinedMixins=R.chain(Subsystem.engineMixins);