UNPKG

dash-renderer

Version:

render dash components in react

70 lines (69 loc) 2.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _ramda = require("ramda"); function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } class StoreObserver { constructor(_store) { _defineProperty(this, "_store", void 0); _defineProperty(this, "_unsubscribe", void 0); _defineProperty(this, "_observers", []); _defineProperty(this, "observe", (observer, inputs) => { if (typeof observer === 'function') { if (!Array.isArray(inputs)) { throw new Error('inputs must be an array'); } this.add(observer, inputs); return () => this.remove(observer); } this.add(observer.observer, observer.inputs); return () => this.remove(observer.observer); }); _defineProperty(this, "setStore", store => { this.__finalize__(); this.__init__(store); }); _defineProperty(this, "__finalize__", () => { var _this$_unsubscribe; return (_this$_unsubscribe = this._unsubscribe) === null || _this$_unsubscribe === void 0 ? void 0 : _this$_unsubscribe.call(this); }); _defineProperty(this, "__init__", store => { this._store = store; if (store) { this._unsubscribe = store.subscribe(this.notify); } this._observers.forEach(o => { o.lastState = null; }); }); _defineProperty(this, "add", (observer, inputs) => this._observers.push({ inputPaths: (0, _ramda.map)(p => p.split('.'), inputs), lastState: null, observer, triggered: false })); _defineProperty(this, "notify", () => { var store = this._store; if (!store) { return; } var state = store.getState(); var triggered = (0, _ramda.filter)(o => !o.triggered && (0, _ramda.any)(i => (0, _ramda.path)(i, state) !== (0, _ramda.path)(i, o.lastState), o.inputPaths), this._observers); triggered.forEach(o => { o.triggered = true; }); triggered.forEach(o => { o.lastState = store.getState(); o.observer(store); o.triggered = false; }); }); _defineProperty(this, "remove", observer => this._observers.splice(this._observers.findIndex(o => observer === o.observer, this._observers), 1)); this.__init__(_store); } } exports.default = StoreObserver;