@cycle/state
Version:
Wraps your Cycle.js main function with reducer-driven state management
27 lines • 1.17 kB
JavaScript
import xs from 'xstream';
import concat from 'xstream/extra/concat';
import { StateSource } from './StateSource';
import microtask from 'quicktask';
var schedule = microtask();
export function withState(main, name) {
if (name === void 0) { name = 'state'; }
return function mainWithState(sources) {
var reducerMimic$ = xs.create();
var state$ = reducerMimic$
.fold(function (state, reducer) { return reducer(state); }, void 0)
.drop(1);
var innerSources = sources;
innerSources[name] = new StateSource(state$, name);
var sinks = main(innerSources);
if (sinks[name]) {
var stream$ = concat(xs.fromObservable(sinks[name]), xs.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;
};
}
//# sourceMappingURL=withState.js.map