Skip to content

Instantly share code, notes, and snippets.

@lmatteis
Last active December 16, 2016 09:11
Show Gist options
  • Save lmatteis/0971f2af295ba35ac23c3e75d87fbc3a to your computer and use it in GitHub Desktop.
Save lmatteis/0971f2af295ba35ac23c3e75d87fbc3a to your computer and use it in GitHub Desktop.
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createCycleMiddleware = createCycleMiddleware;
var _xstreamRun = require('@cycle/xstream-run');
var _xstream = require('xstream');
var _xstream2 = _interopRequireDefault(_xstream);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function createCycleMiddleware(mainFn, drivers) {
return function (store) {
return function (next) {
var actionListener = null;
var stateListener = null;
function actionDriver(outgoing$) {
outgoing$.addListener({
next: function next(outgoing) {
store.dispatch(outgoing);
},
error: function error() {},
complete: function complete() {}
});
return _xstream2.default.create({
start: function start(listener) {
actionListener = listener;
},
stop: function stop() {}
});
}
var isSame = {};
var getCurrent = store.getState;
function stateDriver() {
return _xstream2.default.create({
start: function start(listener) {
stateListener = listener;
},
stop: function stop() {}
}).fold(function (prevState, currState) {
if (prevState === getCurrent) {
prevState = getCurrent();
}
if (prevState === currState) {
return isSame;
}
return currState;
}, getCurrent).map(function (state) {
return state === getCurrent ? getCurrent() : state;
}).filter(function (state) {
return state !== isSame;
});
}
drivers.ACTION = actionDriver;
drivers.STATE = stateDriver;
(0, _xstreamRun.run)(mainFn, drivers);
return function (action) {
var result = next(action);
if (actionListener) {
actionListener.next(action);
}
if (stateListener) {
stateListener.next(store.getState());
}
return result;
};
};
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment