react-magic-state
Version:
React state management without the hassle.
39 lines (38 loc) • 1.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const base_1 = require("./base");
const changeTracker_1 = require("../changeTracker");
class SetHandler extends base_1.BaseHandler {
constructor(target) {
super(target);
this._methodWrappers = new WeakMap();
}
get(target, propKey, receiver) {
const value = super.get(target, propKey, receiver);
if (value instanceof Function) {
return this._wrap(value);
}
return value;
}
_wrap(target) {
if (this._methodWrappers.has(target)) {
return this._methodWrappers.get(target);
}
const set = this._target;
const wrapper = function () {
const beforeSize = set.size;
try {
return Reflect.apply(target, set, arguments);
}
finally {
if (beforeSize !== set.size) {
changeTracker_1.changeTracker.registerChange(set, "size");
changeTracker_1.changeTracker.registerChange(set, Symbol.iterator);
}
}
};
this._methodWrappers.set(target, wrapper);
return wrapper;
}
}
exports.SetHandler = SetHandler;