UNPKG

@jaspero/ng-helpers

Version:

[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) [![CircleCI](https://circleci.com/gh/Jaspero/ng-helpers.svg?style=svg)](https://circleci.

33 lines 4.41 kB
export function OnChange(callback) { const cachedValueKey = Symbol(); const isFirstChangeKey = Symbol(); return (target, key) => { Object.defineProperty(target, key, { set: function (value) { /** * Change status of "isFirstChange" */ this[isFirstChangeKey] = this[isFirstChangeKey] === undefined; /** * No operation if new value is same as old value */ if (!this[isFirstChangeKey] && this[cachedValueKey] === value) { return; } const oldValue = this[cachedValueKey]; this[cachedValueKey] = value; const simpleChange = { firstChange: this[isFirstChangeKey], previousValue: oldValue, currentValue: this[cachedValueKey], isFirstChange: () => this[isFirstChangeKey] }; callback.call(this, this[cachedValueKey], simpleChange); }, get: function () { return this[cachedValueKey]; } }); }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24tY2hhbmdlLmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWhlbHBlcnMvc3JjL2RlY29yYXRvcnMvb24tY2hhbmdlLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLFVBQVUsUUFBUSxDQUN0QixRQUE0RDtJQUU1RCxNQUFNLGNBQWMsR0FBRyxNQUFNLEVBQUUsQ0FBQztJQUNoQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ2xDLE9BQU8sQ0FBQyxNQUFXLEVBQUUsR0FBZ0IsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUNqQyxHQUFHLEVBQUUsVUFBUyxLQUFLO2dCQUNqQjs7bUJBRUc7Z0JBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssU0FBUyxDQUFDO2dCQUU5RDs7bUJBRUc7Z0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDOUQsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDN0IsTUFBTSxZQUFZLEdBQW9CO29CQUNwQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDO29CQUNuQyxhQUFhLEVBQUUsUUFBUTtvQkFDdkIsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUM7b0JBQ2xDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVDLENBQUM7Z0JBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzFELENBQUM7WUFDRCxHQUFHLEVBQUU7Z0JBQ0gsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDOUIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNpbXBsZUNoYW5nZTxUPiB7XG4gIGZpcnN0Q2hhbmdlOiBib29sZWFuO1xuICBwcmV2aW91c1ZhbHVlOiBUO1xuICBjdXJyZW50VmFsdWU6IFQ7XG4gIGlzRmlyc3RDaGFuZ2U6ICgpID0+IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbkNoYW5nZTxUID0gYW55PihcbiAgY2FsbGJhY2s6ICh2YWx1ZTogVCwgc2ltcGxlQ2hhbmdlPzogU2ltcGxlQ2hhbmdlPFQ+KSA9PiB2b2lkXG4pIHtcbiAgY29uc3QgY2FjaGVkVmFsdWVLZXkgPSBTeW1ib2woKTtcbiAgY29uc3QgaXNGaXJzdENoYW5nZUtleSA9IFN5bWJvbCgpO1xuICByZXR1cm4gKHRhcmdldDogYW55LCBrZXk6IFByb3BlcnR5S2V5KSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGFuZ2Ugc3RhdHVzIG9mIFwiaXNGaXJzdENoYW5nZVwiXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzW2lzRmlyc3RDaGFuZ2VLZXldID0gdGhpc1tpc0ZpcnN0Q2hhbmdlS2V5XSA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiAgTm8gb3BlcmF0aW9uIGlmIG5ldyB2YWx1ZSBpcyBzYW1lIGFzIG9sZCB2YWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKCF0aGlzW2lzRmlyc3RDaGFuZ2VLZXldICYmIHRoaXNbY2FjaGVkVmFsdWVLZXldID09PSB2YWx1ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpc1tjYWNoZWRWYWx1ZUtleV07XG4gICAgICAgIHRoaXNbY2FjaGVkVmFsdWVLZXldID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IHNpbXBsZUNoYW5nZTogU2ltcGxlQ2hhbmdlPFQ+ID0ge1xuICAgICAgICAgIGZpcnN0Q2hhbmdlOiB0aGlzW2lzRmlyc3RDaGFuZ2VLZXldLFxuICAgICAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgICAgIGN1cnJlbnRWYWx1ZTogdGhpc1tjYWNoZWRWYWx1ZUtleV0sXG4gICAgICAgICAgaXNGaXJzdENoYW5nZTogKCkgPT4gdGhpc1tpc0ZpcnN0Q2hhbmdlS2V5XVxuICAgICAgICB9O1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIHRoaXNbY2FjaGVkVmFsdWVLZXldLCBzaW1wbGVDaGFuZ2UpO1xuICAgICAgfSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhY2hlZFZhbHVlS2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==