@exmg/lit-base
Version:
Lit Base Elements for ExMachina
28 lines • 1.18 kB
JavaScript
export const observer = (observer) => (proto, propName) => {
// if we haven't wrapped `updated` in this class, do so
if (!proto.constructor._observers) {
proto.constructor._observers = new Map();
const userUpdated = proto.updated;
proto.updated = function (changedProperties) {
userUpdated.call(this, changedProperties);
changedProperties.forEach((v, k) => {
const o = this.constructor._observers.get(k);
if (o !== undefined) {
o.call(this, this[k], v);
}
});
};
// clone any existing observers (superclasses)
// eslint-disable-next-line no-prototype-builtins
}
else if (!proto.constructor.hasOwnProperty('_observers')) {
const observers = proto.constructor._observers;
proto.constructor._observers = new Map();
observers.forEach(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(v, k) => proto.constructor._observers.set(k, v));
}
// set this method
proto.constructor._observers.set(propName, observer);
};
//# sourceMappingURL=observer.js.map