handsontable
Version:
Handsontable is a JavaScript Spreadsheet Component available for React, Angular and Vue.
134 lines (109 loc) • 3.49 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
var _jsonPatchDuplex = _interopRequireDefault(require("../../3rdparty/jsonpatch/json-patch-duplex"));
var _localHooks = _interopRequireDefault(require("../../mixins/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"); } }
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); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
/**
* @class DataObserver
* @plugin ObserveChanges
*/
var DataObserver = /*#__PURE__*/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 Set an object to observe.
*/
_createClass(DataObserver, [{
key: "setObservedData",
value: function setObservedData(observedData) {
var _this = this;
if (this.observer) {
_jsonPatchDuplex.default.unobserve(this.observedData, this.observer);
}
this.observedData = observedData;
this.observer = _jsonPatchDuplex.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() {
_jsonPatchDuplex.default.unobserve(this.observedData, this.observer);
this.observedData = null;
this.observer = null;
}
}]);
return DataObserver;
}();
(0, _object.mixin)(DataObserver, _localHooks.default);
var _default = DataObserver;
exports.default = _default;