dash-renderer
Version:
render dash components in react
70 lines (69 loc) • 2.89 kB
JavaScript
"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;