UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

122 lines (120 loc) 3.98 kB
/** * DevExtreme (cjs/data/local_store.js) * Version: 21.1.4 * Build date: Mon Jun 21 2021 * * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; exports.default = void 0; var _events_engine = _interopRequireDefault(require("../events/core/events_engine")); var _dom_adapter = _interopRequireDefault(require("../core/dom_adapter")); var _window = require("../core/utils/window"); var _class = _interopRequireDefault(require("../core/class")); var _errors = require("./errors"); var _array_store = _interopRequireDefault(require("./array_store")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } var window = (0, _window.getWindow)(); var abstract = _class.default.abstract; var LocalStoreBackend = _class.default.inherit({ ctor: function(store, storeOptions) { this._store = store; this._dirty = !!storeOptions.data; this.save(); var immediate = this._immediate = storeOptions.immediate; var flushInterval = Math.max(100, storeOptions.flushInterval || 1e4); if (!immediate) { var saveProxy = this.save.bind(this); setInterval(saveProxy, flushInterval); _events_engine.default.on(window, "beforeunload", saveProxy); if (window.cordova) { _dom_adapter.default.listen(_dom_adapter.default.getDocument(), "pause", saveProxy, false) } } }, notifyChanged: function() { this._dirty = true; if (this._immediate) { this.save() } }, load: function() { this._store._array = this._loadImpl(); this._dirty = false }, save: function() { if (!this._dirty) { return } this._saveImpl(this._store._array); this._dirty = false }, _loadImpl: abstract, _saveImpl: abstract }); var DomLocalStoreBackend = LocalStoreBackend.inherit({ ctor: function(store, storeOptions) { var name = storeOptions.name; if (!name) { throw _errors.errors.Error("E4013") } this._key = "dx-data-localStore-" + name; this.callBase(store, storeOptions) }, _loadImpl: function() { var raw = window.localStorage.getItem(this._key); if (raw) { return JSON.parse(raw) } return [] }, _saveImpl: function(array) { if (!array.length) { window.localStorage.removeItem(this._key) } else { window.localStorage.setItem(this._key, JSON.stringify(array)) } } }); var localStoreBackends = { dom: DomLocalStoreBackend }; var LocalStore = _array_store.default.inherit({ ctor: function(options) { if ("string" === typeof options) { options = { name: options } } else { options = options || {} } this.callBase(options); this._backend = new localStoreBackends[options.backend || "dom"](this, options); this._backend.load() }, clear: function() { this.callBase(); this._backend.notifyChanged() }, _insertImpl: function(values) { var b = this._backend; return this.callBase(values).done(b.notifyChanged.bind(b)) }, _updateImpl: function(key, values) { var b = this._backend; return this.callBase(key, values).done(b.notifyChanged.bind(b)) }, _removeImpl: function(key) { var b = this._backend; return this.callBase(key).done(b.notifyChanged.bind(b)) } }, "local"); var _default = LocalStore; exports.default = _default; module.exports = exports.default; module.exports.default = exports.default;