@rxx/core
Version:
React MVI micro framework.
95 lines (94 loc) • 4.29 kB
JavaScript
;
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;