@rxx/core
Version:
React MVI micro framework.
122 lines • 9.53 kB
JavaScript
;
/**
* 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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