@quantlab/handsontable
Version:
Spreadsheet-like data grid editor that provides copy/paste functionality compatible with Excel/Google Docs
138 lines (108 loc) • 3.55 kB
JavaScript
;
exports.__esModule = true;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _jsonPatchDuplex = require('./../../../lib/jsonpatch/json-patch-duplex');
var _jsonPatchDuplex2 = _interopRequireDefault(_jsonPatchDuplex);
var _localHooks = require('../../mixins/localHooks');
var _localHooks2 = _interopRequireDefault(_localHooks);
var _object = require('../../helpers/object');
var _utils = require('./utils');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
/**
* @class DataObserver
* @plugin ObserveChanges
*/
var DataObserver = function () {
function DataObserver(observedData) {
_classCallCheck(this, DataObserver);
/**
* 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
*/
_createClass(DataObserver, [{
key: 'setObservedData',
value: function setObservedData(observedData) {
var _this = this;
if (this.observer) {
_jsonPatchDuplex2.default.unobserve(this.observedData, this.observer);
}
this.observedData = observedData;
this.observer = _jsonPatchDuplex2.default.observe(this.observedData, function (patches) {
return _this.onChange(patches);
});
}
/**
* Check if observer was paused.
*
* @returns {Boolean}
*/
}, {
key: 'isPaused',
value: function isPaused() {
return this.paused;
}
/**
* Pause observer (stop emitting all detected changes).
*/
}, {
key: 'pause',
value: function pause() {
this.paused = true;
}
/**
* Resume observer (emit all detected changes).
*/
}, {
key: 'resume',
value: function resume() {
this.paused = false;
}
/**
* JsonPatch on change listener.
*
* @private
* @param {Array} patches An array of object passed from jsonpatch.
*/
}, {
key: 'onChange',
value: function onChange(patches) {
this.runLocalHooks('change', (0, _utils.cleanPatches)(patches));
}
/**
* Destroy observer instance.
*/
}, {
key: 'destroy',
value: function destroy() {
_jsonPatchDuplex2.default.unobserve(this.observedData, this.observer);
this.observedData = null;
this.observer = null;
}
}]);
return DataObserver;
}();
(0, _object.mixin)(DataObserver, _localHooks2.default);
exports.default = DataObserver;