dataObserver.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. 'use strict';
  2. exports.__esModule = true;
  3. 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; }; }();
  4. var _jsonPatchDuplex = require('./../../../lib/jsonpatch/json-patch-duplex');
  5. var _jsonPatchDuplex2 = _interopRequireDefault(_jsonPatchDuplex);
  6. var _localHooks = require('../../mixins/localHooks');
  7. var _localHooks2 = _interopRequireDefault(_localHooks);
  8. var _object = require('../../helpers/object');
  9. var _utils = require('./utils');
  10. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  11. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  12. /**
  13. * @class DataObserver
  14. * @plugin ObserveChanges
  15. */
  16. var DataObserver = function () {
  17. function DataObserver(observedData) {
  18. _classCallCheck(this, DataObserver);
  19. /**
  20. * Observed source data.
  21. *
  22. * @type {Array}
  23. */
  24. this.observedData = null;
  25. /**
  26. * JsonPatch observer.
  27. *
  28. * @type {Object}
  29. */
  30. this.observer = null;
  31. /**
  32. * Flag which determines if observer is paused or not. Paused observer doesn't emit `change` hooks.
  33. *
  34. * @type {Boolean}
  35. * @default false
  36. */
  37. this.paused = false;
  38. this.setObservedData(observedData);
  39. }
  40. /**
  41. * Set data to observe.
  42. *
  43. * @param {*} observedData
  44. */
  45. _createClass(DataObserver, [{
  46. key: 'setObservedData',
  47. value: function setObservedData(observedData) {
  48. var _this = this;
  49. if (this.observer) {
  50. _jsonPatchDuplex2.default.unobserve(this.observedData, this.observer);
  51. }
  52. this.observedData = observedData;
  53. this.observer = _jsonPatchDuplex2.default.observe(this.observedData, function (patches) {
  54. return _this.onChange(patches);
  55. });
  56. }
  57. /**
  58. * Check if observer was paused.
  59. *
  60. * @returns {Boolean}
  61. */
  62. }, {
  63. key: 'isPaused',
  64. value: function isPaused() {
  65. return this.paused;
  66. }
  67. /**
  68. * Pause observer (stop emitting all detected changes).
  69. */
  70. }, {
  71. key: 'pause',
  72. value: function pause() {
  73. this.paused = true;
  74. }
  75. /**
  76. * Resume observer (emit all detected changes).
  77. */
  78. }, {
  79. key: 'resume',
  80. value: function resume() {
  81. this.paused = false;
  82. }
  83. /**
  84. * JsonPatch on change listener.
  85. *
  86. * @private
  87. * @param {Array} patches An array of object passed from jsonpatch.
  88. */
  89. }, {
  90. key: 'onChange',
  91. value: function onChange(patches) {
  92. this.runLocalHooks('change', (0, _utils.cleanPatches)(patches));
  93. }
  94. /**
  95. * Destroy observer instance.
  96. */
  97. }, {
  98. key: 'destroy',
  99. value: function destroy() {
  100. _jsonPatchDuplex2.default.unobserve(this.observedData, this.observer);
  101. this.observedData = null;
  102. this.observer = null;
  103. }
  104. }]);
  105. return DataObserver;
  106. }();
  107. (0, _object.mixin)(DataObserver, _localHooks2.default);
  108. exports.default = DataObserver;