@jaspero/ng-helpers
Version:
[](https://github.com/semantic-release/semantic-release) [](https://circleci.
33 lines • 4.41 kB
JavaScript
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==