UNPKG

@nent/core

Version:

Functional elements to add routing, data-binding, dynamic HTML, declarative actions, audio, video, and so much more. Supercharge static HTML files into web apps without script or builds.

88 lines (82 loc) 2.98 kB
/*! * NENT 2022 */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); const index = require('./index-1829aebc.js'); const index$1 = require('./index-637e8c28.js'); const factory = require('./factory-0d7ddff9.js'); const interfaces$1 = require('./interfaces-69054d94.js'); const interfaces = require('./interfaces-95d0415a.js'); require('./index-96f3ab3f.js'); require('./values-b2399e33.js'); require('./promises-463f4e01.js'); require('./logging-37c154cf.js'); /* It's a wrapper around the localStorage API that emits an event when the data changes */ class StorageService { /** * `constructor` is a function that is called when a new instance of the class is created * @param {Window} win - Window - the window object * @param {IEventEmitter} eventBus - This is the event bus that we created in the previous step. * @param {string} name - The name of the provider. This is used to identify the provider when * emitting events. * @param {string} [prefix] - This is the prefix that will be used for all keys in the local storage. */ constructor(win, eventBus, name, prefix = '') { this.eventBus = eventBus; this.name = name; this.prefix = prefix; this.localStorage = win.localStorage; window === null || window === void 0 ? void 0 : window.addEventListener('storage', () => { this.eventBus.emit(interfaces.DATA_EVENTS.DataChanged, { provider: this.name, }); }, { passive: true }); } async get(key) { var _a; return ((_a = this.localStorage) === null || _a === void 0 ? void 0 : _a.getItem(this.prefix + key)) || null; } async set(key, value) { var _a; const existing = await this.get(key); if (existing == value) return; (_a = this.localStorage) === null || _a === void 0 ? void 0 : _a.setItem(this.prefix + key, value); this.eventBus.emit(interfaces.DATA_EVENTS.DataChanged, { provider: this.name, }); } } const DataStorage = class { constructor(hostRef) { index.registerInstance(this, hostRef); /** * Provider name to use in nent expressions. */ this.name = 'storage'; } registerProvider() { factory.addDataProvider(this.name, this.provider); this.actionSubscription = index$1.actionBus.on(this.name, async (action) => { if (action.command == interfaces$1.DATA_COMMANDS.SetData) { const { data } = action; await Promise.all(Object.keys(action.data).map(key => this.provider.set(key, data[key]))); } }); } componentWillLoad() { this.provider = new StorageService(window, index$1.eventBus, this.name, this.keyPrefix); this.registerProvider(); } disconnectedCallback() { var _a; factory.removeDataProvider(this.name); (_a = this.actionSubscription) === null || _a === void 0 ? void 0 : _a.call(this); } render() { return null; } get el() { return index.getElement(this); } }; exports.n_data_storage = DataStorage;