UNPKG

devextreme-angular

Version:

Angular UI and visualization components based on DevExtreme widgets

83 lines 10 kB
/*! * 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