@ogidor/dashboard 1.0.16 → 1.0.18
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/README.md +83 -13
- package/app/custom-grid.component.d.ts +2 -1
- package/app/dashboard-persistence.d.ts +37 -0
- package/app/dashboard-state.service.d.ts +10 -37
- package/esm2020/app/app.module.mjs +10 -3
- package/esm2020/app/custom-grid.component.mjs +30 -5
- package/esm2020/app/dashboard-persistence.mjs +78 -0
- package/esm2020/app/dashboard-state.service.mjs +54 -87
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/ogidor-dashboard.mjs +184 -93
- package/fesm2015/ogidor-dashboard.mjs.map +1 -1
- package/fesm2020/ogidor-dashboard.mjs +165 -93
- package/fesm2020/ogidor-dashboard.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export const DASHBOARD_PERSISTENCE = new InjectionToken('DASHBOARD_PERSISTENCE');
|
|
4
|
+
export const DASHBOARD_PERSISTENCE_CONTEXT = new InjectionToken('DASHBOARD_PERSISTENCE_CONTEXT');
|
|
5
|
+
export class DashboardPersistence {
|
|
6
|
+
}
|
|
7
|
+
export class LocalStorageDashboardPersistence {
|
|
8
|
+
async loadShared(dashboardId) {
|
|
9
|
+
const raw = localStorage.getItem(this._sharedKey(dashboardId));
|
|
10
|
+
if (!raw)
|
|
11
|
+
return null;
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse(raw);
|
|
14
|
+
}
|
|
15
|
+
catch (e) {
|
|
16
|
+
console.error('[Dashboard] bad shared state', e);
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async saveShared(dashboardId, shared) {
|
|
21
|
+
localStorage.setItem(this._sharedKey(dashboardId), JSON.stringify(shared));
|
|
22
|
+
}
|
|
23
|
+
async loadPositions(dashboardId, windowId) {
|
|
24
|
+
const raw = localStorage.getItem(this._positionsKey(dashboardId, windowId));
|
|
25
|
+
if (!raw)
|
|
26
|
+
return null;
|
|
27
|
+
try {
|
|
28
|
+
return JSON.parse(raw);
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
console.error('[Dashboard] bad positions state', e);
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async savePositions(dashboardId, windowId, positions) {
|
|
36
|
+
localStorage.setItem(this._positionsKey(dashboardId, windowId), JSON.stringify(positions));
|
|
37
|
+
}
|
|
38
|
+
_sharedKey(dashboardId) {
|
|
39
|
+
// Keep legacy keys for default dashboard id to avoid breaking existing users.
|
|
40
|
+
if (dashboardId === 'default')
|
|
41
|
+
return 'ogidor_shared';
|
|
42
|
+
return `ogidor_shared_${dashboardId}`;
|
|
43
|
+
}
|
|
44
|
+
_positionsKey(dashboardId, windowId) {
|
|
45
|
+
if (dashboardId === 'default')
|
|
46
|
+
return `ogidor_positions_${windowId}`;
|
|
47
|
+
return `ogidor_positions_${dashboardId}_${windowId}`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
LocalStorageDashboardPersistence.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LocalStorageDashboardPersistence, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
51
|
+
LocalStorageDashboardPersistence.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LocalStorageDashboardPersistence, providedIn: 'root' });
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LocalStorageDashboardPersistence, decorators: [{
|
|
53
|
+
type: Injectable,
|
|
54
|
+
args: [{ providedIn: 'root' }]
|
|
55
|
+
}] });
|
|
56
|
+
export function resolveDefaultDashboardId() {
|
|
57
|
+
if (typeof window === 'undefined')
|
|
58
|
+
return 'default';
|
|
59
|
+
const path = window.location.pathname?.trim();
|
|
60
|
+
return path ? path : 'default';
|
|
61
|
+
}
|
|
62
|
+
export class DashboardPersistenceFacade {
|
|
63
|
+
constructor(context) {
|
|
64
|
+
this.dashboardId = context?.dashboardId?.trim() || resolveDefaultDashboardId();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
DashboardPersistenceFacade.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardPersistenceFacade, deps: [{ token: DASHBOARD_PERSISTENCE_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
68
|
+
DashboardPersistenceFacade.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardPersistenceFacade, providedIn: 'root' });
|
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardPersistenceFacade, decorators: [{
|
|
70
|
+
type: Injectable,
|
|
71
|
+
args: [{ providedIn: 'root' }]
|
|
72
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
73
|
+
type: Optional
|
|
74
|
+
}, {
|
|
75
|
+
type: Inject,
|
|
76
|
+
args: [DASHBOARD_PERSISTENCE_CONTEXT]
|
|
77
|
+
}] }]; } });
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLXBlcnNpc3RlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9kYXNoYm9hcmQtcGVyc2lzdGVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTN0UsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQXVCLHVCQUF1QixDQUFDLENBQUM7QUFDdkcsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxjQUFjLENBQThCLCtCQUErQixDQUFDLENBQUM7QUFFOUgsTUFBTSxPQUFnQixvQkFBb0I7Q0FNekM7QUFHRCxNQUFNLE9BQU8sZ0NBQWdDO0lBQzNDLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBbUI7UUFDbEMsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN0QixJQUFJO1lBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBb0IsQ0FBQztTQUMzQztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBbUIsRUFBRSxNQUF1QjtRQUMzRCxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQW1CLEVBQUUsUUFBZ0I7UUFDdkQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEIsSUFBSTtZQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQWdCLENBQUM7U0FDdkM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEQsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQW1CLEVBQUUsUUFBZ0IsRUFBRSxTQUFzQjtRQUMvRSxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRU8sVUFBVSxDQUFDLFdBQW1CO1FBQ3BDLDhFQUE4RTtRQUM5RSxJQUFJLFdBQVcsS0FBSyxTQUFTO1lBQUUsT0FBTyxlQUFlLENBQUM7UUFDdEQsT0FBTyxpQkFBaUIsV0FBVyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVPLGFBQWEsQ0FBQyxXQUFtQixFQUFFLFFBQWdCO1FBQ3pELElBQUksV0FBVyxLQUFLLFNBQVM7WUFBRSxPQUFPLG9CQUFvQixRQUFRLEVBQUUsQ0FBQztRQUNyRSxPQUFPLG9CQUFvQixXQUFXLElBQUksUUFBUSxFQUFFLENBQUM7SUFDdkQsQ0FBQzs7OEhBeENVLGdDQUFnQztrSUFBaEMsZ0NBQWdDLGNBRG5CLE1BQU07NEZBQ25CLGdDQUFnQztrQkFENUMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBNENsQyxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3BELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzlDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNqQyxDQUFDO0FBR0QsTUFBTSxPQUFPLDBCQUEwQjtJQUdyQyxZQUNxRCxPQUEyQztRQUU5RixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUkseUJBQXlCLEVBQUUsQ0FBQztJQUNqRixDQUFDOzt3SEFQVSwwQkFBMEIsa0JBSWYsNkJBQTZCOzRIQUp4QywwQkFBMEIsY0FEYixNQUFNOzRGQUNuQiwwQkFBMEI7a0JBRHRDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFLN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5leHBvcnQgdHlwZSBQb3NpdGlvbk1hcCA9IFJlY29yZDxzdHJpbmcsIHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IGNvbHM6IG51bWJlcjsgcm93czogbnVtYmVyIH0+O1xuXG5leHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZFBlcnNpc3RlbmNlQ29udGV4dCB7XG4gIGRhc2hib2FyZElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBEQVNIQk9BUkRfUEVSU0lTVEVOQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48RGFzaGJvYXJkUGVyc2lzdGVuY2U+KCdEQVNIQk9BUkRfUEVSU0lTVEVOQ0UnKTtcbmV4cG9ydCBjb25zdCBEQVNIQk9BUkRfUEVSU0lTVEVOQ0VfQ09OVEVYVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEYXNoYm9hcmRQZXJzaXN0ZW5jZUNvbnRleHQ+KCdEQVNIQk9BUkRfUEVSU0lTVEVOQ0VfQ09OVEVYVCcpO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGFzaGJvYXJkUGVyc2lzdGVuY2Uge1xuICBhYnN0cmFjdCBsb2FkU2hhcmVkKGRhc2hib2FyZElkOiBzdHJpbmcpOiBQcm9taXNlPERhc2hib2FyZENvbmZpZyB8IG51bGw+O1xuICBhYnN0cmFjdCBzYXZlU2hhcmVkKGRhc2hib2FyZElkOiBzdHJpbmcsIHNoYXJlZDogRGFzaGJvYXJkQ29uZmlnKTogUHJvbWlzZTx2b2lkPjtcblxuICBhYnN0cmFjdCBsb2FkUG9zaXRpb25zKGRhc2hib2FyZElkOiBzdHJpbmcsIHdpbmRvd0lkOiBzdHJpbmcpOiBQcm9taXNlPFBvc2l0aW9uTWFwIHwgbnVsbD47XG4gIGFic3RyYWN0IHNhdmVQb3NpdGlvbnMoZGFzaGJvYXJkSWQ6IHN0cmluZywgd2luZG93SWQ6IHN0cmluZywgcG9zaXRpb25zOiBQb3NpdGlvbk1hcCk6IFByb21pc2U8dm9pZD47XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlRGFzaGJvYXJkUGVyc2lzdGVuY2UgaW1wbGVtZW50cyBEYXNoYm9hcmRQZXJzaXN0ZW5jZSB7XG4gIGFzeW5jIGxvYWRTaGFyZWQoZGFzaGJvYXJkSWQ6IHN0cmluZyk6IFByb21pc2U8RGFzaGJvYXJkQ29uZmlnIHwgbnVsbD4ge1xuICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX3NoYXJlZEtleShkYXNoYm9hcmRJZCkpO1xuICAgIGlmICghcmF3KSByZXR1cm4gbnVsbDtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBEYXNoYm9hcmRDb25maWc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignW0Rhc2hib2FyZF0gYmFkIHNoYXJlZCBzdGF0ZScsIGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZVNoYXJlZChkYXNoYm9hcmRJZDogc3RyaW5nLCBzaGFyZWQ6IERhc2hib2FyZENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuX3NoYXJlZEtleShkYXNoYm9hcmRJZCksIEpTT04uc3RyaW5naWZ5KHNoYXJlZCkpO1xuICB9XG5cbiAgYXN5bmMgbG9hZFBvc2l0aW9ucyhkYXNoYm9hcmRJZDogc3RyaW5nLCB3aW5kb3dJZDogc3RyaW5nKTogUHJvbWlzZTxQb3NpdGlvbk1hcCB8IG51bGw+IHtcbiAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9wb3NpdGlvbnNLZXkoZGFzaGJvYXJkSWQsIHdpbmRvd0lkKSk7XG4gICAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIFBvc2l0aW9uTWFwO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tEYXNoYm9hcmRdIGJhZCBwb3NpdGlvbnMgc3RhdGUnLCBlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVQb3NpdGlvbnMoZGFzaGJvYXJkSWQ6IHN0cmluZywgd2luZG93SWQ6IHN0cmluZywgcG9zaXRpb25zOiBQb3NpdGlvbk1hcCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuX3Bvc2l0aW9uc0tleShkYXNoYm9hcmRJZCwgd2luZG93SWQpLCBKU09OLnN0cmluZ2lmeShwb3NpdGlvbnMpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NoYXJlZEtleShkYXNoYm9hcmRJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBLZWVwIGxlZ2FjeSBrZXlzIGZvciBkZWZhdWx0IGRhc2hib2FyZCBpZCB0byBhdm9pZCBicmVha2luZyBleGlzdGluZyB1c2Vycy5cbiAgICBpZiAoZGFzaGJvYXJkSWQgPT09ICdkZWZhdWx0JykgcmV0dXJuICdvZ2lkb3Jfc2hhcmVkJztcbiAgICByZXR1cm4gYG9naWRvcl9zaGFyZWRfJHtkYXNoYm9hcmRJZH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBfcG9zaXRpb25zS2V5KGRhc2hib2FyZElkOiBzdHJpbmcsIHdpbmRvd0lkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChkYXNoYm9hcmRJZCA9PT0gJ2RlZmF1bHQnKSByZXR1cm4gYG9naWRvcl9wb3NpdGlvbnNfJHt3aW5kb3dJZH1gO1xuICAgIHJldHVybiBgb2dpZG9yX3Bvc2l0aW9uc18ke2Rhc2hib2FyZElkfV8ke3dpbmRvd0lkfWA7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVEZWZhdWx0RGFzaGJvYXJkSWQoKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gJ2RlZmF1bHQnO1xuICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lPy50cmltKCk7XG4gIHJldHVybiBwYXRoID8gcGF0aCA6ICdkZWZhdWx0Jztcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRQZXJzaXN0ZW5jZUZhY2FkZSB7XG4gIHJlYWRvbmx5IGRhc2hib2FyZElkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChEQVNIQk9BUkRfUEVSU0lTVEVOQ0VfQ09OVEVYVCkgY29udGV4dDogRGFzaGJvYXJkUGVyc2lzdGVuY2VDb250ZXh0IHwgbnVsbFxuICApIHtcbiAgICB0aGlzLmRhc2hib2FyZElkID0gY29udGV4dD8uZGFzaGJvYXJkSWQ/LnRyaW0oKSB8fCByZXNvbHZlRGVmYXVsdERhc2hib2FyZElkKCk7XG4gIH1cbn1cblxuIl19
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
1
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { DASHBOARD_PERSISTENCE, } from './dashboard-persistence';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./dashboard-persistence";
|
|
4
6
|
export class DashboardStateService {
|
|
5
|
-
constructor(zone) {
|
|
7
|
+
constructor(zone, persistenceFacade, localPersistence, persistence) {
|
|
6
8
|
this.zone = zone;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*/
|
|
11
|
-
this.SHARED_KEY = 'ogidor_shared';
|
|
9
|
+
this.persistenceFacade = persistenceFacade;
|
|
10
|
+
this.localPersistence = localPersistence;
|
|
11
|
+
this.persistence = persistence;
|
|
12
12
|
this.CHANNEL_NAME = 'ogidor_dashboard_sync';
|
|
13
13
|
this.channel = typeof BroadcastChannel !== 'undefined'
|
|
14
14
|
? new BroadcastChannel(this.CHANNEL_NAME) : null;
|
|
@@ -19,23 +19,12 @@ export class DashboardStateService {
|
|
|
19
19
|
this.activePageIdSubject = new BehaviorSubject(this.initialPages[0].id);
|
|
20
20
|
this.pages$ = this.pagesSubject.asObservable();
|
|
21
21
|
this.activePageId$ = this.activePageIdSubject.asObservable();
|
|
22
|
-
// Determine whether we are a pop-out window
|
|
23
22
|
const hash = typeof window !== 'undefined'
|
|
24
23
|
? window.location.hash.replace('#', '').trim() : '';
|
|
25
|
-
this.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
try {
|
|
30
|
-
this._applyShared(JSON.parse(shared), false);
|
|
31
|
-
}
|
|
32
|
-
catch (e) {
|
|
33
|
-
console.error('[Dashboard] bad shared state', e);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
// 2. Overlay this window's saved positions on top
|
|
37
|
-
this._restorePositions();
|
|
38
|
-
// 3. Listen for structural changes broadcast by other windows
|
|
24
|
+
this.windowId = hash || 'main';
|
|
25
|
+
this.dashboardId = this.persistenceFacade.dashboardId;
|
|
26
|
+
this.persistence = this.persistence ?? this.localPersistence;
|
|
27
|
+
void this._bootstrapFromPersistence();
|
|
39
28
|
if (this.channel) {
|
|
40
29
|
this.channel.onmessage = (ev) => {
|
|
41
30
|
this.zone.run(() => this._onSyncEvent(ev.data));
|
|
@@ -43,7 +32,6 @@ export class DashboardStateService {
|
|
|
43
32
|
}
|
|
44
33
|
}
|
|
45
34
|
ngOnDestroy() { this.channel?.close(); }
|
|
46
|
-
// ── Page actions ──────────────────────────────────────────────
|
|
47
35
|
getActivePage() {
|
|
48
36
|
return this.pagesSubject.value.find(p => p.id === this.activePageIdSubject.value);
|
|
49
37
|
}
|
|
@@ -67,7 +55,6 @@ export class DashboardStateService {
|
|
|
67
55
|
this._saveShared();
|
|
68
56
|
this._broadcast({ type: 'PAGE_REMOVED', pageId: id });
|
|
69
57
|
}
|
|
70
|
-
// ── Widget structural actions (synced to all windows) ─────────
|
|
71
58
|
addWidget(widget) {
|
|
72
59
|
const activePage = this.getActivePage();
|
|
73
60
|
if (!activePage)
|
|
@@ -80,7 +67,7 @@ export class DashboardStateService {
|
|
|
80
67
|
activePage.widgets = [...activePage.widgets, newWidget];
|
|
81
68
|
this.pagesSubject.next([...this.pagesSubject.value]);
|
|
82
69
|
this._saveShared();
|
|
83
|
-
this._savePositions();
|
|
70
|
+
this._savePositions();
|
|
84
71
|
this._broadcast({ type: 'WIDGET_ADDED', pageId: activePage.id, widget: newWidget });
|
|
85
72
|
return newWidget;
|
|
86
73
|
}
|
|
@@ -108,11 +95,6 @@ export class DashboardStateService {
|
|
|
108
95
|
this._savePositions();
|
|
109
96
|
this._broadcast({ type: 'WIDGET_REMOVED', pageId, widgetId });
|
|
110
97
|
}
|
|
111
|
-
// ── Position actions (local to THIS window only) ──────────────
|
|
112
|
-
/**
|
|
113
|
-
* Update a widget's grid position/size.
|
|
114
|
-
* Saved only for this window — never broadcast to others.
|
|
115
|
-
*/
|
|
116
98
|
updateWidgetPosition(pageId, widgetId, x, y, cols, rows) {
|
|
117
99
|
const pages = this.pagesSubject.value;
|
|
118
100
|
const widget = pages.find(p => p.id === pageId)?.widgets.find(w => w.id === widgetId);
|
|
@@ -122,10 +104,9 @@ export class DashboardStateService {
|
|
|
122
104
|
widget.cols = cols;
|
|
123
105
|
widget.rows = rows;
|
|
124
106
|
this.pagesSubject.next([...pages]);
|
|
125
|
-
this._savePositions();
|
|
107
|
+
this._savePositions();
|
|
126
108
|
}
|
|
127
109
|
}
|
|
128
|
-
// ── Serialization ─────────────────────────────────────────────
|
|
129
110
|
serializeLayout() {
|
|
130
111
|
return JSON.stringify({
|
|
131
112
|
pages: this.pagesSubject.value,
|
|
@@ -135,7 +116,7 @@ export class DashboardStateService {
|
|
|
135
116
|
loadLayout(config) {
|
|
136
117
|
if (!config?.pages)
|
|
137
118
|
return;
|
|
138
|
-
this._applyShared(config
|
|
119
|
+
this._applyShared(config);
|
|
139
120
|
this._saveShared();
|
|
140
121
|
this._savePositions();
|
|
141
122
|
}
|
|
@@ -143,26 +124,18 @@ export class DashboardStateService {
|
|
|
143
124
|
const url = `${window.location.origin}${window.location.pathname}#${pageId}`;
|
|
144
125
|
window.open(url, `workspace_${pageId}`, 'width=1280,height=800,menubar=no,toolbar=no,location=no,status=no');
|
|
145
126
|
}
|
|
146
|
-
// ── Private helpers ───────────────────────────────────────────
|
|
147
|
-
/**
|
|
148
|
-
* Save page list + widget metadata (titles, cardColor, data) — no positions.
|
|
149
|
-
*/
|
|
150
127
|
_saveShared() {
|
|
151
128
|
const stripped = this.pagesSubject.value.map(p => ({
|
|
152
129
|
...p,
|
|
153
|
-
widgets: p.widgets.map(({ id, title, cardColor, data, cols, rows }) =>
|
|
154
|
-
// Keep default cols/rows so new windows get a sensible first-open layout.
|
|
155
|
-
// x/y are intentionally omitted from shared state.
|
|
156
|
-
({ id, title, cardColor, data, x: 0, y: 0, cols, rows })),
|
|
130
|
+
widgets: p.widgets.map(({ id, title, cardColor, data, cols, rows }) => ({ id, title, cardColor, data, x: 0, y: 0, cols, rows })),
|
|
157
131
|
}));
|
|
158
|
-
|
|
132
|
+
const shared = {
|
|
159
133
|
pages: stripped,
|
|
160
134
|
activePageId: this.activePageIdSubject.value,
|
|
161
|
-
}
|
|
135
|
+
};
|
|
136
|
+
void this.persistence?.saveShared(this.dashboardId, shared)
|
|
137
|
+
.catch(e => console.error('[Dashboard] failed to persist shared state', e));
|
|
162
138
|
}
|
|
163
|
-
/**
|
|
164
|
-
* Save this window's grid positions (x, y, cols, rows) per widget.
|
|
165
|
-
*/
|
|
166
139
|
_savePositions() {
|
|
167
140
|
const positions = {};
|
|
168
141
|
for (const page of this.pagesSubject.value) {
|
|
@@ -170,54 +143,32 @@ export class DashboardStateService {
|
|
|
170
143
|
positions[`${page.id}:${w.id}`] = { x: w.x, y: w.y, cols: w.cols, rows: w.rows };
|
|
171
144
|
}
|
|
172
145
|
}
|
|
173
|
-
|
|
146
|
+
void this.persistence?.savePositions(this.dashboardId, this.windowId, positions)
|
|
147
|
+
.catch(e => console.error('[Dashboard] failed to persist window positions', e));
|
|
174
148
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
for (const page of pages) {
|
|
186
|
-
for (const w of page.widgets) {
|
|
187
|
-
const pos = positions[`${page.id}:${w.id}`];
|
|
188
|
-
if (pos) {
|
|
189
|
-
w.x = pos.x;
|
|
190
|
-
w.y = pos.y;
|
|
191
|
-
w.cols = pos.cols;
|
|
192
|
-
w.rows = pos.rows;
|
|
193
|
-
}
|
|
149
|
+
_applyPositions(positions) {
|
|
150
|
+
const pages = this.pagesSubject.value;
|
|
151
|
+
for (const page of pages) {
|
|
152
|
+
for (const w of page.widgets) {
|
|
153
|
+
const pos = positions[`${page.id}:${w.id}`];
|
|
154
|
+
if (pos) {
|
|
155
|
+
w.x = pos.x;
|
|
156
|
+
w.y = pos.y;
|
|
157
|
+
w.cols = pos.cols;
|
|
158
|
+
w.rows = pos.rows;
|
|
194
159
|
}
|
|
195
160
|
}
|
|
196
|
-
this.pagesSubject.next([...pages]);
|
|
197
|
-
}
|
|
198
|
-
catch (e) {
|
|
199
|
-
console.error('[Dashboard] bad positions state', e);
|
|
200
161
|
}
|
|
162
|
+
this.pagesSubject.next([...pages]);
|
|
201
163
|
}
|
|
202
|
-
|
|
203
|
-
* Apply a shared config object (page list + metadata) without touching
|
|
204
|
-
* this window's saved positions.
|
|
205
|
-
*/
|
|
206
|
-
_applyShared(config, overwritePositions) {
|
|
164
|
+
_applyShared(config) {
|
|
207
165
|
if (!config?.pages)
|
|
208
166
|
return;
|
|
209
167
|
this.pagesSubject.next(config.pages);
|
|
210
168
|
if (config.activePageId)
|
|
211
169
|
this.activePageIdSubject.next(config.activePageId);
|
|
212
|
-
if (!overwritePositions)
|
|
213
|
-
this._restorePositions();
|
|
214
170
|
}
|
|
215
|
-
/**
|
|
216
|
-
* Handle a structural sync event arriving from another window.
|
|
217
|
-
* Position changes are never sent so we never receive them here.
|
|
218
|
-
*/
|
|
219
171
|
_onSyncEvent(event) {
|
|
220
|
-
// Work on a shallow clone of pages so Angular detects the change
|
|
221
172
|
const pages = this.pagesSubject.value.map(p => ({
|
|
222
173
|
...p, widgets: [...p.widgets]
|
|
223
174
|
}));
|
|
@@ -246,8 +197,6 @@ export class DashboardStateService {
|
|
|
246
197
|
page.widgets = [...page.widgets, { ...event.widget }];
|
|
247
198
|
this.pagesSubject.next(pages);
|
|
248
199
|
this._saveShared();
|
|
249
|
-
// Don't touch positions — this window will keep its own layout for
|
|
250
|
-
// existing widgets; the new one starts at its default position.
|
|
251
200
|
}
|
|
252
201
|
break;
|
|
253
202
|
}
|
|
@@ -278,11 +227,29 @@ export class DashboardStateService {
|
|
|
278
227
|
_broadcast(event) {
|
|
279
228
|
this.channel?.postMessage(event);
|
|
280
229
|
}
|
|
230
|
+
async _bootstrapFromPersistence() {
|
|
231
|
+
try {
|
|
232
|
+
const shared = await this.persistence?.loadShared(this.dashboardId);
|
|
233
|
+
if (shared)
|
|
234
|
+
this.zone.run(() => this._applyShared(shared));
|
|
235
|
+
const positions = await this.persistence?.loadPositions(this.dashboardId, this.windowId);
|
|
236
|
+
if (positions)
|
|
237
|
+
this.zone.run(() => this._applyPositions(positions));
|
|
238
|
+
}
|
|
239
|
+
catch (e) {
|
|
240
|
+
console.error('[Dashboard] failed to bootstrap persisted state', e);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
281
243
|
}
|
|
282
|
-
DashboardStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardStateService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
244
|
+
DashboardStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardStateService, deps: [{ token: i0.NgZone }, { token: i1.DashboardPersistenceFacade }, { token: i1.LocalStorageDashboardPersistence }, { token: DASHBOARD_PERSISTENCE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
283
245
|
DashboardStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardStateService, providedIn: 'root' });
|
|
284
246
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardStateService, decorators: [{
|
|
285
247
|
type: Injectable,
|
|
286
248
|
args: [{ providedIn: 'root' }]
|
|
287
|
-
}], ctorParameters: function () { return [{ type: i0.NgZone }
|
|
288
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2Rhc2hib2FyZC1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBY3ZDLE1BQU0sT0FBTyxxQkFBcUI7SUE4QmhDLFlBQW9CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO1FBN0JoQzs7O1dBR0c7UUFDYyxlQUFVLEdBQUcsZUFBZSxDQUFDO1FBVzdCLGlCQUFZLEdBQUcsdUJBQXVCLENBQUM7UUFDaEQsWUFBTyxHQUFHLE9BQU8sZ0JBQWdCLEtBQUssV0FBVztZQUN2RCxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVsQyxpQkFBWSxHQUFXO1lBQ3RDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtTQUN6RCxDQUFDO1FBRU0saUJBQVksR0FBUyxJQUFJLGVBQWUsQ0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEUsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuRixXQUFNLEdBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNqRCxrQkFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUd0RCw0Q0FBNEM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVztZQUN4QyxDQUFDLENBQUMsTUFBTSxD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QUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMxRCxJQUFJLENBQUMsRUFBRTt3QkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUM5QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ25CLE1BQU07cUJBQ1A7aUJBQ0Y7Z0JBQ0QsTUFBTTthQUNQO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQWdCO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7O21IQTlTVSxxQkFBcUI7dUhBQXJCLHFCQUFxQixjQURSLE1BQU07NEZBQ25CLHFCQUFxQjtrQkFEakMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQYWdlLCBXaWRnZXQsIERhc2hib2FyZENvbmZpZyB9IGZyb20gJy4vbW9kZWxzJztcblxudHlwZSBQb3NpdGlvbk1hcCA9IFJlY29yZDxzdHJpbmcsIHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IGNvbHM6IG51bWJlcjsgcm93czogbnVtYmVyIH0+O1xuXG50eXBlIFN5bmNFdmVudCA9XG4gIHwgeyB0eXBlOiAnUEFHRV9BRERFRCc7ICAgIHBhZ2U6IFBhZ2UgfVxuICB8IHsgdHlwZTogJ1BBR0VfUkVNT1ZFRCc7ICBwYWdlSWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnUEFHRV9SRU5BTUVEJzsgIHBhZ2VJZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ1dJREdFVF9BRERFRCc7ICBwYWdlSWQ6IHN0cmluZzsgd2lkZ2V0OiBXaWRnZXQgfVxuICB8IHsgdHlwZTogJ1dJREdFVF9SRU1PVkVEJztwYWdlSWQ6IHN0cmluZzsgd2lkZ2V0SWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnV0lER0VUX01FVEEnOyAgIHdpZGdldElkOiBzdHJpbmc7IHBhdGNoOiBQYXJ0aWFsPE9taXQ8V2lkZ2V0LCdpZCd8J3gnfCd5J3wnY29scyd8J3Jvd3MnPj4gfTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRTdGF0ZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogU2hhcmVkIGtleSDigJQgc3RvcmVzIHBhZ2UgbGlzdCArIHdpZGdldCBtZXRhZGF0YSAobm8gcG9zaXRpb25zKS5cbiAgICogUmVhZCBhbmQgd3JpdHRlbiBieSBldmVyeSB3aW5kb3cuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IFNIQVJFRF9LRVkgPSAnb2dpZG9yX3NoYXJlZCc7XG5cbiAgLyoqXG4gICAqIFBlci13aW5kb3cgcG9zaXRpb25zIGtleSDigJQgc3RvcmVzIHtwYWdlSWQ6d2lkZ2V0SWQg4oaSIHt4LHksY29scyxyb3dzfX0uXG4gICAqIFBvcC1vdXQgd2luZG93cyBnZXQgYSBrZXkgc2NvcGVkIHRvIHRoZWlyIHBhZ2VJZCBzbyB0aGV5IG5ldmVyIG92ZXJ3cml0ZVxuICAgKiB0aGUgbWFpbiB3aW5kb3cgb3IgZWFjaCBvdGhlci5cbiAgICogICBtYWluIHdpbmRvdyAg4oaSIG9naWRvcl9wb3NpdGlvbnNfbWFpblxuICAgKiAgIHBvcC1vdXQgI2FiYyDihpIgb2dpZG9yX3Bvc2l0aW9uc19hYmNcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcG9zaXRpb25zS2V5OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBDSEFOTkVMX05BTUUgPSAnb2dpZG9yX2Rhc2hib2FyZF9zeW5jJztcbiAgcHJpdmF0ZSBjaGFubmVsID0gdHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgIT09ICd1bmRlZmluZWQnXG4gICAgPyBuZXcgQnJvYWRjYXN0Q2hhbm5lbCh0aGlzLkNIQU5ORUxfTkFNRSkgOiBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5pdGlhbFBhZ2VzOiBQYWdlW10gPSBbXG4gICAgeyBpZDogJ3BhZ2UtMScsIG5hbWU6ICdEZWZhdWx0IFdvcmtzcGFjZScsIHdpZGdldHM6IFtdIH1cbiAgXTtcblxuICBwcml2YXRlIHBhZ2VzU3ViamVjdCAgICAgICA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnZVtdPih0aGlzLmluaXRpYWxQYWdlcyk7XG4gIHByaXZhdGUgYWN0aXZlUGFnZUlkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih0aGlzLmluaXRpYWxQYWdlc1swXS5pZCk7XG5cbiAgcGFnZXMkICAgICAgICA9IHRoaXMucGFnZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBhY3RpdmVQYWdlSWQkID0gdGhpcy5hY3RpdmVQYWdlSWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgem9uZTogTmdab25lKSB7XG4gICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgd2UgYXJlIGEgcG9wLW91dCB3aW5kb3dcbiAgICBjb25zdCBoYXNoID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgID8gd2luZG93LmxvY2F0aW9uLmhhc2gucmVwbGFjZSgnIycsICcnKS50cmltKCkgOiAnJztcbiAgICB0aGlzLnBvc2l0aW9uc0tleSA9IGhhc2ggPyBgb2dpZG9yX3Bvc2l0aW9uc18ke2hhc2h9YCA6ICdvZ2lkb3JfcG9zaXRpb25zX21haW4nO1xuXG4gICAgLy8gMS4gTG9hZCB0aGUgc2hhcmVkIHN0cnVjdHVyYWwgc3RhdGVcbiAgICBjb25zdCBzaGFyZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNIQVJFRF9LRVkpO1xuICAgIGlmIChzaGFyZWQpIHtcbiAgICAgIHRyeSB7IHRoaXMuX2FwcGx5U2hhcmVkKEpTT04ucGFyc2Uoc2hhcmVkKSwgZmFsc2UpOyB9XG4gICAgICBjYXRjaCAoZSkgeyBjb25zb2xlLmVycm9yKCdbRGFzaGJvYXJkXSBiYWQgc2hhcmVkIHN0YXRlJywgZSk7IH1cbiAgICB9XG5cbiAgICAvLyAyLiBPdmVybGF5IHRoaXMgd2luZG93J3Mgc2F2ZWQgcG9zaXRpb25zIG9uIHRvcFxuICAgIHRoaXMuX3Jlc3RvcmVQb3NpdGlvbnMoKTtcblxuICAgIC8vIDMuIExpc3RlbiBmb3Igc3RydWN0dXJhbCBjaGFuZ2VzIGJyb2FkY2FzdCBieSBvdGhlciB3aW5kb3dzXG4gICAgaWYgKHRoaXMuY2hhbm5lbCkge1xuICAgICAgdGhpcy5jaGFubmVsLm9ubWVzc2FnZSA9IChldjogTWVzc2FnZUV2ZW50PFN5bmNFdmVudD4pID0+IHtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLl9vblN5bmNFdmVudChldi5kYXRhKSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkgeyB0aGlzLmNoYW5uZWw/LmNsb3NlKCk7IH1cblxuICAvLyDilIDilIAgUGFnZSBhY3Rpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGdldEFjdGl2ZVBhZ2UoKTogUGFnZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXNTdWJqZWN0LnZhbHVlLmZpbmQocCA9PiBwLmlkID09PSB0aGlzLmFjdGl2ZVBhZ2VJZFN1YmplY3QudmFsdWUpO1xuICB9XG5cbiAgc2V0QWN0aXZlUGFnZShpZDogc3RyaW5nKSB7IHRoaXMuYWN0aXZlUGFnZUlkU3ViamVjdC5uZXh0KGlkKTsgfVxuXG4gIGFkZFBhZ2UobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFnZTogUGFnZSA9IHsgaWQ6IGBwYWdlLSR7RGF0ZS5ub3coKX1gLCBuYW1lLCB3aWRnZXRzOiBbXSB9O1xuICAgIHRoaXMucGFnZXNTdWJqZWN0Lm5leHQoWy4uLnRoaXMucGFnZXNTdWJqZWN0LnZhbHVlLCBwYWdlXSk7XG4gICAgdGhpcy5hY3RpdmVQYWdlSWRTdWJqZWN0Lm5leHQocGFnZS5pZCk7XG4gICAgdGhpcy5fc2F2ZVNoYXJlZCgpO1xuICAgIHRoaXMuX2Jyb2FkY2FzdCh7IHR5cGU6ICdQQUdFX0FEREVEJywgcGFnZSB9KTtcbiAgfVxuXG4gIHJlbW92ZVBhZ2UoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5wYWdlc1N1YmplY3QudmFsdWU7XG4gICAgaWYgKHBhZ2VzLmxlbmd0aCA8PSAxKSByZXR1cm47XG4gICAgY29uc3QgdXBkYXRlZCA9IHBhZ2VzLmZpbHRlcihwID0+IHAuaWQgIT09IGlkKTtcbiAgICB0aGlzLnBhZ2VzU3ViamVjdC5uZXh0KHVwZGF0ZWQpO1xuICAgIGlmICh0aGlzLmFjdGl2ZVBhZ2VJZFN1YmplY3QudmFsdWUgPT09IGlkKSB7XG4gICAgICB0aGlzLmFjdGl2ZVBhZ2VJZFN1YmplY3QubmV4dCh1cGRhdGVkWzBdLmlkKTtcbiAgICB9XG4gICAgdGhpcy5fc2F2ZVNoYXJlZCgpO1xuICAgIHRoaXMuX2Jyb2FkY2FzdCh7IHR5cGU6ICdQQUdFX1JFTU9WRUQnLCBwYWdlSWQ6IGlkIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFdpZGdldCBzdHJ1Y3R1cmFsIGFjdGlvbnMgKHN5bmNlZCB0byBhbGwgd2luZG93cykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgYWRkV2lkZ2V0KHdpZGdldDogUGFydGlhbDxXaWRnZXQ+ICYgeyB0aXRsZTogc3RyaW5nIH0pOiBXaWRnZXQge1xuICAgIGNvbnN0IGFjdGl2ZVBhZ2UgPSB0aGlzLmdldEFjdGl2ZVBhZ2UoKTtcbiAgICBpZiAoIWFjdGl2ZVBhZ2UpIHRocm93IG5ldyBFcnJvcignTm8gYWN0aXZlIHBhZ2UnKTtcbiAgICBjb25zdCBuZXdXaWRnZXQ6IFdpZGdldCA9IHtcbiAgICAgIGlkOiBgd2lkZ2V0LSR7RGF0ZS5ub3coKX1gLFxuICAgICAgeDogMCwgeTogMCwgY29sczogNCwgcm93czogMyxcbiAgICAgIC4uLndpZGdldCxcbiAgICB9O1xuICAgIGFjdGl2ZVBhZ2Uud2lkZ2V0cyA9IFsuLi5hY3RpdmVQYWdlLndpZGdldHMsIG5ld1dpZGdldF07XG4gICAgdGhpcy5wYWdlc1N1YmplY3QubmV4dChbLi4udGhpcy5wYWdlc1N1YmplY3QudmFsdWVdKTtcbiAgICB0aGlzLl9zYXZlU2hhcmVkKCk7XG4gICAgdGhpcy5fc2F2ZVBvc2l0aW9ucygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgZGVmYXVsdCBwb3NpdGlvbiBsb2NhbGx5XG4gICAgdGhpcy5fYnJvYWRjYXN0KHsgdHlwZTogJ1dJREdFVF9BRERFRCcsIHBhZ2VJZDogYWN0aXZlUGFnZS5pZCwgd2lkZ2V0OiBuZXdXaWRnZXQgfSk7XG4gICAgcmV0dXJuIG5ld1dpZGdldDtcbiAgfVxuXG4gIHVwZGF0ZVdpZGdldCh3aWRnZXRJZDogc3RyaW5nLCBwYXRjaDogUGFydGlhbDxPbWl0PFdpZGdldCwnaWQnfCd4J3wneSd8J2NvbHMnfCdyb3dzJz4+KSB7XG4gICAgY29uc3QgcGFnZXMgPSB0aGlzLnBhZ2VzU3ViamVjdC52YWx1ZTtcbiAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgcGFnZXMpIHtcbiAgICAgIGNvbnN0IHcgPSBwYWdlLndpZGdldHMuZmluZCh3ID0+IHcuaWQgPT09IHdpZGdldElkKTtcbiAgICAgIGlmICh3KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odywgcGF0Y2gpO1xuICAgICAgICB0aGlzLnBhZ2VzU3ViamVjdC5uZXh0KFsuLi5wYWdlc10pO1xuICAgICAgICB0aGlzLl9zYXZlU2hhcmVkKCk7XG4gICAgICAgIHRoaXMuX2Jyb2FkY2FzdCh7IHR5cGU6ICdXSURHRVRfTUVUQScsIHdpZGdldElkLCBwYXRjaCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVdpZGdldCh3aWRnZXRJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aXZlUGFnZSA9IHRoaXMuZ2V0QWN0aXZlUGFnZSgpO1xuICAgIGlmICghYWN0aXZlUGFnZSkgcmV0dXJuO1xuICAgIGNvbnN0IHBhZ2VJZCA9IGFjdGl2ZVBhZ2UuaWQ7XG4gICAgYWN0aXZlUGFnZS53aWRnZXRzID0gYWN0aXZlUGFnZS53aWRnZXRzLmZpbHRlcih3ID0+IHcuaWQgIT09IHdpZGdldElkKTtcbiAgICB0aGlzLnBhZ2VzU3ViamVjdC5uZXh0KFsuLi50aGlzLnBhZ2VzU3ViamVjdC52YWx1ZV0pO1xuICAgIHRoaXMuX3NhdmVTaGFyZWQoKTtcbiAgICB0aGlzLl9zYXZlUG9zaXRpb25zKCk7XG4gICAgdGhpcy5fYnJvYWRjYXN0KHsgdHlwZTogJ1dJREdFVF9SRU1PVkVEJywgcGFnZUlkLCB3aWRnZXRJZCB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQb3NpdGlvbiBhY3Rpb25zIChsb2NhbCB0byBUSElTIHdpbmRvdyBvbmx5KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogVXBkYXRlIGEgd2lkZ2V0J3MgZ3JpZCBwb3NpdGlvbi9zaXplLlxuICAgKiBTYXZlZCBvbmx5IGZvciB0aGlzIHdpbmRvdyDigJQgbmV2ZXIgYnJvYWRjYXN0IHRvIG90aGVycy5cbiAgICovXG4gIHVwZGF0ZVdpZGdldFBvc2l0aW9uKHBhZ2VJZDogc3RyaW5nLCB3aWRnZXRJZDogc3RyaW5nLCB4OiBudW1iZXIsIHk6IG51bWJlciwgY29sczogbnVtYmVyLCByb3dzOiBudW1iZXIpIHtcbiAgICBjb25zdCBwYWdlcyA9IHRoaXMucGFnZXNTdWJqZWN0LnZhbHVlO1xuICAgIGNvbnN0IHdpZGdldCA9IHBhZ2VzLmZpbmQocCA9PiBwLmlkID09PSBwYWdlSWQpPy53aWRnZXRzLmZpbmQodyA9PiB3LmlkID09PSB3aWRnZXRJZCk7XG4gICAgaWYgKHdpZGdldCkge1xuICAgICAgd2lkZ2V0LnggPSB4OyB3aWRnZXQueSA9IHk7IHdpZGdldC5jb2xzID0gY29sczsgd2lkZ2V0LnJvd3MgPSByb3dzO1xuICAgICAgdGhpcy5wYWdlc1N1YmplY3QubmV4dChbLi4ucGFnZXNdKTtcbiAgICAgIHRoaXMuX3NhdmVQb3NpdGlvbnMoKTsgICAgICAgICAgLy8gbG9jYWwgb25seSDigJQgaW50ZW50aW9uYWxseSBubyBfc2F2ZVNoYXJlZCAvIG5vIGJyb2FkY2FzdFxuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBTZXJpYWxpemF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHNlcmlhbGl6ZUxheW91dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBwYWdlczogdGhpcy5wYWdlc1N1YmplY3QudmFsdWUsXG4gICAgICBhY3RpdmVQYWdlSWQ6IHRoaXMuYWN0aXZlUGFnZUlkU3ViamVjdC52YWx1ZSxcbiAgICB9IGFzIERhc2hib2FyZENvbmZpZyk7XG4gIH1cblxuICBsb2FkTGF5b3V0KGNvbmZpZzogYW55KSB7XG4gICAgaWYgKCFjb25maWc/LnBhZ2VzKSByZXR1cm47XG4gICAgdGhpcy5fYXBwbHlTaGFyZWQoY29uZmlnLCB0cnVlKTtcbiAgICB0aGlzLl9zYXZlU2hhcmVkKCk7XG4gICAgdGhpcy5fc2F2ZVBvc2l0aW9ucygpO1xuICB9XG5cbiAgcG9wT3V0UGFnZShwYWdlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59JHt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9IyR7cGFnZUlkfWA7XG4gICAgd2luZG93Lm9wZW4odXJsLCBgd29ya3NwYWNlXyR7cGFnZUlkfWAsXG4gICAgICAnd2lkdGg9MTI4MCxoZWlnaHQ9ODAwLG1lbnViYXI9bm8sdG9vbGJhcj1ubyxsb2NhdGlvbj1ubyxzdGF0dXM9bm8nKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQcml2YXRlIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFNhdmUgcGFnZSBsaXN0ICsgd2lkZ2V0IG1ldGFkYXRhICh0aXRsZXMsIGNhcmRDb2xvciwgZGF0YSkg4oCUIG5vIHBvc2l0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgX3NhdmVTaGFyZWQoKSB7XG4gICAgY29uc3Qgc3RyaXBwZWQgPSB0aGlzLnBhZ2VzU3ViamVjdC52YWx1ZS5tYXAocCA9PiAoe1xuICAgICAgLi4ucCxcbiAgICAgIHdpZGdldHM6IHAud2lkZ2V0cy5tYXAoKHsgaWQsIHRpdGxlLCBjYXJkQ29sb3IsIGRhdGEsIGNvbHMsIHJvd3MgfSkgPT5cbiAgICAgICAgLy8gS2VlcCBkZWZhdWx0IGNvbHMvcm93cyBzbyBuZXcgd2luZG93cyBnZXQgYSBzZW5zaWJsZSBmaXJzdC1vcGVuIGxheW91dC5cbiAgICAgICAgLy8geC95IGFyZSBpbnRlbnRpb25hbGx5IG9taXR0ZWQgZnJvbSBzaGFyZWQgc3RhdGUuXG4gICAgICAgICh7IGlkLCB0aXRsZSwgY2FyZENvbG9yLCBkYXRhLCB4OiAwLCB5OiAwLCBjb2xzLCByb3dzIH0pXG4gICAgICApLFxuICAgIH0pKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNIQVJFRF9LRVksIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHBhZ2VzOiBzdHJpcHBlZCxcbiAgICAgIGFjdGl2ZVBhZ2VJZDogdGhpcy5hY3RpdmVQYWdlSWRTdWJqZWN0LnZhbHVlLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoaXMgd2luZG93J3MgZ3JpZCBwb3NpdGlvbnMgKHgsIHksIGNvbHMsIHJvd3MpIHBlciB3aWRnZXQuXG4gICAqL1xuICBwcml2YXRlIF9zYXZlUG9zaXRpb25zKCkge1xuICAgIGNvbnN0IHBvc2l0aW9uczogUG9zaXRpb25NYXAgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgdGhpcy5wYWdlc1N1YmplY3QudmFsdWUpIHtcbiAgICAgIGZvciAoY29uc3QgdyBvZiBwYWdlLndpZGdldHMpIHtcbiAgICAgICAgcG9zaXRpb25zW2Ake3BhZ2UuaWR9OiR7dy5pZH1gXSA9IHsgeDogdy54LCB5OiB3LnksIGNvbHM6IHcuY29scywgcm93czogdy5yb3dzIH07XG4gICAgICB9XG4gICAgfVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMucG9zaXRpb25zS2V5LCBKU09OLnN0cmluZ2lmeShwb3NpdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVybGF5IHRoZSBwb3NpdGlvbnMgc2F2ZWQgZm9yIFRISVMgd2luZG93IG9uIHRvcCBvZiB0aGUgY3VycmVudCBwYWdlcy5cbiAgICovXG4gIHByaXZhdGUgX3Jlc3RvcmVQb3NpdGlvbnMoKSB7XG4gICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5wb3NpdGlvbnNLZXkpO1xuICAgIGlmICghcmF3KSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uczogUG9zaXRpb25NYXAgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgICBjb25zdCBwYWdlcyA9IHRoaXMucGFnZXNTdWJqZWN0LnZhbHVlO1xuICAgICAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdyBvZiBwYWdlLndpZGdldHMpIHtcbiAgICAgICAgICBjb25zdCBwb3MgPSBwb3NpdGlvbnNbYCR7cGFnZS5pZH06JHt3LmlkfWBdO1xuICAgICAgICAgIGlmIChwb3MpIHsgdy54ID0gcG9zLng7IHcueSA9IHBvcy55OyB3LmNvbHMgPSBwb3MuY29sczsgdy5yb3dzID0gcG9zLnJvd3M7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5wYWdlc1N1YmplY3QubmV4dChbLi4ucGFnZXNdKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbRGFzaGJvYXJkXSBiYWQgcG9zaXRpb25zIHN0YXRlJywgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGEgc2hhcmVkIGNvbmZpZyBvYmplY3QgKHBhZ2UgbGlzdCArIG1ldGFkYXRhKSB3aXRob3V0IHRvdWNoaW5nXG4gICAqIHRoaXMgd2luZG93J3Mgc2F2ZWQgcG9zaXRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlTaGFyZWQoY29uZmlnOiBhbnksIG92ZXJ3cml0ZVBvc2l0aW9uczogYm9vbGVhbikge1xuICAgIGlmICghY29uZmlnPy5wYWdlcykgcmV0dXJuO1xuICAgIHRoaXMucGFnZXNTdWJqZWN0Lm5leHQoY29uZmlnLnBhZ2VzKTtcbiAgICBpZiAoY29uZmlnLmFjdGl2ZVBhZ2VJZCkgdGhpcy5hY3RpdmVQYWdlSWRTdWJqZWN0Lm5leHQoY29uZmlnLmFjdGl2ZVBhZ2VJZCk7XG4gICAgaWYgKCFvdmVyd3JpdGVQb3NpdGlvbnMpIHRoaXMuX3Jlc3RvcmVQb3NpdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBzdHJ1Y3R1cmFsIHN5bmMgZXZlbnQgYXJyaXZpbmcgZnJvbSBhbm90aGVyIHdpbmRvdy5cbiAgICogUG9zaXRpb24gY2hhbmdlcyBhcmUgbmV2ZXIgc2VudCBzbyB3ZSBuZXZlciByZWNlaXZlIHRoZW0gaGVyZS5cbiAgICovXG4gIHByaXZhdGUgX29uU3luY0V2ZW50KGV2ZW50OiBTeW5jRXZlbnQpIHtcbiAgICAvLyBXb3JrIG9uIGEgc2hhbGxvdyBjbG9uZSBvZiBwYWdlcyBzbyBBbmd1bGFyIGRldGVjdHMgdGhlIGNoYW5nZVxuICAgIGNvbnN0IHBhZ2VzOiBQYWdlW10gPSB0aGlzLnBhZ2VzU3ViamVjdC52YWx1ZS5tYXAocCA9PiAoe1xuICAgICAgLi4ucCwgd2lkZ2V0czogWy4uLnAud2lkZ2V0c11cbiAgICB9KSk7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcblxuICAgICAgY2FzZSAnUEFHRV9BRERFRCc6XG4gICAgICAgIGlmICghcGFnZXMuZmluZChwID0+IHAuaWQgPT09IGV2ZW50LnBhZ2UuaWQpKSB7XG4gICAgICAgICAgcGFnZXMucHVzaCh7IC4uLmV2ZW50LnBhZ2UsIHdpZGdldHM6IFsuLi5ldmVudC5wYWdlLndpZGdldHNdIH0pO1xuICAgICAgICAgIHRoaXMucGFnZXNTdWJqZWN0Lm5leHQocGFnZXMpO1xuICAgICAgICAgIHRoaXMuX3NhdmVTaGFyZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUEFHRV9SRU1PVkVEJzoge1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gcGFnZXMuZmlsdGVyKHAgPT4gcC5pZCAhPT0gZXZlbnQucGFnZUlkKTtcbiAgICAgICAgaWYgKHVwZGF0ZWQubGVuZ3RoICE9PSBwYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VzU3ViamVjdC5uZXh0KHVwZGF0ZWQpO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVBhZ2VJZFN1YmplY3QudmFsdWUgPT09IGV2ZW50LnBhZ2VJZCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVQYWdlSWRTdWJqZWN0Lm5leHQodXBkYXRlZFswXT8uaWQgPz8gJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9zYXZlU2hhcmVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1dJREdFVF9BRERFRCc6IHtcbiAgICAgICAgY29uc3QgcGFnZSA9IHBhZ2VzLmZpbmQocCA9PiBwLmlkID09PSBldmVudC5wYWdlSWQpO1xuICAgICAgICBpZiAocGFnZSAmJiAhcGFnZS53aWRnZXRzLmZpbmQodyA9PiB3LmlkID09PSBldmVudC53aWRnZXQuaWQpKSB7XG4gICAgICAgICAgcGFnZS53aWRnZXRzID0gWy4uLnBhZ2Uud2lkZ2V0cywgeyAuLi5ldmVudC53aWRnZXQgfV07XG4gICAgICAgICAgdGhpcy5wYWdlc1N1YmplY3QubmV4dChwYWdlcyk7XG4gICAgICAgICAgdGhpcy5fc2F2ZVNoYXJlZCgpO1xuICAgICAgICAgIC8vIERvbid0IHRvdWNoIHBvc2l0aW9ucyDigJQgdGhpcyB3aW5kb3cgd2lsbCBrZWVwIGl0cyBvd24gbGF5b3V0IGZvclxuICAgICAgICAgIC8vIGV4aXN0aW5nIHdpZGdldHM7IHRoZSBuZXcgb25lIHN0YXJ0cyBhdCBpdHMgZGVmYXVsdCBwb3NpdGlvbi5cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnV0lER0VUX1JFTU9WRUQnOiB7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBwYWdlcy5maW5kKHAgPT4gcC5pZCA9PT0gZXZlbnQucGFnZUlkKTtcbiAgICAgICAgaWYgKHBhZ2UpIHtcbiAgICAgICAgICBwYWdlLndpZGdldHMgPSBwYWdlLndpZGdldHMuZmlsdGVyKHcgPT4gdy5pZCAhPT0gZXZlbnQud2lkZ2V0SWQpO1xuICAgICAgICAgIHRoaXMucGFnZXNTdWJqZWN0Lm5leHQocGFnZXMpO1xuICAgICAgICAgIHRoaXMuX3NhdmVTaGFyZWQoKTtcbiAgICAgICAgICB0aGlzLl9zYXZlUG9zaXRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1dJREdFVF9NRVRBJzoge1xuICAgICAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgcGFnZXMpIHtcbiAgICAgICAgICBjb25zdCB3ID0gcGFnZS53aWRnZXRzLmZpbmQodyA9PiB3LmlkID09PSBldmVudC53aWRnZXRJZCk7XG4gICAgICAgICAgaWYgKHcpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odywgZXZlbnQucGF0Y2gpO1xuICAgICAgICAgICAgdGhpcy5wYWdlc1N1YmplY3QubmV4dChwYWdlcyk7XG4gICAgICAgICAgICB0aGlzLl9zYXZlU2hhcmVkKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYnJvYWRjYXN0KGV2ZW50OiBTeW5jRXZlbnQpIHtcbiAgICB0aGlzLmNoYW5uZWw/LnBvc3RNZXNzYWdlKGV2ZW50KTtcbiAgfVxufVxuIl19
|
|
249
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.DashboardPersistenceFacade }, { type: i1.LocalStorageDashboardPersistence }, { type: i1.DashboardPersistence, decorators: [{
|
|
250
|
+
type: Optional
|
|
251
|
+
}, {
|
|
252
|
+
type: Inject,
|
|
253
|
+
args: [DASHBOARD_PERSISTENCE]
|
|
254
|
+
}] }]; } });
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2Rhc2hib2FyZC1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFxQixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQ0wscUJBQXFCLEdBS3RCLE1BQU0seUJBQXlCLENBQUM7OztBQVdqQyxNQUFNLE9BQU8scUJBQXFCO0lBa0JoQyxZQUNVLElBQVksRUFDWixpQkFBNkMsRUFDN0MsZ0JBQWtELEVBQ1AsV0FBd0M7UUFIbkYsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNEI7UUFDN0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQztRQUNQLGdCQUFXLEdBQVgsV0FBVyxDQUE2QjtRQWxCNUUsaUJBQVksR0FBRyx1QkFBdUIsQ0FBQztRQUNoRCxZQUFPLEdBQUcsT0FBTyxnQkFBZ0IsS0FBSyxXQUFXO1lBQ3ZELENBQUMsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRWxDLGlCQUFZLEdBQVc7WUFDdEMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1NBQ3pELENBQUM7UUFFTSxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFTLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RCx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5GLFdBQU0sR0FBRyxJQUFJLENBQUMs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LENBQUMseUJBQXlCO1FBQ3JDLElBQUk7WUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwRSxJQUFJLE1BQU07Z0JBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBRTNELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekYsSUFBSSxTQUFTO2dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUNyRTtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxpREFBaUQsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUM7O21IQXBRVSxxQkFBcUIsa0lBc0JWLHFCQUFxQjt1SEF0QmhDLHFCQUFxQixjQURSLE1BQU07NEZBQ25CLHFCQUFxQjtrQkFEakMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQXVCN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSwgT25EZXN0cm95LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQYWdlLCBXaWRnZXQsIERhc2hib2FyZENvbmZpZyB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7XG4gIERBU0hCT0FSRF9QRVJTSVNURU5DRSxcbiAgRGFzaGJvYXJkUGVyc2lzdGVuY2UsXG4gIERhc2hib2FyZFBlcnNpc3RlbmNlRmFjYWRlLFxuICBMb2NhbFN0b3JhZ2VEYXNoYm9hcmRQZXJzaXN0ZW5jZSxcbiAgUG9zaXRpb25NYXAsXG59IGZyb20gJy4vZGFzaGJvYXJkLXBlcnNpc3RlbmNlJztcblxudHlwZSBTeW5jRXZlbnQgPVxuICB8IHsgdHlwZTogJ1BBR0VfQURERUQnOyAgICBwYWdlOiBQYWdlIH1cbiAgfCB7IHR5cGU6ICdQQUdFX1JFTU9WRUQnOyAgcGFnZUlkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ1BBR0VfUkVOQU1FRCc7ICBwYWdlSWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1cbiAgfCB7IHR5cGU6ICdXSURHRVRfQURERUQnOyAgcGFnZUlkOiBzdHJpbmc7IHdpZGdldDogV2lkZ2V0IH1cbiAgfCB7IHR5cGU6ICdXSURHRVRfUkVNT1ZFRCc7cGFnZUlkOiBzdHJpbmc7IHdpZGdldElkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ1dJREdFVF9NRVRBJzsgICB3aWRnZXRJZDogc3RyaW5nOyBwYXRjaDogUGFydGlhbDxPbWl0PFdpZGdldCwnaWQnfCd4J3wneSd8J2NvbHMnfCdyb3dzJz4+IH07XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkU3RhdGVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3dJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhc2hib2FyZElkOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBDSEFOTkVMX05BTUUgPSAnb2dpZG9yX2Rhc2hib2FyZF9zeW5jJztcbiAgcHJpdmF0ZSBjaGFubmVsID0gdHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgIT09ICd1bmRlZmluZWQnXG4gICAgPyBuZXcgQnJvYWRjYXN0Q2hhbm5lbCh0aGlzLkNIQU5ORUxfTkFNRSkgOiBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5pdGlhbFBhZ2VzOiBQYWdlW10gPSBbXG4gICAgeyBpZDogJ3BhZ2UtMScsIG5hbWU6ICdEZWZhdWx0IFdvcmtzcGFjZScsIHdpZGdldHM6IFtdIH1cbiAgXTtcblxuICBwcml2YXRlIHBhZ2VzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnZVtdPih0aGlzLmluaXRpYWxQYWdlcyk7XG4gIHByaXZhdGUgYWN0aXZlUGFnZUlkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih0aGlzLmluaXRpYWxQYWdlc1swXS5pZCk7XG5cbiAgcGFnZXMkID0gdGhpcy5wYWdlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGFjdGl2ZVBhZ2VJZCQgPSB0aGlzLmFjdGl2ZVBhZ2VJZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBwZXJzaXN0ZW5jZUZhY2FkZTogRGFzaGJvYXJkUGVyc2lzdGVuY2VGYWNhZGUsXG4gICAgcHJpdmF0ZSBsb2NhbFBlcnNpc3RlbmNlOiBMb2NhbFN0b3JhZ2VEYXNoYm9hcmRQZXJzaXN0ZW5jZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERBU0hCT0FSRF9QRVJTSVNURU5DRSkgcHJpdmF0ZSBwZXJzaXN0ZW5jZTogRGFzaGJvYXJkUGVyc2lzdGVuY2UgfCBudWxsXG4gICkge1xuICAgIGNvbnN0IGhhc2ggPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgPyB3aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKCcjJywgJycpLnRyaW0oKSA6ICcnO1xuICAgIHRoaXMud2luZG93SWQgPSBoYXNoIHx8ICdtYWluJztcbiAgICB0aGlzLmRhc2hib2FyZElkID0gdGhpcy5wZXJzaXN0ZW5jZUZhY2FkZS5kYXNoYm9hcmRJZDtcbiAgICB0aGlzLnBlcnNpc3RlbmNlID0gdGhpcy5wZXJzaXN0ZW5jZSA/PyB0aGlzLmxvY2FsUGVyc2lzdGVuY2U7XG5cbiAgICB2b2lkIHRoaXMuX2Jvb3RzdHJhcEZyb21QZXJzaXN0ZW5jZSgpO1xuXG4gICAgaWYgKHRoaXMuY2hhbm5lbCkge1xuICAgICAgdGhpcy5jaGFubmVsLm9ubWVzc2FnZSA9IChldjogTWVzc2FnZUV2ZW50PFN5bmNFdmVudD4pID0+IHtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLl9vblN5bmNFdmVudChldi5kYXRhKSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkgeyB0aGlzLmNoYW5uZWw/LmNsb3NlKCk7IH1cblxuICBnZXRBY3RpdmVQYWdlKCk6IFBhZ2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnBhZ2VzU3ViamVjdC52YWx1ZS5maW5kKHAgPT4gcC5pZCA9PT0gdGhpcy5hY3RpdmVQYWdlSWRTdWJqZWN0LnZhbHVlKTtcbiAgfVxuXG4gIHNldEFjdGl2ZVBhZ2UoaWQ6IHN0cmluZykgeyB0aGlzLmFjdGl2ZVBhZ2VJZFN1YmplY3QubmV4dChpZCk7IH1cblxuICBhZGRQYWdlKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhZ2U6IFBhZ2UgPSB7IGlkOiBgcGFnZS0ke0RhdGUubm93KCl9YCwgbmFtZSwgd2lkZ2V0czogW10gfTtcbiAgICB0aGlzLnBhZ2VzU3ViamVjdC5uZXh0KFsuLi50aGlzLnBhZ2VzU3ViamVjdC52YWx1ZSwgcGFnZV0pO1xuICAgIHRoaXMuYWN0aXZlUGFnZUlkU3ViamVjdC5uZXh0KHBhZ2UuaWQpO1xuICAgIHRoaXMuX3NhdmVTaGFyZWQoKTtcbiAgICB0aGlzLl9icm9hZGNhc3QoeyB0eXBlOiAnUEFHRV9BRERFRCcsIHBhZ2UgfSk7XG4gIH1cblxuICByZW1vdmVQYWdlKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYWdlcyA9IHRoaXMucGFnZXNTdWJqZWN0LnZhbHVlO1xuICAgIGlmIChwYWdlcy5sZW5ndGggPD0gMSkgcmV0dXJuO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBwYWdlcy5maWx0ZXIocCA9PiBwLmlkICE9PSBpZCk7XG4gICAgdGhpcy5wYWdlc1N1YmplY3QubmV4dCh1cGRhdGVkKTtcbiAgICBpZiAodGhpcy5hY3RpdmVQYWdlSWRTdWJqZWN0LnZhbHVlID09PSBpZCkge1xuICAgICAgdGhpcy5hY3RpdmVQYWdlSWRTdWJqZWN0Lm5leHQodXBkYXRlZFswXS5pZCk7XG4gICAgfVxuICAgIHRoaXMuX3NhdmVTaGFyZWQoKTtcbiAgICB0aGlzLl9icm9hZGNhc3QoeyB0eXBlOiAnUEFHRV9SRU1PVkVEJywgcGFnZUlkOiBpZCB9KTtcbiAgfVxuXG4gIGFkZFdpZGdldCh3aWRnZXQ6IFBhcnRpYWw8V2lkZ2V0PiAmIHsgdGl0bGU6IHN0cmluZyB9KTogV2lkZ2V0IHtcbiAgICBjb25zdCBhY3RpdmVQYWdlID0gdGhpcy5nZXRBY3RpdmVQYWdlKCk7XG4gICAgaWYgKCFhY3RpdmVQYWdlKSB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjdGl2ZSBwYWdlJyk7XG4gICAgY29uc3QgbmV3V2lkZ2V0OiBXaWRnZXQgPSB7XG4gICAgICBpZDogYHdpZGdldC0ke0RhdGUubm93KCl9YCxcbiAgICAgIHg6IDAsIHk6IDAsIGNvbHM6IDQsIHJvd3M6IDMsXG4gICAgICAuLi53aWRnZXQsXG4gICAgfTtcbiAgICBhY3RpdmVQYWdlLndpZGdldHMgPSBbLi4uYWN0aXZlUGFnZS53aWRnZXRzLCBuZXdXaWRnZXRdO1xuICAgIHRoaXMucGFnZXNTdWJqZWN0Lm5leHQoWy4uLnRoaXMucGFnZXNTdWJqZWN0LnZhbHVlXSk7XG4gICAgdGhpcy5fc2F2ZVNoYXJlZCgpO1xuICAgIHRoaXMuX3NhdmVQb3NpdGlvbnMoKTtcbiAgICB0aGlzLl9icm9hZGNhc3QoeyB0eXBlOiAnV0lER0VUX0FEREVEJywgcGFnZUlkOiBhY3RpdmVQYWdlLmlkLCB3aWRnZXQ6IG5ld1dpZGdldCB9KTtcbiAgICByZXR1cm4gbmV3V2lkZ2V0O1xuICB9XG5cbiAgdXBkYXRlV2lkZ2V0KHdpZGdldElkOiBzdHJpbmcsIHBhdGNoOiBQYXJ0aWFsPE9taXQ8V2lkZ2V0LCdpZCd8J3gnfCd5J3wnY29scyd8J3Jvd3MnPj4pIHtcbiAgICBjb25zdCBwYWdlcyA9IHRoaXMucGFnZXNTdWJqZWN0LnZhbHVlO1xuICAgIGZvciAoY29uc3QgcGFnZSBvZiBwYWdlcykge1xuICAgICAgY29uc3QgdyA9IHBhZ2Uud2lkZ2V0cy5maW5kKHcgPT4gdy5pZCA9PT0gd2lkZ2V0SWQpO1xuICAgICAgaWYgKHcpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih3LCBwYXRjaCk7XG4gICAgICAgIHRoaXMucGFnZXNTdWJqZWN0Lm5leHQoWy4uLnBhZ2VzXSk7XG4gICAgICAgIHRoaXMuX3NhdmVTaGFyZWQoKTtcbiAgICAgICAgdGhpcy5fYnJvYWRjYXN0KHsgdHlwZTogJ1dJREdFVF9NRVRBJywgd2lkZ2V0SWQsIHBhdGNoIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlV2lkZ2V0KHdpZGdldElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3RpdmVQYWdlID0gdGhpcy5nZXRBY3RpdmVQYWdlKCk7XG4gICAgaWYgKCFhY3RpdmVQYWdlKSByZXR1cm47XG4gICAgY29uc3QgcGFnZUlkID0gYWN0aXZlUGFnZS5pZDtcbiAgICBhY3RpdmVQYWdlLndpZGdldHMgPSBhY3RpdmVQYWdlLndpZGdldHMuZmlsdGVyKHcgPT4gdy5pZCAhPT0gd2lkZ2V0SWQpO1xuICAgIHRoaXMucGFnZXNTdWJqZWN0Lm5leHQoWy4uLnRoaXMucGFnZXNTdWJqZWN0LnZhbHVlXSk7XG4gICAgdGhpcy5fc2F2ZVNoYXJlZCgpO1xuICAgIHRoaXMuX3NhdmVQb3NpdGlvbnMoKTtcbiAgICB0aGlzLl9icm9hZGNhc3QoeyB0eXBlOiAnV0lER0VUX1JFTU9WRUQnLCBwYWdlSWQsIHdpZGdldElkIH0pO1xuICB9XG5cbiAgdXBkYXRlV2lkZ2V0UG9zaXRpb24ocGFnZUlkOiBzdHJpbmcsIHdpZGdldElkOiBzdHJpbmcsIHg6IG51bWJlciwgeTogbnVtYmVyLCBjb2xzOiBudW1iZXIsIHJvd3M6IG51bWJlcikge1xuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5wYWdlc1N1YmplY3QudmFsdWU7XG4gICAgY29uc3Qgd2lkZ2V0ID0gcGFnZXMuZmluZChwID0+IHAuaWQgPT09IHBhZ2VJZCk/LndpZGdldHMuZmluZCh3ID0+IHcuaWQgPT09IHdpZGdldElkKTtcbiAgICBpZiAod2lkZ2V0KSB7XG4gICAgICB3aWRnZXQueCA9IHg7IHdpZGdldC55ID0geTsgd2lkZ2V0LmNvbHMgPSBjb2xzOyB3aWRnZXQucm93cyA9IHJvd3M7XG4gICAgICB0aGlzLnBhZ2VzU3ViamVjdC5uZXh0KFsuLi5wYWdlc10pO1xuICAgICAgdGhpcy5fc2F2ZVBvc2l0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHNlcmlhbGl6ZUxheW91dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBwYWdlczogdGhpcy5wYWdlc1N1YmplY3QudmFsdWUsXG4gICAgICBhY3RpdmVQYWdlSWQ6IHRoaXMuYWN0aXZlUGFnZUlkU3ViamVjdC52YWx1ZSxcbiAgICB9IGFzIERhc2hib2FyZENvbmZpZyk7XG4gIH1cblxuICBsb2FkTGF5b3V0KGNvbmZpZzogYW55KSB7XG4gICAgaWYgKCFjb25maWc/LnBhZ2VzKSByZXR1cm47XG4gICAgdGhpcy5fYXBwbHlTaGFyZWQoY29uZmlnKTtcbiAgICB0aGlzLl9zYXZlU2hhcmVkKCk7XG4gICAgdGhpcy5fc2F2ZVBvc2l0aW9ucygpO1xuICB9XG5cbiAgcG9wT3V0UGFnZShwYWdlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59JHt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9IyR7cGFnZUlkfWA7XG4gICAgd2luZG93Lm9wZW4odXJsLCBgd29ya3NwYWNlXyR7cGFnZUlkfWAsXG4gICAgICAnd2lkdGg9MTI4MCxoZWlnaHQ9ODAwLG1lbnViYXI9bm8sdG9vbGJhcj1ubyxsb2NhdGlvbj1ubyxzdGF0dXM9bm8nKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NhdmVTaGFyZWQoKSB7XG4gICAgY29uc3Qgc3RyaXBwZWQgPSB0aGlzLnBhZ2VzU3ViamVjdC52YWx1ZS5tYXAocCA9PiAoe1xuICAgICAgLi4ucCxcbiAgICAgIHdpZGdldHM6IHAud2lkZ2V0cy5tYXAoKHsgaWQsIHRpdGxlLCBjYXJkQ29sb3IsIGRhdGEsIGNvbHMsIHJvd3MgfSkgPT5cbiAgICAgICAgKHsgaWQsIHRpdGxlLCBjYXJkQ29sb3IsIGRhdGEsIHg6IDAsIHk6IDAsIGNvbHMsIHJvd3MgfSlcbiAgICAgICksXG4gICAgfSkpO1xuXG4gICAgY29uc3Qgc2hhcmVkOiBEYXNoYm9hcmRDb25maWcgPSB7XG4gICAgICBwYWdlczogc3RyaXBwZWQsXG4gICAgICBhY3RpdmVQYWdlSWQ6IHRoaXMuYWN0aXZlUGFnZUlkU3ViamVjdC52YWx1ZSxcbiAgICB9O1xuXG4gICAgdm9pZCB0aGlzLnBlcnNpc3RlbmNlPy5zYXZlU2hhcmVkKHRoaXMuZGFzaGJvYXJkSWQsIHNoYXJlZClcbiAgICAgIC5jYXRjaChlID0+IGNvbnNvbGUuZXJyb3IoJ1tEYXNoYm9hcmRdIGZhaWxlZCB0byBwZXJzaXN0IHNoYXJlZCBzdGF0ZScsIGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NhdmVQb3NpdGlvbnMoKSB7XG4gICAgY29uc3QgcG9zaXRpb25zOiBQb3NpdGlvbk1hcCA9IHt9O1xuICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLnBhZ2VzU3ViamVjdC52YWx1ZSkge1xuICAgICAgZm9yIChjb25zdCB3IG9mIHBhZ2Uud2lkZ2V0cykge1xuICAgICAgICBwb3NpdGlvbnNbYCR7cGFnZS5pZH06JHt3LmlkfWBdID0geyB4OiB3LngsIHk6IHcueSwgY29sczogdy5jb2xzLCByb3dzOiB3LnJvd3MgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2b2lkIHRoaXMucGVyc2lzdGVuY2U/LnNhdmVQb3NpdGlvbnModGhpcy5kYXNoYm9hcmRJZCwgdGhpcy53aW5kb3dJZCwgcG9zaXRpb25zKVxuICAgICAgLmNhdGNoKGUgPT4gY29uc29sZS5lcnJvcignW0Rhc2hib2FyZF0gZmFpbGVkIHRvIHBlcnNpc3Qgd2luZG93IHBvc2l0aW9ucycsIGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5UG9zaXRpb25zKHBvc2l0aW9uczogUG9zaXRpb25NYXApIHtcbiAgICBjb25zdCBwYWdlcyA9IHRoaXMucGFnZXNTdWJqZWN0LnZhbHVlO1xuICAgIGZvciAoY29uc3QgcGFnZSBvZiBwYWdlcykge1xuICAgICAgZm9yIChjb25zdCB3IG9mIHBhZ2Uud2lkZ2V0cykge1xuICAgICAgICBjb25zdCBwb3MgPSBwb3NpdGlvbnNbYCR7cGFnZS5pZH06JHt3LmlkfWBdO1xuICAgICAgICBpZiAocG9zKSB7IHcueCA9IHBvcy54OyB3LnkgPSBwb3MueTsgdy5jb2xzID0gcG9zLmNvbHM7IHcucm93cyA9IHBvcy5yb3dzOyB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGFnZXNTdWJqZWN0Lm5leHQoWy4uLnBhZ2VzXSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVNoYXJlZChjb25maWc6IGFueSkge1xuICAgIGlmICghY29uZmlnPy5wYWdlcykgcmV0dXJuO1xuICAgIHRoaXMucGFnZXNTdWJqZWN0Lm5leHQoY29uZmlnLnBhZ2VzKTtcbiAgICBpZiAoY29uZmlnLmFjdGl2ZVBhZ2VJZCkgdGhpcy5hY3RpdmVQYWdlSWRTdWJqZWN0Lm5leHQoY29uZmlnLmFjdGl2ZVBhZ2VJZCk7XG4gIH1cblxuICBwcml2YXRlIF9vblN5bmNFdmVudChldmVudDogU3luY0V2ZW50KSB7XG4gICAgY29uc3QgcGFnZXM6IFBhZ2VbXSA9IHRoaXMucGFnZXNTdWJqZWN0LnZhbHVlLm1hcChwID0+ICh7XG4gICAgICAuLi5wLCB3aWRnZXRzOiBbLi4ucC53aWRnZXRzXVxuICAgIH0pKTtcblxuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAnUEFHRV9BRERFRCc6XG4gICAgICAgIGlmICghcGFnZXMuZmluZChwID0+IHAuaWQgPT09IGV2ZW50LnBhZ2UuaWQpKSB7XG4gICAgICAgICAgcGFnZXMucHVzaCh7IC4uLmV2ZW50LnBhZ2UsIHdpZGdldHM6IFsuLi5ldmVudC5wYWdlLndpZGdldHNdIH0pO1xuICAgICAgICAgIHRoaXMucGFnZXNTdWJqZWN0Lm5leHQocGFnZXMpO1xuICAgICAgICAgIHRoaXMuX3NhdmVTaGFyZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUEFHRV9SRU1PVkVEJzoge1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gcGFnZXMuZmlsdGVyKHAgPT4gcC5pZCAhPT0gZXZlbnQucGFnZUlkKTtcbiAgICAgICAgaWYgKHVwZGF0ZWQubGVuZ3RoICE9PSBwYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VzU3ViamVjdC5uZXh0KHVwZGF0ZWQpO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVBhZ2VJZFN1YmplY3QudmFsdWUgPT09IGV2ZW50LnBhZ2VJZCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVQYWdlSWRTdWJqZWN0Lm5leHQodXBkYXRlZFswXT8uaWQgPz8gJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9zYXZlU2hhcmVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1dJREdFVF9BRERFRCc6IHtcbiAgICAgICAgY29uc3QgcGFnZSA9IHBhZ2VzLmZpbmQocCA9PiBwLmlkID09PSBldmVudC5wYWdlSWQpO1xuICAgICAgICBpZiAocGFnZSAmJiAhcGFnZS53aWRnZXRzLmZpbmQodyA9PiB3LmlkID09PSBldmVudC53aWRnZXQuaWQpKSB7XG4gICAgICAgICAgcGFnZS53aWRnZXRzID0gWy4uLnBhZ2Uud2lkZ2V0cywgeyAuLi5ldmVudC53aWRnZXQgfV07XG4gICAgICAgICAgdGhpcy5wYWdlc1N1YmplY3QubmV4dChwYWdlcyk7XG4gICAgICAgICAgdGhpcy5fc2F2ZVNoYXJlZCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdXSURHRVRfUkVNT1ZFRCc6IHtcbiAgICAgICAgY29uc3QgcGFnZSA9IHBhZ2VzLmZpbmQocCA9PiBwLmlkID09PSBldmVudC5wYWdlSWQpO1xuICAgICAgICBpZiAocGFnZSkge1xuICAgICAgICAgIHBhZ2Uud2lkZ2V0cyA9IHBhZ2Uud2lkZ2V0cy5maWx0ZXIodyA9PiB3LmlkICE9PSBldmVudC53aWRnZXRJZCk7XG4gICAgICAgICAgdGhpcy5wYWdlc1N1YmplY3QubmV4dChwYWdlcyk7XG4gICAgICAgICAgdGhpcy5fc2F2ZVNoYXJlZCgpO1xuICAgICAgICAgIHRoaXMuX3NhdmVQb3NpdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnV0lER0VUX01FVEEnOiB7XG4gICAgICAgIGZvciAoY29uc3QgcGFnZSBvZiBwYWdlcykge1xuICAgICAgICAgIGNvbnN0IHcgPSBwYWdlLndpZGdldHMuZmluZCh3ID0+IHcuaWQgPT09IGV2ZW50LndpZGdldElkKTtcbiAgICAgICAgICBpZiAodykge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih3LCBldmVudC5wYXRjaCk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzU3ViamVjdC5uZXh0KHBhZ2VzKTtcbiAgICAgICAgICAgIHRoaXMuX3NhdmVTaGFyZWQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9icm9hZGNhc3QoZXZlbnQ6IFN5bmNFdmVudCkge1xuICAgIHRoaXMuY2hhbm5lbD8ucG9zdE1lc3NhZ2UoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfYm9vdHN0cmFwRnJvbVBlcnNpc3RlbmNlKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaGFyZWQgPSBhd2FpdCB0aGlzLnBlcnNpc3RlbmNlPy5sb2FkU2hhcmVkKHRoaXMuZGFzaGJvYXJkSWQpO1xuICAgICAgaWYgKHNoYXJlZCkgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLl9hcHBseVNoYXJlZChzaGFyZWQpKTtcblxuICAgICAgY29uc3QgcG9zaXRpb25zID0gYXdhaXQgdGhpcy5wZXJzaXN0ZW5jZT8ubG9hZFBvc2l0aW9ucyh0aGlzLmRhc2hib2FyZElkLCB0aGlzLndpbmRvd0lkKTtcbiAgICAgIGlmIChwb3NpdGlvbnMpIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5fYXBwbHlQb3NpdGlvbnMocG9zaXRpb25zKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignW0Rhc2hib2FyZF0gZmFpbGVkIHRvIGJvb3RzdHJhcCBwZXJzaXN0ZWQgc3RhdGUnLCBlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -6,5 +6,6 @@ export * from './app/dashboard.component';
|
|
|
6
6
|
export * from './app/widget-renderer.component';
|
|
7
7
|
export * from './app/custom-grid.component';
|
|
8
8
|
export * from './app/dashboard-state.service';
|
|
9
|
+
export * from './app/dashboard-persistence';
|
|
9
10
|
export * from './app/models';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIEBvZ2lkb3IvZGFzaGJvYXJkXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9hcHAvYXBwLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9kYXNoYm9hcmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3dpZGdldC1yZW5kZXJlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvY3VzdG9tLWdyaWQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL2Rhc2hib2FyZC1zdGF0ZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL2Rhc2hib2FyZC1wZXJzaXN0ZW5jZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9tb2RlbHMnO1xuIl19
|