UNPKG

elliptical-observe-inline

Version:
55 lines (44 loc) 1.3 kB
import _ from 'lodash'; import Observable from 'zen-observable'; export default function createStore() { var items = []; var observer = void 0; var data = new Observable(function (newObserver) { observer = newObserver; }); function fetchAndSubscribe(element, item) { var fetched = element.type.fetch(element); var subscription = fetched.subscribe({ next: function next(value) { item.value = value; if (observer) { observer.next({ element: element, value: value }); } } }); if (item.subscription) { item.subscription.unsubscribe(); } item.subscription = subscription; } function register(element) { var existing = _.find(items, function (item) { return _.isEqual(element, item.element); }); if (existing) { var currentValue = existing.value; return currentValue; } else { var newItem = { element: element, dirty: false }; items.push(newItem); fetchAndSubscribe(element, newItem); return newItem.value; } } 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 }; }