apollo-form
Version:
Form state manager
48 lines (47 loc) • 1.59 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const isEqual_1 = __importDefault(require("lodash/isEqual"));
const BaseManager_1 = __importDefault(require("../BaseManager"));
class ObservableManager extends BaseManager_1.default {
constructor(name, store) {
super();
this.name = name;
this.store = store;
}
set(state) {
this.store.set(Object.assign(Object.assign({}, this.store.get()), { [this.name]: state }));
}
get() {
let data = this.store.get();
return (data || {})[this.name];
}
watch(selector, handler, defaultState) {
const unWatch = this.store.watch((next, prev) => {
const nextPart = next[this.name];
const prevPart = prev[this.name];
if (!nextPart) {
return;
}
const nextSel = (selector ? selector(nextPart) : nextPart);
const prevSel = prevPart && (selector ? selector(prevPart) : prevPart);
if (!isEqual_1.default(nextSel, prevSel)) {
handler(nextSel, (prevPart || defaultState));
}
});
return unWatch;
}
remove() {
const state = this.store.get();
// @ts-ignore
if (state[this.name]) {
// @ts-ignore
delete state[this.name];
}
// @ts-ignore
this.set(state);
}
}
exports.default = ObservableManager;