UNPKG

@rxx/core

Version:

React MVI micro framework.

122 lines 9.53 kB
"use strict"; /** * The MIT License (MIT) * Copyright (c) Taketoshi Aono * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * @fileoverview * @author Taketoshi Aono */ Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var React = tslib_1.__importStar(require("react")); var PropTypes = tslib_1.__importStar(require("prop-types")); var utils_1 = require("../utils"); var identity = function (a) { return a; }; var DEFAULT = { mapStateToProps: undefined, mapIntentToProps: undefined, }; exports.CONTEXT_TYPES = { intent: PropTypes.any, state: PropTypes.any, unobservablifiedStateGetter: PropTypes.any, parent: PropTypes.any, }; /** * Connect store and intent to store. * @param args mapStateToProps convert store state to Component props. * mapIntentToProps convert intent to props. * @returns Function that wrap passed component with Context component. */ function connect(args) { if (args === void 0) { args = DEFAULT; } var _a = args.mapStateToProps, mapStateToProps = _a === void 0 ? (function (a, b, c) { return (tslib_1.__assign({}, a, b)); }) : _a, _b = args.mapIntentToProps, mapIntentToProps = _b === void 0 ? (function () { return ({}); }) : _b; return function (C) { var _a, _b; // Set context type to passed to component. C.contextTypes = exports.CONTEXT_TYPES; var baseName = "" + (C.displayName || C.name || 'AnonymousComponent'); var rootDisplayName = baseName + "$EnhancedContextConnectorComponent"; var internalContainerName = baseName + "$EnhancedRenderingContainer"; /** * Component wrapper that pass context to children component */ var ContainerComponent = (_a = /** @class */ (function (_super) { tslib_1.__extends(class_1, _super); function class_1(p, c) { var _this = _super.call(this, p, c) || this; _this.mappedProps = utils_1.mergeDeep(_this.mapStateToProps(_this.props), _this.mapIntentToProps(_this.props)); return _this; } class_1.prototype.render = function () { return React.createElement(C, tslib_1.__assign({}, this.mappedProps)); }; class_1.prototype.componentWillReceiveProps = function (nextProps) { this.mappedProps = utils_1.mergeDeep(this.mapStateToProps(nextProps), this.mapIntentToProps(nextProps)); }; class_1.prototype.getChildContext = function () { return { intent: this.context.intent, state: this.context.state, parent: this.context.parent, }; }; class_1.prototype.mapIntentToProps = function (props) { return mapIntentToProps(this.context.intent, props.state, props.props, this); }; class_1.prototype.mapStateToProps = function (props) { return mapStateToProps(props.state, props.props, this); }; Object.defineProperty(class_1, "childContextTypes", { get: function () { return exports.CONTEXT_TYPES; }, enumerable: true, configurable: true }); return class_1; }(React.Component)), _a.displayName = internalContainerName, _a.contextTypes = exports.CONTEXT_TYPES, _a); return _b = /** @class */ (function (_super) { tslib_1.__extends(class_2, _super); function class_2(p) { var _this = _super.call(this, p) || this; _this.state = { state: null, }; return _this; } class_2.prototype.render = function () { return (React.createElement(ContainerComponent, { state: this.state.state, props: this.props })); }; class_2.prototype.componentWillMount = function () { var _this = this; this.unsubscribe = this.context.provisioning.subscribe(function (state) { _this.setState({ state: state.view }); }, true); }; class_2.prototype.componentWillUnmount = function () { this.unsubscribe(); }; return class_2; }(React.Component)), _b.displayName = rootDisplayName, _b.contextTypes = { provisioning: PropTypes.any }, _b; }; } exports.connect = connect; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL2Nvbm5lY3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7OztBQUVILG1EQUErQjtBQUMvQiw0REFBd0M7QUFDeEMsa0NBQXFDO0FBb0JyQyxJQUFNLFFBQVEsR0FBRyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsRUFBRCxDQUFDLENBQUM7QUFDeEIsSUFBTSxPQUFPLEdBQUc7SUFDZCxlQUFlLEVBQUUsU0FBUztJQUMxQixnQkFBZ0IsRUFBRSxTQUFTO0NBQzVCLENBQUM7QUFFVyxRQUFBLGFBQWEsR0FBRztJQUMzQixNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUc7SUFDckIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxHQUFHO0lBQ3BCLDJCQUEyQixFQUFFLFNBQVMsQ0FBQyxHQUFHO0lBQzFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBRztDQUN0QixDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxTQUFnQixPQUFPLENBQ3JCLElBQStDO0lBQS9DLHFCQUFBLEVBQUEsY0FBK0M7SUFHN0MsSUFBQSx5QkFBd0QsRUFBeEQsb0dBQXdELEVBQ3hELDBCQUFzQyxFQUF0QyxzRUFBc0MsQ0FDL0I7SUFFVCxPQUFPLFVBQ0wsQ0FBSTs7UUFFSiwyQ0FBMkM7UUFDM0MsQ0FBQyxDQUFDLFlBQVksR0FBRyxxQkFBYSxDQUFDO1FBRS9CLElBQU0sUUFBUSxHQUFHLE1BQUcsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLG9CQUFvQixDQUFFLENBQUM7UUFDdEUsSUFBTSxlQUFlLEdBQU0sUUFBUSx1Q0FBb0MsQ0FBQztRQUN4RSxJQUFNLHFCQUFxQixHQUFNLFFBQVEsZ0NBQTZCLENBQUM7UUFHdkU7O1dBRUc7UUFDSCxJQUFNLGtCQUFrQjtnQkFBaUIsbUNBR3hDO2dCQU9DLGlCQUFZLENB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