@rxx/core
Version:
React MVI micro framework.
174 lines • 13.9 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_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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