@lyra/base
Version:
Lyra plugin containing the base components and roles for a Lyra configuration
48 lines (36 loc) • 1.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createActions;
var _nanoPubsub = require('nano-pubsub');
var _nanoPubsub2 = _interopRequireDefault(_nanoPubsub);
var _rxjs = require('rxjs');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// Todo: refactor out
function createActions(actions) {
return Object.keys(actions).reduce((acc, name) => {
acc[name] = createAction(name, actions[name]);
return acc;
}, {});
}
function createAction(name, fn) {
const calls = (0, _nanoPubsub2.default)();
const functor = function action(...args) {
// eslint-disable-line func-name-matching
const retValue = fn(...args);
calls.publish({
name: name,
progress: retValue.progress,
returnValue: retValue,
args: args
});
return retValue;
};
functor.calls = new _rxjs.Observable(observer => {
return calls.subscribe(call => {
observer.next(call);
});
});
return functor;
}