@c8y/ngx-components 1021.60.1 → 1021.62.1
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/core/authentication/new-password.component.d.ts +6 -3
- package/core/authentication/new-password.component.d.ts.map +1 -1
- package/core/common/interval-based-reload.abstract.d.ts +12 -1
- package/core/common/interval-based-reload.abstract.d.ts.map +1 -1
- package/core/common/permissions.service.d.ts +2 -0
- package/core/common/permissions.service.d.ts.map +1 -1
- package/core/common/tenant-ui.service.d.ts +9 -2
- package/core/common/tenant-ui.service.d.ts.map +1 -1
- package/core/forms/phone-validation.directive.d.ts +3 -6
- package/core/forms/phone-validation.directive.d.ts.map +1 -1
- package/core/router/router.module.d.ts.map +1 -1
- package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts.map +1 -1
- package/esm2022/core/authentication/new-password.component.mjs +26 -5
- package/esm2022/core/common/interval-based-reload.abstract.mjs +50 -2
- package/esm2022/core/common/permissions.service.mjs +3 -1
- package/esm2022/core/common/tenant-ui.service.mjs +28 -6
- package/esm2022/core/forms/phone-validation.directive.mjs +18 -19
- package/esm2022/core/router/router.module.mjs +1 -5
- package/esm2022/core/user/user-edit.component.mjs +1 -1
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.service.mjs +8 -3
- package/esm2022/tenants/custom-properties/custom-properties.component.mjs +25 -5
- package/esm2022/tenants/existing-tenant.guard.mjs +18 -0
- package/esm2022/tenants/index.mjs +3 -1
- package/esm2022/tenants/support-user-access/support-user-access.component.mjs +31 -0
- package/esm2022/tenants/tenant-form/tenant-form-inputs-definitions.mjs +116 -0
- package/esm2022/tenants/tenant-form/tenant-form.component.mjs +294 -0
- package/esm2022/tenants/tenant-limits/tenant-limits-definitions.mjs +10 -17
- package/esm2022/tenants/tenant-limits/tenant-limits.component.mjs +42 -29
- package/esm2022/tenants/tenant-list/tenant-list.component.mjs +17 -8
- package/esm2022/tenants/tenants.model.mjs +30 -1
- package/esm2022/tenants/tenants.module.mjs +57 -22
- package/esm2022/translation-editor/data/translation-store.service.mjs +11 -8
- package/esm2022/translation-editor/index.mjs +22 -5
- package/esm2022/translation-editor/lazy/advanced-translation-editor/advanced-translation-editor.component.mjs +136 -0
- package/esm2022/translation-editor/lazy/index.mjs +2 -1
- package/esm2022/translation-editor/translation-editor-tab-factory.service.mjs +40 -0
- package/esm2022/translation-editor/translation-editor.constants.mjs +4 -0
- package/esm2022/upgrade/upgraded-services/index.mjs +2 -1
- package/esm2022/upgrade/upgraded-services/tenant-policies.service.mjs +11 -0
- package/esm2022/upgrade/upgraded-services/upgraded-services.module.mjs +12 -3
- package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +9 -7
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +9 -7
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +7 -2
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs +603 -82
- package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +9 -6
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +127 -2
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor.mjs +58 -4
- package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +22 -3
- package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +8 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +8 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +499 -413
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +17 -25
- package/locales/es.po +17 -25
- package/locales/fr.po +17 -25
- package/locales/ja_JP.po +17 -25
- package/locales/ko.po +17 -25
- package/locales/locales.pot +25 -24
- package/locales/nl.po +17 -25
- package/locales/pl.po +17 -25
- package/locales/pt_BR.po +17 -25
- package/locales/zh_CN.po +17 -25
- package/locales/zh_TW.po +17 -25
- package/package.json +1 -1
- package/tenants/custom-properties/custom-properties.component.d.ts +4 -2
- package/tenants/custom-properties/custom-properties.component.d.ts.map +1 -1
- package/tenants/existing-tenant.guard.d.ts +13 -0
- package/tenants/existing-tenant.guard.d.ts.map +1 -0
- package/tenants/index.d.ts +2 -0
- package/tenants/index.d.ts.map +1 -1
- package/tenants/support-user-access/support-user-access.component.d.ts +18 -0
- package/tenants/support-user-access/support-user-access.component.d.ts.map +1 -0
- package/tenants/tenant-form/tenant-form-inputs-definitions.d.ts +113 -0
- package/tenants/tenant-form/tenant-form-inputs-definitions.d.ts.map +1 -0
- package/tenants/tenant-form/tenant-form.component.d.ts +79 -0
- package/tenants/tenant-form/tenant-form.component.d.ts.map +1 -0
- package/tenants/tenant-limits/tenant-limits-definitions.d.ts +11 -15
- package/tenants/tenant-limits/tenant-limits-definitions.d.ts.map +1 -1
- package/tenants/tenant-limits/tenant-limits.component.d.ts +9 -7
- package/tenants/tenant-limits/tenant-limits.component.d.ts.map +1 -1
- package/tenants/tenant-list/tenant-list.component.d.ts +6 -3
- package/tenants/tenant-list/tenant-list.component.d.ts.map +1 -1
- package/tenants/tenants.model.d.ts +31 -0
- package/tenants/tenants.model.d.ts.map +1 -1
- package/tenants/tenants.module.d.ts +4 -2
- package/tenants/tenants.module.d.ts.map +1 -1
- package/translation-editor/data/translation-store.service.d.ts +3 -2
- package/translation-editor/data/translation-store.service.d.ts.map +1 -1
- package/translation-editor/index.d.ts.map +1 -1
- package/translation-editor/lazy/advanced-translation-editor/advanced-translation-editor.component.d.ts +28 -0
- package/translation-editor/lazy/advanced-translation-editor/advanced-translation-editor.component.d.ts.map +1 -0
- package/translation-editor/lazy/index.d.ts +1 -0
- package/translation-editor/lazy/index.d.ts.map +1 -1
- package/translation-editor/translation-editor-tab-factory.service.d.ts +22 -0
- package/translation-editor/translation-editor-tab-factory.service.d.ts.map +1 -0
- package/translation-editor/translation-editor.constants.d.ts +4 -0
- package/translation-editor/translation-editor.constants.d.ts.map +1 -0
- package/upgrade/upgraded-services/index.d.ts +1 -0
- package/upgrade/upgraded-services/index.d.ts.map +1 -1
- package/upgrade/upgraded-services/tenant-policies.service.d.ts +11 -0
- package/upgrade/upgraded-services/tenant-policies.service.d.ts.map +1 -0
- package/upgrade/upgraded-services/upgraded-services.module.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +7 -2
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +7 -2
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
|
@@ -1,52 +1,66 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import { FormGroup, ReactiveFormsModule, FormControl } from '@angular/forms';
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { ApplicationService,
|
|
4
|
+
import { ApplicationService, TenantService } from '@c8y/client';
|
|
5
5
|
import { ActivatedRoute, RouterLink } from '@angular/router';
|
|
6
|
-
import { AlertService, CoreModule, FormsModule, gettext } from '@c8y/ngx-components';
|
|
6
|
+
import { AlertService, CoreModule, FormsModule, gettext, GainsightService, OptionsService } from '@c8y/ngx-components';
|
|
7
7
|
import { tenantLimitsCustomProperties } from './tenant-limits-definitions';
|
|
8
|
-
import {
|
|
8
|
+
import { PRODUCT_EXPERIENCE_TENANT_MANAGEMENT } from '../tenants.model';
|
|
9
|
+
import { take } from 'rxjs/operators';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
import * as i1 from "@c8y/client";
|
|
11
12
|
import * as i2 from "@c8y/ngx-components";
|
|
12
13
|
import * as i3 from "@angular/router";
|
|
13
14
|
import * as i4 from "@angular/common";
|
|
14
15
|
import * as i5 from "@angular/forms";
|
|
16
|
+
const { ACTIONS, EVENTS, COMPONENTS, RESULTS } = PRODUCT_EXPERIENCE_TENANT_MANAGEMENT;
|
|
15
17
|
export class TenantLimitsComponent {
|
|
16
|
-
constructor(tenantService,
|
|
18
|
+
constructor(tenantService, alertService, activatedRoute, applicationService, options, gainsightService) {
|
|
17
19
|
this.tenantService = tenantService;
|
|
18
|
-
this.tenantOptionsService = tenantOptionsService;
|
|
19
20
|
this.alertService = alertService;
|
|
20
21
|
this.activatedRoute = activatedRoute;
|
|
21
22
|
this.applicationService = applicationService;
|
|
23
|
+
this.options = options;
|
|
24
|
+
this.gainsightService = gainsightService;
|
|
22
25
|
this.fieldDefinitions = { ...tenantLimitsCustomProperties };
|
|
23
26
|
this.limitsForm = new FormGroup({});
|
|
24
27
|
this.tenant = null;
|
|
25
28
|
this.initialized = false;
|
|
29
|
+
this.deviceStorageLimitInfoMessage = gettext('Default: 0 (unlimited storage)');
|
|
26
30
|
}
|
|
27
31
|
async ngOnInit() {
|
|
28
32
|
await this.loadTenantDetails();
|
|
29
33
|
await this.setupConditionalFields();
|
|
30
34
|
this.generateForm();
|
|
31
35
|
this.initialized = true;
|
|
36
|
+
this.sendGainsightEvent(ACTIONS.TENANT_LIMITS_OPENED);
|
|
32
37
|
}
|
|
33
38
|
async onSubmit() {
|
|
34
39
|
if (this.limitsForm.invalid || !this.tenant) {
|
|
35
40
|
return;
|
|
36
41
|
}
|
|
42
|
+
const { deviceStorageLimitMiB, ...customProperties } = this.getDirtyValues();
|
|
37
43
|
const updatedTenant = {
|
|
38
44
|
...this.tenant,
|
|
39
45
|
customProperties: {
|
|
40
46
|
...this.tenant.customProperties,
|
|
41
|
-
...
|
|
47
|
+
...customProperties
|
|
42
48
|
}
|
|
43
49
|
};
|
|
50
|
+
if (this.storageLimitFeatureEnabled) {
|
|
51
|
+
updatedTenant.storageLimitPerDevice = (deviceStorageLimitMiB || 0) * 1024 * 1024;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
updatedTenant.storageLimitPerDevice = 0;
|
|
55
|
+
}
|
|
44
56
|
try {
|
|
45
57
|
await this.tenantService.update(updatedTenant);
|
|
46
58
|
this.alertService.success(gettext('Limit values saved.'));
|
|
59
|
+
this.sendGainsightEvent(ACTIONS.TENANT_LIMITS_SAVED, { result: RESULTS.SUCCESS });
|
|
47
60
|
}
|
|
48
61
|
catch (error) {
|
|
49
62
|
this.alertService.addServerFailure(error);
|
|
63
|
+
this.sendGainsightEvent(ACTIONS.TENANT_LIMITS_SAVED, { result: RESULTS.FAILURE, error });
|
|
50
64
|
}
|
|
51
65
|
}
|
|
52
66
|
async loadTenantDetails() {
|
|
@@ -66,15 +80,15 @@ export class TenantLimitsComponent {
|
|
|
66
80
|
})).data;
|
|
67
81
|
const cepModuleEnabled = apps.some(app => app.name === 'cep' || app.contextPath === 'cep');
|
|
68
82
|
const dataBrokerModuleEnabled = apps.some(app => app.name === 'feature-broker' || app.contextPath === 'feature-broker');
|
|
69
|
-
|
|
83
|
+
this.storageLimitFeatureEnabled = this.options.storageLimitationFeatureEnabled;
|
|
70
84
|
if (!cepModuleEnabled) {
|
|
71
85
|
delete this.fieldDefinitions.cepServerQueueLimit;
|
|
72
86
|
}
|
|
73
87
|
if (!dataBrokerModuleEnabled) {
|
|
74
88
|
delete this.fieldDefinitions.dataBrokerQueueLimit;
|
|
75
89
|
}
|
|
76
|
-
if (!
|
|
77
|
-
delete this.fieldDefinitions.
|
|
90
|
+
if (!this.storageLimitFeatureEnabled) {
|
|
91
|
+
delete this.fieldDefinitions.deviceStorageLimitMiB;
|
|
78
92
|
}
|
|
79
93
|
this.fieldKeys = Object.keys(this.fieldDefinitions);
|
|
80
94
|
}
|
|
@@ -82,27 +96,19 @@ export class TenantLimitsComponent {
|
|
|
82
96
|
this.alertService.addServerFailure(ex);
|
|
83
97
|
}
|
|
84
98
|
}
|
|
85
|
-
async isGainsightAvailable() {
|
|
86
|
-
if (get(window, 'C8Y_APP.gainsightKey')) {
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
try {
|
|
90
|
-
const res = await this.tenantOptionsService.detail({
|
|
91
|
-
category: 'configuration',
|
|
92
|
-
key: 'system.gainsight.api.key'
|
|
93
|
-
});
|
|
94
|
-
return !!res.data.value;
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
99
|
generateForm() {
|
|
101
100
|
for (const field of Object.values(tenantLimitsCustomProperties)) {
|
|
102
101
|
this.limitsForm.addControl(field.id, new FormControl(field.defaultValue, field.validators));
|
|
103
102
|
}
|
|
104
103
|
const customProps = this.tenant?.customProperties || {};
|
|
105
104
|
this.limitsForm.patchValue(customProps);
|
|
105
|
+
if (this.storageLimitFeatureEnabled) {
|
|
106
|
+
const deviceStorageLimitMiB = (this.tenant?.storageLimitPerDevice || 0) / 1024 / 1024;
|
|
107
|
+
this.limitsForm.patchValue({ deviceStorageLimitMiB });
|
|
108
|
+
}
|
|
109
|
+
this.limitsForm.valueChanges.pipe(take(1)).subscribe(() => {
|
|
110
|
+
this.sendGainsightEvent(ACTIONS.TENANT_LIMITS_STARTED_CHANGING);
|
|
111
|
+
});
|
|
106
112
|
}
|
|
107
113
|
getDirtyValues() {
|
|
108
114
|
const dirtyValues = {};
|
|
@@ -114,11 +120,18 @@ export class TenantLimitsComponent {
|
|
|
114
120
|
});
|
|
115
121
|
return dirtyValues;
|
|
116
122
|
}
|
|
117
|
-
|
|
118
|
-
|
|
123
|
+
sendGainsightEvent(action, props = {}) {
|
|
124
|
+
this.gainsightService.triggerEvent(EVENTS.TENANT_MANAGEMENT, {
|
|
125
|
+
component: COMPONENTS.TENANT_LIMITS,
|
|
126
|
+
action,
|
|
127
|
+
...props
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantLimitsComponent, deps: [{ token: i1.TenantService }, { token: i2.AlertService }, { token: i3.ActivatedRoute }, { token: i1.ApplicationService }, { token: i2.OptionsService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
131
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TenantLimitsComponent, isStandalone: true, selector: "c8y-tenant-limits", ngImport: i0, template: "<c8y-title *ngIf=\"tenant\">\n {{ tenant.company }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n [formGroup]=\"limitsForm\"\n (ngSubmit)=\"onSubmit()\"\n>\n <div class=\"card card--fullpage m-b-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Limits\n </div>\n </div>\n\n <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#setting-limits\"></c8y-help>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block\"\n *ngIf=\"!initialized\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let key of fieldKeys\">\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'text'\">\n <ng-container\n *ngTemplateOutlet=\"textField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'number'\">\n <ng-container\n *ngTemplateOutlet=\"numberField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'checkbox'\">\n <ng-container\n *ngTemplateOutlet=\"checkboxField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div\n class=\"card-footer separator\"\n *ngIf=\"initialized\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"limitsForm.invalid\"\n translate\n >\n Save\n </button>\n </div>\n </div>\n\n <ng-template\n #textField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #numberField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <ng-container\n *ngIf=\"\n fieldDefinitions.deviceStorageLimitMiB &&\n fieldDefinitions.deviceStorageLimitMiB.id === fieldDefinition.id &&\n limitsForm.controls[fieldDefinition.id] as control\n \"\n >\n <div\n class=\"icon-flex\"\n *ngIf=\"!control.dirty || (control.dirty && !control.errors)\"\n >\n <p class=\"help-block\">\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n <span>{{ deviceStorageLimitInfoMessage | translate }}</span>\n </p>\n </div>\n </ng-container>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #checkboxField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n </ng-template>\n</form>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i2.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i2.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
119
132
|
}
|
|
120
133
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantLimitsComponent, decorators: [{
|
|
121
134
|
type: Component,
|
|
122
|
-
args: [{ selector: 'c8y-tenant-limits', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, CoreModule, RouterLink], template: "<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n [formGroup]=\"limitsForm\"\n (ngSubmit)=\"onSubmit()\"\n>\n <div class=\"card card--fullpage m-b-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Limits\n </div>\n </div>\n\n <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#setting-limits\"></c8y-help>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block\"\n *ngIf=\"!initialized\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let key of fieldKeys\">\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'text'\">\n <ng-container\n *ngTemplateOutlet=\"textField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'number'\">\n <ng-container\n *ngTemplateOutlet=\"numberField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'checkbox'\">\n <ng-container\n *ngTemplateOutlet=\"checkboxField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div\n class=\"card-footer separator\"\n *ngIf=\"initialized\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"limitsForm.invalid\"\n translate\n >\n Save\n </button>\n </div>\n </div>\n\n <ng-template\n #textField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #numberField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #checkboxField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n </ng-template>\n</form>\n" }]
|
|
123
|
-
}], ctorParameters: () => [{ type: i1.TenantService }, { type:
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWxpbWl0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZW5hbnRzL3RlbmFudC1saW1pdHMvdGVuYW50LWxpbWl0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi90ZW5hbnRzL3RlbmFudC1saW1pdHMvdGVuYW50LWxpbWl0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7O0FBUWhDLE1BQU0sT0FBTyxxQkFBcUI7SUFPaEMsWUFDVSxhQUE0QixFQUM1QixvQkFBMEMsRUFDMUMsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsa0JBQXNDO1FBSnRDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFYaEQscUJBQWdCLEdBQUcsRUFBRSxHQUFHLDRCQUE0QixFQUFFLENBQUM7UUFFdkQsZUFBVSxHQUFjLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLFdBQU0sR0FBbUIsSUFBSSxDQUFDO1FBQzlCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBUWpCLENBQUM7SUFFSixLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFZO1lBQzdCLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDZCxnQkFBZ0IsRUFBRTtnQkFDaEIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtnQkFDL0IsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFO2FBQ3pCO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCO1FBQzdCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFxQixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUM5RCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQ3hELENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDNUIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQjtRQUNsQyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxDQUNYLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUU7Z0JBQ2xELG1CQUFtQixFQUFFLElBQUk7Z0JBQ3pCLFFBQVEsRUFBRSxJQUFJO2FBQ2YsQ0FBQyxDQUNILENBQUMsSUFBSSxDQUFDO1lBRVAsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUMzRixNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQ3ZDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLGdCQUFnQixDQUM3RSxDQUFDO1lBQ0YsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBRTdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN0QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQzdCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO1lBQ3BELENBQUM7WUFDRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUM7WUFDaEQsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsb0JBQW9CO1FBQ2hDLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO2dCQUNqRCxRQUFRLEVBQUUsZUFBZTtnQkFDekIsR0FBRyxFQUFFLDBCQUEwQjthQUNoQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMxQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZO1FBQ2xCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7WUFDaEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLFdBQVcsR0FBMkIsRUFBRSxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOytHQXJIVSxxQkFBcUI7bUdBQXJCLHFCQUFxQiw2RUNyQmxDLHF4SEE0SUEsMkNEMUhZLFlBQVksc2FBQUUsbUJBQW1CLCt4Q0FBRSxXQUFXLGtUQUFFLFVBQVUscXBCQUFFLFVBQVU7OzRGQUdyRSxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgSVJlc3VsdCxcbiAgSVRlbmFudCxcbiAgVGVuYW50T3B0aW9uc1NlcnZpY2UsXG4gIFRlbmFudFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBDb3JlTW9kdWxlLCBGb3Jtc01vZHVsZSwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgdGVuYW50TGltaXRzQ3VzdG9tUHJvcGVydGllcyB9IGZyb20gJy4vdGVuYW50LWxpbWl0cy1kZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdGVuYW50LWxpbWl0cycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlLCBDb3JlTW9kdWxlLCBSb3V0ZXJMaW5rXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlbmFudC1saW1pdHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRlbmFudExpbWl0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGZpZWxkRGVmaW5pdGlvbnMgPSB7IC4uLnRlbmFudExpbWl0c0N1c3RvbVByb3BlcnRpZXMgfTtcbiAgZmllbGRLZXlzOiBzdHJpbmdbXTtcbiAgbGltaXRzRm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIHRlbmFudDogSVRlbmFudCB8IG51bGwgPSBudWxsO1xuICBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudE9wdGlvbnNTZXJ2aWNlOiBUZW5hbnRPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGF3YWl0IHRoaXMubG9hZFRlbmFudERldGFpbHMoKTtcbiAgICBhd2FpdCB0aGlzLnNldHVwQ29uZGl0aW9uYWxGaWVsZHMoKTtcbiAgICB0aGlzLmdlbmVyYXRlRm9ybSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgb25TdWJtaXQoKSB7XG4gICAgaWYgKHRoaXMubGltaXRzRm9ybS5pbnZhbGlkIHx8ICF0aGlzLnRlbmFudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZWRUZW5hbnQ6IElUZW5hbnQgPSB7XG4gICAgICAuLi50aGlzLnRlbmFudCxcbiAgICAgIGN1c3RvbVByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4udGhpcy50ZW5hbnQuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgICAgLi4udGhpcy5nZXREaXJ0eVZhbHVlcygpXG4gICAgICB9XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudXBkYXRlKHVwZGF0ZWRUZW5hbnQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdMaW1pdCB2YWx1ZXMgc2F2ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRUZW5hbnREZXRhaWxzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IElSZXN1bHQ8SVRlbmFudD4gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuZGV0YWlsKFxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhLmlkXG4gICAgICApO1xuICAgICAgdGhpcy50ZW5hbnQgPSByZXN1bHQuZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXR1cENvbmRpdGlvbmFsRmllbGRzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcHBzID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlVc2VyKHVuZGVmaW5lZCwge1xuICAgICAgICAgIGRyb3BPdmVyd3JpdHRlbkFwcHM6IHRydWUsXG4gICAgICAgICAgbm9QYWdpbmc6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICkuZGF0YTtcblxuICAgICAgY29uc3QgY2VwTW9kdWxlRW5hYmxlZCA9IGFwcHMuc29tZShhcHAgPT4gYXBwLm5hbWUgPT09ICdjZXAnIHx8IGFwcC5jb250ZXh0UGF0aCA9PT0gJ2NlcCcpO1xuICAgICAgY29uc3QgZGF0YUJyb2tlck1vZHVsZUVuYWJsZWQgPSBhcHBzLnNvbWUoXG4gICAgICAgIGFwcCA9PiBhcHAubmFtZSA9PT0gJ2ZlYXR1cmUtYnJva2VyJyB8fCBhcHAuY29udGV4dFBhdGggPT09ICdmZWF0dXJlLWJyb2tlcidcbiAgICAgICk7XG4gICAgICBjb25zdCBnYWluc2lnaHRBdmFpbGFibGUgPSBhd2FpdCB0aGlzLmlzR2FpbnNpZ2h0QXZhaWxhYmxlKCk7XG5cbiAgICAgIGlmICghY2VwTW9kdWxlRW5hYmxlZCkge1xuICAgICAgICBkZWxldGUgdGhpcy5maWVsZERlZmluaXRpb25zLmNlcFNlcnZlclF1ZXVlTGltaXQ7XG4gICAgICB9XG4gICAgICBpZiAoIWRhdGFCcm9rZXJNb2R1bGVFbmFibGVkKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpZWxkRGVmaW5pdGlvbnMuZGF0YUJyb2tlclF1ZXVlTGltaXQ7XG4gICAgICB9XG4gICAgICBpZiAoIWdhaW5zaWdodEF2YWlsYWJsZSkge1xuICAgICAgICBkZWxldGUgdGhpcy5maWVsZERlZmluaXRpb25zLmdhaW5zaWdodEVuYWJsZWQ7XG4gICAgICB9XG4gICAgICB0aGlzLmZpZWxkS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGREZWZpbml0aW9ucyk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaXNHYWluc2lnaHRBdmFpbGFibGUoKSB7XG4gICAgaWYgKGdldCh3aW5kb3csICdDOFlfQVBQLmdhaW5zaWdodEtleScpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50ZW5hbnRPcHRpb25zU2VydmljZS5kZXRhaWwoe1xuICAgICAgICBjYXRlZ29yeTogJ2NvbmZpZ3VyYXRpb24nLFxuICAgICAgICBrZXk6ICdzeXN0ZW0uZ2FpbnNpZ2h0LmFwaS5rZXknXG4gICAgICB9KTtcbiAgICAgIHJldHVybiAhIXJlcy5kYXRhLnZhbHVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm0oKSB7XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBPYmplY3QudmFsdWVzKHRlbmFudExpbWl0c0N1c3RvbVByb3BlcnRpZXMpKSB7XG4gICAgICB0aGlzLmxpbWl0c0Zvcm0uYWRkQ29udHJvbChmaWVsZC5pZCwgbmV3IEZvcm1Db250cm9sKGZpZWxkLmRlZmF1bHRWYWx1ZSwgZmllbGQudmFsaWRhdG9ycykpO1xuICAgIH1cbiAgICBjb25zdCBjdXN0b21Qcm9wcyA9IHRoaXMudGVuYW50Py5jdXN0b21Qcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHRoaXMubGltaXRzRm9ybS5wYXRjaFZhbHVlKGN1c3RvbVByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlydHlWYWx1ZXMoKTogYW55IHtcbiAgICBjb25zdCBkaXJ0eVZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHRoaXMubGltaXRzRm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubGltaXRzRm9ybS5jb250cm9sc1trZXldO1xuICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC5kaXJ0eSkge1xuICAgICAgICBkaXJ0eVZhbHVlc1trZXldID0gY29udHJvbC52YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGlydHlWYWx1ZXM7XG4gIH1cbn1cbiIsIjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LWxheWVycydcIlxuICAgIFtsYWJlbF09XCInVGVuYW50cycgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktbGF5ZXJzJ1wiXG4gICAgW2xhYmVsXT1cIidTdWJ0ZW5hbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJy90ZW5hbnRzJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48Zm9ybVxuICBbZm9ybUdyb3VwXT1cImxpbWl0c0Zvcm1cIlxuICAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtLWZ1bGxwYWdlIG0tYi0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvclwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNhcmQtdGl0bGVcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgTGltaXRzXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxjOHktaGVscCBzcmM9XCIvZG9jcy9lbnRlcnByaXNlLXRlbmFudC9tYW5hZ2luZy10ZW5hbnRzLyNzZXR0aW5nLWxpbWl0c1wiPjwvYzh5LWhlbHA+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaW5uZXItc2Nyb2xsXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2FyZC1ibG9ja1wiXG4gICAgICAgICpuZ0lmPVwiIWluaXRpYWxpemVkXCJcbiAgICAgID5cbiAgICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNhcmQtYmxvY2tcIlxuICAgICAgICAqbmdJZj1cImluaXRpYWxpemVkXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQga2V5IG9mIGZpZWxkS2V5c1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZERlZmluaXRpb25zW2tleV0udHlwZSA9PT0gJ3RleHQnXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGV4dEZpZWxkOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmllbGREZWZpbml0aW9uc1trZXldIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZERlZmluaXRpb25zW2tleV0udHlwZSA9PT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJudW1iZXJGaWVsZDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGZpZWxkRGVmaW5pdGlvbnNba2V5XSB9XCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGREZWZpbml0aW9uc1trZXldLnR5cGUgPT09ICdjaGVja2JveCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGVja2JveEZpZWxkOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmllbGREZWZpbml0aW9uc1trZXldIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3JcIlxuICAgICAgKm5nSWY9XCJpbml0aWFsaXplZFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbcm91dGVyTGlua109XCJbJy90ZW5hbnRzJ11cIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxpbWl0c0Zvcm0uaW52YWxpZFwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBTYXZlXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI3RleHRGaWVsZFxuICAgIGxldC1maWVsZERlZmluaXRpb25cbiAgPlxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbCBbZm9yXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiPlxuICAgICAgICB7eyBmaWVsZERlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGU6IGZpZWxkRGVmaW5pdGlvbi5sYWJlbEFyZ3MgfX1cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFtpZF09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGREZWZpbml0aW9uLnBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlOiBmaWVsZERlZmluaXRpb24ucGxhY2Vob2xkZXJBcmdzXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZVxuICAgICNudW1iZXJGaWVsZFxuICAgIGxldC1maWVsZERlZmluaXRpb25cbiAgPlxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbCBbZm9yXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiPlxuICAgICAgICB7eyBmaWVsZERlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGU6IGZpZWxkRGVmaW5pdGlvbi5sYWJlbEFyZ3MgfX1cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgW2lkXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZERlZmluaXRpb24ucGxhY2Vob2xkZXIgfCB0cmFuc2xhdGU6IGZpZWxkRGVmaW5pdGlvbi5wbGFjZWhvbGRlckFyZ3NcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2NoZWNrYm94RmllbGRcbiAgICBsZXQtZmllbGREZWZpbml0aW9uXG4gID5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICBbdGl0bGVdPVwiZmllbGREZWZpbml0aW9uLmxhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2Zvcl09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIFtpZF09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGREZWZpbml0aW9uLmlkXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBmaWVsZERlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Zvcm0+XG4iXX0=
|
|
135
|
+
args: [{ selector: 'c8y-tenant-limits', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, CoreModule, RouterLink], template: "<c8y-title *ngIf=\"tenant\">\n {{ tenant.company }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n [formGroup]=\"limitsForm\"\n (ngSubmit)=\"onSubmit()\"\n>\n <div class=\"card card--fullpage m-b-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Limits\n </div>\n </div>\n\n <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#setting-limits\"></c8y-help>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block\"\n *ngIf=\"!initialized\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let key of fieldKeys\">\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'text'\">\n <ng-container\n *ngTemplateOutlet=\"textField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'number'\">\n <ng-container\n *ngTemplateOutlet=\"numberField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'checkbox'\">\n <ng-container\n *ngTemplateOutlet=\"checkboxField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div\n class=\"card-footer separator\"\n *ngIf=\"initialized\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"limitsForm.invalid\"\n translate\n >\n Save\n </button>\n </div>\n </div>\n\n <ng-template\n #textField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #numberField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <ng-container\n *ngIf=\"\n fieldDefinitions.deviceStorageLimitMiB &&\n fieldDefinitions.deviceStorageLimitMiB.id === fieldDefinition.id &&\n limitsForm.controls[fieldDefinition.id] as control\n \"\n >\n <div\n class=\"icon-flex\"\n *ngIf=\"!control.dirty || (control.dirty && !control.errors)\"\n >\n <p class=\"help-block\">\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n <span>{{ deviceStorageLimitInfoMessage | translate }}</span>\n </p>\n </div>\n </ng-container>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #checkboxField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n </ng-template>\n</form>\n" }]
|
|
136
|
+
}], ctorParameters: () => [{ type: i1.TenantService }, { type: i2.AlertService }, { type: i3.ActivatedRoute }, { type: i1.ApplicationService }, { type: i2.OptionsService }, { type: i2.GainsightService }] });
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWxpbWl0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZW5hbnRzL3RlbmFudC1saW1pdHMvdGVuYW50LWxpbWl0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi90ZW5hbnRzL3RlbmFudC1saW1pdHMvdGVuYW50LWxpbWl0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBb0IsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUNMLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLE9BQU8sRUFDUCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLDRCQUE0QixFQUU3QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFFTCxvQ0FBb0MsRUFFckMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFFdEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLG9DQUFvQyxDQUFDO0FBUXRGLE1BQU0sT0FBTyxxQkFBcUI7SUFTaEMsWUFDVSxhQUE0QixFQUM1QixZQUEwQixFQUMxQixjQUE4QixFQUM5QixrQkFBc0MsRUFDdEMsT0FBdUIsRUFDdkIsZ0JBQWtDO1FBTGxD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QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDN0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLGtCQUFrQixDQUN4QixNQUFrQyxFQUNsQyxRQUFrRSxFQUFFO1FBRXBFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFO1lBQzNELFNBQVMsRUFBRSxVQUFVLENBQUMsYUFBYTtZQUNuQyxNQUFNO1lBQ04sR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F4SVUscUJBQXFCO21HQUFyQixxQkFBcUIsNkVDaENsQyxtL0lBb0tBLDJDRHZJWSxZQUFZLHNhQUFFLG1CQUFtQiwreENBQUUsV0FBVyxrVEFBRSxVQUFVLG8xQkFBRSxVQUFVOzs0RkFHckUscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblNlcnZpY2UsIElSZXN1bHQsIElUZW5hbnQsIFRlbmFudFNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIENvcmVNb2R1bGUsXG4gIEZvcm1zTW9kdWxlLFxuICBnZXR0ZXh0LFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBPcHRpb25zU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIHRlbmFudExpbWl0c0N1c3RvbVByb3BlcnRpZXMsXG4gIFRlbmFudExpbWl0c0N1c3RvbVByb3BlcnRpZXNLZXlzXG59IGZyb20gJy4vdGVuYW50LWxpbWl0cy1kZWZpbml0aW9ucyc7XG5pbXBvcnQge1xuICBUZW5hbnRNYW5hZ2VtZW50QWN0aW9uVHlwZSxcbiAgUFJPRFVDVF9FWFBFUklFTkNFX1RFTkFOVF9NQU5BR0VNRU5ULFxuICBUZW5hbnRNYW5hZ2VtZW50UmVzdWx0VHlwZVxufSBmcm9tICcuLi90ZW5hbnRzLm1vZGVsJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IHsgQUNUSU9OUywgRVZFTlRTLCBDT01QT05FTlRTLCBSRVNVTFRTIH0gPSBQUk9EVUNUX0VYUEVSSUVOQ0VfVEVOQU5UX01BTkFHRU1FTlQ7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS10ZW5hbnQtbGltaXRzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUsIENvcmVNb2R1bGUsIFJvdXRlckxpbmtdLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVuYW50LWxpbWl0cy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGVuYW50TGltaXRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZmllbGREZWZpbml0aW9ucyA9IHsgLi4udGVuYW50TGltaXRzQ3VzdG9tUHJvcGVydGllcyB9O1xuICBmaWVsZEtleXM6IHN0cmluZ1tdO1xuICBzdG9yYWdlTGltaXRGZWF0dXJlRW5hYmxlZDogYm9vbGVhbjtcbiAgbGltaXRzRm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIHRlbmFudDogSVRlbmFudCB8IG51bGwgPSBudWxsO1xuICBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBkZXZpY2VTdG9yYWdlTGltaXRJbmZvTWVzc2FnZSA9IGdldHRleHQoJ0RlZmF1bHQ6IDAgKHVubGltaXRlZCBzdG9yYWdlKScpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGF3YWl0IHRoaXMubG9hZFRlbmFudERldGFpbHMoKTtcbiAgICBhd2FpdCB0aGlzLnNldHVwQ29uZGl0aW9uYWxGaWVsZHMoKTtcbiAgICB0aGlzLmdlbmVyYXRlRm9ybSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgdGhpcy5zZW5kR2FpbnNpZ2h0RXZlbnQoQUNUSU9OUy5URU5BTlRfTElNSVRTX09QRU5FRCk7XG4gIH1cblxuICBhc3luYyBvblN1Ym1pdCgpIHtcbiAgICBpZiAodGhpcy5saW1pdHNGb3JtLmludmFsaWQgfHwgIXRoaXMudGVuYW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBkZXZpY2VTdG9yYWdlTGltaXRNaUIsIC4uLmN1c3RvbVByb3BlcnRpZXMgfSA9IHRoaXMuZ2V0RGlydHlWYWx1ZXMoKTtcblxuICAgIGNvbnN0IHVwZGF0ZWRUZW5hbnQ6IElUZW5hbnQgPSB7XG4gICAgICAuLi50aGlzLnRlbmFudCxcbiAgICAgIGN1c3RvbVByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4udGhpcy50ZW5hbnQuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgICAgLi4uY3VzdG9tUHJvcGVydGllc1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zdG9yYWdlTGltaXRGZWF0dXJlRW5hYmxlZCkge1xuICAgICAgdXBkYXRlZFRlbmFudC5zdG9yYWdlTGltaXRQZXJEZXZpY2UgPSAoZGV2aWNlU3RvcmFnZUxpbWl0TWlCIHx8IDApICogMTAyNCAqIDEwMjQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZWRUZW5hbnQuc3RvcmFnZUxpbWl0UGVyRGV2aWNlID0gMDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy50ZW5hbnRTZXJ2aWNlLnVwZGF0ZSh1cGRhdGVkVGVuYW50KTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnTGltaXQgdmFsdWVzIHNhdmVkLicpKTtcbiAgICAgIHRoaXMuc2VuZEdhaW5zaWdodEV2ZW50KEFDVElPTlMuVEVOQU5UX0xJTUlUU19TQVZFRCwgeyByZXN1bHQ6IFJFU1VMVFMuU1VDQ0VTUyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgICB0aGlzLnNlbmRHYWluc2lnaHRFdmVudChBQ1RJT05TLlRFTkFOVF9MSU1JVFNfU0FWRUQsIHsgcmVzdWx0OiBSRVNVTFRTLkZBSUxVUkUsIGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFRlbmFudERldGFpbHMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogSVJlc3VsdDxJVGVuYW50PiA9IGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5kZXRhaWwoXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucGFyZW50LmRhdGEuY29udGV4dERhdGEuaWRcbiAgICAgICk7XG4gICAgICB0aGlzLnRlbmFudCA9IHJlc3VsdC5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldHVwQ29uZGl0aW9uYWxGaWVsZHMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFwcHMgPSAoXG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeVVzZXIodW5kZWZpbmVkLCB7XG4gICAgICAgICAgZHJvcE92ZXJ3cml0dGVuQXBwczogdHJ1ZSxcbiAgICAgICAgICBub1BhZ2luZzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKS5kYXRhO1xuXG4gICAgICBjb25zdCBjZXBNb2R1bGVFbmFibGVkID0gYXBwcy5zb21lKGFwcCA9PiBhcHAubmFtZSA9PT0gJ2NlcCcgfHwgYXBwLmNvbnRleHRQYXRoID09PSAnY2VwJyk7XG4gICAgICBjb25zdCBkYXRhQnJva2VyTW9kdWxlRW5hYmxlZCA9IGFwcHMuc29tZShcbiAgICAgICAgYXBwID0+IGFwcC5uYW1lID09PSAnZmVhdHVyZS1icm9rZXInIHx8IGFwcC5jb250ZXh0UGF0aCA9PT0gJ2ZlYXR1cmUtYnJva2VyJ1xuICAgICAgKTtcbiAgICAgIHRoaXMuc3RvcmFnZUxpbWl0RmVhdHVyZUVuYWJsZWQgPSB0aGlzLm9wdGlvbnMuc3RvcmFnZUxpbWl0YXRpb25GZWF0dXJlRW5hYmxlZDtcblxuICAgICAgaWYgKCFjZXBNb2R1bGVFbmFibGVkKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpZWxkRGVmaW5pdGlvbnMuY2VwU2VydmVyUXVldWVMaW1pdDtcbiAgICAgIH1cbiAgICAgIGlmICghZGF0YUJyb2tlck1vZHVsZUVuYWJsZWQpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZmllbGREZWZpbml0aW9ucy5kYXRhQnJva2VyUXVldWVMaW1pdDtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5zdG9yYWdlTGltaXRGZWF0dXJlRW5hYmxlZCkge1xuICAgICAgICBkZWxldGUgdGhpcy5maWVsZERlZmluaXRpb25zLmRldmljZVN0b3JhZ2VMaW1pdE1pQjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWVsZEtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZpZWxkRGVmaW5pdGlvbnMpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRm9ybSgpIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIE9iamVjdC52YWx1ZXModGVuYW50TGltaXRzQ3VzdG9tUHJvcGVydGllcykpIHtcbiAgICAgIHRoaXMubGltaXRzRm9ybS5hZGRDb250cm9sKGZpZWxkLmlkLCBuZXcgRm9ybUNvbnRyb2woZmllbGQuZGVmYXVsdFZhbHVlLCBmaWVsZC52YWxpZGF0b3JzKSk7XG4gICAgfVxuICAgIGNvbnN0IGN1c3RvbVByb3BzID0gdGhpcy50ZW5hbnQ/LmN1c3RvbVByb3BlcnRpZXMgfHwge307XG4gICAgdGhpcy5saW1pdHNGb3JtLnBhdGNoVmFsdWUoY3VzdG9tUHJvcHMpO1xuICAgIGlmICh0aGlzLnN0b3JhZ2VMaW1pdEZlYXR1cmVFbmFibGVkKSB7XG4gICAgICBjb25zdCBkZXZpY2VTdG9yYWdlTGltaXRNaUIgPSAodGhpcy50ZW5hbnQ/LnN0b3JhZ2VMaW1pdFBlckRldmljZSB8fCAwKSAvIDEwMjQgLyAxMDI0O1xuICAgICAgdGhpcy5saW1pdHNGb3JtLnBhdGNoVmFsdWUoeyBkZXZpY2VTdG9yYWdlTGltaXRNaUIgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5saW1pdHNGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnNlbmRHYWluc2lnaHRFdmVudChBQ1RJT05TLlRFTkFOVF9MSU1JVFNfU1RBUlRFRF9DSEFOR0lORyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERpcnR5VmFsdWVzKCk6IFBhcnRpYWw8eyBbSyBpbiBUZW5hbnRMaW1pdHNDdXN0b21Qcm9wZXJ0aWVzS2V5c106IGFueSB9PiB7XG4gICAgY29uc3QgZGlydHlWYWx1ZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmxpbWl0c0Zvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmxpbWl0c0Zvcm0uY29udHJvbHNba2V5XTtcbiAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wuZGlydHkpIHtcbiAgICAgICAgZGlydHlWYWx1ZXNba2V5XSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpcnR5VmFsdWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kR2FpbnNpZ2h0RXZlbnQoXG4gICAgYWN0aW9uOiBUZW5hbnRNYW5hZ2VtZW50QWN0aW9uVHlwZSxcbiAgICBwcm9wczogeyByZXN1bHQ/OiBUZW5hbnRNYW5hZ2VtZW50UmVzdWx0VHlwZTsgZXJyb3I/OiB1bmtub3duIH0gPSB7fVxuICApIHtcbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KEVWRU5UUy5URU5BTlRfTUFOQUdFTUVOVCwge1xuICAgICAgY29tcG9uZW50OiBDT01QT05FTlRTLlRFTkFOVF9MSU1JVFMsXG4gICAgICBhY3Rpb24sXG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlICpuZ0lmPVwidGVuYW50XCI+XG4gIHt7IHRlbmFudC5jb21wYW55IH19XG48L2M4eS10aXRsZT5cblxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktbGF5ZXJzJ1wiXG4gICAgW2xhYmVsXT1cIidUZW5hbnRzJyB8IHRyYW5zbGF0ZVwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ2M4eS1sYXllcnMnXCJcbiAgICBbbGFiZWxdPVwiJ1N1YnRlbmFudHMnIHwgdHJhbnNsYXRlXCJcbiAgICBbcGF0aF09XCInL3RlbmFudHMnXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxmb3JtXG4gIFtmb3JtR3JvdXBdPVwibGltaXRzRm9ybVwiXG4gIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCJcbj5cbiAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC0tZnVsbHBhZ2UgbS1iLTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2FyZC10aXRsZVwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBMaW1pdHNcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGM4eS1oZWxwIHNyYz1cIi9kb2NzL2VudGVycHJpc2UtdGVuYW50L21hbmFnaW5nLXRlbmFudHMvI3NldHRpbmctbGltaXRzXCI+PC9jOHktaGVscD5cblxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGxcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjYXJkLWJsb2NrXCJcbiAgICAgICAgKm5nSWY9XCIhaW5pdGlhbGl6ZWRcIlxuICAgICAgPlxuICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2FyZC1ibG9ja1wiXG4gICAgICAgICpuZ0lmPVwiaW5pdGlhbGl6ZWRcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2YgZmllbGRLZXlzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkRGVmaW5pdGlvbnNba2V5XS50eXBlID09PSAndGV4dCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZXh0RmllbGQ7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmaWVsZERlZmluaXRpb25zW2tleV0gfVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkRGVmaW5pdGlvbnNba2V5XS50eXBlID09PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm51bWJlckZpZWxkOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmllbGREZWZpbml0aW9uc1trZXldIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZERlZmluaXRpb25zW2tleV0udHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNoZWNrYm94RmllbGQ7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmaWVsZERlZmluaXRpb25zW2tleV0gfVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNhcmQtZm9vdGVyIHNlcGFyYXRvclwiXG4gICAgICAqbmdJZj1cImluaXRpYWxpemVkXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL3RlbmFudHMnXVwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBDYW5jZWxcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibGltaXRzRm9ybS5pbnZhbGlkXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIFNhdmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGVcbiAgICAjdGV4dEZpZWxkXG4gICAgbGV0LWZpZWxkRGVmaW5pdGlvblxuICA+XG4gICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgPGxhYmVsIFtmb3JdPVwiZmllbGREZWZpbml0aW9uLmlkXCI+XG4gICAgICAgIHt7IGZpZWxkRGVmaW5pdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZTogZmllbGREZWZpbml0aW9uLmxhYmVsQXJncyB9fVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW2lkXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZERlZmluaXRpb24ucGxhY2Vob2xkZXIgfCB0cmFuc2xhdGU6IGZpZWxkRGVmaW5pdGlvbi5wbGFjZWhvbGRlckFyZ3NcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI251bWJlckZpZWxkXG4gICAgbGV0LWZpZWxkRGVmaW5pdGlvblxuICA+XG4gICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgPGxhYmVsIFtmb3JdPVwiZmllbGREZWZpbml0aW9uLmlkXCI+XG4gICAgICAgIHt7IGZpZWxkRGVmaW5pdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZTogZmllbGREZWZpbml0aW9uLmxhYmVsQXJncyB9fVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICBbaWRdPVwiZmllbGREZWZpbml0aW9uLmlkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkRGVmaW5pdGlvbi5wbGFjZWhvbGRlciB8IHRyYW5zbGF0ZTogZmllbGREZWZpbml0aW9uLnBsYWNlaG9sZGVyQXJnc1wiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGREZWZpbml0aW9uLmlkXCJcbiAgICAgIC8+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgZmllbGREZWZpbml0aW9ucy5kZXZpY2VTdG9yYWdlTGltaXRNaUIgJiZcbiAgICAgICAgICBmaWVsZERlZmluaXRpb25zLmRldmljZVN0b3JhZ2VMaW1pdE1pQi5pZCA9PT0gZmllbGREZWZpbml0aW9uLmlkICYmXG4gICAgICAgICAgbGltaXRzRm9ybS5jb250cm9sc1tmaWVsZERlZmluaXRpb24uaWRdIGFzIGNvbnRyb2xcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiaWNvbi1mbGV4XCJcbiAgICAgICAgICAqbmdJZj1cIiFjb250cm9sLmRpcnR5IHx8IChjb250cm9sLmRpcnR5ICYmICFjb250cm9sLmVycm9ycylcIlxuICAgICAgICA+XG4gICAgICAgICAgPHAgY2xhc3M9XCJoZWxwLWJsb2NrXCI+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtaW5mbyBtLXItNFwiXG4gICAgICAgICAgICAgIGM4eUljb249XCJpbmZvLWNpcmNsZVwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPHNwYW4+e3sgZGV2aWNlU3RvcmFnZUxpbWl0SW5mb01lc3NhZ2UgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2NoZWNrYm94RmllbGRcbiAgICBsZXQtZmllbGREZWZpbml0aW9uXG4gID5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICBbdGl0bGVdPVwiZmllbGREZWZpbml0aW9uLmxhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2Zvcl09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIFtpZF09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGREZWZpbml0aW9uLmlkXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBmaWVsZERlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Zvcm0+XG4iXX0=
|
|
@@ -5,17 +5,19 @@ import { saveAs } from 'file-saver';
|
|
|
5
5
|
import { BehaviorSubject, from } from 'rxjs';
|
|
6
6
|
import { expand, reduce, shareReplay, takeWhile } from 'rxjs/operators';
|
|
7
7
|
import { TenantService, TenantStatus, UserService } from '@c8y/client';
|
|
8
|
-
import { AlertService, AppStateService, BuiltInActionType, gettext, ModalService, PasswordService, Permissions, Status, TenantUiService } from '@c8y/ngx-components';
|
|
8
|
+
import { AlertService, AppStateService, BuiltInActionType, GainsightService, gettext, ModalService, PasswordService, Permissions, Status, TenantUiService } from '@c8y/ngx-components';
|
|
9
9
|
import { CreationTimeFilteringFormRendererComponent } from './creation-time.filtering-form-renderer.component';
|
|
10
10
|
import { StatusFilteringFormRendererComponent } from './status.filtering-form-renderer.component';
|
|
11
|
+
import { PRODUCT_EXPERIENCE_TENANT_MANAGEMENT } from './../tenants.model';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
13
|
import * as i1 from "@c8y/ngx-components";
|
|
13
14
|
import * as i2 from "@ngx-translate/core";
|
|
14
15
|
import * as i3 from "@c8y/client";
|
|
15
16
|
import * as i4 from "@angular/common";
|
|
16
17
|
import * as i5 from "@angular/router";
|
|
18
|
+
const { EVENTS, COMPONENTS, ACTIONS } = PRODUCT_EXPERIENCE_TENANT_MANAGEMENT;
|
|
17
19
|
export class TenantListComponent {
|
|
18
|
-
constructor(appState, alertService, modalService, translateService, tenantService, tenantUiService, location, passwordService, userService, permissionsService) {
|
|
20
|
+
constructor(appState, alertService, modalService, translateService, tenantService, tenantUiService, location, passwordService, userService, permissionsService, gainsightService) {
|
|
19
21
|
this.appState = appState;
|
|
20
22
|
this.alertService = alertService;
|
|
21
23
|
this.modalService = modalService;
|
|
@@ -26,6 +28,7 @@ export class TenantListComponent {
|
|
|
26
28
|
this.passwordService = passwordService;
|
|
27
29
|
this.userService = userService;
|
|
28
30
|
this.permissionsService = permissionsService;
|
|
31
|
+
this.gainsightService = gainsightService;
|
|
29
32
|
this.tenants$ = new BehaviorSubject(undefined);
|
|
30
33
|
this.isPermittedToCreateTenanant = this.permissionsService.hasAnyRole([
|
|
31
34
|
Permissions.ROLE_TENANT_MANAGEMENT_ADMIN,
|
|
@@ -165,7 +168,13 @@ export class TenantListComponent {
|
|
|
165
168
|
}
|
|
166
169
|
];
|
|
167
170
|
}
|
|
168
|
-
createTenant() {
|
|
171
|
+
createTenant(options = { sendGainsightEvent: true }) {
|
|
172
|
+
if (options.sendGainsightEvent) {
|
|
173
|
+
this.gainsightService.triggerEvent(EVENTS.TENANT_MANAGEMENT, {
|
|
174
|
+
component: COMPONENTS.TENANT_LIST,
|
|
175
|
+
action: ACTIONS.TENANT_CREATION_INITIALIZED
|
|
176
|
+
});
|
|
177
|
+
}
|
|
169
178
|
this.location.go('/tenants/new');
|
|
170
179
|
}
|
|
171
180
|
goToDetails(tenant) {
|
|
@@ -264,11 +273,11 @@ export class TenantListComponent {
|
|
|
264
273
|
const blob = new Blob([data], { type: contentType });
|
|
265
274
|
saveAs(blob, filename);
|
|
266
275
|
}
|
|
267
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantListComponent, deps: [{ token: i1.AppStateService }, { token: i1.AlertService }, { token: i1.ModalService }, { token: i2.TranslateService }, { token: i3.TenantService }, { token: i1.TenantUiService }, { token: i4.Location }, { token: i1.PasswordService }, { token: i3.UserService }, { token: i1.Permissions }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
268
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TenantListComponent, selector: "c8y-tenant-list", ngImport: i0, template: "<c8y-title>\n {{ 'Subtenants' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-layers\"\n label=\"{{ 'Tenants' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n *ngIf=\"!!(appState.state$ | async).newsletter\"\n [placement]=\"'right'\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\n type=\"button\"\n (click)=\"downloadNewsletterEmails()\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Email addresses' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Create tenant' | translate }}\"\n type=\"button\"\n (click)=\"createTenant()\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Create tenant' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#managing-subtenants\"></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"tenants$ | async\"\n [pagination]=\"pagination\"\n [showSearch]=\"showSearch\"\n [actionControls]=\"actionControls\"\n (onReload)=\"loadTenants()\"\n >\n <ng-container *ngIf=\"!(tenants$ | async); else empty\">\n <c8y-loading></c8y-loading>\n </ng-container>\n <ng-template #empty>\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-layers'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"\n stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\n \"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <ng-container *ngIf=\"stats?.size === 0\">\n <div>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Create tenant' | translate }}\"\n (click)=\"createTenant()\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n {{ 'Create tenant' | translate }}\n </button>\n </div>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants\">user documentation</a>\n .\n </small>\n </p>\n </ng-container>\n </c8y-ui-empty-state>\n </ng-template>\n\n <c8y-column name=\"company\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n <a [routerLink]=\"['/tenants', context.item.id]\">{{ context.value }}</a>\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"parent\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value || currentTenant.name }}\">\n {{ context.value || currentTenant.name }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"creationTime\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | c8yDate }}\">\n {{ context.value | c8yDate }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"status\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n title=\"{{ 'Active`tenant`' | translate }}\"\n *ngIf=\"context.item.status === TenantStatus.ACTIVE\"\n >\n <i\n class=\"text-success\"\n c8yIcon=\"check-circle\"\n ></i>\n </span>\n <span\n title=\"{{ 'Suspended`tenant`' | translate }}\"\n *ngIf=\"context.item.status === TenantStatus.SUSPENDED\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"ban\"\n ></i>\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "
|
|
276
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantListComponent, deps: [{ token: i1.AppStateService }, { token: i1.AlertService }, { token: i1.ModalService }, { token: i2.TranslateService }, { token: i3.TenantService }, { token: i1.TenantUiService }, { token: i4.Location }, { token: i1.PasswordService }, { token: i3.UserService }, { token: i1.Permissions }, { token: i1.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
277
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TenantListComponent, selector: "c8y-tenant-list", ngImport: i0, template: "<c8y-title>\n {{ 'Subtenants' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-layers\"\n label=\"{{ 'Tenants' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n *ngIf=\"!!(appState.state$ | async).newsletter\"\n [placement]=\"'right'\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\n type=\"button\"\n (click)=\"downloadNewsletterEmails()\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Email addresses' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Create tenant' | translate }}\"\n type=\"button\"\n (click)=\"createTenant({ sendGainsightEvent: false })\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Create tenant' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#managing-subtenants\"></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"tenants$ | async\"\n [pagination]=\"pagination\"\n [showSearch]=\"showSearch\"\n [actionControls]=\"actionControls\"\n (onReload)=\"loadTenants()\"\n >\n <ng-container *ngIf=\"!(tenants$ | async); else empty\">\n <c8y-loading></c8y-loading>\n </ng-container>\n <ng-template #empty>\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-layers'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"\n stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\n \"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <ng-container *ngIf=\"stats?.size === 0\">\n <div>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Create tenant' | translate }}\"\n (click)=\"createTenant()\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n {{ 'Create tenant' | translate }}\n </button>\n </div>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants\">user documentation</a>\n .\n </small>\n </p>\n </ng-container>\n </c8y-ui-empty-state>\n </ng-template>\n\n <c8y-column name=\"company\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n <a [routerLink]=\"['/tenants', context.item.id]\">{{ context.value }}</a>\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"parent\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value || currentTenant.name }}\">\n {{ context.value || currentTenant.name }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"creationTime\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | c8yDate }}\">\n {{ context.value | c8yDate }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"status\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n title=\"{{ 'Active`tenant`' | translate }}\"\n *ngIf=\"context.item.status === TenantStatus.ACTIVE\"\n >\n <i\n class=\"text-success\"\n c8yIcon=\"check-circle\"\n ></i>\n </span>\n <span\n title=\"{{ 'Suspended`tenant`' | translate }}\"\n *ngIf=\"context.item.status === TenantStatus.SUSPENDED\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"ban\"\n ></i>\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i1.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i1.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i1.EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: i1.CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: i1.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i1.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i1.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i1.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i1.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DatePipe, name: "c8yDate" }] }); }
|
|
269
278
|
}
|
|
270
279
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantListComponent, decorators: [{
|
|
271
280
|
type: Component,
|
|
272
|
-
args: [{ selector: 'c8y-tenant-list', template: "<c8y-title>\n {{ 'Subtenants' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-layers\"\n label=\"{{ 'Tenants' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n *ngIf=\"!!(appState.state$ | async).newsletter\"\n [placement]=\"'right'\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\n type=\"button\"\n (click)=\"downloadNewsletterEmails()\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Email addresses' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Create tenant' | translate }}\"\n type=\"button\"\n (click)=\"createTenant()\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Create tenant' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#managing-subtenants\"></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"tenants$ | async\"\n [pagination]=\"pagination\"\n [showSearch]=\"showSearch\"\n [actionControls]=\"actionControls\"\n (onReload)=\"loadTenants()\"\n >\n <ng-container *ngIf=\"!(tenants$ | async); else empty\">\n <c8y-loading></c8y-loading>\n </ng-container>\n <ng-template #empty>\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-layers'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"\n stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\n \"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <ng-container *ngIf=\"stats?.size === 0\">\n <div>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Create tenant' | translate }}\"\n (click)=\"createTenant()\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n {{ 'Create tenant' | translate }}\n </button>\n </div>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants\">user documentation</a>\n .\n </small>\n </p>\n </ng-container>\n </c8y-ui-empty-state>\n </ng-template>\n\n <c8y-column name=\"company\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n <a [routerLink]=\"['/tenants', context.item.id]\">{{ context.value }}</a>\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"parent\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value || currentTenant.name }}\">\n {{ context.value || currentTenant.name }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"creationTime\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | c8yDate }}\">\n {{ context.value | c8yDate }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"status\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n title=\"{{ 'Active`tenant`' | translate }}\"\n *ngIf=\"context.item.status === TenantStatus.ACTIVE\"\n >\n <i\n class=\"text-success\"\n c8yIcon=\"check-circle\"\n ></i>\n </span>\n <span\n title=\"{{ 'Suspended`tenant`' | translate }}\"\n *ngIf=\"context.item.status === TenantStatus.SUSPENDED\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"ban\"\n ></i>\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n" }]
|
|
273
|
-
}], ctorParameters: () => [{ type: i1.AppStateService }, { type: i1.AlertService }, { type: i1.ModalService }, { type: i2.TranslateService }, { type: i3.TenantService }, { type: i1.TenantUiService }, { type: i4.Location }, { type: i1.PasswordService }, { type: i3.UserService }, { type: i1.Permissions }] });
|
|
274
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVuYW50cy90ZW5hbnQtbGlzdC90ZW5hbnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi90ZW5hbnRzL3RlbmFudC1saXN0L3RlbmFudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhFLE9BQU8sRUFJTCxhQUFhLEVBQ2IsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBRUwsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFHakIsT0FBTyxFQUNQLFlBQVksRUFFWixlQUFlLEVBQ2YsV0FBVyxFQUVYLE1BQU0sRUFDTixlQUFlLEVBQ2hCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLDBDQUEwQyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDL0csT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7QUFNbEcsTUFBTSxPQUFPLG1CQUFtQjtJQWtDOUIsWUFDUyxRQUF5QixFQUN4QixZQUEwQixFQUMxQixZQUEwQixFQUMxQixnQkFBa0MsRUFDbEMsYUFBNEIsRUFDNUIsZUFBZ0MsRUFD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O1FBQ3pCLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUMsU0FBUyxDQUFDO0lBQ2xELENBQUM7SUFFRCxLQUFLLENBQUMsd0JBQXdCO1FBQzVCLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDbkUsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7K0dBelJVLG1CQUFtQjttR0FBbkIsbUJBQW1CLHVEQ3ZDaEMsZytJQW1KQTs7NEZENUdhLG1CQUFtQjtrQkFKL0IsU0FBUzsrQkFDRSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGV4cGFuZCwgcmVkdWNlLCBzaGFyZVJlcGxheSwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBJQ3VycmVudFRlbmFudCxcbiAgSVJlc3VsdExpc3QsXG4gIElUZW5hbnQsXG4gIFRlbmFudFNlcnZpY2UsXG4gIFRlbmFudFN0YXR1cyxcbiAgVXNlclNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEJ1aWx0SW5BY3Rpb25UeXBlLFxuICBDb2x1bW4sXG4gIERpc3BsYXlPcHRpb25zLFxuICBnZXR0ZXh0LFxuICBNb2RhbFNlcnZpY2UsXG4gIFBhZ2luYXRpb24sXG4gIFBhc3N3b3JkU2VydmljZSxcbiAgUGVybWlzc2lvbnMsXG4gIFNvcnRPcmRlcixcbiAgU3RhdHVzLFxuICBUZW5hbnRVaVNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7IENyZWF0aW9uVGltZUZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vY3JlYXRpb24tdGltZS5maWx0ZXJpbmctZm9ybS1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RhdHVzRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9zdGF0dXMuZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXRlbmFudC1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlbmFudC1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUZW5hbnRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgdGVuYW50cyQ6IEJlaGF2aW9yU3ViamVjdDxJVGVuYW50W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuICBpc1Blcm1pdHRlZFRvQ3JlYXRlVGVuYW5hbnQgPSB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5oYXNBbnlSb2xlKFtcbiAgICBQZXJtaXNzaW9ucy5ST0xFX1RFTkFOVF9NQU5BR0VNRU5UX0FETUlOLFxuICAgIFBlcm1pc3Npb25zLlJPTEVfVEVOQU5UX01BTkFHRU1FTlRfQ1JFQVRFXG4gIF0pO1xuICBjdXJyZW50VGVuYW50OiBJQ3VycmVudFRlbmFudDtcbiAgaXNNYW5hZ2VtZW50VGVuYW50OiBib29sZWFuO1xuICBUT1BfVEVOQU5UX05BTUUgPSAnbWFuYWdlbWVudCc7XG5cbiAgdGl0bGU6IHN0cmluZyA9IG51bGw7XG4gIGxvYWRNb3JlSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZCBtb3JlIHRlbmFudHMnKTtcbiAgbG9hZGluZ0l0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWRpbmcgdGVuYW50c+KApicpO1xuXG4gIGRpc3BsYXlPcHRpb25zOiBEaXNwbGF5T3B0aW9ucyA9IHtcbiAgICBib3JkZXJlZDogZmFsc2UsXG4gICAgc3RyaXBlZDogdHJ1ZSxcbiAgICBmaWx0ZXI6IHRydWUsXG4gICAgZ3JpZEhlYWRlcjogdHJ1ZSxcbiAgICBob3ZlcjogdHJ1ZVxuICB9O1xuXG4gIGNvbHVtbnM6IENvbHVtbltdID0gdGhpcy5nZXRDb2x1bW5zKCk7XG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB0aGlzLmdldFBhZ2luYXRpb24oKTtcbiAgc2hvd1NlYXJjaCA9IHRydWU7XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSB0aGlzLmdldEFjdGlvbkNvbnRyb2xzKCk7XG5cbiAgbm9SZXN1bHRzTWVzc2FnZSA9IGdldHRleHQoJ05vIHRlbmFudHMgdG8gZGlzcGxheS4nKTtcbiAgbm9EYXRhTWVzc2FnZSA9IGdldHRleHQoJ1RoZXJlIGFyZSBubyB0ZW5hbnRzIGRlZmluZWQuJyk7XG4gIG5vUmVzdWx0c1N1YnRpdGxlID0gZ2V0dGV4dCgnUmVmaW5lIHlvdXIgc2VhcmNoIHRlcm1zIG9yIGNoZWNrIHlvdXIgc3BlbGxpbmcuJyk7XG4gIG5vRGF0YVN1YnRpdGxlID0gZ2V0dGV4dCgnQ3JlYXRlIHRoZSBmaXJzdCB0ZW5hbnQuJyk7XG5cbiAgVGVuYW50U3RhdHVzID0gVGVuYW50U3RhdHVzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRTZXJ2aWNlOiBUZW5hbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50VWlTZXJ2aWNlOiBUZW5hbnRVaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBwYXNzd29yZFNlcnZpY2U6IFBhc3N3b3JkU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY3VycmVudFRlbmFudCA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICB0aGlzLmlzTWFuYWdlbWVudFRlbmFudCA9IGF3YWl0IHRoaXMudGVuYW50VWlTZXJ2aWNlLmlzTWFuYWdlbWVudFRlbmFudCgpO1xuICAgIHRoaXMubG9hZFRlbmFudHMoKTtcbiAgfVxuXG4gIGxvYWRUZW5hbnRzKCkge1xuICAgIHRoaXMudGVuYW50cyQubmV4dCh1bmRlZmluZWQpO1xuICAgIGZyb20odGhpcy50ZW5hbnRTZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogMjAwMCwgd2l0aFRvdGFsUGFnZXM6IHRydWUsIHdpdGhBcHBzOiBmYWxzZSB9KSlcbiAgICAgIC5waXBlKFxuICAgICAgICBleHBhbmQocmVzdWx0TGlzdCA9PiByZXN1bHRMaXN0LnBhZ2luZy5uZXh0UGFnZSAhPT0gbnVsbCAmJiByZXN1bHRMaXN0LnBhZ2luZy5uZXh0KCkpLFxuICAgICAgICB0YWtlV2hpbGUocmVzdWx0TGlzdCA9PiByZXN1bHRMaXN0LnBhZ2luZy5uZXh0UGFnZSAhPT0gbnVsbCwgdHJ1ZSksXG4gICAgICAgIHJlZHVjZShcbiAgICAgICAgICAodGVuYW50czogSVRlbmFudFtdLCByZXN1bHRMaXN0OiBJUmVzdWx0TGlzdDxJVGVuYW50PikgPT4gW1xuICAgICAgICAgICAgLi4udGVuYW50cyxcbiAgICAgICAgICAgIC4uLnJlc3VsdExpc3QuZGF0YVxuICAgICAgICAgIF0sXG4gICAgICAgICAgW11cbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGVuYW50cyA9PiB0aGlzLnRlbmFudHMkLm5leHQodGVuYW50cykpO1xuICB9XG5cbiAgZ2V0Q29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NvbXBhbnknLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ1RlbmFudCcpLFxuICAgICAgICBwYXRoOiAnY29tcGFueScsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0T3JkZXI6ICdhc2MnIGFzIFNvcnRPcmRlclxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdJRCcpLFxuICAgICAgICBwYXRoOiAnaWQnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2RvbWFpbicsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnRG9tYWluJyksXG4gICAgICAgIHBhdGg6ICdkb21haW4nLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3BhcmVudCcsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnUGFyZW50IHRlbmFudCcpLFxuICAgICAgICBwYXRoOiAncGFyZW50JyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjb250YWN0TmFtZScsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnQ29udGFjdCBuYW1lJyksXG4gICAgICAgIHBhdGg6ICdjb250YWN0TmFtZScsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY3JlYXRpb25UaW1lJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdDcmVhdGVkJyksXG4gICAgICAgIHBhdGg6ICdjcmVhdGlvblRpbWUnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBmaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQ6IENyZWF0aW9uVGltZUZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdleHRlcm5hbFJlZmVyZW5jZScsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnRXh0ZXJuYWwgcmVmZXJlbmNlJyksXG4gICAgICAgIHBhdGg6ICdjdXN0b21Qcm9wZXJ0aWVzLmV4dGVybmFsUmVmZXJlbmNlJyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdGF0dXMnLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ1N0YXR1cycpLFxuICAgICAgICBwYXRoOiAnc3RhdHVzJyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50OiBTdGF0dXNGaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICByZXNpemFibGU6IGZhbHNlXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGdldFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcbiAgfVxuXG4gIGdldEFjdGlvbkNvbnRyb2xzKCk6IEFjdGlvbkNvbnRyb2xbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnRWRpdGB0ZW5hbnRgJyksXG4gICAgICAgIGNhbGxiYWNrOiB0ZW5hbnQgPT4gdGhpcy5nb1RvRGV0YWlscyh0ZW5hbnQpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnYWN0aXZhdGVUZW5hbnRBY3Rpb24nLFxuICAgICAgICBpY29uOiAncG93ZXItb2ZmJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnQWN0aXZhdGVgdGVuYW50YCcpLFxuICAgICAgICBjYWxsYmFjazogKHRlbmFudDogSVRlbmFudCkgPT4gdGhpcy5hY3RpdmF0ZVRlbmFudCh0ZW5hbnQpLFxuICAgICAgICBzaG93SWY6ICh0ZW5hbnQ6IElUZW5hbnQpID0+IHRoaXMuaXNTdXNwZW5kZWQodGVuYW50KVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N1c3BlbmRUZW5hbnRBY3Rpb24nLFxuICAgICAgICBpY29uOiAncG93ZXItb2ZmJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnU3VzcGVuZGB0ZW5hbnRgJyksXG4gICAgICAgIGNhbGxiYWNrOiAodGVuYW50OiBJVGVuYW50KSA9PiB0aGlzLnN1c3BlbmRUZW5hbnQodGVuYW50KSxcbiAgICAgICAgc2hvd0lmOiAodGVuYW50OiBJVGVuYW50KSA9PiB0aGlzLmlzQWN0aXZlKHRlbmFudClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZSxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnRGVsZXRlYHRlbmFudGAnKSxcbiAgICAgICAgY2FsbGJhY2s6IHRlbmFudCA9PiB0aGlzLmRlbGV0ZSh0ZW5hbnQpLFxuICAgICAgICBzaG93SWY6ICgpID0+IHRoaXMuaXNNYW5hZ2VtZW50VGVuYW50XG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGNyZWF0ZVRlbmFudCgpIHtcbiAgICB0aGlzLmxvY2F0aW9uLmdvKCcvdGVuYW50cy9uZXcnKTtcbiAgfVxuXG4gIGdvVG9EZXRhaWxzKHRlbmFudDogSVRlbmFudCkge1xuICAgIHRoaXMubG9jYXRpb24uZ28oYC90ZW5hbnRzLyR7dGVuYW50LmlkfWApO1xuICB9XG5cbiAgYXN5bmMgYWN0aXZhdGVUZW5hbnQodGVuYW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YTogc2F2ZWRUZW5hbnQgfSA9IGF3YWl0IHRoaXMudGVuYW50U2VydmljZS51cGRhdGUoe1xuICAgICAgICBpZDogdGVuYW50LmlkLFxuICAgICAgICBzdGF0dXM6IFRlbmFudFN0YXR1cy5BQ1RJVkVcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmFzc2lnbih0ZW5hbnQsIHNhdmVkVGVuYW50KTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnVGVuYW50IGFjdGl2YXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdXNwZW5kVGVuYW50KHRlbmFudCkge1xuICAgIGNvbnN0IHRpdGxlID0gZ2V0dGV4dCgnU3VzcGVuZCB0ZW5hbnQnKTtcbiAgICBjb25zdCBjb25maXJtYXRpb25UZXh0ID0gZ2V0dGV4dChcbiAgICAgICdZb3UgYXJlIGFib3V0IHRvIHN1c3BlbmQgdGVuYW50IFwie3sgY29tcGFueSB9fVwiIChJRCBcInt7IGlkIH19XCIpLidcbiAgICApO1xuICAgIGNvbnN0IHByb2NlZWQgPSBnZXR0ZXh0KCdEbyB5b3Ugd2FudCB0byBwcm9jZWVkPycpO1xuICAgIGNvbnN0IGJvZHkgPSBbXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb25maXJtYXRpb25UZXh0LCB7XG4gICAgICAgIGNvbXBhbnk6IHRlbmFudC5jb21wYW55LFxuICAgICAgICBpZDogdGVuYW50LmlkXG4gICAgICB9KSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHByb2NlZWQpXG4gICAgXS5qb2luKCcgJyk7XG4gICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgb2s6IGdldHRleHQoJ1N1c3BlbmRgdGVuYW50YCcpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybSh0aXRsZSwgYm9keSwgU3RhdHVzLkRBTkdFUiwgbGFiZWxzKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMucGFzc3dvcmRTZXJ2aWNlLmNvbmZpcm1QYXNzd29yZCgpLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKGNvbmZpcm1lZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCB7IGRhdGE6IHNhdmVkVGVuYW50IH0gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgICBpZDogdGVuYW50LmlkLFxuICAgICAgICAgIHN0YXR1czogVGVuYW50U3RhdHVzLlNVU1BFTkRFRFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0ZW5hbnQsIHNhdmVkVGVuYW50KTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdUZW5hbnQgc3VzcGVuZGVkLicpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZSh0ZW5hbnQpIHtcbiAgICBjb25zdCB0aXRsZSA9IGdldHRleHQoJ0RlbGV0ZSB0ZW5hbnQnKTtcbiAgICBjb25zdCBjb25maXJtYXRpb25UZXh0ID0gZ2V0dGV4dChcbiAgICAgICdZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0ZW5hbnQgXCJ7eyBjb21wYW55IH19XCIgKElEIFwie3sgaWQgfX1cIikuJ1xuICAgICk7XG4gICAgY29uc3QgaGludCA9IGdldHRleHQoJ1RoaXMgb3BlcmF0aW9uIGlzIGlycmV2ZXJzaWJsZS4nKTtcbiAgICBjb25zdCBwcm9jZWVkID0gZ2V0dGV4dCgnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nKTtcbiAgICBjb25zdCBib2R5ID0gW1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY29uZmlybWF0aW9uVGV4dCwge1xuICAgICAgICBjb21wYW55OiB0ZW5hbnQuY29tcGFueSxcbiAgICAgICAgaWQ6IHRlbmFudC5pZFxuICAgICAgfSksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChoaW50KSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHByb2NlZWQpXG4gICAgXS5qb2luKCcgJyk7XG4gICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgb2s6IGdldHRleHQoJ0RlbGV0ZWB0ZW5hbnRgJylcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKHRpdGxlLCBib2R5LCBTdGF0dXMuREFOR0VSLCBsYWJlbHMpO1xuICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5wYXNzd29yZFNlcnZpY2UuY29uZmlybVBhc3N3b3JkKCkudG9Qcm9taXNlKCk7XG4gICAgICBpZiAoY29uZmlybWVkID09PSB0cnVlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5kZWxldGUodGVuYW50KTtcbiAgICAgICAgY29uc3QgdGVuYW50c1dpdGhvdXRSZW1vdmVkT25lID0gdGhpcy50ZW5hbnRzJC52YWx1ZS5maWx0ZXIodCA9PiB0ICE9PSB0ZW5hbnQpO1xuICAgICAgICB0aGlzLnRlbmFudHMkLm5leHQodGVuYW50c1dpdGhvdXRSZW1vdmVkT25lKTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhcbiAgICAgICAgICBnZXR0ZXh0KCdUZW5hbnQgaXMgYmVpbmcgZGVsZXRlZCBpbiB0aGUgYmFja2dyb3VuZC4gVGhpcyBtaWdodCB0YWtlIGEgd2hpbGXigKYnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNBY3RpdmUodGVuYW50OiBJVGVuYW50KSB7XG4gICAgcmV0dXJuIHRlbmFudC5zdGF0dXMgPT09IFRlbmFudFN0YXR1cy5BQ1RJVkU7XG4gIH1cblxuICBpc1N1c3BlbmRlZCh0ZW5hbnQ6IElUZW5hbnQpIHtcbiAgICByZXR1cm4gdGVuYW50LnN0YXR1cyA9PT0gVGVuYW50U3RhdHVzLlNVU1BFTkRFRDtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkTmV3c2xldHRlckVtYWlscygpIHtcbiAgICBjb25zdCB7IHJlcywgZGF0YSB9ID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS5nZXROZXdzbGV0dGVyRW1haWxzKCk7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpO1xuICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gL2ZpbGVuYW1lPVwiKC4qKVwiLy5leGVjKGNvbnRlbnREaXNwb3NpdGlvbilbMV07XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtkYXRhXSwgeyB0eXBlOiBjb250ZW50VHlwZSB9KTtcbiAgICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUpO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPlxuICB7eyAnU3VidGVuYW50cycgfCB0cmFuc2xhdGUgfX1cbjwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgaWNvbj1cImM4eS1sYXllcnNcIlxuICAgIGxhYmVsPVwie3sgJ1RlbmFudHMnIHwgdHJhbnNsYXRlIH19XCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LWxheWVycydcIlxuICAgIFtsYWJlbF09XCInU3VidGVuYW50cycgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgKm5nSWY9XCIhIShhcHBTdGF0ZS5zdGF0ZSQgfCBhc3luYykubmV3c2xldHRlclwiXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7e1xuICAgICAgJ0Rvd25sb2FkcyB0aGUgbGlzdCBvZiBlbWFpbHMgb2YgdXNlcnMgc3Vic2NyaWJlZCBmb3IgbmV3c2xldHRlciBvbiB0aGUgY3VycmVudCB0ZW5hbnQgYW5kIGl0cyBzdWJ0ZW5hbnRzLidcbiAgICAgICAgfCB0cmFuc2xhdGVcbiAgICB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cImRvd25sb2FkTmV3c2xldHRlckVtYWlscygpXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJkb3dubG9hZFwiPjwvaT5cbiAgICB7eyAnRW1haWwgYWRkcmVzc2VzJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnQ3JlYXRlIHRlbmFudCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJjcmVhdGVUZW5hbnQoKVwiXG4gICAgW2Rpc2FibGVkXT1cIiFpc1Blcm1pdHRlZFRvQ3JlYXRlVGVuYW5hbnRcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgIHt7ICdDcmVhdGUgdGVuYW50JyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1oZWxwIHNyYz1cIi9kb2NzL2VudGVycHJpc2UtdGVuYW50L21hbmFnaW5nLXRlbmFudHMvI21hbmFnaW5nLXN1YnRlbmFudHNcIj48L2M4eS1oZWxwPlxuXG48ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBib3JkZXItdG9wIGJvcmRlci1ib3R0b21cIj5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFtsb2FkTW9yZUl0ZW1zTGFiZWxdPVwibG9hZE1vcmVJdGVtc0xhYmVsXCJcbiAgICBbbG9hZGluZ0l0ZW1zTGFiZWxdPVwibG9hZGluZ0l0ZW1zTGFiZWxcIlxuICAgIFtkaXNwbGF5T3B0aW9uc109XCJkaXNwbGF5T3B0aW9uc1wiXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgW3Jvd3NdPVwidGVuYW50cyQgfCBhc3luY1wiXG4gICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgW3Nob3dTZWFyY2hdPVwic2hvd1NlYXJjaFwiXG4gICAgW2FjdGlvbkNvbnRyb2xzXT1cImFjdGlvbkNvbnRyb2xzXCJcbiAgICAob25SZWxvYWQpPVwibG9hZFRlbmFudHMoKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISh0ZW5hbnRzJCB8IGFzeW5jKTsgZWxzZSBlbXB0eVwiPlxuICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgW2ljb25dPVwic3RhdHM/LnNpemUgPiAwID8gJ3NlYXJjaCcgOiAnYzh5LWxheWVycydcIlxuICAgICAgICBbdGl0bGVdPVwic3RhdHM/LnNpemUgPiAwID8gKG5vUmVzdWx0c01lc3NhZ2UgfCB0cmFuc2xhdGUpIDogKG5vRGF0YU1lc3NhZ2UgfCB0cmFuc2xhdGUpXCJcbiAgICAgICAgW3N1YnRpdGxlXT1cIlxuICAgICAgICAgIHN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNTdWJ0aXRsZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhU3VidGl0bGUgfCB0cmFuc2xhdGUpXG4gICAgICAgIFwiXG4gICAgICAgICplbXB0eVN0YXRlQ29udGV4dD1cImxldCBzdGF0c1wiXG4gICAgICAgIFtob3Jpem9udGFsXT1cInN0YXRzPy5zaXplID4gMFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0cz8uc2l6ZSA9PT0gMFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQ3JlYXRlIHRlbmFudCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlVGVuYW50KClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzUGVybWl0dGVkVG9DcmVhdGVUZW5hbmFudFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdDcmVhdGUgdGVuYW50JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHAgYzh5LWd1aWRlLWRvY3M+XG4gICAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgRmluZCBvdXQgbW9yZSBpbiB0aGVcbiAgICAgICAgICAgICAgPGEgYzh5LWd1aWRlLWhyZWY9XCIvZG9jcy9lbnRlcnByaXNlLXRlbmFudC9tYW5hZ2luZy10ZW5hbnRzXCI+dXNlciBkb2N1bWVudGF0aW9uPC9hPlxuICAgICAgICAgICAgICAuXG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cImNvbXBhbnlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmM4eUNlbGxSZW5kZXJlckRlZj1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxzcGFuIHRpdGxlPVwie3sgY29udGV4dC52YWx1ZSB9fVwiPlxuICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL3RlbmFudHMnLCBjb250ZXh0Lml0ZW0uaWRdXCI+e3sgY29udGV4dC52YWx1ZSB9fTwvYT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cInBhcmVudFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIHx8IGN1cnJlbnRUZW5hbnQubmFtZSB9fVwiPlxuICAgICAgICAgIHt7IGNvbnRleHQudmFsdWUgfHwgY3VycmVudFRlbmFudC5uYW1lIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJjcmVhdGlvblRpbWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmM4eUNlbGxSZW5kZXJlckRlZj1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxzcGFuIHRpdGxlPVwie3sgY29udGV4dC52YWx1ZSB8IGM4eURhdGUgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHwgYzh5RGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwic3RhdHVzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIHRpdGxlPVwie3sgJ0FjdGl2ZWB0ZW5hbnRgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgKm5nSWY9XCJjb250ZXh0Lml0ZW0uc3RhdHVzID09PSBUZW5hbnRTdGF0dXMuQUNUSVZFXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtc3VjY2Vzc1wiXG4gICAgICAgICAgICBjOHlJY29uPVwiY2hlY2stY2lyY2xlXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnU3VzcGVuZGVkYHRlbmFudGAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAqbmdJZj1cImNvbnRleHQuaXRlbS5zdGF0dXMgPT09IFRlbmFudFN0YXR1cy5TVVNQRU5ERURcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxuICAgICAgICAgICAgYzh5SWNvbj1cImJhblwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuICA8L2M4eS1kYXRhLWdyaWQ+XG48L2Rpdj5cbiJdfQ==
|
|
281
|
+
args: [{ selector: 'c8y-tenant-list', template: "<c8y-title>\n {{ 'Subtenants' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-layers\"\n label=\"{{ 'Tenants' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n *ngIf=\"!!(appState.state$ | async).newsletter\"\n [placement]=\"'right'\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\n type=\"button\"\n (click)=\"downloadNewsletterEmails()\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Email addresses' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Create tenant' | translate }}\"\n type=\"button\"\n (click)=\"createTenant({ sendGainsightEvent: false })\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Create tenant' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#managing-subtenants\"></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"tenants$ | async\"\n [pagination]=\"pagination\"\n [showSearch]=\"showSearch\"\n [actionControls]=\"actionControls\"\n (onReload)=\"loadTenants()\"\n >\n <ng-container *ngIf=\"!(tenants$ | async); else empty\">\n <c8y-loading></c8y-loading>\n </ng-container>\n <ng-template #empty>\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-layers'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"\n stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\n \"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <ng-container *ngIf=\"stats?.size === 0\">\n <div>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Create tenant' | translate }}\"\n (click)=\"createTenant()\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n {{ 'Create tenant' | translate }}\n </button>\n </div>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants\">user documentation</a>\n .\n </small>\n </p>\n </ng-container>\n </c8y-ui-empty-state>\n </ng-template>\n\n <c8y-column name=\"company\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n <a [routerLink]=\"['/tenants', context.item.id]\">{{ context.value }}</a>\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"parent\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value || currentTenant.name }}\">\n {{ context.value || currentTenant.name }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"creationTime\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | c8yDate }}\">\n {{ context.value | c8yDate }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"status\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n title=\"{{ 'Active`tenant`' | translate }}\"\n *ngIf=\"context.item.status === TenantStatus.ACTIVE\"\n >\n <i\n class=\"text-success\"\n c8yIcon=\"check-circle\"\n ></i>\n </span>\n <span\n title=\"{{ 'Suspended`tenant`' | translate }}\"\n *ngIf=\"context.item.status === TenantStatus.SUSPENDED\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"ban\"\n ></i>\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n" }]
|
|
282
|
+
}], ctorParameters: () => [{ type: i1.AppStateService }, { type: i1.AlertService }, { type: i1.ModalService }, { type: i2.TranslateService }, { type: i3.TenantService }, { type: i1.TenantUiService }, { type: i4.Location }, { type: i1.PasswordService }, { type: i3.UserService }, { type: i1.Permissions }, { type: i1.GainsightService }] });
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVuYW50cy90ZW5hbnQtbGlzdC90ZW5hbnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi90ZW5hbnRzL3RlbmFudC1saXN0L3RlbmFudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhFLE9BQU8sRUFJTCxhQUFhLEVBQ2IsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBRUwsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFHakIsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxZQUFZLEVBRVosZUFBZSxFQUNmLFdBQVcsRUFFWCxNQUFNLEVBQ04sZUFBZSxFQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQy9HLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBRTFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxH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Q0FBQztJQUN6QixDQUFDOytHQWpTVSxtQkFBbUI7bUdBQW5CLG1CQUFtQix1REMzQ2hDLDYvSUFtSkE7OzRGRHhHYSxtQkFBbUI7a0JBSi9CLFNBQVM7K0JBQ0UsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleHBhbmQsIHJlZHVjZSwgc2hhcmVSZXBsYXksIHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgSUN1cnJlbnRUZW5hbnQsXG4gIElSZXN1bHRMaXN0LFxuICBJVGVuYW50LFxuICBUZW5hbnRTZXJ2aWNlLFxuICBUZW5hbnRTdGF0dXMsXG4gIFVzZXJTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQ29sdW1uLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgR2FpbnNpZ2h0U2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgTW9kYWxTZXJ2aWNlLFxuICBQYWdpbmF0aW9uLFxuICBQYXNzd29yZFNlcnZpY2UsXG4gIFBlcm1pc3Npb25zLFxuICBTb3J0T3JkZXIsXG4gIFN0YXR1cyxcbiAgVGVuYW50VWlTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgeyBDcmVhdGlvblRpbWVGaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuL2NyZWF0aW9uLXRpbWUuZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFN0YXR1c0ZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vc3RhdHVzLmZpbHRlcmluZy1mb3JtLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQUk9EVUNUX0VYUEVSSUVOQ0VfVEVOQU5UX01BTkFHRU1FTlQgfSBmcm9tICcuLy4uL3RlbmFudHMubW9kZWwnO1xuXG5jb25zdCB7IEVWRU5UUywgQ09NUE9ORU5UUywgQUNUSU9OUyB9ID0gUFJPRFVDVF9FWFBFUklFTkNFX1RFTkFOVF9NQU5BR0VNRU5UO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdGVuYW50LWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVuYW50LWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRlbmFudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB0ZW5hbnRzJDogQmVoYXZpb3JTdWJqZWN0PElUZW5hbnRbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIGlzUGVybWl0dGVkVG9DcmVhdGVUZW5hbmFudCA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmhhc0FueVJvbGUoW1xuICAgIFBlcm1pc3Npb25zLlJPTEVfVEVOQU5UX01BTkFHRU1FTlRfQURNSU4sXG4gICAgUGVybWlzc2lvbnMuUk9MRV9URU5BTlRfTUFOQUdFTUVOVF9DUkVBVEVcbiAgXSk7XG4gIGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50O1xuICBpc01hbmFnZW1lbnRUZW5hbnQ6IGJvb2xlYW47XG4gIFRPUF9URU5BTlRfTkFNRSA9ICdtYW5hZ2VtZW50JztcblxuICB0aXRsZTogc3RyaW5nID0gbnVsbDtcbiAgbG9hZE1vcmVJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkIG1vcmUgdGVuYW50cycpO1xuICBsb2FkaW5nSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZGluZyB0ZW5hbnRz4oCmJyk7XG5cbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlLFxuICAgIGhvdmVyOiB0cnVlXG4gIH07XG5cbiAgY29sdW1uczogQ29sdW1uW10gPSB0aGlzLmdldENvbHVtbnMoKTtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICBzaG93U2VhcmNoID0gdHJ1ZTtcbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXSA9IHRoaXMuZ2V0QWN0aW9uQ29udHJvbHMoKTtcblxuICBub1Jlc3VsdHNNZXNzYWdlID0gZ2V0dGV4dCgnTm8gdGVuYW50cyB0byBkaXNwbGF5LicpO1xuICBub0RhdGFNZXNzYWdlID0gZ2V0dGV4dCgnVGhlcmUgYXJlIG5vIHRlbmFudHMgZGVmaW5lZC4nKTtcbiAgbm9SZXN1bHRzU3VidGl0bGUgPSBnZXR0ZXh0KCdSZWZpbmUgeW91ciBzZWFyY2ggdGVybXMgb3IgY2hlY2sgeW91ciBzcGVsbGluZy4nKTtcbiAgbm9EYXRhU3VidGl0bGUgPSBnZXR0ZXh0KCdDcmVhdGUgdGhlIGZpcnN0IHRlbmFudC4nKTtcblxuICBUZW5hbnRTdGF0dXMgPSBUZW5hbnRTdGF0dXM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRVaVNlcnZpY2U6IFRlbmFudFVpU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHBhc3N3b3JkU2VydmljZTogUGFzc3dvcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9ucyxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY3VycmVudFRlbmFudCA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICB0aGlzLmlzTWFuYWdlbWVudFRlbmFudCA9IGF3YWl0IHRoaXMudGVuYW50VWlTZXJ2aWNlLmlzTWFuYWdlbWVudFRlbmFudCgpO1xuICAgIHRoaXMubG9hZFRlbmFudHMoKTtcbiAgfVxuXG4gIGxvYWRUZW5hbnRzKCkge1xuICAgIHRoaXMudGVuYW50cyQubmV4dCh1bmRlZmluZWQpO1xuICAgIGZyb20odGhpcy50ZW5hbnRTZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogMjAwMCwgd2l0aFRvdGFsUGFnZXM6IHRydWUsIHdpdGhBcHBzOiBmYWxzZSB9KSlcbiAgICAgIC5waXBlKFxuICAgICAgICBleHBhbmQocmVzdWx0TGlzdCA9PiByZXN1bHRMaXN0LnBhZ2luZy5uZXh0UGFnZSAhPT0gbnVsbCAmJiByZXN1bHRMaXN0LnBhZ2luZy5uZXh0KCkpLFxuICAgICAgICB0YWtlV2hpbGUocmVzdWx0TGlzdCA9PiByZXN1bHRMaXN0LnBhZ2luZy5uZXh0UGFnZSAhPT0gbnVsbCwgdHJ1ZSksXG4gICAgICAgIHJlZHVjZShcbiAgICAgICAgICAodGVuYW50czogSVRlbmFudFtdLCByZXN1bHRMaXN0OiBJUmVzdWx0TGlzdDxJVGVuYW50PikgPT4gW1xuICAgICAgICAgICAgLi4udGVuYW50cyxcbiAgICAgICAgICAgIC4uLnJlc3VsdExpc3QuZGF0YVxuICAgICAgICAgIF0sXG4gICAgICAgICAgW11cbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGVuYW50cyA9PiB0aGlzLnRlbmFudHMkLm5leHQodGVuYW50cykpO1xuICB9XG5cbiAgZ2V0Q29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NvbXBhbnknLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ1RlbmFudCcpLFxuICAgICAgICBwYXRoOiAnY29tcGFueScsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0T3JkZXI6ICdhc2MnIGFzIFNvcnRPcmRlclxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdJRCcpLFxuICAgICAgICBwYXRoOiAnaWQnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2RvbWFpbicsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnRG9tYWluJyksXG4gICAgICAgIHBhdGg6ICdkb21haW4nLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3BhcmVudCcsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnUGFyZW50IHRlbmFudCcpLFxuICAgICAgICBwYXRoOiAncGFyZW50JyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjb250YWN0TmFtZScsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnQ29udGFjdCBuYW1lJyksXG4gICAgICAgIHBhdGg6ICdjb250YWN0TmFtZScsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY3JlYXRpb25UaW1lJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdDcmVhdGVkJyksXG4gICAgICAgIHBhdGg6ICdjcmVhdGlvblRpbWUnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBmaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQ6IENyZWF0aW9uVGltZUZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdleHRlcm5hbFJlZmVyZW5jZScsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnRXh0ZXJuYWwgcmVmZXJlbmNlJyksXG4gICAgICAgIHBhdGg6ICdjdXN0b21Qcm9wZXJ0aWVzLmV4dGVybmFsUmVmZXJlbmNlJyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdGF0dXMnLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ1N0YXR1cycpLFxuICAgICAgICBwYXRoOiAnc3RhdHVzJyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50OiBTdGF0dXNGaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICByZXNpemFibGU6IGZhbHNlXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGdldFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcbiAgfVxuXG4gIGdldEFjdGlvbkNvbnRyb2xzKCk6IEFjdGlvbkNvbnRyb2xbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnRWRpdGB0ZW5hbnRgJyksXG4gICAgICAgIGNhbGxiYWNrOiB0ZW5hbnQgPT4gdGhpcy5nb1RvRGV0YWlscyh0ZW5hbnQpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnYWN0aXZhdGVUZW5hbnRBY3Rpb24nLFxuICAgICAgICBpY29uOiAncG93ZXItb2ZmJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnQWN0aXZhdGVgdGVuYW50YCcpLFxuICAgICAgICBjYWxsYmFjazogKHRlbmFudDogSVRlbmFudCkgPT4gdGhpcy5hY3RpdmF0ZVRlbmFudCh0ZW5hbnQpLFxuICAgICAgICBzaG93SWY6ICh0ZW5hbnQ6IElUZW5hbnQpID0+IHRoaXMuaXNTdXNwZW5kZWQodGVuYW50KVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N1c3BlbmRUZW5hbnRBY3Rpb24nLFxuICAgICAgICBpY29uOiAncG93ZXItb2ZmJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnU3VzcGVuZGB0ZW5hbnRgJyksXG4gICAgICAgIGNhbGxiYWNrOiAodGVuYW50OiBJVGVuYW50KSA9PiB0aGlzLnN1c3BlbmRUZW5hbnQodGVuYW50KSxcbiAgICAgICAgc2hvd0lmOiAodGVuYW50OiBJVGVuYW50KSA9PiB0aGlzLmlzQWN0aXZlKHRlbmFudClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZSxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnRGVsZXRlYHRlbmFudGAnKSxcbiAgICAgICAgY2FsbGJhY2s6IHRlbmFudCA9PiB0aGlzLmRlbGV0ZSh0ZW5hbnQpLFxuICAgICAgICBzaG93SWY6ICgpID0+IHRoaXMuaXNNYW5hZ2VtZW50VGVuYW50XG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGNyZWF0ZVRlbmFudChvcHRpb25zOiB7IHNlbmRHYWluc2lnaHRFdmVudDogYm9vbGVhbiB9ID0geyBzZW5kR2FpbnNpZ2h0RXZlbnQ6IHRydWUgfSkge1xuICAgIGlmIChvcHRpb25zLnNlbmRHYWluc2lnaHRFdmVudCkge1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChFVkVOVFMuVEVOQU5UX01BTkFHRU1FTlQsIHtcbiAgICAgICAgY29tcG9uZW50OiBDT01QT05FTlRTLlRFTkFOVF9MSVNULFxuICAgICAgICBhY3Rpb246IEFDVElPTlMuVEVOQU5UX0NSRUFUSU9OX0lOSVRJQUxJWkVEXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmxvY2F0aW9uLmdvKCcvdGVuYW50cy9uZXcnKTtcbiAgfVxuXG4gIGdvVG9EZXRhaWxzKHRlbmFudDogSVRlbmFudCkge1xuICAgIHRoaXMubG9jYXRpb24uZ28oYC90ZW5hbnRzLyR7dGVuYW50LmlkfWApO1xuICB9XG5cbiAgYXN5bmMgYWN0aXZhdGVUZW5hbnQodGVuYW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YTogc2F2ZWRUZW5hbnQgfSA9IGF3YWl0IHRoaXMudGVuYW50U2VydmljZS51cGRhdGUoe1xuICAgICAgICBpZDogdGVuYW50LmlkLFxuICAgICAgICBzdGF0dXM6IFRlbmFudFN0YXR1cy5BQ1RJVkVcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmFzc2lnbih0ZW5hbnQsIHNhdmVkVGVuYW50KTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnVGVuYW50IGFjdGl2YXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdXNwZW5kVGVuYW50KHRlbmFudCkge1xuICAgIGNvbnN0IHRpdGxlID0gZ2V0dGV4dCgnU3VzcGVuZCB0ZW5hbnQnKTtcbiAgICBjb25zdCBjb25maXJtYXRpb25UZXh0ID0gZ2V0dGV4dChcbiAgICAgICdZb3UgYXJlIGFib3V0IHRvIHN1c3BlbmQgdGVuYW50IFwie3sgY29tcGFueSB9fVwiIChJRCBcInt7IGlkIH19XCIpLidcbiAgICApO1xuICAgIGNvbnN0IHByb2NlZWQgPSBnZXR0ZXh0KCdEbyB5b3Ugd2FudCB0byBwcm9jZWVkPycpO1xuICAgIGNvbnN0IGJvZHkgPSBbXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb25maXJtYXRpb25UZXh0LCB7XG4gICAgICAgIGNvbXBhbnk6IHRlbmFudC5jb21wYW55LFxuICAgICAgICBpZDogdGVuYW50LmlkXG4gICAgICB9KSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHByb2NlZWQpXG4gICAgXS5qb2luKCcgJyk7XG4gICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgb2s6IGdldHRleHQoJ1N1c3BlbmRgdGVuYW50YCcpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybSh0aXRsZSwgYm9keSwgU3RhdHVzLkRBTkdFUiwgbGFiZWxzKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMucGFzc3dvcmRTZXJ2aWNlLmNvbmZpcm1QYXNzd29yZCgpLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKGNvbmZpcm1lZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCB7IGRhdGE6IHNhdmVkVGVuYW50IH0gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgICBpZDogdGVuYW50LmlkLFxuICAgICAgICAgIHN0YXR1czogVGVuYW50U3RhdHVzLlNVU1BFTkRFRFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0ZW5hbnQsIHNhdmVkVGVuYW50KTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdUZW5hbnQgc3VzcGVuZGVkLicpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZSh0ZW5hbnQpIHtcbiAgICBjb25zdCB0aXRsZSA9IGdldHRleHQoJ0RlbGV0ZSB0ZW5hbnQnKTtcbiAgICBjb25zdCBjb25maXJtYXRpb25UZXh0ID0gZ2V0dGV4dChcbiAgICAgICdZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0ZW5hbnQgXCJ7eyBjb21wYW55IH19XCIgKElEIFwie3sgaWQgfX1cIikuJ1xuICAgICk7XG4gICAgY29uc3QgaGludCA9IGdldHRleHQoJ1RoaXMgb3BlcmF0aW9uIGlzIGlycmV2ZXJzaWJsZS4nKTtcbiAgICBjb25zdCBwcm9jZWVkID0gZ2V0dGV4dCgnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nKTtcbiAgICBjb25zdCBib2R5ID0gW1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY29uZmlybWF0aW9uVGV4dCwge1xuICAgICAgICBjb21wYW55OiB0ZW5hbnQuY29tcGFueSxcbiAgICAgICAgaWQ6IHRlbmFudC5pZFxuICAgICAgfSksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChoaW50KSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHByb2NlZWQpXG4gICAgXS5qb2luKCcgJyk7XG4gICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgb2s6IGdldHRleHQoJ0RlbGV0ZWB0ZW5hbnRgJylcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKHRpdGxlLCBib2R5LCBTdGF0dXMuREFOR0VSLCBsYWJlbHMpO1xuICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5wYXNzd29yZFNlcnZpY2UuY29uZmlybVBhc3N3b3JkKCkudG9Qcm9taXNlKCk7XG4gICAgICBpZiAoY29uZmlybWVkID09PSB0cnVlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5kZWxldGUodGVuYW50KTtcbiAgICAgICAgY29uc3QgdGVuYW50c1dpdGhvdXRSZW1vdmVkT25lID0gdGhpcy50ZW5hbnRzJC52YWx1ZS5maWx0ZXIodCA9PiB0ICE9PSB0ZW5hbnQpO1xuICAgICAgICB0aGlzLnRlbmFudHMkLm5leHQodGVuYW50c1dpdGhvdXRSZW1vdmVkT25lKTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhcbiAgICAgICAgICBnZXR0ZXh0KCdUZW5hbnQgaXMgYmVpbmcgZGVsZXRlZCBpbiB0aGUgYmFja2dyb3VuZC4gVGhpcyBtaWdodCB0YWtlIGEgd2hpbGXigKYnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNBY3RpdmUodGVuYW50OiBJVGVuYW50KSB7XG4gICAgcmV0dXJuIHRlbmFudC5zdGF0dXMgPT09IFRlbmFudFN0YXR1cy5BQ1RJVkU7XG4gIH1cblxuICBpc1N1c3BlbmRlZCh0ZW5hbnQ6IElUZW5hbnQpIHtcbiAgICByZXR1cm4gdGVuYW50LnN0YXR1cyA9PT0gVGVuYW50U3RhdHVzLlNVU1BFTkRFRDtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkTmV3c2xldHRlckVtYWlscygpIHtcbiAgICBjb25zdCB7IHJlcywgZGF0YSB9ID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS5nZXROZXdzbGV0dGVyRW1haWxzKCk7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpO1xuICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gL2ZpbGVuYW1lPVwiKC4qKVwiLy5leGVjKGNvbnRlbnREaXNwb3NpdGlvbilbMV07XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtkYXRhXSwgeyB0eXBlOiBjb250ZW50VHlwZSB9KTtcbiAgICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUpO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPlxuICB7eyAnU3VidGVuYW50cycgfCB0cmFuc2xhdGUgfX1cbjwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgaWNvbj1cImM4eS1sYXllcnNcIlxuICAgIGxhYmVsPVwie3sgJ1RlbmFudHMnIHwgdHJhbnNsYXRlIH19XCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LWxheWVycydcIlxuICAgIFtsYWJlbF09XCInU3VidGVuYW50cycgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgKm5nSWY9XCIhIShhcHBTdGF0ZS5zdGF0ZSQgfCBhc3luYykubmV3c2xldHRlclwiXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7e1xuICAgICAgJ0Rvd25sb2FkcyB0aGUgbGlzdCBvZiBlbWFpbHMgb2YgdXNlcnMgc3Vic2NyaWJlZCBmb3IgbmV3c2xldHRlciBvbiB0aGUgY3VycmVudCB0ZW5hbnQgYW5kIGl0cyBzdWJ0ZW5hbnRzLidcbiAgICAgICAgfCB0cmFuc2xhdGVcbiAgICB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cImRvd25sb2FkTmV3c2xldHRlckVtYWlscygpXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJkb3dubG9hZFwiPjwvaT5cbiAgICB7eyAnRW1haWwgYWRkcmVzc2VzJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnQ3JlYXRlIHRlbmFudCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJjcmVhdGVUZW5hbnQoeyBzZW5kR2FpbnNpZ2h0RXZlbnQ6IGZhbHNlIH0pXCJcbiAgICBbZGlzYWJsZWRdPVwiIWlzUGVybWl0dGVkVG9DcmVhdGVUZW5hbmFudFwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAge3sgJ0NyZWF0ZSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHAgc3JjPVwiL2RvY3MvZW50ZXJwcmlzZS10ZW5hbnQvbWFuYWdpbmctdGVuYW50cy8jbWFuYWdpbmctc3VidGVuYW50c1wiPjwvYzh5LWhlbHA+XG5cbjxkaXYgY2xhc3M9XCJjb250ZW50LWZ1bGxwYWdlIGJvcmRlci10b3AgYm9yZGVyLWJvdHRvbVwiPlxuICA8Yzh5LWRhdGEtZ3JpZFxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW2xvYWRNb3JlSXRlbXNMYWJlbF09XCJsb2FkTW9yZUl0ZW1zTGFiZWxcIlxuICAgIFtsb2FkaW5nSXRlbXNMYWJlbF09XCJsb2FkaW5nSXRlbXNMYWJlbFwiXG4gICAgW2Rpc3BsYXlPcHRpb25zXT1cImRpc3BsYXlPcHRpb25zXCJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbcm93c109XCJ0ZW5hbnRzJCB8IGFzeW5jXCJcbiAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICBbc2hvd1NlYXJjaF09XCJzaG93U2VhcmNoXCJcbiAgICBbYWN0aW9uQ29udHJvbHNdPVwiYWN0aW9uQ29udHJvbHNcIlxuICAgIChvblJlbG9hZCk9XCJsb2FkVGVuYW50cygpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKHRlbmFudHMkIHwgYXN5bmMpOyBlbHNlIGVtcHR5XCI+XG4gICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICBbaWNvbl09XCJzdGF0cz8uc2l6ZSA+IDAgPyAnc2VhcmNoJyA6ICdjOHktbGF5ZXJzJ1wiXG4gICAgICAgIFt0aXRsZV09XCJzdGF0cz8uc2l6ZSA+IDAgPyAobm9SZXN1bHRzTWVzc2FnZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhTWVzc2FnZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgICBbc3VidGl0bGVdPVwiXG4gICAgICAgICAgc3RhdHM/LnNpemUgPiAwID8gKG5vUmVzdWx0c1N1YnRpdGxlIHwgdHJhbnNsYXRlKSA6IChub0RhdGFTdWJ0aXRsZSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgXCJcbiAgICAgICAgKmVtcHR5U3RhdGVDb250ZXh0PVwibGV0IHN0YXRzXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwic3RhdHM/LnNpemUgPiAwXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRzPy5zaXplID09PSAwXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdDcmVhdGUgdGVuYW50JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVUZW5hbnQoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNQZXJtaXR0ZWRUb0NyZWF0ZVRlbmFuYW50XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ0NyZWF0ZSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cCBjOHktZ3VpZGUtZG9jcz5cbiAgICAgICAgICAgIDxzbWFsbFxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBGaW5kIG91dCBtb3JlIGluIHRoZVxuICAgICAgICAgICAgICA8YSBjOHktZ3VpZGUtaHJlZj1cIi9kb2NzL2VudGVycHJpc2UtdGVuYW50L21hbmFnaW5nLXRlbmFudHNcIj51c2VyIGRvY3VtZW50YXRpb248L2E+XG4gICAgICAgICAgICAgIC5cbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwiY29tcGFueVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIH19XCI+XG4gICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvdGVuYW50cycsIGNvbnRleHQuaXRlbS5pZF1cIj57eyBjb250ZXh0LnZhbHVlIH19PC9hPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwicGFyZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfHwgY3VycmVudFRlbmFudC5uYW1lIH19XCI+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8fCBjdXJyZW50VGVuYW50Lm5hbWUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cImNyZWF0aW9uVGltZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIHwgYzh5RGF0ZSB9fVwiPlxuICAgICAgICAgIHt7IGNvbnRleHQudmFsdWUgfCBjOHlEYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJzdGF0dXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmM4eUNlbGxSZW5kZXJlckRlZj1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnQWN0aXZlYHRlbmFudGAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAqbmdJZj1cImNvbnRleHQuaXRlbS5zdGF0dXMgPT09IFRlbmFudFN0YXR1cy5BQ1RJVkVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zdWNjZXNzXCJcbiAgICAgICAgICAgIGM4eUljb249XCJjaGVjay1jaXJjbGVcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICB0aXRsZT1cInt7ICdTdXNwZW5kZWRgdGVuYW50YCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICpuZ0lmPVwiY29udGV4dC5pdGVtLnN0YXR1cyA9PT0gVGVuYW50U3RhdHVzLlNVU1BFTkRFRFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXG4gICAgICAgICAgICBjOHlJY29uPVwiYmFuXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG4gIDwvYzh5LWRhdGEtZ3JpZD5cbjwvZGl2PlxuIl19
|