UNPKG

@rxx/core

Version:

React MVI micro framework.

174 lines 13.9 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_1 = tslib_1.__importDefault(require("react")); var prop_types_1 = tslib_1.__importDefault(require("prop-types")); var rxjs_1 = require("rxjs"); var utils_1 = require("../utils"); var provisioning_1 = require("../provisioning"); var operators_1 = require("rxjs/operators"); /** * Container component for intent and state. * This component provide context object and props from store state. * * @example * <Provider store={Store} intent={Intent}> * <Component /> * </Provider> */ var Provider = /** @class */ (function (_super) { tslib_1.__extends(Provider, _super); function Provider(p, c) { var _this = _super.call(this, p, c) || this; _this.provisioning = new provisioning_1.Provisioning(_this.props.name || "Anonymouse#" + utils_1.IDGenerator.genNextId(), _this.context, _this.props.intent ? utils_1.isObject(_this.props.intent) ? _this.props.intent : { intent: _this.props.intent } : {}, _this.props.store ? Array.isArray(_this.props.store) ? _this.props.store : [_this.props.store] : [], _this.props.app, _this.props.service, _this.props.stateHandlers || {}); var _a = _this, provisioning = _a.provisioning, context = _a.context, props = _a.props; _this.ProviderComponent = /** @class */ (function (_super) { tslib_1.__extends(ProviderComponent, _super); function ProviderComponent() { return _super !== null && _super.apply(this, arguments) || this; } ProviderComponent.prototype.render = function () { return this.props.children; }; ProviderComponent.prototype.getChildContext = function () { return { provisioning: provisioning, intent: provisioning.getIntentHandler(), state: provisioning.getState(), parent: context, __intent: provisioning.getIntent(), __subject: provisioning.getSubject(), }; }; Object.defineProperty(ProviderComponent, "childContextTypes", { get: function () { return Provider.contextTypes; }, enumerable: true, configurable: true }); return ProviderComponent; }(react_1.default.Component)); _this.state = { prepared: false }; return _this; } Provider.prototype.render = function () { return this.state.prepared ? (react_1.default.createElement(this.ProviderComponent, null, react_1.default.cloneElement(this.props.children))) : null; }; Provider.prototype.componentDidMount = function () { this.provisioning.prepare(); this.setState({ prepared: true }); }; Provider.prototype.componentWillUnmount = function () { this.provisioning.dispose(!this.props.useCache); this.setState({ prepared: false }); }; Provider.contextTypes = { provisioning: prop_types_1.default.any, intent: prop_types_1.default.any, state: prop_types_1.default.any, parent: prop_types_1.default.any, __subject: prop_types_1.default.any, __intent: prop_types_1.default.any, }; return Provider; }(react_1.default.Component)); exports.Provider = Provider; function directConnect(Component) { return /** @class */ (function (_super) { tslib_1.__extends(class_1, _super); function class_1() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.subject = new rxjs_1.Subject(); _this.subscriptions = new rxjs_1.Subscription(); return _this; } class_1.prototype.render = function () { var _this = this; return (react_1.default.createElement(Provider, { store: [this.store], intent: /** @class */ (function () { function class_2() { } return class_2; }()), app: this.props.app ? this.props.app : undefined, stateHandlers: this.props.stateHandlers }, react_1.default.createElement(Component, tslib_1.__assign({}, this.props.props, { ref: function (c) { return c && (_this.reference = c); } })))); }; class_1.prototype.componentWillMount = function () { /*tslint:disable:no-this-assignment*/ var that = this; /*tslint:enable:no-this-assignment*/ var _a = this, props = _a.props, subject = _a.subject, subscriptions = _a.subscriptions; this.store = /** @class */ (function () { function class_3(intent, services, subject) { this.intent = intent; this.services = services; this.subject = subject; } class_3.prototype.initialize = function () { var convertedStates = {}; var _loop_1 = function (key) { var v = props.state[key]; convertedStates[key] = that.subject.pipe(operators_1.map(function (v) { return v[key]; }), operators_1.startWith(v)); }; for (var key in props.state) { _loop_1(key); } var handlersArray = that.props.handlers || []; that.subscriptions.add(this.subject.subscribe(function (args) { handlersArray.forEach(function (handlers) { if (handlers[args.type]) { handlers[args.type](args); } }); })); return { view: convertedStates, }; }; return class_3; }()); }; Object.defineProperty(class_1.prototype, "component", { get: function () { return this.reference; }, enumerable: true, configurable: true }); class_1.prototype.componentWillReceiveProps = function (nextProps) { this.subject.next(nextProps.state); }; class_1.prototype.componentWillUnmount = function () { this.subscriptions.unsubscribe(); this.subscriptions = new rxjs_1.Subscription(); }; return class_1; }(react_1.default.Component)); } exports.directConnect = directConnect; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50L3Byb3ZpZGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHOzs7QUFFSCx3REFBMEI7QUFDMUIsa0VBQW1DO0FBQ25DLDZCQUE2RDtBQUs3RCxrQ0FRa0I7QUFFbEIsZ0RBQStDO0FBSy9DLDRDQUFxRDtBQXVCckQ7Ozs7Ozs7O0dBUUc7QUFDSDtJQUE4QixvQ0FHN0I7SUErQkMsa0JBQVksQ0FBQyxFQUFFLENBQUM7UUFBaEIsWUFDRSxrQkFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBNkNaO1FBNUNDLEtBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSwyQkFBWSxDQUNsQyxLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxnQkFBYyxtQkFBVyxDQUFDLFNBQVMsRUFBSSxFQUMxRCxLQUFJLENBQUMsT0FBTyxFQUNaLEtBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUNmLENBQUMsQ0FBQyxnQkFBUSxDQUF1QyxLQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDakUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDbkIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2pDLENBQUMsQ0FBQyxFQUFFLEVBQ04sS0FBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO1lBQ2QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xCLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxFQUFFLEVBQ04sS0FBSSxDQUFDLEtBQUss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