UNPKG

@rxx/core

Version:

React MVI micro framework.

95 lines (94 loc) 4.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = tslib_1.__importDefault(require("react")); var rxjs_1 = require("rxjs"); var provider_1 = require("./component/provider"); var utils_1 = require("./utils"); var operators_1 = require("rxjs/operators"); function getDefaultName() { return 'AnonymousProvider'; } function makeView(RootViewOrFactory, renderingFn) { var displayName = typeof RootViewOrFactory === 'function' ? (RootViewOrFactory.displayName || RootViewOrFactory.name || getDefaultName()) + "#" + utils_1.IDGenerator.genNextId() : (function () { if (typeof RootViewOrFactory.type === 'function') { return (RootViewOrFactory['type']['displayName'] || RootViewOrFactory['type']['name'] || getDefaultName()) + "#" + utils_1.IDGenerator.genNextId(); } return getDefaultName(); })(); return function view(app, otherProps) { if (otherProps === void 0) { otherProps = {}; } var ViewEnhancedComponent = (function (_super) { tslib_1.__extends(ViewEnhancedComponent, _super); function ViewEnhancedComponent() { return _super !== null && _super.apply(this, arguments) || this; } ViewEnhancedComponent.prototype.render = function () { var props = this.props; var children = typeof RootViewOrFactory === 'function' ? (react_1.default.createElement(RootViewOrFactory, tslib_1.__assign({}, props))) : (react_1.default.cloneElement(RootViewOrFactory, tslib_1.__assign({}, RootViewOrFactory.props, props), props.children)); return (react_1.default.createElement(provider_1.Provider, tslib_1.__assign({ app: app, name: displayName }, otherProps), children)); }; ViewEnhancedComponent.displayName = displayName; return ViewEnhancedComponent; }(react_1.default.Component)); return renderingFn ? renderingFn(ViewEnhancedComponent) : ViewEnhancedComponent; }; } exports.makeView = makeView; function makeApp(apps) { return function (initialStateFactory) { return function (subject, states) { if (states === void 0) { states = {}; } var initialState; if (typeof initialStateFactory === 'function') { initialState = initialStateFactory(); } else { initialState = initialStateFactory; } var initializedMap = {}; return Object.keys(apps).reduce(function (states, key) { var app = apps[key]; var nextState = app(subject, initialState[key]); if (nextState.view) { if (!rxjs_1.isObservable(nextState.view)) { throw new Error("Application view of " + key + " must be Observable."); } nextState.view = nextState.view.pipe(operators_1.startWith(initialState[key])); if (!states.view) { states.view = {}; } if (!utils_1.isDefined(states.view[key])) { states.view[key] = nextState.view; } else { states.view[key] = rxjs_1.merge(states.view[key], nextState.view); } } for (var key_1 in nextState) { if (key_1 !== 'view') { if (!nextState[key_1] || !(nextState[key_1] instanceof rxjs_1.Observable)) { throw new Error("Property " + key_1 + " must be Observable."); } if (states[key_1]) { states[key_1] = rxjs_1.merge(states[key_1], nextState[key_1]); } else { states[key_1] = nextState[key_1]; } } } return states; }, states); }; }; } exports.makeApp = makeApp;