@rxx/worker
Version:
React MVI micro framework.
95 lines • 7.13 kB
JavaScript
"use strict";
/**
* @fileoverview
* @author Taketoshi Aono
*/
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var rxjs_1 = require("rxjs");
var operators_1 = require("rxjs/operators");
var MAX_HISTORY_LENGTH = 10;
var SubjectTree = /** @class */ (function () {
function SubjectTree() {
this.subject = new rxjs_1.Subject();
this.state = { view: {} };
this.preservation = [];
this.shouldImmediateDispatch = true;
this.lastDispatched = null;
this.histories = [];
this.subscribers = [];
}
SubjectTree.prototype.setState = function (state) {
this.state = state;
};
SubjectTree.prototype.subscribe = function (callback) {
this.subscribers.push(callback);
};
SubjectTree.prototype.unsubscribe = function (callback) {
this.subscribers = this.subscribers.filter(function (s) { return s !== callback; });
};
SubjectTree.prototype.unsubscribeAll = function () {
this.subscribers = [];
};
SubjectTree.prototype.notify = function (payload) {
this.shouldImmediateDispatch = false;
if (payload.type === 'RETRY') {
var target = payload.payload
? this.findHistory(payload.payload)
: this.histories[this.histories.length - 1];
if (target) {
this.doNotify(target);
this.notifySubscribers(target);
}
return;
}
this.doNotify(this.createSubjectPayload(payload));
};
Object.defineProperty(SubjectTree.prototype, "observable", {
get: function () {
return this.subject.pipe(operators_1.share());
},
enumerable: true,
configurable: true
});
SubjectTree.prototype.getLastDispatched = function () {
return this.lastDispatched;
};
SubjectTree.prototype.notifySubscribers = function (payload) {
this.subscribers.forEach(function (a) { return a(payload); });
};
SubjectTree.prototype.doNotify = function (payload) {
var _this = this;
this.histories.push(payload);
if (this.histories.length >= MAX_HISTORY_LENGTH) {
this.histories.shift();
}
this.lastDispatched = payload;
this.subject.next(payload);
if (this.preservation.length) {
var preservations = this.preservation.slice();
this.preservation.length = 0;
preservations.forEach(function (preserved) { return _this.notify(preserved); });
}
this.shouldImmediateDispatch = true;
};
SubjectTree.prototype.findHistory = function (retryKey) {
return this.histories.filter(function (_a) {
var type = _a.type;
return type === retryKey;
})[0] || null;
};
SubjectTree.prototype.createSubjectPayload = function (payload) {
var _this = this;
return tslib_1.__assign({}, payload, { states: this.state.view, dispatch: function (type, payload) {
if (_this.shouldImmediateDispatch) {
_this.notify({ type: type, payload: payload });
}
else {
_this.preservation.push({ type: type, payload: payload });
}
} });
};
return SubjectTree;
}());
exports.SubjectTree = SubjectTree;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdWJqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQUVILDZCQUEyQztBQUMzQyw0Q0FBdUM7QUFTdkMsSUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7QUFFOUI7SUFBQTtRQUNVLFlBQU8sR0FBRyxJQUFJLGNBQU8sRUFBb0MsQ0FBQztRQUMxRCxVQUFLLEdBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDMUIsaUJBQVksR0FBcUMsRUFBRSxDQUFDO1FBQ3BELDRCQUF1QixHQUFHLElBQUksQ0FBQztRQUMvQixtQkFBYyxHQUEwQyxJQUFJLENBQUM7UUFDN0QsY0FBUyxHQUF1QyxFQUFFLENBQUM7UUFDbkQsZ0JBQVcsR0FBb0QsRUFBRSxDQUFDO0lBaUY1RSxDQUFDO0lBL0VRLDhCQUFRLEdBQWYsVUFBZ0IsS0FBVTtRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRU0sK0JBQVMsR0FBaEIsVUFBaUIsUUFBcUQ7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLGlDQUFXLEdBQWxCLFVBQW1CLFFBQVE7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsS0FBSyxRQUFRLEVBQWQsQ0FBYyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVNLG9DQUFjLEdBQXJCO1FBQ0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLDRCQUFNLEdBQWIsVUFBdUIsT0FBMkM7UUFDaEUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUVyQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUss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