@esfaenza/extensions 12.2.11 → 12.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/esfaenza-extensions.umd.js +566 -62
- package/bundles/esfaenza-extensions.umd.js.map +1 -1
- package/esfaenza-extensions.d.ts +2 -0
- package/esfaenza-extensions.metadata.json +1 -1
- package/esm2015/esfaenza-extensions.js +3 -1
- package/esm2015/lib/models/CsvHeaders.js +1 -1
- package/esm2015/lib/models/ExtensionsModuleConfig.js +1 -1
- package/esm2015/lib/models/providers/base/BaseStorageProvider.js +25 -0
- package/esm2015/lib/models/providers/implementation/DefaultStorageProvider.js +79 -0
- package/esm2015/lib/models/session/base/BaseSessionRetriever.js +6 -0
- package/esm2015/lib/models/session/implementation/DefaultSessionRetriever.js +26 -0
- package/esm2015/lib/modules/extensions.full.module.js +11 -2
- package/esm2015/lib/services/extensions.exports.service.js +16 -9
- package/esm2015/lib/services/extensions.hashing.service.js +32 -11
- package/esm2015/lib/services/extensions.storage.service.js +58 -40
- package/esm2015/public-api.js +3 -1
- package/fesm2015/esfaenza-extensions.js +238 -59
- package/fesm2015/esfaenza-extensions.js.map +1 -1
- package/lib/models/CsvHeaders.d.ts +4 -0
- package/lib/models/ExtensionsModuleConfig.d.ts +11 -0
- package/lib/models/providers/base/BaseStorageProvider.d.ts +65 -0
- package/lib/models/providers/implementation/DefaultStorageProvider.d.ts +20 -0
- package/lib/models/session/base/BaseSessionRetriever.d.ts +11 -0
- package/lib/models/session/implementation/DefaultSessionRetriever.d.ts +18 -0
- package/lib/modules/extensions.full.module.d.ts +2 -0
- package/lib/services/extensions.hashing.service.d.ts +11 -3
- package/lib/services/extensions.storage.service.d.ts +29 -16
- package/package.json +5 -5
- package/public-api.d.ts +2 -0
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
// Angular
|
|
2
2
|
import { Injectable, Inject, Optional } from "@angular/core";
|
|
3
|
+
import { BaseStorageProvider } from "../models/providers/base/BaseStorageProvider";
|
|
4
|
+
import { BaseSessionRetriever } from "../models/session/base/BaseSessionRetriever";
|
|
3
5
|
// Modelli
|
|
4
6
|
import { APPSEARCH_PREFIX } from '../tokens';
|
|
7
|
+
import { tap, first } from "rxjs/operators";
|
|
5
8
|
/**
|
|
6
|
-
* Service che fornisce funzionalità di base per storicizzazione e recupero oggetti
|
|
9
|
+
* Service che fornisce funzionalità di base per storicizzazione e recupero oggetti dallo Storage Locale
|
|
10
|
+
*
|
|
11
|
+
* N.B: In ogni chiamata è presente l'operatore rxjs **first()** per far sì che a prescindere dall'implementazione utente/default gli
|
|
12
|
+
* observable effettuino l'unsubscribe automaticamente terminata la prima operazine
|
|
7
13
|
*/
|
|
8
14
|
export class StorageService {
|
|
9
15
|
/**
|
|
@@ -11,8 +17,10 @@ export class StorageService {
|
|
|
11
17
|
*
|
|
12
18
|
* @ignore
|
|
13
19
|
*/
|
|
14
|
-
constructor(APPSEARCH_PREFIX) {
|
|
20
|
+
constructor(APPSEARCH_PREFIX, _session, _storage) {
|
|
15
21
|
this.APPSEARCH_PREFIX = APPSEARCH_PREFIX;
|
|
22
|
+
this._session = _session;
|
|
23
|
+
this._storage = _storage;
|
|
16
24
|
}
|
|
17
25
|
/**
|
|
18
26
|
* Inserisce un oggetto che funga da contenitore di oggetti nel local storage, ripulendone gli oggetti (supponendo che sia una view di ricerca) e marcandolo come
|
|
@@ -21,62 +29,72 @@ export class StorageService {
|
|
|
21
29
|
* @param {string} storeName Chiave del localStorage in cui storicizzare l'oggetto **itemsContainer**
|
|
22
30
|
* @param {{ items: any[] }} itemsContainer Oggetto da storicizzare
|
|
23
31
|
*/
|
|
24
|
-
setItem(storeName,
|
|
25
|
-
var
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
catch (e) {
|
|
34
|
-
console.warn("Spazio del local Storage insufficiente per salvare la view. Fallback a cleanup e salvataggio");
|
|
35
|
-
//Pulisco tutte le view con nome che parta per "Hot"
|
|
36
|
-
for (let key in localStorage) {
|
|
37
|
-
if (localStorage.hasOwnProperty(key) && key.startsWith((_a = this.APPSEARCH_PREFIX) !== null && _a !== void 0 ? _a : 'Hot'))
|
|
38
|
-
delete localStorage[key];
|
|
39
|
-
}
|
|
40
|
-
try {
|
|
41
|
-
localStorage.setItem(storeName, JSON.stringify(item));
|
|
42
|
-
}
|
|
43
|
-
catch (e) {
|
|
44
|
-
console.error("Spazio del local Storage insufficiente per salvare i risultati di ricerca con solo filtri. Non salvo nulla");
|
|
45
|
-
}
|
|
32
|
+
setItem(storeName, item) {
|
|
33
|
+
var finalItem;
|
|
34
|
+
//Se sto salvando un oggetto con "items" e "page" vuol dire che è un appsearch, la ripulisco
|
|
35
|
+
if (item.items && item.page) {
|
|
36
|
+
finalItem = JSON.parse(JSON.stringify(item));
|
|
37
|
+
finalItem.items = [];
|
|
38
|
+
finalItem.savedstate = true;
|
|
39
|
+
finalItem.savedprefix = this.APPSEARCH_PREFIX || 'Hot';
|
|
46
40
|
}
|
|
41
|
+
else
|
|
42
|
+
finalItem = item;
|
|
43
|
+
return this._storage.setItem(storeName, finalItem).pipe(first(), tap(res => {
|
|
44
|
+
if (res == false)
|
|
45
|
+
console.error("Impossibile effettuare il salvataggio dell'oggetto all'interno dello Storage Locale per la chiave " + storeName);
|
|
46
|
+
}));
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
*
|
|
49
|
+
* Recupera un oggetto dallo Storage Locale
|
|
50
|
+
*
|
|
51
|
+
* @param {string} storeName Chiave del localStorage da cui recuperare l'oggetto
|
|
50
52
|
*
|
|
51
|
-
* @
|
|
52
|
-
* @param {any} item Oggetto da storicizzare
|
|
53
|
+
* @returns {any} Oggetto recuperato e deserializzato
|
|
53
54
|
*/
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
getItem(storeName) {
|
|
56
|
+
return this._storage.getItem(storeName).pipe(first(), tap(res => {
|
|
57
|
+
if (res == null)
|
|
58
|
+
console.warn("Impossibile ottenere l'oggetto salvato con chiave " + storeName);
|
|
59
|
+
}));
|
|
56
60
|
}
|
|
57
61
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* @param {string} storeName Chiave del localStorage da cui recuperare l'oggetto
|
|
62
|
+
* Ripulisce lo Storage Locale
|
|
61
63
|
*
|
|
62
|
-
* @
|
|
64
|
+
* @param {string} storeName Chiave del localStorage da ripulire
|
|
63
65
|
*/
|
|
64
|
-
|
|
65
|
-
return
|
|
66
|
+
removeItem(storeName) {
|
|
67
|
+
return this._storage.removeItem(storeName).pipe(first(), tap(res => {
|
|
68
|
+
if (res == false)
|
|
69
|
+
console.warn("Impossibile rimuovere l'oggetto salvato con chiave " + storeName);
|
|
70
|
+
}));
|
|
66
71
|
}
|
|
67
72
|
/**
|
|
68
|
-
* Ripulisce
|
|
73
|
+
* Ripulisce lo Storage Locale di ogni cosa salvata
|
|
69
74
|
*
|
|
70
75
|
* @param {string} storeName Chiave del localStorage da ripulire
|
|
71
76
|
*/
|
|
72
|
-
clear(
|
|
73
|
-
|
|
77
|
+
clear() {
|
|
78
|
+
return this._storage.clear().pipe(first(), tap(res => {
|
|
79
|
+
if (res == false)
|
|
80
|
+
console.warn("Impossibile ripulire lo Storage Locale");
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Restituisce tutte le chiavi-valore associate alla sessione corrente
|
|
85
|
+
*
|
|
86
|
+
* @returns {Observable<{ [index: string]: string; }>} Risultato della query
|
|
87
|
+
*/
|
|
88
|
+
getAll() {
|
|
89
|
+
return this._storage.getAll().pipe(first());
|
|
74
90
|
}
|
|
75
91
|
}
|
|
76
92
|
StorageService.decorators = [
|
|
77
93
|
{ type: Injectable }
|
|
78
94
|
];
|
|
79
95
|
StorageService.ctorParameters = () => [
|
|
80
|
-
{ type: String, decorators: [{ type: Optional }, { type: Inject, args: [APPSEARCH_PREFIX,] }] }
|
|
96
|
+
{ type: String, decorators: [{ type: Optional }, { type: Inject, args: [APPSEARCH_PREFIX,] }] },
|
|
97
|
+
{ type: BaseSessionRetriever },
|
|
98
|
+
{ type: BaseStorageProvider }
|
|
81
99
|
];
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5zdG9yYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL3NyYy9saWIvc2VydmljZXMvZXh0ZW5zaW9ucy5zdG9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVuRixVQUFVO0FBQ1YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSTdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUM7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sY0FBYztJQUV2Qjs7OztPQUlHO0lBQ0gsWUFBMEQsZ0JBQXdCLEVBQVUsUUFBOEIsRUFBVSxRQUE2QjtRQUF2RyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFzQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQXFCO0lBQUksQ0FBQztJQUV0Szs7Ozs7O09BTUc7SUFDSSxPQUFPLENBQUksU0FBaUIsRUFBRSxJQUFPO1FBQ3hDLElBQUksU0FBYyxDQUFDO1FBQ25CLDRGQUE0RjtRQUM1RixJQUFVLElBQUssQ0FBQyxLQUFLLElBQVUsSUFBSyxDQUFDLElBQUksRUFBRTtZQUN2QyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDN0MsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDckIsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdEIsU0FBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDO1NBQ2pFOztZQUVHLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN2RSxJQUFJLEdBQUcsSUFBSSxLQUFLO2dCQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0dBQW9HLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDeEksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxPQUFPLENBQUksU0FBaUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9ELElBQUksR0FBRyxJQUFJLElBQUk7Z0JBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxvREFBb0QsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUN2RixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxVQUFVLENBQUMsU0FBaUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9ELElBQUksR0FBRyxJQUFJLEtBQUs7Z0JBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxxREFBcUQsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakQsSUFBSSxHQUFHLElBQUksS0FBSztnQkFDWixPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTTtRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDOzs7WUFoRkosVUFBVTs7O3lDQVFNLFFBQVEsWUFBSSxNQUFNLFNBQUMsZ0JBQWdCO1lBdkIzQyxvQkFBb0I7WUFEcEIsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VQcm92aWRlciB9IGZyb20gXCIuLi9tb2RlbHMvcHJvdmlkZXJzL2Jhc2UvQmFzZVN0b3JhZ2VQcm92aWRlclwiO1xyXG5pbXBvcnQgeyBCYXNlU2Vzc2lvblJldHJpZXZlciB9IGZyb20gXCIuLi9tb2RlbHMvc2Vzc2lvbi9iYXNlL0Jhc2VTZXNzaW9uUmV0cmlldmVyXCI7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEFQUFNFQVJDSF9QUkVGSVggfSBmcm9tICcuLi90b2tlbnMnO1xyXG5cclxuLy8gUlhKU1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFwLCBmaXJzdCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgY2hlIGZvcm5pc2NlIGZ1bnppb25hbGl0w6AgZGkgYmFzZSBwZXIgc3RvcmljaXp6YXppb25lIGUgcmVjdXBlcm8gb2dnZXR0aSBkYWxsbyBTdG9yYWdlIExvY2FsZVxyXG4gKiBcclxuICogTi5COiBJbiBvZ25pIGNoaWFtYXRhIMOoIHByZXNlbnRlIGwnb3BlcmF0b3JlIHJ4anMgKipmaXJzdCgpKiogcGVyIGZhciBzw6wgY2hlIGEgcHJlc2NpbmRlcmUgZGFsbCdpbXBsZW1lbnRhemlvbmUgdXRlbnRlL2RlZmF1bHQgZ2xpIFxyXG4gKiBvYnNlcnZhYmxlIGVmZmV0dHVpbm8gbCd1bnN1YnNjcmliZSBhdXRvbWF0aWNhbWVudGUgdGVybWluYXRhIGxhIHByaW1hIG9wZXJhemluZVxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU3RvcmFnZVNlcnZpY2Uge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29zdHJ1dHRvcmVcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KEFQUFNFQVJDSF9QUkVGSVgpIHByaXZhdGUgQVBQU0VBUkNIX1BSRUZJWDogc3RyaW5nLCBwcml2YXRlIF9zZXNzaW9uOiBCYXNlU2Vzc2lvblJldHJpZXZlciwgcHJpdmF0ZSBfc3RvcmFnZTogQmFzZVN0b3JhZ2VQcm92aWRlcikgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcmlzY2UgdW4gb2dnZXR0byBjaGUgZnVuZ2EgZGEgY29udGVuaXRvcmUgZGkgb2dnZXR0aSBuZWwgbG9jYWwgc3RvcmFnZSwgcmlwdWxlbmRvbmUgZ2xpIG9nZ2V0dGkgKHN1cHBvbmVuZG8gY2hlIHNpYSB1bmEgdmlldyBkaSByaWNlcmNhKSBlIG1hcmNhbmRvbG8gY29tZSBcclxuICAgICAqIHNhbHZhdG8sIGluIG1vZG8gY2hlIHF1YW5kbyB2aWVuZSByZWN1cGVyYXRvIGlsIHNpc3RlbWEgbm9uIHBlbnNpIGNoZSBzaWEgdW4gb2dnZXR0byB2dW90byBtYSBjaGUgc2FwcGlhIGNoZSBnbGkgb2dnZXR0aSBzb24gc3RhdGkgcmlwdWxpdGkgcGVyIHJpc3Bhcm1pYXJlIHNwYXppb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RvcmVOYW1lIENoaWF2ZSBkZWwgbG9jYWxTdG9yYWdlIGluIGN1aSBzdG9yaWNpenphcmUgbCdvZ2dldHRvICoqaXRlbXNDb250YWluZXIqKlxyXG4gICAgICogQHBhcmFtIHt7IGl0ZW1zOiBhbnlbXSB9fSBpdGVtc0NvbnRhaW5lciBPZ2dldHRvIGRhIHN0b3JpY2l6emFyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0SXRlbTxUPihzdG9yZU5hbWU6IHN0cmluZywgaXRlbTogVCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHZhciBmaW5hbEl0ZW06IGFueTtcclxuICAgICAgICAvL1NlIHN0byBzYWx2YW5kbyB1biBvZ2dldHRvIGNvbiBcIml0ZW1zXCIgZSBcInBhZ2VcIiB2dW9sIGRpcmUgY2hlIMOoIHVuIGFwcHNlYXJjaCwgbGEgcmlwdWxpc2NvXHJcbiAgICAgICAgaWYgKCg8YW55Pml0ZW0pLml0ZW1zICYmICg8YW55Pml0ZW0pLnBhZ2UpIHtcclxuICAgICAgICAgICAgZmluYWxJdGVtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSk7XHJcbiAgICAgICAgICAgIGZpbmFsSXRlbS5pdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICBmaW5hbEl0ZW0uc2F2ZWRzdGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICg8YW55PmZpbmFsSXRlbSkuc2F2ZWRwcmVmaXggPSB0aGlzLkFQUFNFQVJDSF9QUkVGSVggfHwgJ0hvdCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgZmluYWxJdGVtID0gaXRlbTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2Uuc2V0SXRlbShzdG9yZU5hbWUsIGZpbmFsSXRlbSkucGlwZShmaXJzdCgpLCB0YXAocmVzID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcyA9PSBmYWxzZSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbXBvc3NpYmlsZSBlZmZldHR1YXJlIGlsIHNhbHZhdGFnZ2lvIGRlbGwnb2dnZXR0byBhbGwnaW50ZXJubyBkZWxsbyBTdG9yYWdlIExvY2FsZSBwZXIgbGEgY2hpYXZlIFwiICsgc3RvcmVOYW1lKTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWN1cGVyYSB1biBvZ2dldHRvIGRhbGxvIFN0b3JhZ2UgTG9jYWxlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdG9yZU5hbWUgQ2hpYXZlIGRlbCBsb2NhbFN0b3JhZ2UgZGEgY3VpIHJlY3VwZXJhcmUgbCdvZ2dldHRvXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHthbnl9IE9nZ2V0dG8gcmVjdXBlcmF0byBlIGRlc2VyaWFsaXp6YXRvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRJdGVtPFQ+KHN0b3JlTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2UuZ2V0SXRlbTxUPihzdG9yZU5hbWUpLnBpcGUoZmlyc3QoKSwgdGFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMgPT0gbnVsbClcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkltcG9zc2liaWxlIG90dGVuZXJlIGwnb2dnZXR0byBzYWx2YXRvIGNvbiBjaGlhdmUgXCIgKyBzdG9yZU5hbWUpO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJpcHVsaXNjZSBsbyBTdG9yYWdlIExvY2FsZSBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0b3JlTmFtZSBDaGlhdmUgZGVsIGxvY2FsU3RvcmFnZSBkYSByaXB1bGlyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVtb3ZlSXRlbShzdG9yZU5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdG9yYWdlLnJlbW92ZUl0ZW0oc3RvcmVOYW1lKS5waXBlKGZpcnN0KCksIHRhcChyZXMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzID09IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGwnb2dnZXR0byBzYWx2YXRvIGNvbiBjaGlhdmUgXCIgKyBzdG9yZU5hbWUpO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJpcHVsaXNjZSBsbyBTdG9yYWdlIExvY2FsZSBkaSBvZ25pIGNvc2Egc2FsdmF0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RvcmVOYW1lIENoaWF2ZSBkZWwgbG9jYWxTdG9yYWdlIGRhIHJpcHVsaXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjbGVhcigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RvcmFnZS5jbGVhcigpLnBpcGUoZmlyc3QoKSwgdGFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMgPT0gZmFsc2UpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJJbXBvc3NpYmlsZSByaXB1bGlyZSBsbyBTdG9yYWdlIExvY2FsZVwiKTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN0aXR1aXNjZSB0dXR0ZSBsZSBjaGlhdmktdmFsb3JlIGFzc29jaWF0ZSBhbGxhIHNlc3Npb25lIGNvcnJlbnRlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPHsgW2luZGV4OiBzdHJpbmddOiBzdHJpbmc7IH0+fSBSaXN1bHRhdG8gZGVsbGEgcXVlcnlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFsbCgpOiBPYnNlcnZhYmxlPHsgW2luZGV4OiBzdHJpbmddOiBzdHJpbmc7IH0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RvcmFnZS5nZXRBbGwoKS5waXBlKGZpcnN0KCkpO1xyXG4gICAgfVxyXG59Il19
|
package/esm2015/public-api.js
CHANGED
|
@@ -14,4 +14,6 @@ export * from './lib/tokens';
|
|
|
14
14
|
export * from './lib/models/CallResult';
|
|
15
15
|
export * from './lib/models/CsvHeaders';
|
|
16
16
|
export * from './lib/models/GenericItem';
|
|
17
|
-
|
|
17
|
+
export * from './lib/models/providers/base/BaseStorageProvider';
|
|
18
|
+
export * from './lib/models/session/base/BaseSessionRetriever';
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsZ0RBQWdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgZXh0ZW5zaW9uc1xyXG4gKi9cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9leHRlbnNpb25zLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvZXh0ZW5zaW9ucy5mdWxsLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2V4dGVuc2lvbnMuZGF0ZXMuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2V4dGVuc2lvbnMuZXhwb3J0cy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZXh0ZW5zaW9ucy5jbGlwYm9hcmQuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2V4dGVuc2lvbnMuaGFzaGluZy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZXh0ZW5zaW9ucy5tZXNzYWdlcy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZXh0ZW5zaW9ucy51dGlsaXRpZXMuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2V4dGVuc2lvbnMuc3RvcmFnZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9rZW5zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL0NhbGxSZXN1bHQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvQ3N2SGVhZGVycyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9HZW5lcmljSXRlbSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9wcm92aWRlcnMvYmFzZS9CYXNlU3RvcmFnZVByb3ZpZGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3Nlc3Npb24vYmFzZS9CYXNlU2Vzc2lvblJldHJpZXZlcic7Il19
|
|
@@ -2,6 +2,8 @@ import { InjectionToken, NgModule, Injectable, Optional, Inject } from '@angular
|
|
|
2
2
|
import { ToastrService } from 'ngx-toastr';
|
|
3
3
|
import swal from 'sweetalert2';
|
|
4
4
|
import { Deserialize } from 'cerialize';
|
|
5
|
+
import { first, tap } from 'rxjs/operators';
|
|
6
|
+
import { of } from 'rxjs';
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* Token che identifica il locale da utilizzare per questa libreria, sono supportati i locali 'it-IT' ed 'en-US'
|
|
@@ -980,7 +982,7 @@ class ExportService {
|
|
|
980
982
|
columns.forEach(t => {
|
|
981
983
|
var propValue = obj.properties[t.key];
|
|
982
984
|
Object.defineProperty(obj, t.key + "_exp", { value: propValue, writable: false, enumerable: true });
|
|
983
|
-
headers.push({ label: t.label, key: t.key + "_exp", order: t.order });
|
|
985
|
+
headers.push({ label: t.label, key: t.key + "_exp", order: t.order, type: t.type });
|
|
984
986
|
});
|
|
985
987
|
//Tirati fuori tutti gli header faccio sort sull'ordinamento
|
|
986
988
|
return headers.sort((a, b) => { return a.order - b.order; });
|
|
@@ -1033,7 +1035,7 @@ class ExportService {
|
|
|
1033
1035
|
// Se è un formato data mi assicuro di non stampare mai una data 00:00:00 altrimenti in esportazione viene uno schifo
|
|
1034
1036
|
var val = obj[prop] ? this.dates.trimSeconds(obj[prop].toString()) : "";
|
|
1035
1037
|
Object.defineProperty(obj, prop + "_nofmt", { value: val, writable: false, enumerable: true });
|
|
1036
|
-
headers.push({ label: lbl ? lbl : prop + "_nofmt", key: prop + "_nofmt", order: order });
|
|
1038
|
+
headers.push({ label: lbl ? lbl : prop + "_nofmt", key: prop + "_nofmt", order: order, type: "string" });
|
|
1037
1039
|
}
|
|
1038
1040
|
else {
|
|
1039
1041
|
// Caso formato numerico
|
|
@@ -1045,7 +1047,7 @@ class ExportService {
|
|
|
1045
1047
|
// Il singolo punto che c'è, se presente (separatore decimali) lo trasformo in virgola
|
|
1046
1048
|
let valConverted = val.replace(".", ",");
|
|
1047
1049
|
Object.defineProperty(obj, prop + "_fmt", { value: valConverted, writable: false, enumerable: true });
|
|
1048
|
-
headers.push({ label: lbl ? lbl : prop + "_fmt", key: prop + "_fmt", order: order });
|
|
1050
|
+
headers.push({ label: lbl ? lbl : prop + "_fmt", key: prop + "_fmt", order: order, type: "number" });
|
|
1049
1051
|
}
|
|
1050
1052
|
else {
|
|
1051
1053
|
// Se ho un formato data trasformo in dayjs, formatto ed esporto
|
|
@@ -1053,7 +1055,7 @@ class ExportService {
|
|
|
1053
1055
|
// Se non funziona provo a definirgli la formattazione standard del metering per quel linguaggio
|
|
1054
1056
|
let val = this.dates.getFormatted(obj[prop], format.length <= 10, false);
|
|
1055
1057
|
Object.defineProperty(obj, prop + "_fmt", { value: val !== null && val !== void 0 ? val : "", writable: false, enumerable: true });
|
|
1056
|
-
headers.push({ label: lbl ? lbl : prop + "_fmt", key: prop + "_fmt", order: order });
|
|
1058
|
+
headers.push({ label: lbl ? lbl : prop + "_fmt", key: prop + "_fmt", order: order, type: "date" });
|
|
1057
1059
|
}
|
|
1058
1060
|
}
|
|
1059
1061
|
}
|
|
@@ -1086,16 +1088,19 @@ class ExportService {
|
|
|
1086
1088
|
let order = obj[prop + csvOrdPrefix];
|
|
1087
1089
|
//Se per questa proprietà ho un formato lo applico
|
|
1088
1090
|
let format = obj[prop + csvFormatPrefix];
|
|
1091
|
+
let type = "string";
|
|
1089
1092
|
if (format == "F") {
|
|
1090
1093
|
let val = value.toString();
|
|
1091
1094
|
val = val.replace(/,/, "");
|
|
1092
1095
|
value = val.replace(".", ",");
|
|
1096
|
+
type = "number";
|
|
1093
1097
|
}
|
|
1094
1098
|
else if (format) {
|
|
1095
1099
|
value = this.dates.getFormatted(value, format.length <= 10, false);
|
|
1100
|
+
type = "date";
|
|
1096
1101
|
}
|
|
1097
1102
|
Object.defineProperty(obj, prop, { value: value, writable: false, enumerable: true });
|
|
1098
|
-
headers.push({ label: lbl ? lbl : prop, key: prop, order: order });
|
|
1103
|
+
headers.push({ label: lbl ? lbl : prop, key: prop, order: order, type: type });
|
|
1099
1104
|
}
|
|
1100
1105
|
/**
|
|
1101
1106
|
* Setup per l'esportazione di una lista di valori pivottati dinamicamente:
|
|
@@ -1137,15 +1142,19 @@ class ExportService {
|
|
|
1137
1142
|
tmpRes = JSON.parse(JSON.stringify(listitem));
|
|
1138
1143
|
jumps.forEach(pp => { tmpRes = tmpRes[pp]; });
|
|
1139
1144
|
let value = tmpRes;
|
|
1145
|
+
let type = "string";
|
|
1140
1146
|
if (valueformat == "F") {
|
|
1141
1147
|
let val = value != null ? value.toString() : "";
|
|
1142
1148
|
val = val.replace(/,/, "");
|
|
1143
1149
|
value = val.replace(".", ",");
|
|
1150
|
+
type = "number";
|
|
1144
1151
|
}
|
|
1145
|
-
else if (valueformat)
|
|
1152
|
+
else if (valueformat) {
|
|
1146
1153
|
value = this.dates.getFormatted(obj[prop], valueformat.length <= 10, false);
|
|
1154
|
+
type = "date";
|
|
1155
|
+
}
|
|
1147
1156
|
Object.defineProperty(obj, prop + idx, { value: value, writable: false });
|
|
1148
|
-
headers.push({ label: header, key: prop + idx, order: order + idx });
|
|
1157
|
+
headers.push({ label: header, key: prop + idx, order: order + idx, type: type });
|
|
1149
1158
|
}
|
|
1150
1159
|
}
|
|
1151
1160
|
/**
|
|
@@ -1192,7 +1201,7 @@ class ExportService {
|
|
|
1192
1201
|
let value = tmpRes;
|
|
1193
1202
|
let propname = prop + idx.toString() + idxinternal.toString();
|
|
1194
1203
|
Object.defineProperty(obj, propname, { value: value, writable: false });
|
|
1195
|
-
headers.push({ label: header + " " + desc, key: propname, order: order + idx });
|
|
1204
|
+
headers.push({ label: header + " " + desc, key: propname, order: order + idx, type: 'string' });
|
|
1196
1205
|
});
|
|
1197
1206
|
}
|
|
1198
1207
|
}
|
|
@@ -1225,8 +1234,11 @@ class HashingService {
|
|
|
1225
1234
|
/**
|
|
1226
1235
|
* Blacklist dei tipi da ignorare quando si effettua l'hashing degli oggetti
|
|
1227
1236
|
*/
|
|
1228
|
-
this.
|
|
1229
|
-
"
|
|
1237
|
+
this.objBlacklist = {
|
|
1238
|
+
"NgForm": true, "ElementRef": true, "ExtensionsService": true, "ToastrService": true, "LocaleService": true, "AppState": true, "Router": true,
|
|
1239
|
+
"ActivatedRoute": true, "HTTPService": true, "Location": true, "CanvasComponent": true, "ModalDirective": true, "ChangeDetectorRef": true,
|
|
1240
|
+
"DateService": true, "EventEmitter": true, "ViewRef_": true, "Subscriber": true, "ItemLocalization": true
|
|
1241
|
+
};
|
|
1230
1242
|
/**
|
|
1231
1243
|
* Array dei possibili valori di un simbolo esadecimale
|
|
1232
1244
|
*/
|
|
@@ -1250,12 +1262,30 @@ class HashingService {
|
|
|
1250
1262
|
* @param {number} level Livello di ricorsione nel caso venga effettuato l'hash di un oggetto che contiene altri oggetti
|
|
1251
1263
|
* @param {boolean} navigateFullDepth Indica se navigare l'oggetto per l'intera lunghezza. In caso contrario si ferma al secondo livello
|
|
1252
1264
|
*
|
|
1253
|
-
* @returns {string}
|
|
1265
|
+
* @returns {string} Hash generato per l'oggetto in questione
|
|
1254
1266
|
*/
|
|
1255
|
-
hashObject(o, level = 0, navigateFullDepth = false) {
|
|
1267
|
+
hashObject(o, level = 0, navigateFullDepth = false, precise = false) {
|
|
1256
1268
|
var strDef = this.stringify(o, level, navigateFullDepth);
|
|
1257
|
-
var
|
|
1258
|
-
return
|
|
1269
|
+
var hash = precise ? this.md5(strDef) : this.simpleHash(strDef);
|
|
1270
|
+
return hash;
|
|
1271
|
+
}
|
|
1272
|
+
/**
|
|
1273
|
+
* Hash più semplice e più veloce dell'md5, ma meno sicuro
|
|
1274
|
+
*
|
|
1275
|
+
* Vedi https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript
|
|
1276
|
+
*
|
|
1277
|
+
* @param {string} str Stringa di cui calcolare l'hash
|
|
1278
|
+
*/
|
|
1279
|
+
simpleHash(str, seed = 0) {
|
|
1280
|
+
let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
|
|
1281
|
+
for (let i = 0, ch; i < str.length; i++) {
|
|
1282
|
+
ch = str.charCodeAt(i);
|
|
1283
|
+
h1 = Math.imul(h1 ^ ch, 2654435761);
|
|
1284
|
+
h2 = Math.imul(h2 ^ ch, 1597334677);
|
|
1285
|
+
}
|
|
1286
|
+
h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
|
|
1287
|
+
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
|
|
1288
|
+
return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString();
|
|
1259
1289
|
}
|
|
1260
1290
|
/**
|
|
1261
1291
|
* Genera una stringa che identifica univocamente l'oggetto in questione
|
|
@@ -1273,14 +1303,14 @@ class HashingService {
|
|
|
1273
1303
|
if (o === false)
|
|
1274
1304
|
return "f";
|
|
1275
1305
|
if (o instanceof Date)
|
|
1276
|
-
return
|
|
1306
|
+
return 'd:' + o.valueOf().toString();
|
|
1277
1307
|
i = typeof o;
|
|
1278
1308
|
if (i === "string")
|
|
1279
|
-
return "s:" + o
|
|
1309
|
+
return "s:" + o;
|
|
1280
1310
|
if (i === "number")
|
|
1281
1311
|
return "n:" + o;
|
|
1282
1312
|
if (o instanceof Function)
|
|
1283
|
-
return "m:" + o.toString()
|
|
1313
|
+
return "m:" + o.toString();
|
|
1284
1314
|
if (o instanceof Array) {
|
|
1285
1315
|
r = [];
|
|
1286
1316
|
for (i = 0; i < o.length; i++) {
|
|
@@ -1294,7 +1324,7 @@ class HashingService {
|
|
|
1294
1324
|
//Se è oggetto, escludo tutti quelli di sistema/inutili
|
|
1295
1325
|
if (o) {
|
|
1296
1326
|
var name = o.__proto__.constructor.name;
|
|
1297
|
-
if (this.
|
|
1327
|
+
if (!this.objBlacklist[name]) {
|
|
1298
1328
|
for (i in o) {
|
|
1299
1329
|
if (o.hasOwnProperty(i) && (level <= 2 || navigateFullDepth)) {
|
|
1300
1330
|
let res = this.stringify(o[i], level + 1, navigateFullDepth);
|
|
@@ -1707,9 +1737,43 @@ UtilityService.decorators = [
|
|
|
1707
1737
|
{ type: Injectable }
|
|
1708
1738
|
];
|
|
1709
1739
|
|
|
1740
|
+
/**
|
|
1741
|
+
* Classe che gestisce la scrittura delle informazioni nello store locale.
|
|
1742
|
+
* Questo store locale potrebbe essere il localStorage (implementazione di default data dal **DefaultStorageProvider**),
|
|
1743
|
+
* oppure un'implementazione custom facente capo a un DB esterno.
|
|
1744
|
+
*
|
|
1745
|
+
* In questo ultimo caso però sarà necessario implementarsi un proprio **BaseSessionRetriever**
|
|
1746
|
+
* che generi una chiave univoca di sessione su cui tutte le operazioni di questa classe saranno eseguite
|
|
1747
|
+
*/
|
|
1748
|
+
class BaseStorageProvider {
|
|
1749
|
+
/** @ignore Costruttore */
|
|
1750
|
+
constructor(session) {
|
|
1751
|
+
this.session = session;
|
|
1752
|
+
}
|
|
1753
|
+
/**
|
|
1754
|
+
* Ottiene la chiave "Reale" da utilizzare per la persistenza di una chiave generica
|
|
1755
|
+
*
|
|
1756
|
+
* @param {string} key Chiave da storicizzare
|
|
1757
|
+
*
|
|
1758
|
+
* @returns {string} Unione fra l'identificativo della sessione e la chiave specificata
|
|
1759
|
+
*/
|
|
1760
|
+
getKey(key) {
|
|
1761
|
+
return this.session.getSessionKey() + "§" + key + "§";
|
|
1762
|
+
}
|
|
1763
|
+
}
|
|
1764
|
+
|
|
1765
|
+
/**
|
|
1766
|
+
* Classe astratta che si occupa di recuperare l'Id sessione univoco per applicazione ed utente collegato
|
|
1767
|
+
*/
|
|
1768
|
+
class BaseSessionRetriever {
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1710
1771
|
// Angular
|
|
1711
1772
|
/**
|
|
1712
|
-
* Service che fornisce funzionalità di base per storicizzazione e recupero oggetti
|
|
1773
|
+
* Service che fornisce funzionalità di base per storicizzazione e recupero oggetti dallo Storage Locale
|
|
1774
|
+
*
|
|
1775
|
+
* N.B: In ogni chiamata è presente l'operatore rxjs **first()** per far sì che a prescindere dall'implementazione utente/default gli
|
|
1776
|
+
* observable effettuino l'unsubscribe automaticamente terminata la prima operazine
|
|
1713
1777
|
*/
|
|
1714
1778
|
class StorageService {
|
|
1715
1779
|
/**
|
|
@@ -1717,8 +1781,10 @@ class StorageService {
|
|
|
1717
1781
|
*
|
|
1718
1782
|
* @ignore
|
|
1719
1783
|
*/
|
|
1720
|
-
constructor(APPSEARCH_PREFIX) {
|
|
1784
|
+
constructor(APPSEARCH_PREFIX, _session, _storage) {
|
|
1721
1785
|
this.APPSEARCH_PREFIX = APPSEARCH_PREFIX;
|
|
1786
|
+
this._session = _session;
|
|
1787
|
+
this._storage = _storage;
|
|
1722
1788
|
}
|
|
1723
1789
|
/**
|
|
1724
1790
|
* Inserisce un oggetto che funga da contenitore di oggetti nel local storage, ripulendone gli oggetti (supponendo che sia una view di ricerca) e marcandolo come
|
|
@@ -1727,63 +1793,172 @@ class StorageService {
|
|
|
1727
1793
|
* @param {string} storeName Chiave del localStorage in cui storicizzare l'oggetto **itemsContainer**
|
|
1728
1794
|
* @param {{ items: any[] }} itemsContainer Oggetto da storicizzare
|
|
1729
1795
|
*/
|
|
1730
|
-
setItem(storeName,
|
|
1731
|
-
var
|
|
1732
|
-
//
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
}
|
|
1739
|
-
catch (e) {
|
|
1740
|
-
console.warn("Spazio del local Storage insufficiente per salvare la view. Fallback a cleanup e salvataggio");
|
|
1741
|
-
//Pulisco tutte le view con nome che parta per "Hot"
|
|
1742
|
-
for (let key in localStorage) {
|
|
1743
|
-
if (localStorage.hasOwnProperty(key) && key.startsWith((_a = this.APPSEARCH_PREFIX) !== null && _a !== void 0 ? _a : 'Hot'))
|
|
1744
|
-
delete localStorage[key];
|
|
1745
|
-
}
|
|
1746
|
-
try {
|
|
1747
|
-
localStorage.setItem(storeName, JSON.stringify(item));
|
|
1748
|
-
}
|
|
1749
|
-
catch (e) {
|
|
1750
|
-
console.error("Spazio del local Storage insufficiente per salvare i risultati di ricerca con solo filtri. Non salvo nulla");
|
|
1751
|
-
}
|
|
1796
|
+
setItem(storeName, item) {
|
|
1797
|
+
var finalItem;
|
|
1798
|
+
//Se sto salvando un oggetto con "items" e "page" vuol dire che è un appsearch, la ripulisco
|
|
1799
|
+
if (item.items && item.page) {
|
|
1800
|
+
finalItem = JSON.parse(JSON.stringify(item));
|
|
1801
|
+
finalItem.items = [];
|
|
1802
|
+
finalItem.savedstate = true;
|
|
1803
|
+
finalItem.savedprefix = this.APPSEARCH_PREFIX || 'Hot';
|
|
1752
1804
|
}
|
|
1805
|
+
else
|
|
1806
|
+
finalItem = item;
|
|
1807
|
+
return this._storage.setItem(storeName, finalItem).pipe(first(), tap(res => {
|
|
1808
|
+
if (res == false)
|
|
1809
|
+
console.error("Impossibile effettuare il salvataggio dell'oggetto all'interno dello Storage Locale per la chiave " + storeName);
|
|
1810
|
+
}));
|
|
1753
1811
|
}
|
|
1754
1812
|
/**
|
|
1755
|
-
*
|
|
1813
|
+
* Recupera un oggetto dallo Storage Locale
|
|
1814
|
+
*
|
|
1815
|
+
* @param {string} storeName Chiave del localStorage da cui recuperare l'oggetto
|
|
1756
1816
|
*
|
|
1757
|
-
* @
|
|
1758
|
-
* @param {any} item Oggetto da storicizzare
|
|
1817
|
+
* @returns {any} Oggetto recuperato e deserializzato
|
|
1759
1818
|
*/
|
|
1760
|
-
|
|
1761
|
-
|
|
1819
|
+
getItem(storeName) {
|
|
1820
|
+
return this._storage.getItem(storeName).pipe(first(), tap(res => {
|
|
1821
|
+
if (res == null)
|
|
1822
|
+
console.warn("Impossibile ottenere l'oggetto salvato con chiave " + storeName);
|
|
1823
|
+
}));
|
|
1762
1824
|
}
|
|
1763
1825
|
/**
|
|
1764
|
-
*
|
|
1826
|
+
* Ripulisce lo Storage Locale
|
|
1765
1827
|
*
|
|
1766
|
-
* @param {string} storeName Chiave del localStorage da
|
|
1767
|
-
*
|
|
1768
|
-
* @returns {any} Oggetto recuperato e deserializzato
|
|
1828
|
+
* @param {string} storeName Chiave del localStorage da ripulire
|
|
1769
1829
|
*/
|
|
1770
|
-
|
|
1771
|
-
return
|
|
1830
|
+
removeItem(storeName) {
|
|
1831
|
+
return this._storage.removeItem(storeName).pipe(first(), tap(res => {
|
|
1832
|
+
if (res == false)
|
|
1833
|
+
console.warn("Impossibile rimuovere l'oggetto salvato con chiave " + storeName);
|
|
1834
|
+
}));
|
|
1772
1835
|
}
|
|
1773
1836
|
/**
|
|
1774
|
-
* Ripulisce
|
|
1837
|
+
* Ripulisce lo Storage Locale di ogni cosa salvata
|
|
1775
1838
|
*
|
|
1776
1839
|
* @param {string} storeName Chiave del localStorage da ripulire
|
|
1777
1840
|
*/
|
|
1778
|
-
clear(
|
|
1779
|
-
|
|
1841
|
+
clear() {
|
|
1842
|
+
return this._storage.clear().pipe(first(), tap(res => {
|
|
1843
|
+
if (res == false)
|
|
1844
|
+
console.warn("Impossibile ripulire lo Storage Locale");
|
|
1845
|
+
}));
|
|
1846
|
+
}
|
|
1847
|
+
/**
|
|
1848
|
+
* Restituisce tutte le chiavi-valore associate alla sessione corrente
|
|
1849
|
+
*
|
|
1850
|
+
* @returns {Observable<{ [index: string]: string; }>} Risultato della query
|
|
1851
|
+
*/
|
|
1852
|
+
getAll() {
|
|
1853
|
+
return this._storage.getAll().pipe(first());
|
|
1780
1854
|
}
|
|
1781
1855
|
}
|
|
1782
1856
|
StorageService.decorators = [
|
|
1783
1857
|
{ type: Injectable }
|
|
1784
1858
|
];
|
|
1785
1859
|
StorageService.ctorParameters = () => [
|
|
1786
|
-
{ type: String, decorators: [{ type: Optional }, { type: Inject, args: [APPSEARCH_PREFIX,] }] }
|
|
1860
|
+
{ type: String, decorators: [{ type: Optional }, { type: Inject, args: [APPSEARCH_PREFIX,] }] },
|
|
1861
|
+
{ type: BaseSessionRetriever },
|
|
1862
|
+
{ type: BaseStorageProvider }
|
|
1863
|
+
];
|
|
1864
|
+
|
|
1865
|
+
/**
|
|
1866
|
+
* Implementazione di default per la classe **BaseSessionRetriever**
|
|
1867
|
+
*/
|
|
1868
|
+
class DefaultSessionRetriever extends BaseSessionRetriever {
|
|
1869
|
+
/**
|
|
1870
|
+
* Costruttore
|
|
1871
|
+
*
|
|
1872
|
+
* @ignore
|
|
1873
|
+
*/
|
|
1874
|
+
constructor() { super(); }
|
|
1875
|
+
/**
|
|
1876
|
+
* Ottiene un ID sessione
|
|
1877
|
+
*
|
|
1878
|
+
* @returns {string} ID sessione
|
|
1879
|
+
*/
|
|
1880
|
+
getSessionKey() {
|
|
1881
|
+
return "DUMMY_SESSION";
|
|
1882
|
+
}
|
|
1883
|
+
}
|
|
1884
|
+
DefaultSessionRetriever.decorators = [
|
|
1885
|
+
{ type: Injectable }
|
|
1886
|
+
];
|
|
1887
|
+
DefaultSessionRetriever.ctorParameters = () => [];
|
|
1888
|
+
|
|
1889
|
+
/** Implementazione di default per la classe **BaseStorageProvider** */
|
|
1890
|
+
class DefaultStorageProvider extends BaseStorageProvider {
|
|
1891
|
+
/** @ignore Costruttore */
|
|
1892
|
+
constructor(session) { super(session); }
|
|
1893
|
+
/** @ignore Implementazione di Default con localStorage. Identity viene ignorata perché essendo già nel localStorage è già per sito */
|
|
1894
|
+
setItem(key, value) {
|
|
1895
|
+
try {
|
|
1896
|
+
localStorage.setItem(key, JSON.stringify(value));
|
|
1897
|
+
return of(true);
|
|
1898
|
+
}
|
|
1899
|
+
catch (_a) {
|
|
1900
|
+
// Potrebbe arrivarmi un prefisso di salvataggio nella modalità di default. Questo serve per ripulire le stesse cose con quel prefisso e sperare di liberare spazio
|
|
1901
|
+
if (value.savedprefix) {
|
|
1902
|
+
console.warn("Spazio del local Storage insufficiente, prova a ripulirlo e risalvare");
|
|
1903
|
+
//Pulisco tutte le view con nome che parta per "Hot"
|
|
1904
|
+
for (let key in localStorage) {
|
|
1905
|
+
if (localStorage.hasOwnProperty(key) && key.startsWith(value.savedprefix))
|
|
1906
|
+
delete localStorage[key];
|
|
1907
|
+
}
|
|
1908
|
+
try {
|
|
1909
|
+
localStorage.setItem(key, JSON.stringify(value));
|
|
1910
|
+
}
|
|
1911
|
+
catch (e) {
|
|
1912
|
+
console.error("Spazio del local Storage insufficiente per salvare i risultati di ricerca con solo filtri. Non salvo nulla");
|
|
1913
|
+
}
|
|
1914
|
+
}
|
|
1915
|
+
return of(false);
|
|
1916
|
+
}
|
|
1917
|
+
}
|
|
1918
|
+
/** @ignore Implementazione di Default con localStorage. Identity viene ignorata perché essendo già nel localStorage è già per sito */
|
|
1919
|
+
getItem(key) {
|
|
1920
|
+
try {
|
|
1921
|
+
var ret = JSON.parse(localStorage.getItem(key));
|
|
1922
|
+
return of(ret);
|
|
1923
|
+
}
|
|
1924
|
+
catch (_a) {
|
|
1925
|
+
return of(null);
|
|
1926
|
+
}
|
|
1927
|
+
}
|
|
1928
|
+
/** @ignore Implementazione di Default con localStorage. Identity viene ignorata perché essendo già nel localStorage è già per sito */
|
|
1929
|
+
removeItem(key) {
|
|
1930
|
+
try {
|
|
1931
|
+
localStorage.removeItem(key);
|
|
1932
|
+
return of(true);
|
|
1933
|
+
}
|
|
1934
|
+
catch (_a) {
|
|
1935
|
+
return of(false);
|
|
1936
|
+
}
|
|
1937
|
+
}
|
|
1938
|
+
/** @ignore Implementazione di Default con localStorage. Identity viene ignorata perché essendo già nel localStorage è già per sito */
|
|
1939
|
+
clear() {
|
|
1940
|
+
try {
|
|
1941
|
+
localStorage.clear();
|
|
1942
|
+
return of(true);
|
|
1943
|
+
}
|
|
1944
|
+
catch (_a) {
|
|
1945
|
+
return of(false);
|
|
1946
|
+
}
|
|
1947
|
+
}
|
|
1948
|
+
/** @ignore Implementazione di Default con localStorage. Identity viene ignorata perché essendo già nel localStorage è già per sito */
|
|
1949
|
+
getAll() {
|
|
1950
|
+
var ret = {};
|
|
1951
|
+
for (let key in localStorage) {
|
|
1952
|
+
ret[key] = localStorage[key];
|
|
1953
|
+
}
|
|
1954
|
+
return of(ret);
|
|
1955
|
+
}
|
|
1956
|
+
}
|
|
1957
|
+
DefaultStorageProvider.decorators = [
|
|
1958
|
+
{ type: Injectable }
|
|
1959
|
+
];
|
|
1960
|
+
DefaultStorageProvider.ctorParameters = () => [
|
|
1961
|
+
{ type: BaseSessionRetriever }
|
|
1787
1962
|
];
|
|
1788
1963
|
|
|
1789
1964
|
// Angular
|
|
@@ -1796,6 +1971,8 @@ StorageService.ctorParameters = () => [
|
|
|
1796
1971
|
* MessageService,
|
|
1797
1972
|
* UtilityService,
|
|
1798
1973
|
* StorageService,
|
|
1974
|
+
*
|
|
1975
|
+
* con eventuali provider che utilizzano
|
|
1799
1976
|
*/
|
|
1800
1977
|
class FullExtensionsModule {
|
|
1801
1978
|
static forRoot(config) {
|
|
@@ -1812,7 +1989,9 @@ class FullExtensionsModule {
|
|
|
1812
1989
|
{ provide: EXT_LOCALE, useValue: (config === null || config === void 0 ? void 0 : config.locale) || 'it-IT' },
|
|
1813
1990
|
{ provide: EXT_FANCY_ALERTS, useValue: (config === null || config === void 0 ? void 0 : config.fancy_alerts) || true },
|
|
1814
1991
|
{ provide: APPSEARCH_PREFIX, useValue: (config === null || config === void 0 ? void 0 : config.appsearch_prefix) || 'Hot' },
|
|
1815
|
-
{ provide: EXT_ALLOW_UTC, useValue: (config === null || config === void 0 ? void 0 : config.allow_utc) == null ? false : config === null || config === void 0 ? void 0 : config.allow_utc }
|
|
1992
|
+
{ provide: EXT_ALLOW_UTC, useValue: (config === null || config === void 0 ? void 0 : config.allow_utc) == null ? false : config === null || config === void 0 ? void 0 : config.allow_utc },
|
|
1993
|
+
{ provide: BaseSessionRetriever, useClass: (config === null || config === void 0 ? void 0 : config.sessionRetriever) || DefaultSessionRetriever },
|
|
1994
|
+
{ provide: BaseStorageProvider, useClass: (config === null || config === void 0 ? void 0 : config.storageProvider) || DefaultStorageProvider },
|
|
1816
1995
|
]
|
|
1817
1996
|
};
|
|
1818
1997
|
}
|
|
@@ -1847,5 +2026,5 @@ class GenericItem {
|
|
|
1847
2026
|
* Generated bundle index. Do not edit.
|
|
1848
2027
|
*/
|
|
1849
2028
|
|
|
1850
|
-
export { APPSEARCH_PREFIX, CallResult, ClipboardService, CsvHeaders, DateService, EXT_ALLOW_UTC, EXT_FANCY_ALERTS, EXT_LOCALE, Export, ExportAs, ExportDictionary, ExportList, ExportService, ExtensionsModule, FullExtensionsModule, GenericItem, HashingService, MessageService, StorageService, UtilityService };
|
|
2029
|
+
export { APPSEARCH_PREFIX, BaseSessionRetriever, BaseStorageProvider, CallResult, ClipboardService, CsvHeaders, DateService, EXT_ALLOW_UTC, EXT_FANCY_ALERTS, EXT_LOCALE, Export, ExportAs, ExportDictionary, ExportList, ExportService, ExtensionsModule, FullExtensionsModule, GenericItem, HashingService, MessageService, StorageService, UtilityService, DefaultSessionRetriever as ɵa, DefaultStorageProvider as ɵb };
|
|
1851
2030
|
//# sourceMappingURL=esfaenza-extensions.js.map
|