Last active
December 16, 2016 09:11
-
-
Save lmatteis/0971f2af295ba35ac23c3e75d87fbc3a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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