elliptical-observe
Version:
Sideways Data Loading for Elliptical
71 lines (52 loc) • 1.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
exports.default = createStore;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _zenObservable = require('zen-observable');
var _zenObservable2 = _interopRequireDefault(_zenObservable);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function createStore() {
var items = [];
var observer = void 0;
var data = new _zenObservable2.default(function (newObserver) {
observer = newObserver;
});
function register(element) {
var existing = _lodash2.default.find(items, function (item) {
return _lodash2.default.isEqual(element, item.element);
});
if (existing) {
return existing.value;
} else {
var _ret = function () {
var newItem = { element: element };
items.push(newItem);
var fetched = element.type.fetch(element);
var subscription = fetched.subscribe({
next: function next(value) {
newItem.value = value;
if (observer) {
observer.next({ element: element, value: value });
}
}
});
newItem.subscription = subscription;
return {
v: newItem.value
};
}();
if ((typeof _ret === 'undefined' ? 'undefined' : (0, _typeof3.default)(_ret)) === "object") return _ret.v;
}
}
function remove(item) {
var index = items.indexOf(item);
var removed = items.splice(index, 1);
removed[0].subscription.unsubscribe();
}
return { data: data, register: register, items: items, remove: remove };
}