mosx
Version:
Multiview observable state management engine
93 lines • 6.21 kB
JavaScript
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MosxAdmin = void 0;
const mobx_1 = require("mobx");
class MosxAdmin {
constructor(target, parentNode) {
this.target = target;
this.parent = null;
this.children = new WeakSet();
this.$tags = new Set();
this.$tracker = null;
this.disposers = [];
this.setParent(parentNode || null);
// observe tags change
const tagsDispose = (0, mobx_1.computed)(() => this.tags).observe((change) => {
if (this.tracker) {
const { object: obj } = change, rest = __rest(change, ["object"]);
this.tracker.tagChange(target, rest);
}
});
this.disposers.push(tagsDispose);
}
get tracker() {
return this.$tracker || this.parent && this.parent.tracker;
}
set tracker(tracker) {
this.$tracker = tracker;
}
addTag(tags) {
if (!Array.isArray(tags)) {
tags = [tags];
}
tags.forEach((tag) => this.$tags.add(tag));
this.tracker && this.tracker.tagChanged();
}
deleteTag(tag) {
this.$tags.delete(tag);
this.tracker && this.tracker.tagChanged();
}
get tags() {
return new Set([...this.$tags, ...(this.parent && this.parent.tags || [])]);
}
setParent(parentNode) {
if (parentNode && parentNode === this.parent) {
return;
}
// remove object from old parent node
if (this.parent) {
this.children.delete(this.target);
}
// add object to new parent node
if (parentNode) {
parentNode.children.add(this.target);
}
// save owner
this.parent = parentNode || null;
this.tracker && this.tracker.tagChanged();
}
}
__decorate([
mobx_1.observable
], MosxAdmin.prototype, "parent", void 0);
__decorate([
mobx_1.observable
], MosxAdmin.prototype, "$tags", void 0);
__decorate([
mobx_1.action
], MosxAdmin.prototype, "addTag", null);
__decorate([
mobx_1.action
], MosxAdmin.prototype, "deleteTag", null);
__decorate([
mobx_1.computed
], MosxAdmin.prototype, "tags", null);
exports.MosxAdmin = MosxAdmin;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBMkQ7QUFTM0QsTUFBYSxTQUFTO0lBbUJwQixZQUFtQixNQUFXLEVBQUUsVUFBc0I7UUFBbkMsV0FBTSxHQUFOLE1BQU0sQ0FBSztRQWpCdkIsV0FBTSxHQUFxQixJQUFJLENBQUE7UUFDL0IsYUFBUSxHQUFpQixJQUFJLE9BQU8sRUFBTyxDQUFBO1FBRzFDLFVBQUssR0FBZ0IsSUFBSSxHQUFHLEVBQVUsQ0FBQTtRQUN0QyxhQUFRLEdBQTRCLElBQUksQ0FBQTtRQUV6QyxjQUFTLEdBQWEsRUFBRSxDQUFBO1FBVzdCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxDQUFBO1FBRWxDLHNCQUFzQjtRQUN0QixNQUFNLFdBQVcsR0FBRyxJQUFBLGVBQVEsRUFBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDL0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBYyxNQUFNLEVBQWYsSUFBSSxVQUFLLE1BQU0sRUFBakMsVUFBd0IsQ0FBUyxDQUFBO2dCQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUE7YUFDckM7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFwQkQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUE7SUFDNUQsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLE9BQTJCO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO0lBQ3pCLENBQUM7SUFpQk0sTUFBTSxDQUFDLElBQXVCO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hCLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ2Q7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQzFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUMzQyxDQUFDO0lBR00sU0FBUyxDQUFDLEdBQVc7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdEIsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFBO0lBQzNDLENBQUM7SUFHRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM3RSxDQUFDO0lBRU0sU0FBUyxDQUFDLFVBQTZCO1FBQzVDLElBQUksVUFBVSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQUUsT0FBTTtTQUFFO1FBRXhELHFDQUFxQztRQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7U0FDbEM7UUFFRCxnQ0FBZ0M7UUFDaEMsSUFBSSxVQUFVLEVBQUU7WUFDZCxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7U0FDckM7UUFFRCxhQUFhO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLElBQUksSUFBSSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUMzQyxDQUFDO0NBQ0Y7QUFwRUM7SUFEQyxpQkFBVTt5Q0FDMkI7QUFJdEM7SUFEQyxpQkFBVTt3Q0FDbUM7QUE0QjlDO0lBREMsYUFBTTt1Q0FPTjtBQUdEO0lBREMsYUFBTTswQ0FJTjtBQUdEO0lBREMsZUFBUTtxQ0FHUjtBQW5ESCw4QkFzRUMifQ==