devextreme-angular
Version:
Angular UI and visualization components based on DevExtreme widgets
81 lines • 9.97 kB
JavaScript
/*!
* devextreme-angular
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file in the root of the project for details.
*
* https://github.com/DevExpress/devextreme-angular
*/
import { Injectable, } from '@angular/core';
import { equalByValue } from 'devextreme/core/utils/common';
import * as i0 from "@angular/core";
export class WatcherHelper {
_watchers = [];
getWatchMethod() {
const watchMethod = (valueGetter, valueChangeCallback, options) => {
let oldValue = valueGetter();
options = options || {};
if (!options.skipImmediate) {
valueChangeCallback(oldValue);
}
const watcher = () => {
const newValue = valueGetter();
if (this._isDifferentValues(oldValue, newValue, options.deep)) {
valueChangeCallback(newValue);
oldValue = newValue;
}
};
this._watchers.push(watcher);
return () => {
const index = this._watchers.indexOf(watcher);
if (index !== -1) {
this._watchers.splice(index, 1);
}
};
};
return watchMethod;
}
_isDifferentValues(oldValue, newValue, deepCheck) {
const comparableNewValue = this._toComparable(newValue);
const comparableOldValue = this._toComparable(oldValue);
const isObjectValues = comparableNewValue instanceof Object && comparableOldValue instanceof Object;
if (deepCheck && isObjectValues) {
return this._checkObjectsFields(newValue, oldValue);
}
return comparableNewValue !== comparableOldValue;
}
_toComparable(value) {
if (value instanceof Date) {
return value.getTime();
}
return value;
}
_checkObjectsFields(checkingFromObject, checkingToObject) {
for (const field in checkingFromObject) {
const oldValue = this._toComparable(checkingFromObject[field]);
const newValue = this._toComparable(checkingToObject[field]);
let isEqualObjects = false;
if (typeof oldValue === 'object' && typeof newValue === 'object') {
isEqualObjects = equalByValue(oldValue, newValue);
}
if (oldValue !== newValue && !isEqualObjects) {
return true;
}
}
}
checkWatchers() {
for (const watcher of this._watchers) {
watcher();
}
}
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WatcherHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
/** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WatcherHelper });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WatcherHelper, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9kaXN0L2NvcmUvd2F0Y2hlci1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLEVBQ0wsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFHNUQsTUFBTSxPQUFPLGFBQWE7SUFDUCxTQUFTLEdBQVUsRUFBRSxDQUFDO0lBRXZDLGNBQWM7UUFDWixNQUFNLFdBQVcsR0FBRyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoRSxJQUFJLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztZQUM3QixPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUV4QixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMzQixtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBRUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUNuQixNQUFNLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztnQkFFL0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDOUQsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzlCLFFBQVEsR0FBRyxRQUFRLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU3QixPQUFPLEdBQUcsRUFBRTtnQkFDVixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFOUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQWEsRUFBRSxRQUFhLEVBQUUsU0FBa0I7UUFDekUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsWUFBWSxNQUFNLElBQUksa0JBQWtCLFlBQVksTUFBTSxDQUFDO1FBRXBHLElBQUksU0FBUyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsT0FBTyxrQkFBa0IsS0FBSyxrQkFBa0IsQ0FBQztJQUNuRCxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQUs7UUFDekIsSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDMUIsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLG1CQUFtQixDQUFDLGtCQUEwQixFQUFFLGdCQUF3QjtRQUM5RSxLQUFLLE1BQU0sS0FBSyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM3RCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFFM0IsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2pFLGNBQWMsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCxJQUFJLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDN0MsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQzsySEF6RVUsYUFBYTsrSEFBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBkZXZleHRyZW1lLWFuZ3VsYXJcbiAqIFZlcnNpb246IDI0LjIuNlxuICogQnVpbGQgZGF0ZTogTW9uIE1hciAxNyAyMDI1XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyNSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcbiAqXG4gKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBtb2RpZmllZCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zXG4gKiBvZiB0aGUgTUlUIGxpY2Vuc2UuIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBwcm9qZWN0IGZvciBkZXRhaWxzLlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9EZXZFeHByZXNzL2RldmV4dHJlbWUtYW5ndWxhclxuICovXG5cbmltcG9ydCB7XHJcbiAgSW5qZWN0YWJsZSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IGVxdWFsQnlWYWx1ZSB9IGZyb20gJ2RldmV4dHJlbWUvY29yZS91dGlscy9jb21tb24nO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgV2F0Y2hlckhlbHBlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfd2F0Y2hlcnM6IGFueVtdID0gW107XHJcblxyXG4gIGdldFdhdGNoTWV0aG9kKCkge1xyXG4gICAgY29uc3Qgd2F0Y2hNZXRob2QgPSAodmFsdWVHZXR0ZXIsIHZhbHVlQ2hhbmdlQ2FsbGJhY2ssIG9wdGlvbnMpID0+IHtcclxuICAgICAgbGV0IG9sZFZhbHVlID0gdmFsdWVHZXR0ZXIoKTtcclxuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgICBpZiAoIW9wdGlvbnMuc2tpcEltbWVkaWF0ZSkge1xyXG4gICAgICAgIHZhbHVlQ2hhbmdlQ2FsbGJhY2sob2xkVmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB3YXRjaGVyID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWVHZXR0ZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzRGlmZmVyZW50VmFsdWVzKG9sZFZhbHVlLCBuZXdWYWx1ZSwgb3B0aW9ucy5kZWVwKSkge1xyXG4gICAgICAgICAgdmFsdWVDaGFuZ2VDYWxsYmFjayhuZXdWYWx1ZSk7XHJcbiAgICAgICAgICBvbGRWYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuX3dhdGNoZXJzLnB1c2god2F0Y2hlcik7XHJcblxyXG4gICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fd2F0Y2hlcnMuaW5kZXhPZih3YXRjaGVyKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgdGhpcy5fd2F0Y2hlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB3YXRjaE1ldGhvZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzRGlmZmVyZW50VmFsdWVzKG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnksIGRlZXBDaGVjazogYm9vbGVhbikge1xyXG4gICAgY29uc3QgY29tcGFyYWJsZU5ld1ZhbHVlID0gdGhpcy5fdG9Db21wYXJhYmxlKG5ld1ZhbHVlKTtcclxuICAgIGNvbnN0IGNvbXBhcmFibGVPbGRWYWx1ZSA9IHRoaXMuX3RvQ29tcGFyYWJsZShvbGRWYWx1ZSk7XHJcbiAgICBjb25zdCBpc09iamVjdFZhbHVlcyA9IGNvbXBhcmFibGVOZXdWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiBjb21wYXJhYmxlT2xkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3Q7XHJcblxyXG4gICAgaWYgKGRlZXBDaGVjayAmJiBpc09iamVjdFZhbHVlcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY2hlY2tPYmplY3RzRmllbGRzKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29tcGFyYWJsZU5ld1ZhbHVlICE9PSBjb21wYXJhYmxlT2xkVmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90b0NvbXBhcmFibGUodmFsdWUpIHtcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlLmdldFRpbWUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGVja09iamVjdHNGaWVsZHMoY2hlY2tpbmdGcm9tT2JqZWN0OiBPYmplY3QsIGNoZWNraW5nVG9PYmplY3Q6IE9iamVjdCkge1xyXG4gICAgZm9yIChjb25zdCBmaWVsZCBpbiBjaGVja2luZ0Zyb21PYmplY3QpIHtcclxuICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl90b0NvbXBhcmFibGUoY2hlY2tpbmdGcm9tT2JqZWN0W2ZpZWxkXSk7XHJcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5fdG9Db21wYXJhYmxlKGNoZWNraW5nVG9PYmplY3RbZmllbGRdKTtcclxuICAgICAgbGV0IGlzRXF1YWxPYmplY3RzID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9sZFZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgaXNFcXVhbE9iamVjdHMgPSBlcXVhbEJ5VmFsdWUob2xkVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2xkVmFsdWUgIT09IG5ld1ZhbHVlICYmICFpc0VxdWFsT2JqZWN0cykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja1dhdGNoZXJzKCkge1xyXG4gICAgZm9yIChjb25zdCB3YXRjaGVyIG9mIHRoaXMuX3dhdGNoZXJzKSB7XHJcbiAgICAgIHdhdGNoZXIoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19