@cycle/state
Version:
Wraps your Cycle.js main function with reducer-driven state management
30 lines • 1.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var xstream_1 = require("xstream");
var concat_1 = require("xstream/extra/concat");
var StateSource_1 = require("./StateSource");
var quicktask_1 = require("quicktask");
var schedule = quicktask_1.default();
function withState(main, name) {
if (name === void 0) { name = 'state'; }
return function mainWithState(sources) {
var reducerMimic$ = xstream_1.default.create();
var state$ = reducerMimic$
.fold(function (state, reducer) { return reducer(state); }, void 0)
.drop(1);
var innerSources = sources;
innerSources[name] = new StateSource_1.StateSource(state$, name);
var sinks = main(innerSources);
if (sinks[name]) {
var stream$ = concat_1.default(xstream_1.default.fromObservable(sinks[name]), xstream_1.default.never());
stream$.subscribe({
next: function (i) { return schedule(function () { return reducerMimic$._n(i); }); },
error: function (err) { return schedule(function () { return reducerMimic$._e(err); }); },
complete: function () { return schedule(function () { return reducerMimic$._c(); }); },
});
}
return sinks;
};
}
exports.withState = withState;
//# sourceMappingURL=withState.js.map