UNPKG

@rxx/core

Version:

React MVI micro framework.

112 lines 8.57 kB
"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(devTools, parent) { this.devTools = devTools; this.parent = parent; this.children = []; this.subject = new rxjs_1.Subject(); this.state = { view: {} }; this.preservation = []; this.shouldImmediateDispatch = true; this.lastDispatched = null; this.histories = []; this.devtoolsEnabled = true; this.parent && this.parent.addChild(this); } SubjectTree.prototype.setState = function (state) { this.state = state; }; SubjectTree.prototype.addChild = function (subjectTree) { this.children.push(subjectTree); }; 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); } return; } this.doNotify(this.createSubjectPayload(payload)); }; SubjectTree.prototype.prepare = function (parent) { this.parent = parent; }; 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.suspendDevtools = function () { this.devtoolsEnabled = false; }; SubjectTree.prototype.resumeDevtools = function () { this.devtoolsEnabled = true; }; SubjectTree.prototype.doNotify = function (payload) { var _this = this; if (this.devtoolsEnabled) { var args = { type: payload.type, payload: payload.payload }; this.devTools.send(args, tslib_1.__assign({}, this.state.view, { __payload__: args })); } this.histories.push(payload); if (this.histories.length >= MAX_HISTORY_LENGTH) { this.histories.shift(); } this.lastDispatched = payload; this.subject.next(payload); this.children.forEach(function (child) { return child.notify({ type: payload.type, payload: payload.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) { var history = this.histories.filter(function (_a) { var type = _a.type; return type === retryKey; })[0] || null; if (!history && this.children.length) { this.children.some(function (child) { history = child.findHistory(retryKey); return !!history; }); } return history; }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdWJqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQUVILDZCQUEyQztBQUMzQyw0Q0FBdUM7QUFVdkMsSUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7QUFFOUI7SUFVRSxxQkFDVSxRQUF1QixFQUN2QixNQUFvQjtRQURwQixhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFYdEIsYUFBUSxHQUFrQixFQUFFLENBQUM7UUFDN0IsWUFBTyxHQUFHLElBQUksY0FBTyxFQUFvQyxDQUFDO1FBQzFELFVBQUssR0FBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUMxQixpQkFBWSxHQUFxQyxFQUFFLENBQUM7UUFDcEQsNEJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLG1CQUFjLEdBQTBDLElBQUksQ0FBQztRQUM3RCxjQUFTLEdBQXVDLEVBQUUsQ0FBQztRQUNuRCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQU03QixJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTSw4QkFBUSxHQUFmLFVBQWdCLEtBQVU7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVNLDhCQUFRLEdBQWYsVUFBZ0IsV0FBd0I7UUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLDRCQUFNLEdBQWIsVUFBdUIsT0FBMkM7UUFDaEUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUVyQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQzVCLElBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxP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