@universis/common
Version:
Universis - common directives and services
142 lines (141 loc) • 15.8 kB
JavaScript
import * as tslib_1 from "tslib";
import { AngularDataContext } from '@themost/angular';
import * as _ from 'lodash';
import { Injectable } from '@angular/core';
export class LocalUserStorageService {
constructor(context) {
this.context = context;
}
/**
*
* Indicates whether the localStorage is available
*
*/
hasUserStorage() {
return !!localStorage;
}
getItem(key) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const localStorageItem = localStorage.getItem('userLocalStorage');
let userLocalStorage = {};
if (localStorageItem) {
userLocalStorage = JSON.parse(localStorageItem);
}
const finalKey = key.replace(/\//g, '.');
return {
key: key,
value: yield _.get(userLocalStorage, finalKey, null)
};
});
}
setItem(key, value) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const localStorageItem = yield localStorage.getItem('userLocalStorage');
let userLocalStorage = {};
if (localStorageItem) {
userLocalStorage = JSON.parse(localStorageItem);
}
const finalKey = key.replace(/\//g, '.');
if (_.has(userLocalStorage, finalKey) && (value === (yield this.getItem(finalKey)).value)) {
return;
}
_.set(userLocalStorage, finalKey, value);
yield localStorage.setItem('userLocalStorage', JSON.stringify(userLocalStorage));
});
}
removeItem(key) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const localStorageItem = localStorage.getItem('userLocalStorage');
let userLocalStorage = {};
if (localStorageItem) {
userLocalStorage = JSON.parse(localStorageItem);
}
const finalKey = key.replace(/\//g, '.');
if (_.has(userLocalStorage, finalKey)) {
const result = _.unset(userLocalStorage, finalKey);
if (result) {
localStorage.setItem('userLocalStorage', JSON.stringify(userLocalStorage));
return Promise.resolve();
}
else {
return Promise.reject('Key could not be removed');
}
}
else {
return Promise.reject('Key was not found in the object');
}
});
}
}
LocalUserStorageService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
LocalUserStorageService.ctorParameters = () => [
{ type: AngularDataContext }
];
export class SessionUserStorageService {
constructor(context) {
this.context = context;
}
getItem(key) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const sessionStorageItem = sessionStorage.getItem('userSessionStorage');
let userSessionStorage = {};
if (sessionStorageItem) {
userSessionStorage = JSON.parse(sessionStorageItem);
}
const finalKey = key.replace(/\//g, '.');
return {
key: key,
value: yield _.get(userSessionStorage, finalKey, null)
};
});
}
setItem(key, value) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const sessionStorageItem = sessionStorage.getItem('userSessionStorage');
let userSessionStorage = {};
if (sessionStorageItem) {
userSessionStorage = JSON.parse(sessionStorageItem);
}
const finalKey = key.replace(/\//g, '.');
if (_.has(userSessionStorage, finalKey) && (value === (yield this.getItem(finalKey)).value)) {
return;
}
_.set(userSessionStorage, finalKey, value);
yield sessionStorage.setItem('userSessionStorage', JSON.stringify(userSessionStorage));
});
}
removeItem(key) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const sessionStorageItem = sessionStorage.getItem('userSessionStorage');
let userSessionStorage = {};
if (sessionStorageItem) {
userSessionStorage = JSON.parse(sessionStorageItem);
}
const finalKey = key.replace(/\//g, '.');
if (_.has(userSessionStorage, finalKey)) {
const result = _.unset(userSessionStorage, finalKey);
if (result) {
sessionStorage.setItem('userSessionStorage', JSON.stringify(userSessionStorage));
return Promise.resolve();
}
else {
return Promise.reject('Key could not be removed');
}
}
else {
return Promise.reject('Key was not found in the object');
}
});
}
}
SessionUserStorageService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
SessionUserStorageService.ctorParameters = () => [
{ type: AngularDataContext }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1zdG9yYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL2NvbW1vbi8iLCJzb3VyY2VzIjpbInNoYXJlZC9zZXJ2aWNlcy9icm93c2VyLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd6QyxNQUFNO0lBRUosWUFBb0IsT0FBMkI7UUFBM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7SUFDL0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxjQUFjO1FBQ1osT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFSyxPQUFPLENBQUMsR0FBVzs7WUFDdkIsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDbEUsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDMUIsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDcEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDekMsT0FBTztnQkFDTCxHQUFHLEVBQUUsR0FBRztnQkFDUixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUM7YUFDckQsQ0FBQztRQUNKLENBQUM7S0FBQTtJQUVLLE9BQU8sQ0FBQyxHQUFXLEVBQUUsS0FBVTs7WUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsa0JBQWtC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QyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7b0JBQ2pGLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUMxQjtxQkFBTTtvQkFDTCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztpQkFDbkQ7YUFDRjtpQkFBTTtnQkFDTCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQzthQUMxRDtRQUNILENBQUM7S0FBQTs7O1lBbkRGLFVBQVU7Ozs7WUFuRUgsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBbmd1bGFyRGF0YUNvbnRleHR9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvY2FsVXNlclN0b3JhZ2VTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCkge1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBsb2NhbFN0b3JhZ2UgaXMgYXZhaWxhYmxlXG4gICAqXG4gICAqL1xuICBoYXNVc2VyU3RvcmFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFsb2NhbFN0b3JhZ2U7XG4gIH1cblxuICBhc3luYyBnZXRJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBsb2NhbFN0b3JhZ2VJdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJMb2NhbFN0b3JhZ2UnKTtcbiAgICBsZXQgdXNlckxvY2FsU3RvcmFnZSA9IHt9O1xuICAgIGlmIChsb2NhbFN0b3JhZ2VJdGVtKSB7XG4gICAgICB1c2VyTG9jYWxTdG9yYWdlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VJdGVtKTtcbiAgICB9XG4gICAgY29uc3QgZmluYWxLZXkgPSBrZXkucmVwbGFjZSgvXFwvL2csICcuJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleToga2V5LFxuICAgICAgdmFsdWU6IGF3YWl0IF8uZ2V0KHVzZXJMb2NhbFN0b3JhZ2UsIGZpbmFsS2V5LCBudWxsKVxuICAgIH07XG4gIH1cblxuICBhc3luYyBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBsb2NhbFN0b3JhZ2VJdGVtID0gYXdhaXQgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJMb2NhbFN0b3JhZ2UnKTtcbiAgICBsZXQgdXNlckxvY2FsU3RvcmFnZSA9IHt9O1xuICAgIGlmIChsb2NhbFN0b3JhZ2VJdGVtKSB7XG4gICAgICB1c2VyTG9jYWxTdG9yYWdlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VJdGVtKTtcbiAgICB9XG4gICAgY29uc3QgZmluYWxLZXkgPSBrZXkucmVwbGFjZSgvXFwvL2csICcuJyk7XG4gICAgaWYgKF8uaGFzKHVzZXJMb2NhbFN0b3JhZ2UsIGZpbmFsS2V5KSAmJiAodmFsdWUgPT09IChhd2FpdCB0aGlzLmdldEl0ZW0oZmluYWxLZXkpKS52YWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXy5zZXQodXNlckxvY2FsU3RvcmFnZSwgZmluYWxLZXksIHZhbHVlKTtcbiAgICBhd2FpdCBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlckxvY2FsU3RvcmFnZScsIEpTT04uc3RyaW5naWZ5KHVzZXJMb2NhbFN0b3JhZ2UpKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGxvY2FsU3RvcmFnZUl0ZW0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlckxvY2FsU3RvcmFnZScpO1xuICAgIGxldCB1c2VyTG9jYWxTdG9yYWdlID0ge307XG4gICAgaWYgKGxvY2FsU3RvcmFnZUl0ZW0pIHtcbiAgICAgIHVzZXJMb2NhbFN0b3JhZ2UgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZUl0ZW0pO1xuICAgIH1cbiAgICBjb25zdCBmaW5hbEtleSA9IGtleS5yZXBsYWNlKC9cXC8vZywgJy4nKTtcbiAgICBpZiAoXy5oYXModXNlckxvY2FsU3RvcmFnZSwgZmluYWxLZXkpKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBfLnVuc2V0KHVzZXJMb2NhbFN0b3JhZ2UsIGZpbmFsS2V5KTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3VzZXJMb2NhbFN0b3JhZ2UnLCBKU09OLnN0cmluZ2lmeSh1c2VyTG9jYWxTdG9yYWdlKSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnS2V5IGNvdWxkIG5vdCBiZSByZW1vdmVkJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnS2V5IHdhcyBub3QgZm91bmQgaW4gdGhlIG9iamVjdCcpO1xuICAgIH1cbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2Vzc2lvblVzZXJTdG9yYWdlU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQpIHtcbiAgfVxuXG4gIGFzeW5jIGdldEl0ZW0oa2V5OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHNlc3Npb25TdG9yYWdlSXRlbSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXJTZXNzaW9uU3RvcmFnZScpO1xuICAgIGxldCB1c2VyU2Vzc2lvblN0b3JhZ2UgPSB7fTtcbiAgICBpZiAoc2Vzc2lvblN0b3JhZ2VJdGVtKSB7XG4gICAgICB1c2VyU2Vzc2lvblN0b3JhZ2UgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlSXRlbSk7XG4gICAgfVxuICAgIGNvbnN0IGZpbmFsS2V5ID0ga2V5LnJlcGxhY2UoL1xcLy9nLCAnLicpO1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIHZhbHVlOiBhd2FpdCBfLmdldCh1c2VyU2Vzc2lvblN0b3JhZ2UsIGZpbmFsS2V5LCBudWxsKVxuICAgIH07XG4gIH1cblxuICBhc3luYyBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzZXNzaW9uU3RvcmFnZUl0ZW0gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyU2Vzc2lvblN0b3JhZ2UnKTtcbiAgICBsZXQgdXNlclNlc3Npb25TdG9yYWdlID0ge307XG4gICAgaWYgKHNlc3Npb25TdG9yYWdlSXRlbSkge1xuICAgICAgdXNlclNlc3Npb25TdG9yYWdlID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZUl0ZW0pO1xuICAgIH1cbiAgICBjb25zdCBmaW5hbEtleSA9IGtleS5yZXBsYWNlKC9cXC8vZywgJy4nKTtcbiAgICBpZiAoXy5oYXModXNlclNlc3Npb25TdG9yYWdlLCBmaW5hbEtleSkgJiYgKHZhbHVlID09PSAoYXdhaXQgdGhpcy5nZXRJdGVtKGZpbmFsS2V5KSkudmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIF8uc2V0KHVzZXJTZXNzaW9uU3RvcmFnZSwgZmluYWxLZXksIHZhbHVlKTtcbiAgICBhd2FpdCBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd1c2VyU2Vzc2lvblN0b3JhZ2UnLCBKU09OLnN0cmluZ2lmeSh1c2VyU2Vzc2lvblN0b3JhZ2UpKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHNlc3Npb25TdG9yYWdlSXRlbSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXJTZXNzaW9uU3RvcmFnZScpO1xuICAgIGxldCB1c2VyU2Vzc2lvblN0b3JhZ2UgPSB7fTtcbiAgICBpZiAoc2Vzc2lvblN0b3JhZ2VJdGVtKSB7XG4gICAgICB1c2VyU2Vzc2lvblN0b3JhZ2UgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlSXRlbSk7XG4gICAgfVxuICAgIGNvbnN0IGZpbmFsS2V5ID0ga2V5LnJlcGxhY2UoL1xcLy9nLCAnLicpO1xuICAgIGlmIChfLmhhcyh1c2VyU2Vzc2lvblN0b3JhZ2UsIGZpbmFsS2V5KSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gXy51bnNldCh1c2VyU2Vzc2lvblN0b3JhZ2UsIGZpbmFsS2V5KTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndXNlclNlc3Npb25TdG9yYWdlJywgSlNPTi5zdHJpbmdpZnkodXNlclNlc3Npb25TdG9yYWdlKSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnS2V5IGNvdWxkIG5vdCBiZSByZW1vdmVkJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnS2V5IHdhcyBub3QgZm91bmQgaW4gdGhlIG9iamVjdCcpO1xuICAgIH1cbiAgfVxufVxuIl19