devextreme-angular
Version:
Angular UI and visualization components based on DevExtreme widgets
83 lines • 10 kB
JavaScript
/*!
* devextreme-angular
* Version: 22.1.14
* Build date: Mon Apr 29 2024
*
* Copyright (c) 2012 - 2024 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 {
constructor() {
this._watchers = [];
}
getWatchMethod() {
let watchMethod = (valueGetter, valueChangeCallback, options) => {
let oldValue = valueGetter();
options = options || {};
if (!options.skipImmediate) {
valueChangeCallback(oldValue);
}
let watcher = () => {
let newValue = valueGetter();
if (this._isDifferentValues(oldValue, newValue, options.deep)) {
valueChangeCallback(newValue);
oldValue = newValue;
}
};
this._watchers.push(watcher);
return () => {
let index = this._watchers.indexOf(watcher);
if (index !== -1) {
this._watchers.splice(index, 1);
}
};
};
return watchMethod;
}
_isDifferentValues(oldValue, newValue, deepCheck) {
let comparableNewValue = this._toComparable(newValue);
let comparableOldValue = this._toComparable(oldValue);
let 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 (let field in checkingFromObject) {
let oldValue = this._toComparable(checkingFromObject[field]);
let 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 (let watcher of this._watchers) {
watcher();
}
}
}
/** @nocollapse */ WatcherHelper.ɵfac = function WatcherHelper_Factory(t) { return new (t || WatcherHelper)(); };
/** @nocollapse */ WatcherHelper.ɵprov = /** @pureOrBreakMyCode */ i0.ɵɵdefineInjectable({ token: WatcherHelper, factory: WatcherHelper.ɵfac });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WatcherHelper, [{
type: Injectable
}], null, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9kaXN0L2NvcmUvd2F0Y2hlci1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLEVBQ0gsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFHNUQsTUFBTSxPQUFPLGFBQWE7SUFEMUI7UUFFWSxjQUFTLEdBQVUsRUFBRSxDQUFDO0tBeUVqQztJQXZFRyxjQUFjO1FBQ1YsSUFBSSxXQUFXLEdBQUcsQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDNUQsSUFBSSxRQUFRLEdBQUcsV0FBVyxFQUFFLENBQUM7WUFDN0IsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFFeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7Z0JBQ3hCLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2pDO1lBRUQsSUFBSSxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUNmLElBQUksUUFBUSxHQUFHLFdBQVcsRUFBRSxDQUFDO2dCQUU3QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDM0QsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzlCLFFBQVEsR0FBRyxRQUFRLENBQUM7aUJBQ3ZCO1lBQ0wsQ0FBQyxDQUFDO1lBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0IsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRTVDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDbkM7WUFDTCxDQUFDLENBQUM7UUFDTixDQUFDLENBQUM7UUFFRixPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBRU8sa0JBQWtCLENBQUMsUUFBYSxFQUFFLFFBQWEsRUFBRSxTQUFrQjtRQUN2RSxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELElBQUksY0FBYyxHQUFHLGtCQUFrQixZQUFZLE1BQU0sSUFBSSxrQkFBa0IsWUFBWSxNQUFNLENBQUM7UUFFbEcsSUFBSSxTQUFTLElBQUksY0FBYyxFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sa0JBQWtCLEtBQUssa0JBQWtCLENBQUM7SUFDckQsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFLO1FBQ3ZCLElBQUksS0FBSyxZQUFZLElBQUksRUFBRTtZQUN2QixPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMxQjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxrQkFBMEIsRUFBRSxnQkFBd0I7UUFDNUUsS0FBSyxJQUFJLEtBQUssSUFBSSxrQkFBa0IsRUFBRTtZQUNsQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDN0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzNELElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztZQUUzQixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7Z0JBQzlELGNBQWMsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ3JEO1lBQ0QsSUFBSSxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUMxQyxPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNWLEtBQUssSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMvQixPQUFPLEVBQUUsQ0FBQztTQUNiO0lBQ0wsQ0FBQzs7NkZBekVRLGFBQWE7a0dBQWIsYUFBYSxXQUFiLGFBQWE7dUZBQWIsYUFBYTtjQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBkZXZleHRyZW1lLWFuZ3VsYXJcbiAqIFZlcnNpb246IDIyLjEuMTRcbiAqIEJ1aWxkIGRhdGU6IE1vbiBBcHIgMjkgMjAyNFxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjQgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgbW9kaWZpZWQgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtc1xuICogb2YgdGhlIE1JVCBsaWNlbnNlLiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgcHJvamVjdCBmb3IgZGV0YWlscy5cbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vRGV2RXhwcmVzcy9kZXZleHRyZW1lLWFuZ3VsYXJcbiAqL1xuXG5pbXBvcnQge1xuICAgIEluamVjdGFibGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGVxdWFsQnlWYWx1ZSB9IGZyb20gJ2RldmV4dHJlbWUvY29yZS91dGlscy9jb21tb24nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgV2F0Y2hlckhlbHBlciB7XG4gICAgcHJpdmF0ZSBfd2F0Y2hlcnM6IGFueVtdID0gW107XG5cbiAgICBnZXRXYXRjaE1ldGhvZCgpIHtcbiAgICAgICAgbGV0IHdhdGNoTWV0aG9kID0gKHZhbHVlR2V0dGVyLCB2YWx1ZUNoYW5nZUNhbGxiYWNrLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgb2xkVmFsdWUgPSB2YWx1ZUdldHRlcigpO1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwSW1tZWRpYXRlKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2VDYWxsYmFjayhvbGRWYWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB3YXRjaGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IHZhbHVlR2V0dGVyKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNEaWZmZXJlbnRWYWx1ZXMob2xkVmFsdWUsIG5ld1ZhbHVlLCBvcHRpb25zLmRlZXApKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQ2hhbmdlQ2FsbGJhY2sobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuX3dhdGNoZXJzLnB1c2god2F0Y2hlcik7XG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5fd2F0Y2hlcnMuaW5kZXhPZih3YXRjaGVyKTtcblxuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB3YXRjaE1ldGhvZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0RpZmZlcmVudFZhbHVlcyhvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55LCBkZWVwQ2hlY2s6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGNvbXBhcmFibGVOZXdWYWx1ZSA9IHRoaXMuX3RvQ29tcGFyYWJsZShuZXdWYWx1ZSk7XG4gICAgICAgIGxldCBjb21wYXJhYmxlT2xkVmFsdWUgPSB0aGlzLl90b0NvbXBhcmFibGUob2xkVmFsdWUpO1xuICAgICAgICBsZXQgaXNPYmplY3RWYWx1ZXMgPSBjb21wYXJhYmxlTmV3VmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgY29tcGFyYWJsZU9sZFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0O1xuXG4gICAgICAgIGlmIChkZWVwQ2hlY2sgJiYgaXNPYmplY3RWYWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGVja09iamVjdHNGaWVsZHMobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcGFyYWJsZU5ld1ZhbHVlICE9PSBjb21wYXJhYmxlT2xkVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdG9Db21wYXJhYmxlKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5nZXRUaW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tPYmplY3RzRmllbGRzKGNoZWNraW5nRnJvbU9iamVjdDogT2JqZWN0LCBjaGVja2luZ1RvT2JqZWN0OiBPYmplY3QpIHtcbiAgICAgICAgZm9yIChsZXQgZmllbGQgaW4gY2hlY2tpbmdGcm9tT2JqZWN0KSB7XG4gICAgICAgICAgICBsZXQgb2xkVmFsdWUgPSB0aGlzLl90b0NvbXBhcmFibGUoY2hlY2tpbmdGcm9tT2JqZWN0W2ZpZWxkXSk7XG4gICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSB0aGlzLl90b0NvbXBhcmFibGUoY2hlY2tpbmdUb09iamVjdFtmaWVsZF0pO1xuICAgICAgICAgICAgbGV0IGlzRXF1YWxPYmplY3RzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2xkVmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBpc0VxdWFsT2JqZWN0cyA9IGVxdWFsQnlWYWx1ZShvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9sZFZhbHVlICE9PSBuZXdWYWx1ZSAmJiAhaXNFcXVhbE9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrV2F0Y2hlcnMoKSB7XG4gICAgICAgZm9yIChsZXQgd2F0Y2hlciBvZiB0aGlzLl93YXRjaGVycykge1xuICAgICAgICAgICAgd2F0Y2hlcigpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19