UNPKG

elliptical-observe-inline

Version:
67 lines (50 loc) 1.57 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); 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() { const items = []; let observer; const data = new _zenObservable2.default(newObserver => { observer = newObserver; }); function fetchAndSubscribe(element, item) { const fetched = element.type.fetch(element); const subscription = fetched.subscribe({ next(value) { item.value = value; if (observer) { observer.next({ element, value }); } } }); if (item.subscription) { item.subscription.unsubscribe(); } item.subscription = subscription; } function register(element) { const existing = _lodash2.default.find(items, item => _lodash2.default.isEqual(element, item.element)); if (existing) { const currentValue = existing.value; return currentValue; } else { const newItem = { element, dirty: false }; items.push(newItem); fetchAndSubscribe(element, newItem); return newItem.value; } } function remove(item) { const index = items.indexOf(item); const removed = items.splice(index, 1); removed[0].subscription.unsubscribe(); } return { data, register, items, remove }; }