| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import jsonpatch from './../../../lib/jsonpatch/json-patch-duplex';
- import localHooks from '../../mixins/localHooks';
- import {mixin} from '../../helpers/object';
- import {cleanPatches} from './utils';
- /**
- * @class DataObserver
- * @plugin ObserveChanges
- */
- class DataObserver {
- constructor(observedData) {
- /**
- * Observed source data.
- *
- * @type {Array}
- */
- this.observedData = null;
- /**
- * JsonPatch observer.
- *
- * @type {Object}
- */
- this.observer = null;
- /**
- * Flag which determines if observer is paused or not. Paused observer doesn't emit `change` hooks.
- *
- * @type {Boolean}
- * @default false
- */
- this.paused = false;
- this.setObservedData(observedData);
- }
- /**
- * Set data to observe.
- *
- * @param {*} observedData
- */
- setObservedData(observedData) {
- if (this.observer) {
- jsonpatch.unobserve(this.observedData, this.observer);
- }
- this.observedData = observedData;
- this.observer = jsonpatch.observe(this.observedData, (patches) => this.onChange(patches));
- }
- /**
- * Check if observer was paused.
- *
- * @returns {Boolean}
- */
- isPaused() {
- return this.paused;
- }
- /**
- * Pause observer (stop emitting all detected changes).
- */
- pause() {
- this.paused = true;
- }
- /**
- * Resume observer (emit all detected changes).
- */
- resume() {
- this.paused = false;
- }
- /**
- * JsonPatch on change listener.
- *
- * @private
- * @param {Array} patches An array of object passed from jsonpatch.
- */
- onChange(patches) {
- this.runLocalHooks('change', cleanPatches(patches));
- }
- /**
- * Destroy observer instance.
- */
- destroy() {
- jsonpatch.unobserve(this.observedData, this.observer);
- this.observedData = null;
- this.observer = null;
- }
- }
- mixin(DataObserver, localHooks);
- export default DataObserver;
|