@nent/core
Version:
86 lines (80 loc) • 2.9 kB
JavaScript
/*!
* 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 data provider that uses the sessionStorage API to store data */
class SessionService {
/**
* A constructor function that takes in a window object, an eventBus object, a name string, and a
* prefix string. The prefix string is set to an empty string by default. The constructor function
* then sets the sessionStorage property to the window's sessionStorage.
* @param {Window} win - Window - the window object
* @param {IEventEmitter} eventBus - IEventEmitter - This is the event bus that the class will use to
* emit events.
* @param {string} name - The name of the session storage key.
* @param {string} [prefix] - This is the prefix that will be used for all the keys in the session
* storage.
*/
constructor(win, eventBus, name, prefix = '') {
this.eventBus = eventBus;
this.name = name;
this.prefix = prefix;
this.sessionStorage = win.sessionStorage;
}
async get(key) {
var _a;
return (_a = this.sessionStorage) === null || _a === void 0 ? void 0 : _a.getItem(this.prefix + key);
}
async set(key, value) {
var _a;
const existing = await this.get(key);
if (existing == value)
return;
(_a = this.sessionStorage) === null || _a === void 0 ? void 0 : _a.setItem(this.prefix + key, value);
this.eventBus.emit(interfaces.DATA_EVENTS.DataChanged, {
provider: this.name,
});
}
}
const DataSession = class {
constructor(hostRef) {
index.registerInstance(this, hostRef);
/**
* Provider name to use in nent expressions.
*/
this.name = 'session';
}
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 SessionService(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_session = DataSession;