{"version":3,"file":"form-control-change-tracker.mjs","sources":["../../../projects/form-control-change-tracker/src/lib/utils/comparer.ts","../../../projects/form-control-change-tracker/src/lib/change-tracker.directive.ts","../../../projects/form-control-change-tracker/src/lib/form-control-change-tracker.module.ts","../../../projects/form-control-change-tracker/src/lib/has-changes.ts","../../../projects/form-control-change-tracker/src/public-api.ts","../../../projects/form-control-change-tracker/src/form-control-change-tracker.ts"],"sourcesContent":["import { Diff, diff } from 'deep-diff';\n\nfunction hasNoChanges(diff: Diff<any, any>[] | undefined) {\n  return !diff;\n}\n\nexport function comparer(initialValue: any, currentValue: any): boolean {\n  const differences = diff(initialValue, currentValue);\n  return hasNoChanges(differences);\n}\n","import { Directive, Input, OnDestroy, DoCheck, OnInit } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { comparer } from './utils/comparer';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { takeUntil, startWith } from 'rxjs/operators';\n\nconst NOT_SET = Symbol('NOT_SET');\n\n@Directive({\n  selector: '[ngModel][hgChangeTracker],[formControl][hgChangeTracker],[formControlName][hgChangeTracker]',\n  exportAs: 'hgChangeTracker'\n})\nexport class ChangeTrackerDirective<T = any> implements OnDestroy, DoCheck, OnInit {\n\n  private _changedInitialValue: T | symbol = NOT_SET;\n  private _initialValue: T | symbol | undefined = NOT_SET;\n  private _previousInitialValue: T | symbol | undefined = NOT_SET;\n  private _isAlive$: Subject<void> = new Subject<void>();\n  private _isCheckScheduled = false;\n  private _shouldForceEmissionOnCheck = false;\n\n  private get _currentValue() {\n    const value = this.ngControl ? this.ngControl.value : NOT_SET;\n    if (this.type === 'checkbox') {\n      return (this.ngControl as any).viewModel;\n    }\n    return value;\n  }\n\n  get currentValue() { return this._currentValue; }\n\n  private _destroying = false;\n  private _change = new BehaviorSubject<any>(null);\n\n  hasValueChanged = false;\n\n  @Input() type: any = NOT_SET;\n  @Input() multiInitialValue = false;\n  @Input() autoInitialValueSync = true;\n\n  @Input() set initialValue(value: any) {\n    this._scheduleCheck();\n    if (this._initialValue === NOT_SET || this.autoInitialValueSync === true) { this._initialValue = value; return; }\n    this._changedInitialValue = value;\n  }\n  get initialValue() { return this._initialValue; }\n\n  resetInitialValue(newValue?: T) {\n    this._previousInitialValue = this._initialValue;\n    this._initialValue = arguments.length === 0 ? NOT_SET : newValue;\n    this._scheduleCheck();\n  }\n\n  get _hasValueChanged() {\n    if (this._destroying) {\n      return false;\n    }\n\n    if (this._initialValue === NOT_SET) {\n      return false;\n    }\n\n    const initialValue = this._initialValue;\n    const currentValue = this._currentValue;\n    let areTheSame = false;\n    if (Array.isArray(initialValue)) {\n      if (this.multiInitialValue !== false) {\n        for (const val of initialValue) {\n          areTheSame = comparer(val, currentValue);\n          if (areTheSame) { break; }\n        }\n      } else {\n        areTheSame = comparer(initialValue, currentValue);\n      }\n    } else {\n      areTheSame = comparer(initialValue, currentValue);\n    }\n    return !areTheSame;\n  }\n\n  ngOnDestroy() {\n    this._destroying = true;\n    this._isAlive$.next();\n    this._isAlive$.complete();\n  }\n\n  ngDoCheck() {\n    if (this._previousInitialValue !== NOT_SET && this._initialValue === NOT_SET) {\n      this._initialValue = this._changedInitialValue !== NOT_SET ? this._changedInitialValue : this._previousInitialValue;\n      this._changedInitialValue = NOT_SET;\n      this._scheduleCheck();\n    }\n  }\n\n  private _checkForChanges() {\n    const currentHasChangedValue = this._hasValueChanged;\n    if (currentHasChangedValue === this.hasValueChanged && this._shouldForceEmissionOnCheck === false) { return; }\n    this._shouldForceEmissionOnCheck = false;\n    this.hasValueChanged = currentHasChangedValue;\n    this._change.next(currentHasChangedValue);\n  }\n\n  private _scheduleCheck() {\n    if (this._isCheckScheduled) { return false; }\n    this._isCheckScheduled = true;\n    Promise.resolve().then(() => {\n      this._isCheckScheduled = false;\n      this._checkForChanges();\n    });\n    return true;\n  }\n\n  constructor(private ngControl: NgControl) { }\n\n  ngOnInit(): void {\n    if (!this.ngControl.control) {\n      return void console.error('Form Control Change Tracker: No ngControl.control found!');;\n    }\n\n    this.ngControl.control.valueChanges.pipe(takeUntil(this._isAlive$), startWith(null)).subscribe(() => {\n      this._shouldForceEmissionOnCheck = true;\n      this._scheduleCheck();\n    });\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { ChangeTrackerDirective } from './change-tracker.directive';\n\n@NgModule({\n  declarations: [ChangeTrackerDirective],\n  imports: [\n  ],\n  exports: [ChangeTrackerDirective]\n})\nexport class FormControlChangeTrackerModule { }\n","import { QueryList } from '@angular/core';\nimport { ChangeTrackerDirective } from './change-tracker.directive';\nimport { combineLatest, Subject, asyncScheduler, asapScheduler, Subscription } from 'rxjs';\nimport { takeUntil, observeOn, startWith, debounceTime } from 'rxjs/operators';\nimport { NgControl } from '@angular/forms';\n\nconst _items = Symbol('items');\nconst _configureWatch = Symbol('configureWatch');\nconst _hasChanges = Symbol('hasChanges');\nconst _isAlive = Symbol('isAlive');\nconst _isConfigureWatchScheduled = Symbol('isViewReady');\nconst _watchSubscription = Symbol('watchSubscription');\nconst _itemsSubscription = Symbol('itemsSubscription');\n\nfunction getDefaultValueForConfig(config?: { includeChangedValues: boolean }) {\n  return config && config.includeChangedValues ? { hasChanges: false, values: {} } : false;\n}\n\nexport function hasChanges(config?: { includeChangedValues: boolean }) {\n  return function (target: any, propertyKey: string) {\n    Object.defineProperty(target, propertyKey, {\n      set(items: QueryList<ChangeTrackerDirective>) {\n        this[_isAlive] = new Subject();\n        this[_items] = items;\n\n        this[_configureWatch] = function () {\n          if (this[_isConfigureWatchScheduled]) { return; }\n          this[_isConfigureWatchScheduled] = true;\n          asapScheduler.schedule(() => {\n            this[_isConfigureWatchScheduled] = false;\n            const currentItems = this[_items] as QueryList<ChangeTrackerDirective>;\n            const changeStreams = currentItems.map(i => ((i as any)._change as Subject<any>));\n\n            if (this[_watchSubscription]) {\n              (this[_watchSubscription] as Subscription).unsubscribe();\n              this[_watchSubscription] = undefined;\n            }\n\n            this[_watchSubscription] = combineLatest(changeStreams).pipe(\n              takeUntil(this[_isAlive]), observeOn(asyncScheduler)\n            ).subscribe((newValue) => {\n              if (config && config.includeChangedValues) {\n                const _hasChangesValue = this[_hasChanges] || getDefaultValueForConfig(config);\n                _hasChangesValue.hasChanges = newValue.includes(true);\n                _hasChangesValue.values = currentItems.reduce((acc, curr) => {\n                  const ngControl: NgControl = (curr as any).ngControl;\n\n                  if (ngControl === null) {\n                    console.error('Form Control Change Tracker: No ngControl.control found!');;\n                    return acc;\n                  }\n\n                  ngControl.path?.reduce((pathAcc, currPath, index, arr) => {\n                    if (arr.length - 1 === index) {\n                      return pathAcc[currPath] = { initial: curr.initialValue, current: curr.currentValue };\n                    }\n                    return pathAcc[currPath] = pathAcc[currPath] || {};\n                  }, acc as any);\n\n                  return acc;\n                }, {});\n                return;\n              }\n              this[_hasChanges] = newValue.includes(true);\n            });\n          });\n        };\n\n\n        if (this[_itemsSubscription]) {\n          (this[_itemsSubscription] as Subscription).unsubscribe();\n          this[_itemsSubscription] = undefined;\n        }\n\n        this[_itemsSubscription] = items.changes.pipe(\n          startWith('<NOT_SET>'),\n          debounceTime(1)\n        ).subscribe((newItems: QueryList<ChangeTrackerDirective>) => {\n          this[_configureWatch]();\n          if (newItems as any === '<NOT_SET>') { return; }\n          this[_items] = newItems;\n        }, undefined, () => {\n          (this[_isAlive] as Subject<void>).next();\n          (this[_isAlive] as Subject<void>).complete();\n        });\n      },\n      get() {\n        if (this[_hasChanges] === undefined) { this[_hasChanges] = getDefaultValueForConfig(config); }\n        return this[_hasChanges];\n      }\n    });\n  };\n}\n","/*\n * Public API Surface of form-control-change-tracker\n */\n\nexport * from './lib/form-control-change-tracker.module';\nexport * from './lib/change-tracker.directive';\nexport * from './lib/has-changes';\nexport * from './lib/interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}