@c8y/ngx-components 1017.0.461 → 1017.0.466
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/context-dashboard/add-dashboard.factory.d.ts +3 -2
- package/context-dashboard/context-dashboard.model.d.ts +28 -0
- package/context-dashboard/context-dashboard.service.d.ts +4 -2
- package/context-dashboard/dashboard-availability.component.d.ts +3 -2
- package/context-dashboard/report-dashboard/report-dashboard-list.component.d.ts +3 -2
- package/core/common/ApplicationOptions.d.ts +2 -2
- package/core/common/humanize-app-name.pipe.d.ts +2 -1
- package/core/login/credentials.component.d.ts +1 -3
- package/core/login/login.component.d.ts +3 -1
- package/esm2020/context-dashboard/add-dashboard.factory.mjs +17 -5
- package/esm2020/context-dashboard/context-dashboard.component.mjs +23 -3
- package/esm2020/context-dashboard/context-dashboard.model.mjs +29 -1
- package/esm2020/context-dashboard/context-dashboard.service.mjs +21 -6
- package/esm2020/context-dashboard/dashboard-availability.component.mjs +17 -5
- package/esm2020/context-dashboard/report-dashboard/report-dashboard-list.component.mjs +21 -6
- package/esm2020/core/common/ApplicationOptions.mjs +1 -1
- package/esm2020/core/common/humanize-app-name.pipe.mjs +10 -5
- package/esm2020/core/login/credentials.component.mjs +14 -17
- package/esm2020/core/login/login.component.mjs +18 -15
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs +114 -13
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +86 -82
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs +113 -13
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +86 -82
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -6,29 +6,32 @@ import { LoginViews } from './login.model';
|
|
|
6
6
|
import { AlertService } from '../alert/alert.service';
|
|
7
7
|
import { gettext } from '../i18n/gettext';
|
|
8
8
|
import { CredentialsFromQueryParamsService } from './credentials-from-query-params.service';
|
|
9
|
+
import { AppStateService } from '../common/ui-state.service';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
import * as i1 from "./login.service";
|
|
11
12
|
import * as i2 from "../common/options.service";
|
|
12
13
|
import * as i3 from "../alert/alert.service";
|
|
13
14
|
import * as i4 from "./credentials-from-query-params.service";
|
|
14
|
-
import * as i5 from "
|
|
15
|
-
import * as i6 from "
|
|
16
|
-
import * as i7 from "../authentication/
|
|
17
|
-
import * as i8 from "../
|
|
18
|
-
import * as i9 from "
|
|
19
|
-
import * as i10 from "./
|
|
20
|
-
import * as i11 from "./
|
|
21
|
-
import * as i12 from "./
|
|
22
|
-
import * as i13 from "./
|
|
15
|
+
import * as i5 from "../common/ui-state.service";
|
|
16
|
+
import * as i6 from "@angular/common";
|
|
17
|
+
import * as i7 from "../authentication/sms-challenge.component";
|
|
18
|
+
import * as i8 from "../authentication/provide-phone-number.component";
|
|
19
|
+
import * as i9 from "../alert/alert-outlet.component";
|
|
20
|
+
import * as i10 from "./recover-password.component";
|
|
21
|
+
import * as i11 from "./change-password.component";
|
|
22
|
+
import * as i12 from "./credentials.component";
|
|
23
|
+
import * as i13 from "./totp-auth.component";
|
|
24
|
+
import * as i14 from "./tenant-id-setup.component";
|
|
23
25
|
export class LoginComponent {
|
|
24
26
|
/**
|
|
25
27
|
* Just DI.
|
|
26
28
|
*/
|
|
27
|
-
constructor(loginService, options, alert, credentialsFromQueryParamsService) {
|
|
29
|
+
constructor(loginService, options, alert, credentialsFromQueryParamsService, ui) {
|
|
28
30
|
this.loginService = loginService;
|
|
29
31
|
this.options = options;
|
|
30
32
|
this.alert = alert;
|
|
31
33
|
this.credentialsFromQueryParamsService = credentialsFromQueryParamsService;
|
|
34
|
+
this.ui = ui;
|
|
32
35
|
this.currentView = LoginViews.None;
|
|
33
36
|
this.LOGIN_VIEWS = LoginViews;
|
|
34
37
|
this.disabled = false;
|
|
@@ -109,15 +112,15 @@ export class LoginComponent {
|
|
|
109
112
|
return token;
|
|
110
113
|
}
|
|
111
114
|
}
|
|
112
|
-
LoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: LoginComponent, deps: [{ token: i1.LoginService }, { token: i2.OptionsService }, { token: i3.AlertService }, { token: i4.CredentialsFromQueryParamsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
113
|
-
LoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: LoginComponent, selector: "c8y-login", inputs: { name: "name" }, host: { listeners: { "keyup": "onkeyup($event)" } }, ngImport: i0, template: "<div\n class=\"loading card fadeInUp animated shadow5\"\n *ngIf=\"currentView !== LOGIN_VIEWS.None\"\n [ngSwitch]=\"currentView\"\n>\n <main class=\"card-block p-b-0\">\n <span class=\"mainlogo\"></span>\n\n <c8y-credentials\n *ngSwitchCase=\"LOGIN_VIEWS.Credentials\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n [loginViewParams]=\"loginViewParams\"\n ></c8y-credentials>\n <c8y-recover-password\n *ngSwitchCase=\"LOGIN_VIEWS.RecoverPassword\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n ></c8y-recover-password>\n <c8y-change-password\n *ngSwitchCase=\"LOGIN_VIEWS.ChangePassword\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n [credentials]=\"credentials\"\n ></c8y-change-password>\n <c8y-totp-auth\n *ngSwitchCase=\"LOGIN_VIEWS.TotpChallenge\"\n (onCancel)=\"reset()\"\n [view]=\"currentView\"\n [credentials]=\"credentials\"\n ></c8y-totp-auth>\n <c8y-totp-auth\n *ngSwitchCase=\"LOGIN_VIEWS.TotpSetup\"\n (onCancel)=\"reset()\"\n [view]=\"currentView\"\n [credentials]=\"credentials\"\n ></c8y-totp-auth>\n <c8y-sms-challenge\n *ngSwitchCase=\"LOGIN_VIEWS.SmsChallenge\"\n (onCancel)=\"reset()\"\n [credentials]=\"credentials\"\n ></c8y-sms-challenge>\n\n <c8y-provide-phone-number\n *ngSwitchCase=\"LOGIN_VIEWS.ProvidePhoneNumber\"\n (onCancel)=\"reset()\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n [credentials]=\"credentials\"\n ></c8y-provide-phone-number>\n <c8y-tenant-id-setup\n *ngSwitchCase=\"LOGIN_VIEWS.TenantIdSetup\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n ></c8y-tenant-id-setup>\n\n <c8y-alert-outlet position=\"static\"></c8y-alert-outlet>\n </main>\n</div>\n", dependencies: [{ kind: "directive", type:
|
|
115
|
+
LoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: LoginComponent, deps: [{ token: i1.LoginService }, { token: i2.OptionsService }, { token: i3.AlertService }, { token: i4.CredentialsFromQueryParamsService }, { token: i5.AppStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
116
|
+
LoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: LoginComponent, selector: "c8y-login", inputs: { name: "name" }, host: { listeners: { "keyup": "onkeyup($event)" } }, ngImport: i0, template: "<div\n class=\"loading card fadeInUp animated shadow5\"\n *ngIf=\"currentView !== LOGIN_VIEWS.None\"\n [ngSwitch]=\"currentView\"\n>\n <main class=\"card-block p-b-0\">\n <span class=\"mainlogo\"></span>\n\n <c8y-credentials\n *ngSwitchCase=\"LOGIN_VIEWS.Credentials\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n [loginViewParams]=\"loginViewParams\"\n ></c8y-credentials>\n <c8y-recover-password\n *ngSwitchCase=\"LOGIN_VIEWS.RecoverPassword\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n ></c8y-recover-password>\n <c8y-change-password\n *ngSwitchCase=\"LOGIN_VIEWS.ChangePassword\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n [credentials]=\"credentials\"\n ></c8y-change-password>\n <c8y-totp-auth\n *ngSwitchCase=\"LOGIN_VIEWS.TotpChallenge\"\n (onCancel)=\"reset()\"\n [view]=\"currentView\"\n [credentials]=\"credentials\"\n ></c8y-totp-auth>\n <c8y-totp-auth\n *ngSwitchCase=\"LOGIN_VIEWS.TotpSetup\"\n (onCancel)=\"reset()\"\n [view]=\"currentView\"\n [credentials]=\"credentials\"\n ></c8y-totp-auth>\n <c8y-sms-challenge\n *ngSwitchCase=\"LOGIN_VIEWS.SmsChallenge\"\n (onCancel)=\"reset()\"\n [credentials]=\"credentials\"\n ></c8y-sms-challenge>\n\n <c8y-provide-phone-number\n *ngSwitchCase=\"LOGIN_VIEWS.ProvidePhoneNumber\"\n (onCancel)=\"reset()\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n [credentials]=\"credentials\"\n ></c8y-provide-phone-number>\n <c8y-tenant-id-setup\n *ngSwitchCase=\"LOGIN_VIEWS.TenantIdSetup\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n ></c8y-tenant-id-setup>\n\n <div\n class=\"text-center m-t-8\"\n *ngIf=\"!!(ui.state$ | async).loginExtraLink\"\n >\n <div *ngIf=\"!!(ui.state$ | async).loginExtraLink.length; else singleExtraLink\">\n <a\n class=\"small d-block m-t-8\"\n title=\"{{ link.label }}\"\n role=\"button\"\n *ngFor=\"let link of (ui.state$ | async).loginExtraLink\"\n [href]=\"link.url\"\n >\n {{ link.label }}\n </a>\n </div>\n <ng-template #singleExtraLink>\n <a\n class=\"small\"\n title=\"{{ (ui.state$ | async).loginExtraLink.label }}\"\n role=\"button\"\n [href]=\"(ui.state$ | async).loginExtraLink.url\"\n >\n {{ (ui.state$ | async).loginExtraLink.label }}\n </a>\n </ng-template>\n </div>\n\n <c8y-alert-outlet position=\"static\"></c8y-alert-outlet>\n </main>\n</div>\n", dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i7.SmsChallengeComponent, selector: "c8y-sms-challenge", inputs: ["credentials"], outputs: ["onCancel"] }, { kind: "component", type: i8.ProvidePhoneNumberComponent, selector: "c8y-provide-phone-number", inputs: ["credentials"], outputs: ["onCancel", "onChangeView"] }, { kind: "component", type: i9.AlertOutletComponent, selector: "c8y-alert-outlet" }, { kind: "component", type: i10.RecoverPasswordComponent, selector: "c8y-recover-password", outputs: ["onChangeView"] }, { kind: "component", type: i11.ChangePasswordComponent, selector: "c8y-change-password", inputs: ["credentials"], outputs: ["onChangeView"] }, { kind: "component", type: i12.CredentialsComponent, selector: "c8y-credentials", inputs: ["loginViewParams"], outputs: ["onChangeView"] }, { kind: "component", type: i13.TotpAuthComponent, selector: "c8y-totp-auth", inputs: ["credentials", "view"], outputs: ["onCancel"] }, { kind: "component", type: i14.TenantIdSetupComponent, selector: "c8y-tenant-id-setup", outputs: ["onChangeView"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }] });
|
|
114
117
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: LoginComponent, decorators: [{
|
|
115
118
|
type: Component,
|
|
116
|
-
args: [{ selector: 'c8y-login', template: "<div\n class=\"loading card fadeInUp animated shadow5\"\n *ngIf=\"currentView !== LOGIN_VIEWS.None\"\n [ngSwitch]=\"currentView\"\n>\n <main class=\"card-block p-b-0\">\n <span class=\"mainlogo\"></span>\n\n <c8y-credentials\n *ngSwitchCase=\"LOGIN_VIEWS.Credentials\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n [loginViewParams]=\"loginViewParams\"\n ></c8y-credentials>\n <c8y-recover-password\n *ngSwitchCase=\"LOGIN_VIEWS.RecoverPassword\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n ></c8y-recover-password>\n <c8y-change-password\n *ngSwitchCase=\"LOGIN_VIEWS.ChangePassword\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n [credentials]=\"credentials\"\n ></c8y-change-password>\n <c8y-totp-auth\n *ngSwitchCase=\"LOGIN_VIEWS.TotpChallenge\"\n (onCancel)=\"reset()\"\n [view]=\"currentView\"\n [credentials]=\"credentials\"\n ></c8y-totp-auth>\n <c8y-totp-auth\n *ngSwitchCase=\"LOGIN_VIEWS.TotpSetup\"\n (onCancel)=\"reset()\"\n [view]=\"currentView\"\n [credentials]=\"credentials\"\n ></c8y-totp-auth>\n <c8y-sms-challenge\n *ngSwitchCase=\"LOGIN_VIEWS.SmsChallenge\"\n (onCancel)=\"reset()\"\n [credentials]=\"credentials\"\n ></c8y-sms-challenge>\n\n <c8y-provide-phone-number\n *ngSwitchCase=\"LOGIN_VIEWS.ProvidePhoneNumber\"\n (onCancel)=\"reset()\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n [credentials]=\"credentials\"\n ></c8y-provide-phone-number>\n <c8y-tenant-id-setup\n *ngSwitchCase=\"LOGIN_VIEWS.TenantIdSetup\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n ></c8y-tenant-id-setup>\n\n <c8y-alert-outlet position=\"static\"></c8y-alert-outlet>\n </main>\n</div>\n" }]
|
|
117
|
-
}], ctorParameters: function () { return [{ type: i1.LoginService }, { type: i2.OptionsService }, { type: i3.AlertService }, { type: i4.CredentialsFromQueryParamsService }]; }, propDecorators: { name: [{
|
|
119
|
+
args: [{ selector: 'c8y-login', template: "<div\n class=\"loading card fadeInUp animated shadow5\"\n *ngIf=\"currentView !== LOGIN_VIEWS.None\"\n [ngSwitch]=\"currentView\"\n>\n <main class=\"card-block p-b-0\">\n <span class=\"mainlogo\"></span>\n\n <c8y-credentials\n *ngSwitchCase=\"LOGIN_VIEWS.Credentials\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n [loginViewParams]=\"loginViewParams\"\n ></c8y-credentials>\n <c8y-recover-password\n *ngSwitchCase=\"LOGIN_VIEWS.RecoverPassword\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n ></c8y-recover-password>\n <c8y-change-password\n *ngSwitchCase=\"LOGIN_VIEWS.ChangePassword\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n [credentials]=\"credentials\"\n ></c8y-change-password>\n <c8y-totp-auth\n *ngSwitchCase=\"LOGIN_VIEWS.TotpChallenge\"\n (onCancel)=\"reset()\"\n [view]=\"currentView\"\n [credentials]=\"credentials\"\n ></c8y-totp-auth>\n <c8y-totp-auth\n *ngSwitchCase=\"LOGIN_VIEWS.TotpSetup\"\n (onCancel)=\"reset()\"\n [view]=\"currentView\"\n [credentials]=\"credentials\"\n ></c8y-totp-auth>\n <c8y-sms-challenge\n *ngSwitchCase=\"LOGIN_VIEWS.SmsChallenge\"\n (onCancel)=\"reset()\"\n [credentials]=\"credentials\"\n ></c8y-sms-challenge>\n\n <c8y-provide-phone-number\n *ngSwitchCase=\"LOGIN_VIEWS.ProvidePhoneNumber\"\n (onCancel)=\"reset()\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n [credentials]=\"credentials\"\n ></c8y-provide-phone-number>\n <c8y-tenant-id-setup\n *ngSwitchCase=\"LOGIN_VIEWS.TenantIdSetup\"\n (onChangeView)=\"handleLoginTemplate($event)\"\n ></c8y-tenant-id-setup>\n\n <div\n class=\"text-center m-t-8\"\n *ngIf=\"!!(ui.state$ | async).loginExtraLink\"\n >\n <div *ngIf=\"!!(ui.state$ | async).loginExtraLink.length; else singleExtraLink\">\n <a\n class=\"small d-block m-t-8\"\n title=\"{{ link.label }}\"\n role=\"button\"\n *ngFor=\"let link of (ui.state$ | async).loginExtraLink\"\n [href]=\"link.url\"\n >\n {{ link.label }}\n </a>\n </div>\n <ng-template #singleExtraLink>\n <a\n class=\"small\"\n title=\"{{ (ui.state$ | async).loginExtraLink.label }}\"\n role=\"button\"\n [href]=\"(ui.state$ | async).loginExtraLink.url\"\n >\n {{ (ui.state$ | async).loginExtraLink.label }}\n </a>\n </ng-template>\n </div>\n\n <c8y-alert-outlet position=\"static\"></c8y-alert-outlet>\n </main>\n</div>\n" }]
|
|
120
|
+
}], ctorParameters: function () { return [{ type: i1.LoginService }, { type: i2.OptionsService }, { type: i3.AlertService }, { type: i4.CredentialsFromQueryParamsService }, { type: i5.AppStateService }]; }, propDecorators: { name: [{
|
|
118
121
|
type: Input
|
|
119
122
|
}], onkeyup: [{
|
|
120
123
|
type: HostListener,
|
|
121
124
|
args: ['keyup', ['$event']]
|
|
122
125
|
}] } });
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFlBQVksRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFRNUYsTUFBTSxPQUFPLGNBQWM7SUFhekI7O09BRUc7SUFDSCxZQUNTLFlBQTBCLEVBQ3pCLE9BQXVCLEVBQ3ZCLEtBQW1CLEVBQ25CLGlDQUFvRTtRQUhyRSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUN6QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHNDQUFpQyxHQUFqQyxpQ0FBaUMsQ0FBbUM7UUFuQjlFLGdCQUFXLEdBQWUsVUFBVSxDQUFDLElBQUksQ0FBQztRQUMxQyxnQkFBVyxHQUFHLFVBQVUsQ0FBQztRQUV6QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSWpCLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUMvQixvQkFBZSxHQUF3RCxFQUFFLENB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Q0FBQyxDQUFDO1NBQzlEO2FBQU07WUFDTCxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDNUQ7SUFDSCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7U0FDaEU7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzJHQWhHVSxjQUFjOytGQUFkLGNBQWMsZ0lDZjNCLCt3REFzREE7MkZEdkNhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsV0FBVzsyTUFVWixJQUFJO3NCQUFaLEtBQUs7Z0JBeUM2QixPQUFPO3NCQUF6QyxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElDcmVkZW50aWFscywgVGVuYW50TG9naW5PcHRpb25UeXBlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi9sb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL29wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dpblZpZXdzIH0gZnJvbSAnLi9sb2dpbi5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuL2dldHRleHQnO1xuaW1wb3J0IHsgQ3JlZGVudGlhbHNGcm9tUXVlcnlQYXJhbXNTZXJ2aWNlIH0gZnJvbSAnLi9jcmVkZW50aWFscy1mcm9tLXF1ZXJ5LXBhcmFtcy5zZXJ2aWNlJztcbmltcG9ydCB7IENyZWRlbnRpYWxzQ29tcG9uZW50UGFyYW1zIH0gZnJvbSAnLi9jcmVkZW50aWFscy1jb21wb25lbnQtcGFyYW1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWxvZ2luJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgY3VycmVudFZpZXc6IExvZ2luVmlld3MgPSBMb2dpblZpZXdzLk5vbmU7XG4gIExPR0lOX1ZJRVdTID0gTG9naW5WaWV3cztcblxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcblxuICBjcmVkZW50aWFsczogSUNyZWRlbnRpYWxzID0ge307XG4gIGxvZ2luVmlld1BhcmFtczogQ3JlZGVudGlhbHNDb21wb25lbnRQYXJhbXMgfCB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGRpc3BsYXlBbGVydHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBUT0tFTl9QQVJBTSA9ICd0b2tlbic7XG5cbiAgLyoqXG4gICAqIEp1c3QgREkuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjcmVkZW50aWFsc0Zyb21RdWVyeVBhcmFtc1NlcnZpY2U6IENyZWRlbnRpYWxzRnJvbVF1ZXJ5UGFyYW1zU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFJlc2V0UGFzc3dvcmRUb2tlbigpO1xuICAgIGlmICh0aGlzLmxvZ2luU2VydmljZS5pc0ZpcnN0TG9naW4pIHtcbiAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgdGhpcy5sb2dpbkF1dG9tYXRpY2FsbHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMudG9rZW4gPSB0b2tlbjtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxvZ2luU2VydmljZS5pc0ZpcnN0TG9naW4gPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHdlIGRvIG5vdCBoYXZlIGFueSBxdWVyeVBhcmFtZXRlcnMgcmVsYXRlZCB0byBjcmVkZW50aWFscyBhZnRlciBsb2dnaW5nIGluIG9yIGV2ZW4gaWYgd2Ugd2VyZSBhbHJlYWR5IGxvZ2dlZCBpbi5cbiAgICB0aGlzLmNyZWRlbnRpYWxzRnJvbVF1ZXJ5UGFyYW1zU2VydmljZS5yZW1vdmVDcmVkZW50aWFsc0Zyb21RdWVyeVBhcmFtcygpO1xuICB9XG5cbiAgaGFuZGxlTG9naW5UZW1wbGF0ZShldmVudCkge1xuICAgIHRoaXMuY3VycmVudFZpZXcgPSBldmVudC52aWV3O1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBldmVudC5jcmVkZW50aWFscyB8fCB7fTtcbiAgICB0aGlzLmxvZ2luVmlld1BhcmFtcyA9IGV2ZW50LmxvZ2luVmlld1BhcmFtcyB8fCB7fTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSkgb25rZXl1cChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicpIHtcbiAgICAgIHRoaXMubG9naW5TZXJ2aWNlLmNsZWFuTWVzc2FnZXMoKTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLmxvZ2luU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuc2V0VmlldygpO1xuICAgIHRoaXMubG9naW5TZXJ2aWNlLmNsZWFuTWVzc2FnZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9naW5BdXRvbWF0aWNhbGx5KCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvZ2luU2VydmljZS5sb2dpbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IHByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSA9IHRoaXMubG9naW5TZXJ2aWNlLmxvZ2luTW9kZS50eXBlO1xuICAgICAgaWYgKHByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSA9PT0gVGVuYW50TG9naW5PcHRpb25UeXBlLk9BVVRIMikge1xuICAgICAgICB0aGlzLmxvZ2luU2VydmljZS5yZWRpcmVjdFRvT2F1dGgoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSA9PT0gVGVuYW50TG9naW5PcHRpb25UeXBlLk9BVVRIMl9JTlRFUk5BTCAmJlxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2h0dHBzOidcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnQ3VycmVudCBsb2dpbiBtb2RlIG9ubHkgc3VwcG9ydHMgSFRUUFMuJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGUucmVzICYmIGUucmVzLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRWaWV3KCkge1xuICAgIGlmICh0aGlzLmNyZWRlbnRpYWxzICYmIHRoaXMuY3JlZGVudGlhbHMudG9rZW4pIHtcbiAgICAgIHRoaXMuaGFuZGxlTG9naW5UZW1wbGF0ZSh7IHZpZXc6IExvZ2luVmlld3MuQ2hhbmdlUGFzc3dvcmQsIGNyZWRlbnRpYWxzOiB0aGlzLmNyZWRlbnRpYWxzIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2dpblNlcnZpY2Uuc2hvd1RlbmFudFNldHVwKCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlTG9naW5UZW1wbGF0ZSh7IHZpZXc6IExvZ2luVmlld3MuVGVuYW50SWRTZXR1cCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVMb2dpblRlbXBsYXRlKHsgdmlldzogTG9naW5WaWV3cy5DcmVkZW50aWFscyB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFJlc2V0UGFzc3dvcmRUb2tlbigpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMub3B0aW9ucy5nZXQodGhpcy5UT0tFTl9QQVJBTSk7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuc2V0KHRoaXMuVE9LRU5fUEFSQU0sIHVuZGVmaW5lZCk7IC8vIG9ubHkgdXNlIG9uY2VcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibG9hZGluZyBjYXJkIGZhZGVJblVwIGFuaW1hdGVkIHNoYWRvdzVcIlxuICAqbmdJZj1cImN1cnJlbnRWaWV3ICE9PSBMT0dJTl9WSUVXUy5Ob25lXCJcbiAgW25nU3dpdGNoXT1cImN1cnJlbnRWaWV3XCJcbj5cbiAgPG1haW4gY2xhc3M9XCJjYXJkLWJsb2NrIHAtYi0wXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtYWlubG9nb1wiPjwvc3Bhbj5cblxuICAgIDxjOHktY3JlZGVudGlhbHNcbiAgICAgICpuZ1N3aXRjaENhc2U9XCJMT0dJTl9WSUVXUy5DcmVkZW50aWFsc1wiXG4gICAgICAob25DaGFuZ2VWaWV3KT1cImhhbmRsZUxvZ2luVGVtcGxhdGUoJGV2ZW50KVwiXG4gICAgICBbbG9naW5WaWV3UGFyYW1zXT1cImxvZ2luVmlld1BhcmFtc1wiXG4gICAgPjwvYzh5LWNyZWRlbnRpYWxzPlxuICAgIDxjOHktcmVjb3Zlci1wYXNzd29yZFxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIkxPR0lOX1ZJRVdTLlJlY292ZXJQYXNzd29yZFwiXG4gICAgICAob25DaGFuZ2VWaWV3KT1cImhhbmRsZUxvZ2luVGVtcGxhdGUoJGV2ZW50KVwiXG4gICAgPjwvYzh5LXJlY292ZXItcGFzc3dvcmQ+XG4gICAgPGM4eS1jaGFuZ2UtcGFzc3dvcmRcbiAgICAgICpuZ1N3aXRjaENhc2U9XCJMT0dJTl9WSUVXUy5DaGFuZ2VQYXNzd29yZFwiXG4gICAgICAob25DaGFuZ2VWaWV3KT1cImhhbmRsZUxvZ2luVGVtcGxhdGUoJGV2ZW50KVwiXG4gICAgICBbY3JlZGVudGlhbHNdPVwiY3JlZGVudGlhbHNcIlxuICAgID48L2M4eS1jaGFuZ2UtcGFzc3dvcmQ+XG4gICAgPGM4eS10b3RwLWF1dGhcbiAgICAgICpuZ1N3aXRjaENhc2U9XCJMT0dJTl9WSUVXUy5Ub3RwQ2hhbGxlbmdlXCJcbiAgICAgIChvbkNhbmNlbCk9XCJyZXNldCgpXCJcbiAgICAgIFt2aWV3XT1cImN1cnJlbnRWaWV3XCJcbiAgICAgIFtjcmVkZW50aWFsc109XCJjcmVkZW50aWFsc1wiXG4gICAgPjwvYzh5LXRvdHAtYXV0aD5cbiAgICA8Yzh5LXRvdHAtYXV0aFxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIkxPR0lOX1ZJRVdTLlRvdHBTZXR1cFwiXG4gICAgICAob25DYW5jZWwpPVwicmVzZXQoKVwiXG4gICAgICBbdmlld109XCJjdXJyZW50Vmlld1wiXG4gICAgICBbY3JlZGVudGlhbHNdPVwiY3JlZGVudGlhbHNcIlxuICAgID48L2M4eS10b3RwLWF1dGg+XG4gICAgPGM4eS1zbXMtY2hhbGxlbmdlXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiTE9HSU5fVklFV1MuU21zQ2hhbGxlbmdlXCJcbiAgICAgIChvbkNhbmNlbCk9XCJyZXNldCgpXCJcbiAgICAgIFtjcmVkZW50aWFsc109XCJjcmVkZW50aWFsc1wiXG4gICAgPjwvYzh5LXNtcy1jaGFsbGVuZ2U+XG5cbiAgICA8Yzh5LXByb3ZpZGUtcGhvbmUtbnVtYmVyXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiTE9HSU5fVklFV1MuUHJvdmlkZVBob25lTnVtYmVyXCJcbiAgICAgIChvbkNhbmNlbCk9XCJyZXNldCgpXCJcbiAgICAgIChvbkNoYW5nZVZpZXcpPVwiaGFuZGxlTG9naW5UZW1wbGF0ZSgkZXZlbnQpXCJcbiAgICAgIFtjcmVkZW50aWFsc109XCJjcmVkZW50aWFsc1wiXG4gICAgPjwvYzh5LXByb3ZpZGUtcGhvbmUtbnVtYmVyPlxuICAgIDxjOHktdGVuYW50LWlkLXNldHVwXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiTE9HSU5fVklFV1MuVGVuYW50SWRTZXR1cFwiXG4gICAgICAob25DaGFuZ2VWaWV3KT1cImhhbmRsZUxvZ2luVGVtcGxhdGUoJGV2ZW50KVwiXG4gICAgPjwvYzh5LXRlbmFudC1pZC1zZXR1cD5cblxuICAgIDxjOHktYWxlcnQtb3V0bGV0IHBvc2l0aW9uPVwic3RhdGljXCI+PC9jOHktYWxlcnQtb3V0bGV0PlxuICA8L21haW4+XG48L2Rpdj5cbiJdfQ==
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFlBQVksRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQU83RCxNQUFNLE9BQU8sY0FBYztJQWF6Qjs7T0FFRztJQUNILFlBQ1MsWUFBMEIsRUFDekIsT0FBdUIsRUFDdkIsS0FBbUIsRUFDbkIsaUNBQW9FLEVBQ3JFLEVBQW1CO1FBSm5CLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQ3pCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsc0NBQWlDLEdBQWpDLGlDQUFpQyxDQUFtQztRQUNyRSxPQUFFLEdBQUYsRUFBRSxDQUFpQjtRQXBCNUIsZ0JBQVcsR0FBZSxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzFDLGdCQUFXLEdBQUcsVUFBVSxD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Q0FBQyxlQUFlLEVBQUUsRUFBRTtZQUM5QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDOUQ7YUFBTTtZQUNMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtTQUNoRTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7MkdBakdVLGNBQWM7K0ZBQWQsY0FBYyxnSUNoQjNCLCtrRkFpRkE7MkZEakVhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsV0FBVzt5T0FVWixJQUFJO3NCQUFaLEtBQUs7Z0JBMEM2QixPQUFPO3NCQUF6QyxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElDcmVkZW50aWFscywgVGVuYW50TG9naW5PcHRpb25UeXBlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi9sb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL29wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dpblZpZXdzIH0gZnJvbSAnLi9sb2dpbi5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuL2dldHRleHQnO1xuaW1wb3J0IHsgQ3JlZGVudGlhbHNGcm9tUXVlcnlQYXJhbXNTZXJ2aWNlIH0gZnJvbSAnLi9jcmVkZW50aWFscy1mcm9tLXF1ZXJ5LXBhcmFtcy5zZXJ2aWNlJztcbmltcG9ydCB7IENyZWRlbnRpYWxzQ29tcG9uZW50UGFyYW1zIH0gZnJvbSAnLi9jcmVkZW50aWFscy1jb21wb25lbnQtcGFyYW1zJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWxvZ2luJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgY3VycmVudFZpZXc6IExvZ2luVmlld3MgPSBMb2dpblZpZXdzLk5vbmU7XG4gIExPR0lOX1ZJRVdTID0gTG9naW5WaWV3cztcblxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcblxuICBjcmVkZW50aWFsczogSUNyZWRlbnRpYWxzID0ge307XG4gIGxvZ2luVmlld1BhcmFtczogQ3JlZGVudGlhbHNDb21wb25lbnRQYXJhbXMgfCB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGRpc3BsYXlBbGVydHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBUT0tFTl9QQVJBTSA9ICd0b2tlbic7XG5cbiAgLyoqXG4gICAqIEp1c3QgREkuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjcmVkZW50aWFsc0Zyb21RdWVyeVBhcmFtc1NlcnZpY2U6IENyZWRlbnRpYWxzRnJvbVF1ZXJ5UGFyYW1zU2VydmljZSxcbiAgICBwdWJsaWMgdWk6IEFwcFN0YXRlU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFJlc2V0UGFzc3dvcmRUb2tlbigpO1xuICAgIGlmICh0aGlzLmxvZ2luU2VydmljZS5pc0ZpcnN0TG9naW4pIHtcbiAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgdGhpcy5sb2dpbkF1dG9tYXRpY2FsbHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMudG9rZW4gPSB0b2tlbjtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxvZ2luU2VydmljZS5pc0ZpcnN0TG9naW4gPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHdlIGRvIG5vdCBoYXZlIGFueSBxdWVyeVBhcmFtZXRlcnMgcmVsYXRlZCB0byBjcmVkZW50aWFscyBhZnRlciBsb2dnaW5nIGluIG9yIGV2ZW4gaWYgd2Ugd2VyZSBhbHJlYWR5IGxvZ2dlZCBpbi5cbiAgICB0aGlzLmNyZWRlbnRpYWxzRnJvbVF1ZXJ5UGFyYW1zU2VydmljZS5yZW1vdmVDcmVkZW50aWFsc0Zyb21RdWVyeVBhcmFtcygpO1xuICB9XG5cbiAgaGFuZGxlTG9naW5UZW1wbGF0ZShldmVudCkge1xuICAgIHRoaXMuY3VycmVudFZpZXcgPSBldmVudC52aWV3O1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBldmVudC5jcmVkZW50aWFscyB8fCB7fTtcbiAgICB0aGlzLmxvZ2luVmlld1BhcmFtcyA9IGV2ZW50LmxvZ2luVmlld1BhcmFtcyB8fCB7fTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSkgb25rZXl1cChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicpIHtcbiAgICAgIHRoaXMubG9naW5TZXJ2aWNlLmNsZWFuTWVzc2FnZXMoKTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLmxvZ2luU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuc2V0VmlldygpO1xuICAgIHRoaXMubG9naW5TZXJ2aWNlLmNsZWFuTWVzc2FnZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9naW5BdXRvbWF0aWNhbGx5KCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvZ2luU2VydmljZS5sb2dpbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IHByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSA9IHRoaXMubG9naW5TZXJ2aWNlLmxvZ2luTW9kZS50eXBlO1xuICAgICAgaWYgKHByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSA9PT0gVGVuYW50TG9naW5PcHRpb25UeXBlLk9BVVRIMikge1xuICAgICAgICB0aGlzLmxvZ2luU2VydmljZS5yZWRpcmVjdFRvT2F1dGgoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSA9PT0gVGVuYW50TG9naW5PcHRpb25UeXBlLk9BVVRIMl9JTlRFUk5BTCAmJlxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2h0dHBzOidcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnQ3VycmVudCBsb2dpbiBtb2RlIG9ubHkgc3VwcG9ydHMgSFRUUFMuJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGUucmVzICYmIGUucmVzLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRWaWV3KCkge1xuICAgIGlmICh0aGlzLmNyZWRlbnRpYWxzICYmIHRoaXMuY3JlZGVudGlhbHMudG9rZW4pIHtcbiAgICAgIHRoaXMuaGFuZGxlTG9naW5UZW1wbGF0ZSh7IHZpZXc6IExvZ2luVmlld3MuQ2hhbmdlUGFzc3dvcmQsIGNyZWRlbnRpYWxzOiB0aGlzLmNyZWRlbnRpYWxzIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2dpblNlcnZpY2Uuc2hvd1RlbmFudFNldHVwKCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlTG9naW5UZW1wbGF0ZSh7IHZpZXc6IExvZ2luVmlld3MuVGVuYW50SWRTZXR1cCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVMb2dpblRlbXBsYXRlKHsgdmlldzogTG9naW5WaWV3cy5DcmVkZW50aWFscyB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFJlc2V0UGFzc3dvcmRUb2tlbigpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMub3B0aW9ucy5nZXQodGhpcy5UT0tFTl9QQVJBTSk7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuc2V0KHRoaXMuVE9LRU5fUEFSQU0sIHVuZGVmaW5lZCk7IC8vIG9ubHkgdXNlIG9uY2VcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibG9hZGluZyBjYXJkIGZhZGVJblVwIGFuaW1hdGVkIHNoYWRvdzVcIlxuICAqbmdJZj1cImN1cnJlbnRWaWV3ICE9PSBMT0dJTl9WSUVXUy5Ob25lXCJcbiAgW25nU3dpdGNoXT1cImN1cnJlbnRWaWV3XCJcbj5cbiAgPG1haW4gY2xhc3M9XCJjYXJkLWJsb2NrIHAtYi0wXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtYWlubG9nb1wiPjwvc3Bhbj5cblxuICAgIDxjOHktY3JlZGVudGlhbHNcbiAgICAgICpuZ1N3aXRjaENhc2U9XCJMT0dJTl9WSUVXUy5DcmVkZW50aWFsc1wiXG4gICAgICAob25DaGFuZ2VWaWV3KT1cImhhbmRsZUxvZ2luVGVtcGxhdGUoJGV2ZW50KVwiXG4gICAgICBbbG9naW5WaWV3UGFyYW1zXT1cImxvZ2luVmlld1BhcmFtc1wiXG4gICAgPjwvYzh5LWNyZWRlbnRpYWxzPlxuICAgIDxjOHktcmVjb3Zlci1wYXNzd29yZFxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIkxPR0lOX1ZJRVdTLlJlY292ZXJQYXNzd29yZFwiXG4gICAgICAob25DaGFuZ2VWaWV3KT1cImhhbmRsZUxvZ2luVGVtcGxhdGUoJGV2ZW50KVwiXG4gICAgPjwvYzh5LXJlY292ZXItcGFzc3dvcmQ+XG4gICAgPGM4eS1jaGFuZ2UtcGFzc3dvcmRcbiAgICAgICpuZ1N3aXRjaENhc2U9XCJMT0dJTl9WSUVXUy5DaGFuZ2VQYXNzd29yZFwiXG4gICAgICAob25DaGFuZ2VWaWV3KT1cImhhbmRsZUxvZ2luVGVtcGxhdGUoJGV2ZW50KVwiXG4gICAgICBbY3JlZGVudGlhbHNdPVwiY3JlZGVudGlhbHNcIlxuICAgID48L2M4eS1jaGFuZ2UtcGFzc3dvcmQ+XG4gICAgPGM4eS10b3RwLWF1dGhcbiAgICAgICpuZ1N3aXRjaENhc2U9XCJMT0dJTl9WSUVXUy5Ub3RwQ2hhbGxlbmdlXCJcbiAgICAgIChvbkNhbmNlbCk9XCJyZXNldCgpXCJcbiAgICAgIFt2aWV3XT1cImN1cnJlbnRWaWV3XCJcbiAgICAgIFtjcmVkZW50aWFsc109XCJjcmVkZW50aWFsc1wiXG4gICAgPjwvYzh5LXRvdHAtYXV0aD5cbiAgICA8Yzh5LXRvdHAtYXV0aFxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIkxPR0lOX1ZJRVdTLlRvdHBTZXR1cFwiXG4gICAgICAob25DYW5jZWwpPVwicmVzZXQoKVwiXG4gICAgICBbdmlld109XCJjdXJyZW50Vmlld1wiXG4gICAgICBbY3JlZGVudGlhbHNdPVwiY3JlZGVudGlhbHNcIlxuICAgID48L2M4eS10b3RwLWF1dGg+XG4gICAgPGM4eS1zbXMtY2hhbGxlbmdlXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiTE9HSU5fVklFV1MuU21zQ2hhbGxlbmdlXCJcbiAgICAgIChvbkNhbmNlbCk9XCJyZXNldCgpXCJcbiAgICAgIFtjcmVkZW50aWFsc109XCJjcmVkZW50aWFsc1wiXG4gICAgPjwvYzh5LXNtcy1jaGFsbGVuZ2U+XG5cbiAgICA8Yzh5LXByb3ZpZGUtcGhvbmUtbnVtYmVyXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiTE9HSU5fVklFV1MuUHJvdmlkZVBob25lTnVtYmVyXCJcbiAgICAgIChvbkNhbmNlbCk9XCJyZXNldCgpXCJcbiAgICAgIChvbkNoYW5nZVZpZXcpPVwiaGFuZGxlTG9naW5UZW1wbGF0ZSgkZXZlbnQpXCJcbiAgICAgIFtjcmVkZW50aWFsc109XCJjcmVkZW50aWFsc1wiXG4gICAgPjwvYzh5LXByb3ZpZGUtcGhvbmUtbnVtYmVyPlxuICAgIDxjOHktdGVuYW50LWlkLXNldHVwXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiTE9HSU5fVklFV1MuVGVuYW50SWRTZXR1cFwiXG4gICAgICAob25DaGFuZ2VWaWV3KT1cImhhbmRsZUxvZ2luVGVtcGxhdGUoJGV2ZW50KVwiXG4gICAgPjwvYzh5LXRlbmFudC1pZC1zZXR1cD5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgbS10LThcIlxuICAgICAgKm5nSWY9XCIhISh1aS5zdGF0ZSQgfCBhc3luYykubG9naW5FeHRyYUxpbmtcIlxuICAgID5cbiAgICAgIDxkaXYgKm5nSWY9XCIhISh1aS5zdGF0ZSQgfCBhc3luYykubG9naW5FeHRyYUxpbmsubGVuZ3RoOyBlbHNlIHNpbmdsZUV4dHJhTGlua1wiPlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwic21hbGwgZC1ibG9jayBtLXQtOFwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyBsaW5rLmxhYmVsIH19XCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbGluayBvZiAodWkuc3RhdGUkIHwgYXN5bmMpLmxvZ2luRXh0cmFMaW5rXCJcbiAgICAgICAgICBbaHJlZl09XCJsaW5rLnVybFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBsaW5rLmxhYmVsIH19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVFeHRyYUxpbms+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJzbWFsbFwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAodWkuc3RhdGUkIHwgYXN5bmMpLmxvZ2luRXh0cmFMaW5rLmxhYmVsIH19XCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbaHJlZl09XCIodWkuc3RhdGUkIHwgYXN5bmMpLmxvZ2luRXh0cmFMaW5rLnVybFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAodWkuc3RhdGUkIHwgYXN5bmMpLmxvZ2luRXh0cmFMaW5rLmxhYmVsIH19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG5cbiAgICA8Yzh5LWFsZXJ0LW91dGxldCBwb3NpdGlvbj1cInN0YXRpY1wiPjwvYzh5LWFsZXJ0LW91dGxldD5cbiAgPC9tYWluPlxuPC9kaXY+XG4iXX0=
|
|
@@ -114,6 +114,34 @@ const DASHBOARD_THEME_CLASSES = [
|
|
|
114
114
|
];
|
|
115
115
|
const STYLING_CLASS_PREFIXES = ['dashboard-theme-', 'panel-title-', 'panel-content-'];
|
|
116
116
|
const ALL_GLOBAL_ROLES_SELECTED = 'all';
|
|
117
|
+
const PRODUCT_EXPERIENCE = {
|
|
118
|
+
DASHBOARD: {
|
|
119
|
+
EVENTS: {
|
|
120
|
+
DASHBOARDS: 'dashboards',
|
|
121
|
+
REPORTS: 'reports'
|
|
122
|
+
},
|
|
123
|
+
COMPONENTS: {
|
|
124
|
+
DASHBOARD_VIEW: 'context-dashboard',
|
|
125
|
+
DASHBOARD_AVAILABILITY: 'dashboard-availability',
|
|
126
|
+
REPORTS_LIST: 'report-dashboard-list',
|
|
127
|
+
ADD_REPORT: 'report-dashboard-list',
|
|
128
|
+
ADD_DASHBOARD: 'add-dashboard',
|
|
129
|
+
DELETE_DASHBOARD: 'context-dashboard'
|
|
130
|
+
},
|
|
131
|
+
CONTEXT: {
|
|
132
|
+
REPORT: 'report',
|
|
133
|
+
DEVICE: 'device',
|
|
134
|
+
ASSET: 'asset',
|
|
135
|
+
GROUP: 'group'
|
|
136
|
+
},
|
|
137
|
+
ACTIONS: {
|
|
138
|
+
APPLY_GLOBAL_ROLES_CHANGES: 'applyGlobalRolesChanges',
|
|
139
|
+
DELETE: 'delete',
|
|
140
|
+
LOAD: 'load',
|
|
141
|
+
CREATE: 'create'
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
};
|
|
117
145
|
|
|
118
146
|
class ReportDashboardService {
|
|
119
147
|
constructor(inventoryService, navigatorService) {
|
|
@@ -209,7 +237,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
209
237
|
}], ctorParameters: function () { return [{ type: i2.NavigatorService }, { type: i1.InventoryService }, { type: ReportDashboardService }]; } });
|
|
210
238
|
|
|
211
239
|
class ContextDashboardService {
|
|
212
|
-
constructor(inventory, tabs, modal, translateService, router, navigator, permissions, alert, dynamicComponent) {
|
|
240
|
+
constructor(inventory, tabs, modal, translateService, router, navigator, permissions, alert, dynamicComponent, groupService) {
|
|
213
241
|
this.inventory = inventory;
|
|
214
242
|
this.tabs = tabs;
|
|
215
243
|
this.modal = modal;
|
|
@@ -219,6 +247,7 @@ class ContextDashboardService {
|
|
|
219
247
|
this.permissions = permissions;
|
|
220
248
|
this.alert = alert;
|
|
221
249
|
this.dynamicComponent = dynamicComponent;
|
|
250
|
+
this.groupService = groupService;
|
|
222
251
|
this.REPORT_PARTIAL_NAME = 'report_';
|
|
223
252
|
this.INVENTORY_ROLES = ['ROLE_INVENTORY_ADMIN'];
|
|
224
253
|
this.cache = new Map();
|
|
@@ -433,6 +462,20 @@ class ContextDashboardService {
|
|
|
433
462
|
}
|
|
434
463
|
});
|
|
435
464
|
}
|
|
465
|
+
getContextForGS(mo) {
|
|
466
|
+
if (this.groupService.isDevice(mo)) {
|
|
467
|
+
return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.DEVICE;
|
|
468
|
+
}
|
|
469
|
+
else if (this.groupService.isAsset(mo)) {
|
|
470
|
+
return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.ASSET;
|
|
471
|
+
}
|
|
472
|
+
else if (this.groupService.isGroup(mo)) {
|
|
473
|
+
return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.GROUP;
|
|
474
|
+
}
|
|
475
|
+
else {
|
|
476
|
+
return null;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
436
479
|
serializeWidgetConfigs(dashboard) {
|
|
437
480
|
return __awaiter(this, void 0, void 0, function* () {
|
|
438
481
|
const children = cloneDeep(dashboard.c8y_Dashboard.children);
|
|
@@ -614,14 +657,14 @@ class ContextDashboardService {
|
|
|
614
657
|
return null;
|
|
615
658
|
}
|
|
616
659
|
}
|
|
617
|
-
ContextDashboardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardService, deps: [{ token: i1.InventoryService }, { token: i2.TabsService }, { token: i2.ModalService }, { token: i3.TranslateService }, { token: i1$1.Router }, { token: i2.NavigatorService }, { token: i2.Permissions }, { token: i2.AlertService }, { token: i2.DynamicComponentService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
660
|
+
ContextDashboardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardService, deps: [{ token: i1.InventoryService }, { token: i2.TabsService }, { token: i2.ModalService }, { token: i3.TranslateService }, { token: i1$1.Router }, { token: i2.NavigatorService }, { token: i2.Permissions }, { token: i2.AlertService }, { token: i2.DynamicComponentService }, { token: i2.GroupService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
618
661
|
ContextDashboardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardService, providedIn: 'root' });
|
|
619
662
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardService, decorators: [{
|
|
620
663
|
type: Injectable,
|
|
621
664
|
args: [{
|
|
622
665
|
providedIn: 'root'
|
|
623
666
|
}]
|
|
624
|
-
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i2.TabsService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i1$1.Router }, { type: i2.NavigatorService }, { type: i2.Permissions }, { type: i2.AlertService }, { type: i2.DynamicComponentService }]; } });
|
|
667
|
+
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i2.TabsService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i1$1.Router }, { type: i2.NavigatorService }, { type: i2.Permissions }, { type: i2.AlertService }, { type: i2.DynamicComponentService }, { type: i2.GroupService }]; } });
|
|
625
668
|
|
|
626
669
|
class AppearanceSettingsComponent {
|
|
627
670
|
constructor() {
|
|
@@ -692,8 +735,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
692
735
|
}] } });
|
|
693
736
|
|
|
694
737
|
class DashboardAvailabilityComponent {
|
|
695
|
-
constructor(userGroupService) {
|
|
738
|
+
constructor(userGroupService, gainsightService) {
|
|
696
739
|
this.userGroupService = userGroupService;
|
|
740
|
+
this.gainsightService = gainsightService;
|
|
697
741
|
this.globalRolesIdsChange = new EventEmitter();
|
|
698
742
|
this.globalRolesItems = [];
|
|
699
743
|
this.globalRolesItemsSelected = [];
|
|
@@ -722,14 +766,25 @@ class DashboardAvailabilityComponent {
|
|
|
722
766
|
});
|
|
723
767
|
}
|
|
724
768
|
onSelected(items) {
|
|
769
|
+
var _a;
|
|
725
770
|
const allItemsSelected = items.length === this.globalRolesItems.length;
|
|
726
771
|
this.globalRolesItemsSelected = items;
|
|
727
772
|
if (allItemsSelected) {
|
|
728
773
|
this.globalRolesIdsChange.emit(ALL_GLOBAL_ROLES_SELECTED);
|
|
774
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {
|
|
775
|
+
component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_AVAILABILITY,
|
|
776
|
+
action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.APPLY_GLOBAL_ROLES_CHANGES,
|
|
777
|
+
globalRoles: ALL_GLOBAL_ROLES_SELECTED
|
|
778
|
+
});
|
|
729
779
|
}
|
|
730
780
|
else {
|
|
731
781
|
const selectedGlobalRolesIds = items.map(i => i.id);
|
|
732
782
|
this.globalRolesIdsChange.emit([...selectedGlobalRolesIds]);
|
|
783
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {
|
|
784
|
+
component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_AVAILABILITY,
|
|
785
|
+
action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.APPLY_GLOBAL_ROLES_CHANGES,
|
|
786
|
+
globalRoles: (_a = selectedGlobalRolesIds === null || selectedGlobalRolesIds === void 0 ? void 0 : selectedGlobalRolesIds.sort()) === null || _a === void 0 ? void 0 : _a.join()
|
|
787
|
+
});
|
|
733
788
|
}
|
|
734
789
|
}
|
|
735
790
|
getGlobalRoles() {
|
|
@@ -752,12 +807,12 @@ class DashboardAvailabilityComponent {
|
|
|
752
807
|
.filter(Boolean);
|
|
753
808
|
}
|
|
754
809
|
}
|
|
755
|
-
DashboardAvailabilityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardAvailabilityComponent, deps: [{ token: i1.UserGroupService }], target: i0.ɵɵFactoryTarget.Component });
|
|
810
|
+
DashboardAvailabilityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardAvailabilityComponent, deps: [{ token: i1.UserGroupService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
756
811
|
DashboardAvailabilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: { globalRolesIds: "globalRolesIds" }, outputs: { globalRolesIdsChange: "globalRolesIdsChange" }, ngImport: i0, template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: i2.SelectComponent, selector: "c8y-select", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection"], outputs: ["onChange"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
|
|
757
812
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardAvailabilityComponent, decorators: [{
|
|
758
813
|
type: Component,
|
|
759
814
|
args: [{ selector: 'c8y-dashboard-availability', template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n" }]
|
|
760
|
-
}], ctorParameters: function () { return [{ type: i1.UserGroupService }]; }, propDecorators: { globalRolesIds: [{
|
|
815
|
+
}], ctorParameters: function () { return [{ type: i1.UserGroupService }, { type: i2.GainsightService }]; }, propDecorators: { globalRolesIds: [{
|
|
761
816
|
type: Input
|
|
762
817
|
}], globalRolesIdsChange: [{
|
|
763
818
|
type: Output
|
|
@@ -888,11 +943,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
888
943
|
}] } });
|
|
889
944
|
|
|
890
945
|
class AddDashboardFactory {
|
|
891
|
-
constructor(permissions, contextDashboardService, bsModal, contextRoute) {
|
|
946
|
+
constructor(permissions, contextDashboardService, bsModal, contextRoute, gainsightService) {
|
|
892
947
|
this.permissions = permissions;
|
|
893
948
|
this.contextDashboardService = contextDashboardService;
|
|
894
949
|
this.bsModal = bsModal;
|
|
895
950
|
this.contextRoute = contextRoute;
|
|
951
|
+
this.gainsightService = gainsightService;
|
|
896
952
|
}
|
|
897
953
|
get(activatedRoute) {
|
|
898
954
|
var _a;
|
|
@@ -931,6 +987,16 @@ class AddDashboardFactory {
|
|
|
931
987
|
const dashboardMO = yield this.contextDashboardService.create(dashboardCfg, this.currentContext);
|
|
932
988
|
yield this.contextDashboardService.navigateToDashboard(dashboardMO);
|
|
933
989
|
modal.close();
|
|
990
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {
|
|
991
|
+
component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_DASHBOARD,
|
|
992
|
+
action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,
|
|
993
|
+
name: dashboardCfg.name,
|
|
994
|
+
id: dashboardMO.id,
|
|
995
|
+
dashboardType: dashboardMO.c8y_Dashboard.deviceType
|
|
996
|
+
? dashboardMO.c8y_Dashboard.deviceTypeValue
|
|
997
|
+
: null,
|
|
998
|
+
context: this.contextDashboardService.getContextForGS(this.currentContext.contextData)
|
|
999
|
+
});
|
|
934
1000
|
}
|
|
935
1001
|
catch (ex) {
|
|
936
1002
|
// intended empty
|
|
@@ -946,14 +1012,14 @@ class AddDashboardFactory {
|
|
|
946
1012
|
});
|
|
947
1013
|
}
|
|
948
1014
|
}
|
|
949
|
-
AddDashboardFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddDashboardFactory, deps: [{ token: i2.Permissions }, { token: ContextDashboardService }, { token: i3$1.BsModalService }, { token: i2.ContextRouteService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1015
|
+
AddDashboardFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddDashboardFactory, deps: [{ token: i2.Permissions }, { token: ContextDashboardService }, { token: i3$1.BsModalService }, { token: i2.ContextRouteService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
950
1016
|
AddDashboardFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddDashboardFactory, providedIn: 'root' });
|
|
951
1017
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddDashboardFactory, decorators: [{
|
|
952
1018
|
type: Injectable,
|
|
953
1019
|
args: [{
|
|
954
1020
|
providedIn: 'root'
|
|
955
1021
|
}]
|
|
956
|
-
}], ctorParameters: function () { return [{ type: i2.Permissions }, { type: ContextDashboardService }, { type: i3$1.BsModalService }, { type: i2.ContextRouteService }]; } });
|
|
1022
|
+
}], ctorParameters: function () { return [{ type: i2.Permissions }, { type: ContextDashboardService }, { type: i3$1.BsModalService }, { type: i2.ContextRouteService }, { type: i2.GainsightService }]; } });
|
|
957
1023
|
|
|
958
1024
|
class AddDashboardComponent {
|
|
959
1025
|
constructor(addDashboardFactory) {
|
|
@@ -1406,6 +1472,14 @@ class ContextDashboardComponent {
|
|
|
1406
1472
|
const route = this.route.parent.snapshot.url.map(segment => segment.path).join('/');
|
|
1407
1473
|
this.router.navigateByUrl(route);
|
|
1408
1474
|
}
|
|
1475
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {
|
|
1476
|
+
component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DELETE_DASHBOARD,
|
|
1477
|
+
action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.DELETE,
|
|
1478
|
+
name: this.dashboard.name,
|
|
1479
|
+
id: this.mo.id,
|
|
1480
|
+
dashboardType: this.dashboard.deviceType ? this.dashboard.deviceTypeValue : null,
|
|
1481
|
+
context: this.contextDashboardService.getContextForGS(this.context)
|
|
1482
|
+
});
|
|
1409
1483
|
});
|
|
1410
1484
|
}
|
|
1411
1485
|
/**
|
|
@@ -1674,6 +1748,18 @@ class ContextDashboardComponent {
|
|
|
1674
1748
|
this.addReportDashboardSettings();
|
|
1675
1749
|
}
|
|
1676
1750
|
this.isLoading = false;
|
|
1751
|
+
this.gainsightService.triggerEvent(isReport
|
|
1752
|
+
? PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS
|
|
1753
|
+
: PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {
|
|
1754
|
+
component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_VIEW,
|
|
1755
|
+
action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.LOAD,
|
|
1756
|
+
name: this.dashboard.name,
|
|
1757
|
+
id: this.mo.id,
|
|
1758
|
+
dashboardType: this.dashboard.deviceType ? this.dashboard.deviceTypeValue : null,
|
|
1759
|
+
context: isReport
|
|
1760
|
+
? PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT
|
|
1761
|
+
: this.contextDashboardService.getContextForGS(this.context)
|
|
1762
|
+
});
|
|
1677
1763
|
});
|
|
1678
1764
|
}
|
|
1679
1765
|
mergeWidgetClasses(widget) {
|
|
@@ -2866,7 +2952,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
2866
2952
|
}] });
|
|
2867
2953
|
|
|
2868
2954
|
class ReportDashboardListComponent {
|
|
2869
|
-
constructor(inventoryService, contextDashboardService, bsModal, translateService, modal, alertService, reportDashboardService, permissions) {
|
|
2955
|
+
constructor(inventoryService, contextDashboardService, bsModal, translateService, modal, alertService, reportDashboardService, permissions, gainsightService) {
|
|
2870
2956
|
this.inventoryService = inventoryService;
|
|
2871
2957
|
this.contextDashboardService = contextDashboardService;
|
|
2872
2958
|
this.bsModal = bsModal;
|
|
@@ -2875,6 +2961,7 @@ class ReportDashboardListComponent {
|
|
|
2875
2961
|
this.alertService = alertService;
|
|
2876
2962
|
this.reportDashboardService = reportDashboardService;
|
|
2877
2963
|
this.permissions = permissions;
|
|
2964
|
+
this.gainsightService = gainsightService;
|
|
2878
2965
|
this.textFilter$ = new BehaviorSubject('');
|
|
2879
2966
|
this.reload$ = new BehaviorSubject(null);
|
|
2880
2967
|
this.reloading = false;
|
|
@@ -2928,6 +3015,13 @@ class ReportDashboardListComponent {
|
|
|
2928
3015
|
}
|
|
2929
3016
|
this.reload$.next();
|
|
2930
3017
|
modal.close();
|
|
3018
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS, {
|
|
3019
|
+
component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_REPORT,
|
|
3020
|
+
action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,
|
|
3021
|
+
name: report.name,
|
|
3022
|
+
id: report.id,
|
|
3023
|
+
context: PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT
|
|
3024
|
+
});
|
|
2931
3025
|
}
|
|
2932
3026
|
catch (ex) {
|
|
2933
3027
|
if (ex) {
|
|
@@ -2960,6 +3054,13 @@ class ReportDashboardListComponent {
|
|
|
2960
3054
|
this.reportDashboardService.removeNavigatorNode(report);
|
|
2961
3055
|
}
|
|
2962
3056
|
this.reload$.next();
|
|
3057
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS, {
|
|
3058
|
+
component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.REPORTS_LIST,
|
|
3059
|
+
action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.DELETE,
|
|
3060
|
+
name: report.name,
|
|
3061
|
+
id: report.id,
|
|
3062
|
+
context: PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT
|
|
3063
|
+
});
|
|
2963
3064
|
}
|
|
2964
3065
|
catch (ex) {
|
|
2965
3066
|
if (ex) {
|
|
@@ -2978,12 +3079,12 @@ class ReportDashboardListComponent {
|
|
|
2978
3079
|
});
|
|
2979
3080
|
}
|
|
2980
3081
|
}
|
|
2981
|
-
ReportDashboardListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ReportDashboardListComponent, deps: [{ token: i1.InventoryService }, { token: ContextDashboardService }, { token: i3$1.BsModalService }, { token: i3.TranslateService }, { token: i2.ModalService }, { token: i2.AlertService }, { token: ReportDashboardService }, { token: i2.Permissions }], target: i0.ɵɵFactoryTarget.Component });
|
|
3082
|
+
ReportDashboardListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ReportDashboardListComponent, deps: [{ token: i1.InventoryService }, { token: ContextDashboardService }, { token: i3$1.BsModalService }, { token: i3.TranslateService }, { token: i2.ModalService }, { token: i2.AlertService }, { token: ReportDashboardService }, { token: i2.Permissions }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2982
3083
|
ReportDashboardListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ReportDashboardListComponent, selector: "c8y-report-dashboard-list", viewQueries: [{ propertyName: "filter", first: true, predicate: FilterInputComponent, descendants: true }], ngImport: i0, template: "<c8y-title>\n {{ 'Reports' | translate }}\n</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'left'\" itemClass=\"navbar-form\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n type=\"search\"\n [attr.aria-label]=\"'Filter' | translate\"\n placeholder=\"{{ 'Filter\u2026' | translate }}\"\n [ngModel]=\"textFilter$ | async\"\n (ngModelChange)=\"textFilter$.next($event)\"\n />\n <span class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"(textFilter$ | async).length === 0\"></i>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"(textFilter$ | async).length > 0\"\n (click)=\"textFilter$.next('')\"\n px-event=\"Clear filtering reports\"\n ></i>\n </span>\n </div>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add report' | translate }}\"\n [attr.data-cy]=\"'reports-add-report-action-bar-button'\"\n type=\"button\"\n (click)=\"add()\"\n [disabled]=\"!canAddReport\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add report' | translate }}\n </button>\n <button\n *ngIf=\"!canAddReport\"\n class=\"btn btn-dot m-r-16\"\n popover=\"{{ 'You don\\'t have permission to add reports' | translate }}\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'info-circle'\" class=\"text-primary\"></i>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadReports()\"\n >\n <i [ngClass]=\"{ 'icon-spin': reloading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/users-guide/cockpit/#reports\"></c8y-help>\n\n<c8y-list-group>\n <c8y-li\n class=\"page-sticky-header hidden-xs hidden-sm\"\n *ngIf=\"(reports$ | async)?.data.length > 0\"\n >\n <c8y-li-icon>\n <i class=\"p-l-24\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-3\">\n {{ 'Report' | translate }}\n </div>\n <div class=\"col-6\">\n {{ 'Description' | translate }}\n </div>\n <div class=\"col-2\">\n {{ 'Show in navigator' | translate }}\n </div>\n </c8y-li-body>\n </c8y-li>\n\n <c8y-li *c8yFor=\"let report of reports$; let i = index; loadMore: 'auto'\">\n <c8y-li-icon [icon]=\"report.icon\"></c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-3\">\n <button\n class=\"btn-clean\"\n title=\"{{ report.name }}\"\n type=\"button\"\n routerLink=\"/reports/{{ report.id }}\"\n >\n <span class=\"text-truncate\">\n {{ report.name }}\n </span>\n </button>\n </div>\n <div class=\"col-6\">\n <p class=\"small text-truncate-wrap\">\n <em class=\"text-muted\" *ngIf=\"!report.description; else showDescription\">\n {{ 'No description available' | translate }}\n </em>\n <ng-template #showDescription>\n {{ report.description }}\n </ng-template>\n </p>\n </div>\n <div class=\"col-2 fit-h-20 m-t-xs-8\">\n <label class=\"c8y-switch c8y-switch--inline\" title=\"{{ 'Show in navigator' | translate }}\">\n <input\n [(ngModel)]=\"!!report.c8y_IsNavigatorNode\"\n type=\"checkbox\"\n (change)=\"update(report)\"\n />\n <span></span>\n <span class=\"visible-xs\">\n {{ 'Show in navigator' | translate }}\n </span>\n </label>\n </div>\n <div class=\"col-1 hidden-xs\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto d-flex\"\n (click)=\"delete(report)\"\n tooltip=\"{{ 'Remove report' | translate }}\"\n [delay]=\"500\"\n [attr.aria-label]=\"'Remove report' | translate\"\n type=\"button\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n <div class=\"visible-xs p-t-8 text-right\">\n <button\n class=\"btn btn-default btn-sm\"\n (click)=\"delete(report)\"\n title=\"{{ 'Remove report' | translate }}\"\n type=\"button\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Remove report' | translate }}\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n</c8y-list-group>\n\n<c8y-ui-empty-state\n *ngIf=\"(reports$ | async)?.data.length === 0\"\n [icon]=\"'c8y-reports'\"\n [title]=\"'There are no reports defined.' | translate\"\n [subtitle]=\"'Add a report first.' | translate\"\n>\n <p>\n <button\n title=\"{{ 'Add report' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary\"\n [attr.data-cy]=\"'reports-add-report-empty-state-button'\"\n [disabled]=\"!canAddReport\"\n (click)=\"add()\"\n >\n {{ 'Add report' | translate }}\n </button>\n </p>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/cockpit/#reports\">User guide`KEEP_ORIGINAL`</a>\n .\n </small>\n </p>\n</c8y-ui-empty-state>\n", dependencies: [{ kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i2.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i3$2.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i1$1.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] });
|
|
2983
3084
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ReportDashboardListComponent, decorators: [{
|
|
2984
3085
|
type: Component,
|
|
2985
3086
|
args: [{ selector: 'c8y-report-dashboard-list', template: "<c8y-title>\n {{ 'Reports' | translate }}\n</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'left'\" itemClass=\"navbar-form\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n type=\"search\"\n [attr.aria-label]=\"'Filter' | translate\"\n placeholder=\"{{ 'Filter\u2026' | translate }}\"\n [ngModel]=\"textFilter$ | async\"\n (ngModelChange)=\"textFilter$.next($event)\"\n />\n <span class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"(textFilter$ | async).length === 0\"></i>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"(textFilter$ | async).length > 0\"\n (click)=\"textFilter$.next('')\"\n px-event=\"Clear filtering reports\"\n ></i>\n </span>\n </div>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add report' | translate }}\"\n [attr.data-cy]=\"'reports-add-report-action-bar-button'\"\n type=\"button\"\n (click)=\"add()\"\n [disabled]=\"!canAddReport\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add report' | translate }}\n </button>\n <button\n *ngIf=\"!canAddReport\"\n class=\"btn btn-dot m-r-16\"\n popover=\"{{ 'You don\\'t have permission to add reports' | translate }}\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'info-circle'\" class=\"text-primary\"></i>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadReports()\"\n >\n <i [ngClass]=\"{ 'icon-spin': reloading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/users-guide/cockpit/#reports\"></c8y-help>\n\n<c8y-list-group>\n <c8y-li\n class=\"page-sticky-header hidden-xs hidden-sm\"\n *ngIf=\"(reports$ | async)?.data.length > 0\"\n >\n <c8y-li-icon>\n <i class=\"p-l-24\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-3\">\n {{ 'Report' | translate }}\n </div>\n <div class=\"col-6\">\n {{ 'Description' | translate }}\n </div>\n <div class=\"col-2\">\n {{ 'Show in navigator' | translate }}\n </div>\n </c8y-li-body>\n </c8y-li>\n\n <c8y-li *c8yFor=\"let report of reports$; let i = index; loadMore: 'auto'\">\n <c8y-li-icon [icon]=\"report.icon\"></c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-3\">\n <button\n class=\"btn-clean\"\n title=\"{{ report.name }}\"\n type=\"button\"\n routerLink=\"/reports/{{ report.id }}\"\n >\n <span class=\"text-truncate\">\n {{ report.name }}\n </span>\n </button>\n </div>\n <div class=\"col-6\">\n <p class=\"small text-truncate-wrap\">\n <em class=\"text-muted\" *ngIf=\"!report.description; else showDescription\">\n {{ 'No description available' | translate }}\n </em>\n <ng-template #showDescription>\n {{ report.description }}\n </ng-template>\n </p>\n </div>\n <div class=\"col-2 fit-h-20 m-t-xs-8\">\n <label class=\"c8y-switch c8y-switch--inline\" title=\"{{ 'Show in navigator' | translate }}\">\n <input\n [(ngModel)]=\"!!report.c8y_IsNavigatorNode\"\n type=\"checkbox\"\n (change)=\"update(report)\"\n />\n <span></span>\n <span class=\"visible-xs\">\n {{ 'Show in navigator' | translate }}\n </span>\n </label>\n </div>\n <div class=\"col-1 hidden-xs\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto d-flex\"\n (click)=\"delete(report)\"\n tooltip=\"{{ 'Remove report' | translate }}\"\n [delay]=\"500\"\n [attr.aria-label]=\"'Remove report' | translate\"\n type=\"button\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n <div class=\"visible-xs p-t-8 text-right\">\n <button\n class=\"btn btn-default btn-sm\"\n (click)=\"delete(report)\"\n title=\"{{ 'Remove report' | translate }}\"\n type=\"button\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Remove report' | translate }}\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n</c8y-list-group>\n\n<c8y-ui-empty-state\n *ngIf=\"(reports$ | async)?.data.length === 0\"\n [icon]=\"'c8y-reports'\"\n [title]=\"'There are no reports defined.' | translate\"\n [subtitle]=\"'Add a report first.' | translate\"\n>\n <p>\n <button\n title=\"{{ 'Add report' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary\"\n [attr.data-cy]=\"'reports-add-report-empty-state-button'\"\n [disabled]=\"!canAddReport\"\n (click)=\"add()\"\n >\n {{ 'Add report' | translate }}\n </button>\n </p>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/cockpit/#reports\">User guide`KEEP_ORIGINAL`</a>\n .\n </small>\n </p>\n</c8y-ui-empty-state>\n" }]
|
|
2986
|
-
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: ContextDashboardService }, { type: i3$1.BsModalService }, { type: i3.TranslateService }, { type: i2.ModalService }, { type: i2.AlertService }, { type: ReportDashboardService }, { type: i2.Permissions }]; }, propDecorators: { filter: [{
|
|
3087
|
+
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: ContextDashboardService }, { type: i3$1.BsModalService }, { type: i3.TranslateService }, { type: i2.ModalService }, { type: i2.AlertService }, { type: ReportDashboardService }, { type: i2.Permissions }, { type: i2.GainsightService }]; }, propDecorators: { filter: [{
|
|
2987
3088
|
type: ViewChild,
|
|
2988
3089
|
args: [FilterInputComponent, { static: false }]
|
|
2989
3090
|
}] } });
|
|
@@ -3073,5 +3174,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
3073
3174
|
* Generated bundle index. Do not edit.
|
|
3074
3175
|
*/
|
|
3075
3176
|
|
|
3076
|
-
export { ALL_GLOBAL_ROLES_SELECTED, AddDashboardComponent, AddDashboardFactory, AppearanceSettingsComponent, COCKPIT_HOME_DASHBOARD_CONFIG, CONTEXT_DASHBOARD_CONFIG, CockpitDashboardComponent, CockpitDashboardModule, ContextDashboardComponent, ContextDashboardModule, ContextDashboardService, ContextDashboardType, DASHBOARD_THEME_CLASSES, DEFAULT_COCKPIT_HOME_WIDGETS, DashboardActionBarFactory, DashboardDetailComponent, DeviceDashboardGuard, DeviceInfoDashboardComponent, DeviceInfoDashboardModule, DeviceManagementHomeDashboardComponent, DeviceManagementHomeDashboardModule, GroupDashboardGuard, LegacyWelcomeComponent, PasteDashboardActionComponent, REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY, ReportDashboardGuard, ReportDashboardListComponent, ReportDashboardModule, ReportDashboardNavigationFactory, ReportDashboardService, STYLING_CLASS_PREFIXES, WIDGET_CONTENT_CLASSES, WIDGET_HEADER_CLASSES, WelcomeToCockpit, WidgetConfigComponent, WidgetPreviewComponent, WidgetService };
|
|
3177
|
+
export { ALL_GLOBAL_ROLES_SELECTED, AddDashboardComponent, AddDashboardFactory, AppearanceSettingsComponent, COCKPIT_HOME_DASHBOARD_CONFIG, CONTEXT_DASHBOARD_CONFIG, CockpitDashboardComponent, CockpitDashboardModule, ContextDashboardComponent, ContextDashboardModule, ContextDashboardService, ContextDashboardType, DASHBOARD_THEME_CLASSES, DEFAULT_COCKPIT_HOME_WIDGETS, DashboardActionBarFactory, DashboardDetailComponent, DeviceDashboardGuard, DeviceInfoDashboardComponent, DeviceInfoDashboardModule, DeviceManagementHomeDashboardComponent, DeviceManagementHomeDashboardModule, GroupDashboardGuard, LegacyWelcomeComponent, PRODUCT_EXPERIENCE, PasteDashboardActionComponent, REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY, ReportDashboardGuard, ReportDashboardListComponent, ReportDashboardModule, ReportDashboardNavigationFactory, ReportDashboardService, STYLING_CLASS_PREFIXES, WIDGET_CONTENT_CLASSES, WIDGET_HEADER_CLASSES, WelcomeToCockpit, WidgetConfigComponent, WidgetPreviewComponent, WidgetService };
|
|
3077
3178
|
//# sourceMappingURL=c8y-ngx-components-context-dashboard.mjs.map
|