@c8y/ngx-components 1021.60.1 → 1021.62.2

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.
Files changed (114) hide show
  1. package/core/authentication/new-password.component.d.ts +6 -3
  2. package/core/authentication/new-password.component.d.ts.map +1 -1
  3. package/core/common/interval-based-reload.abstract.d.ts +12 -1
  4. package/core/common/interval-based-reload.abstract.d.ts.map +1 -1
  5. package/core/common/permissions.service.d.ts +2 -0
  6. package/core/common/permissions.service.d.ts.map +1 -1
  7. package/core/common/tenant-ui.service.d.ts +9 -2
  8. package/core/common/tenant-ui.service.d.ts.map +1 -1
  9. package/core/forms/phone-validation.directive.d.ts +3 -6
  10. package/core/forms/phone-validation.directive.d.ts.map +1 -1
  11. package/core/router/router.module.d.ts.map +1 -1
  12. package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts.map +1 -1
  13. package/esm2022/core/authentication/new-password.component.mjs +26 -5
  14. package/esm2022/core/common/interval-based-reload.abstract.mjs +50 -2
  15. package/esm2022/core/common/permissions.service.mjs +3 -1
  16. package/esm2022/core/common/tenant-ui.service.mjs +28 -6
  17. package/esm2022/core/forms/phone-validation.directive.mjs +18 -19
  18. package/esm2022/core/router/router.module.mjs +1 -5
  19. package/esm2022/core/user/user-edit.component.mjs +1 -1
  20. package/esm2022/device-provisioned-certificates/device-provisioned-certificates.service.mjs +8 -3
  21. package/esm2022/tenants/custom-properties/custom-properties.component.mjs +25 -5
  22. package/esm2022/tenants/existing-tenant.guard.mjs +18 -0
  23. package/esm2022/tenants/index.mjs +3 -1
  24. package/esm2022/tenants/support-user-access/support-user-access.component.mjs +31 -0
  25. package/esm2022/tenants/tenant-form/tenant-form-inputs-definitions.mjs +116 -0
  26. package/esm2022/tenants/tenant-form/tenant-form.component.mjs +294 -0
  27. package/esm2022/tenants/tenant-limits/tenant-limits-definitions.mjs +10 -17
  28. package/esm2022/tenants/tenant-limits/tenant-limits.component.mjs +42 -29
  29. package/esm2022/tenants/tenant-list/tenant-list.component.mjs +17 -8
  30. package/esm2022/tenants/tenants.model.mjs +30 -1
  31. package/esm2022/tenants/tenants.module.mjs +57 -22
  32. package/esm2022/translation-editor/data/translation-store.service.mjs +11 -8
  33. package/esm2022/translation-editor/index.mjs +22 -5
  34. package/esm2022/translation-editor/lazy/advanced-translation-editor/advanced-translation-editor.component.mjs +136 -0
  35. package/esm2022/translation-editor/lazy/index.mjs +2 -1
  36. package/esm2022/translation-editor/translation-editor-tab-factory.service.mjs +40 -0
  37. package/esm2022/translation-editor/translation-editor.constants.mjs +4 -0
  38. package/esm2022/upgrade/upgraded-services/index.mjs +2 -1
  39. package/esm2022/upgrade/upgraded-services/tenant-policies.service.mjs +11 -0
  40. package/esm2022/upgrade/upgraded-services/upgraded-services.module.mjs +12 -3
  41. package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +9 -7
  42. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +9 -7
  43. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +7 -2
  44. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  45. package/fesm2022/c8y-ngx-components-tenants.mjs +603 -82
  46. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  47. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +9 -6
  48. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
  49. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +127 -2
  50. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
  51. package/fesm2022/c8y-ngx-components-translation-editor.mjs +58 -4
  52. package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -1
  53. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +22 -3
  54. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs.map +1 -1
  55. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +8 -6
  56. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  57. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +8 -6
  58. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  59. package/fesm2022/c8y-ngx-components.mjs +499 -413
  60. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  61. package/locales/de.po +35 -25
  62. package/locales/es.po +35 -25
  63. package/locales/fr.po +35 -25
  64. package/locales/ja_JP.po +35 -25
  65. package/locales/ko.po +35 -25
  66. package/locales/locales.pot +25 -24
  67. package/locales/nl.po +35 -25
  68. package/locales/pl.po +35 -25
  69. package/locales/pt_BR.po +35 -25
  70. package/locales/zh_CN.po +35 -25
  71. package/locales/zh_TW.po +35 -25
  72. package/package.json +1 -1
  73. package/tenants/custom-properties/custom-properties.component.d.ts +4 -2
  74. package/tenants/custom-properties/custom-properties.component.d.ts.map +1 -1
  75. package/tenants/existing-tenant.guard.d.ts +13 -0
  76. package/tenants/existing-tenant.guard.d.ts.map +1 -0
  77. package/tenants/index.d.ts +2 -0
  78. package/tenants/index.d.ts.map +1 -1
  79. package/tenants/support-user-access/support-user-access.component.d.ts +18 -0
  80. package/tenants/support-user-access/support-user-access.component.d.ts.map +1 -0
  81. package/tenants/tenant-form/tenant-form-inputs-definitions.d.ts +113 -0
  82. package/tenants/tenant-form/tenant-form-inputs-definitions.d.ts.map +1 -0
  83. package/tenants/tenant-form/tenant-form.component.d.ts +79 -0
  84. package/tenants/tenant-form/tenant-form.component.d.ts.map +1 -0
  85. package/tenants/tenant-limits/tenant-limits-definitions.d.ts +11 -15
  86. package/tenants/tenant-limits/tenant-limits-definitions.d.ts.map +1 -1
  87. package/tenants/tenant-limits/tenant-limits.component.d.ts +9 -7
  88. package/tenants/tenant-limits/tenant-limits.component.d.ts.map +1 -1
  89. package/tenants/tenant-list/tenant-list.component.d.ts +6 -3
  90. package/tenants/tenant-list/tenant-list.component.d.ts.map +1 -1
  91. package/tenants/tenants.model.d.ts +31 -0
  92. package/tenants/tenants.model.d.ts.map +1 -1
  93. package/tenants/tenants.module.d.ts +4 -2
  94. package/tenants/tenants.module.d.ts.map +1 -1
  95. package/translation-editor/data/translation-store.service.d.ts +3 -2
  96. package/translation-editor/data/translation-store.service.d.ts.map +1 -1
  97. package/translation-editor/index.d.ts.map +1 -1
  98. package/translation-editor/lazy/advanced-translation-editor/advanced-translation-editor.component.d.ts +28 -0
  99. package/translation-editor/lazy/advanced-translation-editor/advanced-translation-editor.component.d.ts.map +1 -0
  100. package/translation-editor/lazy/index.d.ts +1 -0
  101. package/translation-editor/lazy/index.d.ts.map +1 -1
  102. package/translation-editor/translation-editor-tab-factory.service.d.ts +22 -0
  103. package/translation-editor/translation-editor-tab-factory.service.d.ts.map +1 -0
  104. package/translation-editor/translation-editor.constants.d.ts +4 -0
  105. package/translation-editor/translation-editor.constants.d.ts.map +1 -0
  106. package/upgrade/upgraded-services/index.d.ts +1 -0
  107. package/upgrade/upgraded-services/index.d.ts.map +1 -1
  108. package/upgrade/upgraded-services/tenant-policies.service.d.ts +11 -0
  109. package/upgrade/upgraded-services/tenant-policies.service.d.ts.map +1 -0
  110. package/upgrade/upgraded-services/upgraded-services.module.d.ts.map +1 -1
  111. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +7 -2
  112. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  113. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +7 -2
  114. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
@@ -3,9 +3,11 @@ import { FormGroup, ReactiveFormsModule } from '@angular/forms';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import { 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 } from '@c8y/ngx-components';
7
7
  import { CustomPropertiesService } from '../custom-properties/custom-properties.service';
8
8
  import { CustomPropertyFieldComponent } from '../custom-properties/custom-property-field/custom-property-field.component';
9
+ import { PRODUCT_EXPERIENCE_TENANT_MANAGEMENT } from '../tenants.model';
10
+ import { take } from 'rxjs/operators';
9
11
  import * as i0 from "@angular/core";
10
12
  import * as i1 from "@c8y/client";
11
13
  import * as i2 from "@c8y/ngx-components";
@@ -13,12 +15,14 @@ import * as i3 from "@angular/router";
13
15
  import * as i4 from "../custom-properties/custom-properties.service";
14
16
  import * as i5 from "@angular/common";
15
17
  import * as i6 from "@angular/forms";
18
+ const { ACTIONS, EVENTS, COMPONENTS, RESULTS } = PRODUCT_EXPERIENCE_TENANT_MANAGEMENT;
16
19
  export class CustomPropertiesComponent {
17
- constructor(tenantService, alertService, activatedRoute, customPropertiesService) {
20
+ constructor(tenantService, alertService, activatedRoute, customPropertiesService, gainsightService) {
18
21
  this.tenantService = tenantService;
19
22
  this.alertService = alertService;
20
23
  this.activatedRoute = activatedRoute;
21
24
  this.customPropertiesService = customPropertiesService;
25
+ this.gainsightService = gainsightService;
22
26
  this.customPropsForm = new FormGroup({});
23
27
  this.tenant = null;
24
28
  this.initialized = false;
@@ -30,6 +34,10 @@ export class CustomPropertiesComponent {
30
34
  this.fieldDefinitions = fields;
31
35
  this.applyValuesFromTenant();
32
36
  this.initialized = true;
37
+ this.sendGainsightEvent(ACTIONS.TENANT_CUSTOM_PROPERTIES_OPENED);
38
+ this.customPropsForm.valueChanges.pipe(take(1)).subscribe(() => {
39
+ this.sendGainsightEvent(ACTIONS.TENANT_CUSTOM_PROPERTIES_STARTED_CHANGING);
40
+ });
33
41
  }
34
42
  async onSubmit() {
35
43
  if (this.customPropsForm.invalid || !this.tenant) {
@@ -45,9 +53,14 @@ export class CustomPropertiesComponent {
45
53
  try {
46
54
  await this.tenantService.update(updatedTenant);
47
55
  this.alertService.success(gettext('Custom properties values saved.'));
56
+ this.sendGainsightEvent(ACTIONS.TENANT_CUSTOM_PROPERTIES_SAVED, { result: RESULTS.SUCCESS });
48
57
  }
49
58
  catch (error) {
50
59
  this.alertService.addServerFailure(error);
60
+ this.sendGainsightEvent(ACTIONS.TENANT_CUSTOM_PROPERTIES_SAVED, {
61
+ result: RESULTS.FAILURE,
62
+ error
63
+ });
51
64
  }
52
65
  }
53
66
  async loadTenantDetails() {
@@ -73,7 +86,14 @@ export class CustomPropertiesComponent {
73
86
  });
74
87
  return dirtyValues;
75
88
  }
76
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomPropertiesComponent, deps: [{ token: i1.TenantService }, { token: i2.AlertService }, { token: i3.ActivatedRoute }, { token: i4.CustomPropertiesService }], target: i0.ɵɵFactoryTarget.Component }); }
89
+ sendGainsightEvent(action, props = {}) {
90
+ this.gainsightService.triggerEvent(EVENTS.TENANT_MANAGEMENT, {
91
+ component: COMPONENTS.TENANT_CUSTOM_PROPERTIES,
92
+ action,
93
+ ...props
94
+ });
95
+ }
96
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomPropertiesComponent, deps: [{ token: i1.TenantService }, { token: i2.AlertService }, { token: i3.ActivatedRoute }, { token: i4.CustomPropertiesService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
77
97
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomPropertiesComponent, isStandalone: true, selector: "c8y-custom-properties", 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<ng-container>\n <form\n [formGroup]=\"customPropsForm\"\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 Custom properties\n </div>\n </div>\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 <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#custom-properties\"></c8y-help>\n\n <!-- empty state -->\n <c8y-ui-empty-state\n [icon]=\"'property-script'\"\n [title]=\"'No custom properties to display.' | translate\"\n [subtitle]=\"'Add a new tenant property in Properties library.' | translate\"\n *ngIf=\"fieldDefinitions?.length === 0 && initialized\"\n >\n <p c8y-guide-docs>\n <small translate>\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants/#custom-properties\">\n User guide\n </a>\n .\n </small>\n </p>\n </c8y-ui-empty-state>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let field of fieldDefinitions\">\n <c8y-custom-property-field\n [fieldDefinition]=\"field\"\n [form]=\"customPropsForm\"\n ></c8y-custom-property-field>\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 data-cy=\"custom-properties--cancel-button\"\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!(!customPropsForm.invalid && customPropsForm.dirty)\"\n translate\n data-cy=\"custom-properties--save-button\"\n >\n Save\n </button>\n </div>\n </div>\n </form>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { 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: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { 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: "directive", type: i2.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i2.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i2.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"] }, { kind: "component", type: CustomPropertyFieldComponent, selector: "c8y-custom-property-field", inputs: ["fieldDefinition", "form"] }] }); }
78
98
  }
79
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomPropertiesComponent, decorators: [{
@@ -86,5 +106,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
86
106
  RouterLink,
87
107
  CustomPropertyFieldComponent
88
108
  ], 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<ng-container>\n <form\n [formGroup]=\"customPropsForm\"\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 Custom properties\n </div>\n </div>\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 <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#custom-properties\"></c8y-help>\n\n <!-- empty state -->\n <c8y-ui-empty-state\n [icon]=\"'property-script'\"\n [title]=\"'No custom properties to display.' | translate\"\n [subtitle]=\"'Add a new tenant property in Properties library.' | translate\"\n *ngIf=\"fieldDefinitions?.length === 0 && initialized\"\n >\n <p c8y-guide-docs>\n <small translate>\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants/#custom-properties\">\n User guide\n </a>\n .\n </small>\n </p>\n </c8y-ui-empty-state>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let field of fieldDefinitions\">\n <c8y-custom-property-field\n [fieldDefinition]=\"field\"\n [form]=\"customPropsForm\"\n ></c8y-custom-property-field>\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 data-cy=\"custom-properties--cancel-button\"\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!(!customPropsForm.invalid && customPropsForm.dirty)\"\n translate\n data-cy=\"custom-properties--save-button\"\n >\n Save\n </button>\n </div>\n </div>\n </form>\n</ng-container>\n" }]
89
- }], ctorParameters: () => [{ type: i1.TenantService }, { type: i2.AlertService }, { type: i3.ActivatedRoute }, { type: i4.CustomPropertiesService }] });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXByb3BlcnRpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVuYW50cy9jdXN0b20tcHJvcGVydGllcy9jdXN0b20tcHJvcGVydGllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi90ZW5hbnRzL2N1c3RvbS1wcm9wZXJ0aWVzL2N1c3RvbS1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQW9CLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRixPQUFPLEVBQ0wsdUJBQXVCLEVBRXhCLE1BQU0sZ0RBQWdELENBQUM7QUFDeEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNEVBQTRFLENBQUM7Ozs7Ozs7O0FBZTFILE1BQU0sT0FBTyx5QkFBeUI7SUFNcEMsWUFDVSxhQUE0QixFQUM1QixZQUEwQixFQUMxQixjQUE4QixFQUM5Qix1QkFBZ0Q7UUFIaEQsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFSMUQsb0JBQWUsR0FBYyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxXQUFN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QUNWLFVBQVUsb09BQ1YsNEJBQTRCOzs0RkFJbkIseUJBQXlCO2tCQWJyQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsVUFBVTt3QkFDVixVQUFVO3dCQUNWLDRCQUE0QjtxQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElSZXN1bHQsIElUZW5hbnQsIFRlbmFudFNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIENvcmVNb2R1bGUsIEZvcm1zTW9kdWxlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBDdXN0b21Qcm9wZXJ0aWVzU2VydmljZSxcbiAgVGVuYW50Q3VzdG9tUHJvcGVydHlGaWVsZFxufSBmcm9tICcuLi9jdXN0b20tcHJvcGVydGllcy9jdXN0b20tcHJvcGVydGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVByb3BlcnR5RmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9jdXN0b20tcHJvcGVydGllcy9jdXN0b20tcHJvcGVydHktZmllbGQvY3VzdG9tLXByb3BlcnR5LWZpZWxkLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1jdXN0b20tcHJvcGVydGllcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDb3JlTW9kdWxlLFxuICAgIFJvdXRlckxpbmssXG4gICAgQ3VzdG9tUHJvcGVydHlGaWVsZENvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXByb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbVByb3BlcnRpZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBmaWVsZERlZmluaXRpb25zOiBUZW5hbnRDdXN0b21Qcm9wZXJ0eUZpZWxkW107XG4gIGN1c3RvbVByb3BzRm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIHRlbmFudDogSVRlbmFudCB8IG51bGwgPSBudWxsO1xuICBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgY3VzdG9tUHJvcGVydGllc1NlcnZpY2U6IEN1c3RvbVByb3BlcnRpZXNTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBhd2FpdCB0aGlzLmxvYWRUZW5hbnREZXRhaWxzKCk7XG4gICAgY29uc3QgeyBmb3JtLCBmaWVsZHMgfSA9IGF3YWl0IHRoaXMuY3VzdG9tUHJvcGVydGllc1NlcnZpY2UuZ2V0Rm9ybUFuZEZpZWxkTGlzdCgpO1xuICAgIHRoaXMuY3VzdG9tUHJvcHNGb3JtID0gZm9ybTtcbiAgICB0aGlzLmZpZWxkRGVmaW5pdGlvbnMgPSBmaWVsZHM7XG4gICAgdGhpcy5hcHBseVZhbHVlc0Zyb21UZW5hbnQoKTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIG9uU3VibWl0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmN1c3RvbVByb3BzRm9ybS5pbnZhbGlkIHx8ICF0aGlzLnRlbmFudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZWRUZW5hbnQ6IElUZW5hbnQgPSB7XG4gICAgICAuLi50aGlzLnRlbmFudCxcbiAgICAgIGN1c3RvbVByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4udGhpcy50ZW5hbnQuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgICAgLi4udGhpcy5nZXREaXJ0eVZhbHVlcygpXG4gICAgICB9XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudXBkYXRlKHVwZGF0ZWRUZW5hbnQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdDdXN0b20gcHJvcGVydGllcyB2YWx1ZXMgc2F2ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRUZW5hbnREZXRhaWxzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IElSZXN1bHQ8SVRlbmFudD4gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuZGV0YWlsKFxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhLmlkXG4gICAgICApO1xuICAgICAgdGhpcy50ZW5hbnQgPSByZXN1bHQuZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVZhbHVlc0Zyb21UZW5hbnQoKTogdm9pZCB7XG4gICAgY29uc3QgY3VzdG9tUHJvcHMgPSB0aGlzLnRlbmFudD8uY3VzdG9tUHJvcGVydGllcyB8fCB7fTtcbiAgICB0aGlzLmN1c3RvbVByb3BzRm9ybS5wYXRjaFZhbHVlKGN1c3RvbVByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlydHlWYWx1ZXMoKTogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0ge1xuICAgIGNvbnN0IGRpcnR5VmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHRoaXMuY3VzdG9tUHJvcHNGb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jdXN0b21Qcm9wc0Zvcm0uY29udHJvbHNba2V5XTtcbiAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wuZGlydHkgJiYgY29udHJvbC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBkaXJ0eVZhbHVlc1trZXldID0gY29udHJvbC52YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkaXJ0eVZhbHVlcztcbiAgfVxufVxuIiwiPGM4eS10aXRsZSAqbmdJZj1cInRlbmFudFwiPlxuICB7eyB0ZW5hbnQuY29tcGFueSB9fVxuPC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LWxheWVycydcIlxuICAgIFtsYWJlbF09XCInVGVuYW50cycgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktbGF5ZXJzJ1wiXG4gICAgW2xhYmVsXT1cIidTdWJ0ZW5hbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJy90ZW5hbnRzJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48bmctY29udGFpbmVyPlxuICA8Zm9ybVxuICAgIFtmb3JtR3JvdXBdPVwiY3VzdG9tUHJvcHNGb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLS1mdWxscGFnZSBtLWItMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjYXJkLXRpdGxlXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIEN1c3RvbSBwcm9wZXJ0aWVzXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1ibG9ja1wiXG4gICAgICAgICAgKm5nSWY9XCIhaW5pdGlhbGl6ZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxjOHktaGVscCBzcmM9XCIvZG9jcy9lbnRlcnByaXNlLXRlbmFudC9tYW5hZ2luZy10ZW5hbnRzLyNjdXN0b20tcHJvcGVydGllc1wiPjwvYzh5LWhlbHA+XG5cbiAgICAgICAgPCEtLSBlbXB0eSBzdGF0ZSAtLT5cbiAgICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICAgIFtpY29uXT1cIidwcm9wZXJ0eS1zY3JpcHQnXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ05vIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGRpc3BsYXkuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3N1YnRpdGxlXT1cIidBZGQgYSBuZXcgdGVuYW50IHByb3BlcnR5IGluIFByb3BlcnRpZXMgbGlicmFyeS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAqbmdJZj1cImZpZWxkRGVmaW5pdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJiBpbml0aWFsaXplZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8cCBjOHktZ3VpZGUtZG9jcz5cbiAgICAgICAgICAgIDxzbWFsbCB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIEZpbmQgb3V0IG1vcmUgaW4gdGhlXG4gICAgICAgICAgICAgIDxhIGM4eS1ndWlkZS1ocmVmPVwiL2RvY3MvZW50ZXJwcmlzZS10ZW5hbnQvbWFuYWdpbmctdGVuYW50cy8jY3VzdG9tLXByb3BlcnRpZXNcIj5cbiAgICAgICAgICAgICAgICBVc2VyIGd1aWRlXG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgLlxuICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNhcmQtYmxvY2tcIlxuICAgICAgICAgICpuZ0lmPVwiaW5pdGlhbGl6ZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGREZWZpbml0aW9uc1wiPlxuICAgICAgICAgICAgPGM4eS1jdXN0b20tcHJvcGVydHktZmllbGRcbiAgICAgICAgICAgICAgW2ZpZWxkRGVmaW5pdGlvbl09XCJmaWVsZFwiXG4gICAgICAgICAgICAgIFtmb3JtXT1cImN1c3RvbVByb3BzRm9ybVwiXG4gICAgICAgICAgICA+PC9jOHktY3VzdG9tLXByb3BlcnR5LWZpZWxkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2FyZC1mb290ZXIgc2VwYXJhdG9yXCJcbiAgICAgICAgKm5nSWY9XCJpbml0aWFsaXplZFwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvdGVuYW50cyddXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBkYXRhLWN5PVwiY3VzdG9tLXByb3BlcnRpZXMtLWNhbmNlbC1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhKCFjdXN0b21Qcm9wc0Zvcm0uaW52YWxpZCAmJiBjdXN0b21Qcm9wc0Zvcm0uZGlydHkpXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBkYXRhLWN5PVwiY3VzdG9tLXByb3BlcnRpZXMtLXNhdmUtYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIFNhdmVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
109
+ }], ctorParameters: () => [{ type: i1.TenantService }, { type: i2.AlertService }, { type: i3.ActivatedRoute }, { type: i4.CustomPropertiesService }, { type: i2.GainsightService }] });
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXByb3BlcnRpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVuYW50cy9jdXN0b20tcHJvcGVydGllcy9jdXN0b20tcHJvcGVydGllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi90ZW5hbnRzL2N1c3RvbS1wcm9wZXJ0aWVzL2N1c3RvbS1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQW9CLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLHVCQUF1QixFQUV4QixNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRFQUE0RSxDQUFDO0FBQzFILE9BQU8sRUFFTCxvQ0FBb0MsRUFFckMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBRXRDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxvQ0FBb0MsQ0FBQztBQWV0RixNQUFNLE9BQU8seUJBQXlCO0lBTXBDLFlBQ1UsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsdUJB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QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsVUFBVTt3QkFDVixVQUFVO3dCQUNWLDRCQUE0QjtxQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElSZXN1bHQsIElUZW5hbnQsIFRlbmFudFNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIENvcmVNb2R1bGUsXG4gIEZvcm1zTW9kdWxlLFxuICBnZXR0ZXh0LFxuICBHYWluc2lnaHRTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQ3VzdG9tUHJvcGVydGllc1NlcnZpY2UsXG4gIFRlbmFudEN1c3RvbVByb3BlcnR5RmllbGRcbn0gZnJvbSAnLi4vY3VzdG9tLXByb3BlcnRpZXMvY3VzdG9tLXByb3BlcnRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21Qcm9wZXJ0eUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vY3VzdG9tLXByb3BlcnRpZXMvY3VzdG9tLXByb3BlcnR5LWZpZWxkL2N1c3RvbS1wcm9wZXJ0eS1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgVGVuYW50TWFuYWdlbWVudEFjdGlvblR5cGUsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9URU5BTlRfTUFOQUdFTUVOVCxcbiAgVGVuYW50TWFuYWdlbWVudFJlc3VsdFR5cGVcbn0gZnJvbSAnLi4vdGVuYW50cy5tb2RlbCc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5jb25zdCB7IEFDVElPTlMsIEVWRU5UUywgQ09NUE9ORU5UUywgUkVTVUxUUyB9ID0gUFJPRFVDVF9FWFBFUklFTkNFX1RFTkFOVF9NQU5BR0VNRU5UO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktY3VzdG9tLXByb3BlcnRpZXMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29yZU1vZHVsZSxcbiAgICBSb3V0ZXJMaW5rLFxuICAgIEN1c3RvbVByb3BlcnR5RmllbGRDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21Qcm9wZXJ0aWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZmllbGREZWZpbml0aW9uczogVGVuYW50Q3VzdG9tUHJvcGVydHlGaWVsZFtdO1xuICBjdXN0b21Qcm9wc0Zvcm06IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICB0ZW5hbnQ6IElUZW5hbnQgfCBudWxsID0gbnVsbDtcbiAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGN1c3RvbVByb3BlcnRpZXNTZXJ2aWNlOiBDdXN0b21Qcm9wZXJ0aWVzU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGF3YWl0IHRoaXMubG9hZFRlbmFudERldGFpbHMoKTtcbiAgICBjb25zdCB7IGZvcm0sIGZpZWxkcyB9ID0gYXdhaXQgdGhpcy5jdXN0b21Qcm9wZXJ0aWVzU2VydmljZS5nZXRGb3JtQW5kRmllbGRMaXN0KCk7XG4gICAgdGhpcy5jdXN0b21Qcm9wc0Zvcm0gPSBmb3JtO1xuICAgIHRoaXMuZmllbGREZWZpbml0aW9ucyA9IGZpZWxkcztcbiAgICB0aGlzLmFwcGx5VmFsdWVzRnJvbVRlbmFudCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgdGhpcy5zZW5kR2FpbnNpZ2h0RXZlbnQoQUNUSU9OUy5URU5BTlRfQ1VTVE9NX1BST1BFUlRJRVNfT1BFTkVEKTtcblxuICAgIHRoaXMuY3VzdG9tUHJvcHNGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnNlbmRHYWluc2lnaHRFdmVudChBQ1RJT05TLlRFTkFOVF9DVVNUT01fUFJPUEVSVElFU19TVEFSVEVEX0NIQU5HSU5HKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uU3VibWl0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmN1c3RvbVByb3BzRm9ybS5pbnZhbGlkIHx8ICF0aGlzLnRlbmFudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZWRUZW5hbnQ6IElUZW5hbnQgPSB7XG4gICAgICAuLi50aGlzLnRlbmFudCxcbiAgICAgIGN1c3RvbVByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4udGhpcy50ZW5hbnQuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgICAgLi4udGhpcy5nZXREaXJ0eVZhbHVlcygpXG4gICAgICB9XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudXBkYXRlKHVwZGF0ZWRUZW5hbnQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdDdXN0b20gcHJvcGVydGllcyB2YWx1ZXMgc2F2ZWQuJykpO1xuICAgICAgdGhpcy5zZW5kR2FpbnNpZ2h0RXZlbnQoQUNUSU9OUy5URU5BTlRfQ1VTVE9NX1BST1BFUlRJRVNfU0FWRUQsIHsgcmVzdWx0OiBSRVNVTFRTLlNVQ0NFU1MgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICAgICAgdGhpcy5zZW5kR2FpbnNpZ2h0RXZlbnQoQUNUSU9OUy5URU5BTlRfQ1VTVE9NX1BST1BFUlRJRVNfU0FWRUQsIHtcbiAgICAgICAgcmVzdWx0OiBSRVNVTFRTLkZBSUxVUkUsXG4gICAgICAgIGVycm9yXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRUZW5hbnREZXRhaWxzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IElSZXN1bHQ8SVRlbmFudD4gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuZGV0YWlsKFxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhLmlkXG4gICAgICApO1xuICAgICAgdGhpcy50ZW5hbnQgPSByZXN1bHQuZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVZhbHVlc0Zyb21UZW5hbnQoKTogdm9pZCB7XG4gICAgY29uc3QgY3VzdG9tUHJvcHMgPSB0aGlzLnRlbmFudD8uY3VzdG9tUHJvcGVydGllcyB8fCB7fTtcbiAgICB0aGlzLmN1c3RvbVByb3BzRm9ybS5wYXRjaFZhbHVlKGN1c3RvbVByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlydHlWYWx1ZXMoKTogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0ge1xuICAgIGNvbnN0IGRpcnR5VmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHRoaXMuY3VzdG9tUHJvcHNGb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jdXN0b21Qcm9wc0Zvcm0uY29udHJvbHNba2V5XTtcbiAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wuZGlydHkgJiYgY29udHJvbC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBkaXJ0eVZhbHVlc1trZXldID0gY29udHJvbC52YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkaXJ0eVZhbHVlcztcbiAgfVxuXG4gIHByaXZhdGUgc2VuZEdhaW5zaWdodEV2ZW50KFxuICAgIGFjdGlvbjogVGVuYW50TWFuYWdlbWVudEFjdGlvblR5cGUsXG4gICAgcHJvcHM6IHsgcmVzdWx0PzogVGVuYW50TWFuYWdlbWVudFJlc3VsdFR5cGU7IGVycm9yPzogdW5rbm93biB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChFVkVOVFMuVEVOQU5UX01BTkFHRU1FTlQsIHtcbiAgICAgIGNvbXBvbmVudDogQ09NUE9ORU5UUy5URU5BTlRfQ1VTVE9NX1BST1BFUlRJRVMsXG4gICAgICBhY3Rpb24sXG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlICpuZ0lmPVwidGVuYW50XCI+XG4gIHt7IHRlbmFudC5jb21wYW55IH19XG48L2M4eS10aXRsZT5cblxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktbGF5ZXJzJ1wiXG4gICAgW2xhYmVsXT1cIidUZW5hbnRzJyB8IHRyYW5zbGF0ZVwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ2M4eS1sYXllcnMnXCJcbiAgICBbbGFiZWxdPVwiJ1N1YnRlbmFudHMnIHwgdHJhbnNsYXRlXCJcbiAgICBbcGF0aF09XCInL3RlbmFudHMnXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxuZy1jb250YWluZXI+XG4gIDxmb3JtXG4gICAgW2Zvcm1Hcm91cF09XCJjdXN0b21Qcm9wc0Zvcm1cIlxuICAgIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtLWZ1bGxwYWdlIG0tYi0wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNhcmQtdGl0bGVcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgQ3VzdG9tIHByb3BlcnRpZXNcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjYXJkLWJsb2NrXCJcbiAgICAgICAgICAqbmdJZj1cIiFpbml0aWFsaXplZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGM4eS1oZWxwIHNyYz1cIi9kb2NzL2VudGVycHJpc2UtdGVuYW50L21hbmFnaW5nLXRlbmFudHMvI2N1c3RvbS1wcm9wZXJ0aWVzXCI+PC9jOHktaGVscD5cblxuICAgICAgICA8IS0tIGVtcHR5IHN0YXRlIC0tPlxuICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgW2ljb25dPVwiJ3Byb3BlcnR5LXNjcmlwdCdcIlxuICAgICAgICAgIFt0aXRsZV09XCInTm8gY3VzdG9tIHByb3BlcnRpZXMgdG8gZGlzcGxheS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbc3VidGl0bGVdPVwiJ0FkZCBhIG5ldyB0ZW5hbnQgcHJvcGVydHkgaW4gUHJvcGVydGllcyBsaWJyYXJ5LicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICpuZ0lmPVwiZmllbGREZWZpbml0aW9ucz8ubGVuZ3RoID09PSAwICYmIGluaXRpYWxpemVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwIGM4eS1ndWlkZS1kb2NzPlxuICAgICAgICAgICAgPHNtYWxsIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgRmluZCBvdXQgbW9yZSBpbiB0aGVcbiAgICAgICAgICAgICAgPGEgYzh5LWd1aWRlLWhyZWY9XCIvZG9jcy9lbnRlcnByaXNlLXRlbmFudC9tYW5hZ2luZy10ZW5hbnRzLyNjdXN0b20tcHJvcGVydGllc1wiPlxuICAgICAgICAgICAgICAgIFVzZXIgZ3VpZGVcbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAuXG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1ibG9ja1wiXG4gICAgICAgICAgKm5nSWY9XCJpbml0aWFsaXplZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZERlZmluaXRpb25zXCI+XG4gICAgICAgICAgICA8Yzh5LWN1c3RvbS1wcm9wZXJ0eS1maWVsZFxuICAgICAgICAgICAgICBbZmllbGREZWZpbml0aW9uXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgW2Zvcm1dPVwiY3VzdG9tUHJvcHNGb3JtXCJcbiAgICAgICAgICAgID48L2M4eS1jdXN0b20tcHJvcGVydHktZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3JcIlxuICAgICAgICAqbmdJZj1cImluaXRpYWxpemVkXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbcm91dGVyTGlua109XCJbJy90ZW5hbnRzJ11cIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIGRhdGEtY3k9XCJjdXN0b20tcHJvcGVydGllcy0tY2FuY2VsLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICBDYW5jZWxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiEoIWN1c3RvbVByb3BzRm9ybS5pbnZhbGlkICYmIGN1c3RvbVByb3BzRm9ybS5kaXJ0eSlcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIGRhdGEtY3k9XCJjdXN0b20tcHJvcGVydGllcy0tc2F2ZS1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgU2F2ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -0,0 +1,18 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ExistingTenantGuard {
4
+ /**
5
+ * Checks if the current route is displayed for an existing tenant.
6
+ *
7
+ * @returns `true` if visiting a route for an existing tenant.
8
+ */
9
+ canActivate(route) {
10
+ return route.params.id !== 'new';
11
+ }
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExistingTenantGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExistingTenantGuard }); }
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExistingTenantGuard, decorators: [{
16
+ type: Injectable
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhpc3RpbmctdGVuYW50Lmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVuYW50cy9leGlzdGluZy10ZW5hbnQuZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJM0MsTUFBTSxPQUFPLG1CQUFtQjtJQUM5Qjs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLEtBQTZCO1FBQ3ZDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDO0lBQ25DLENBQUM7K0dBUlUsbUJBQW1CO21IQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEV4aXN0aW5nVGVuYW50R3VhcmQge1xuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IHJvdXRlIGlzIGRpc3BsYXllZCBmb3IgYW4gZXhpc3RpbmcgdGVuYW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdmlzaXRpbmcgYSByb3V0ZSBmb3IgYW4gZXhpc3RpbmcgdGVuYW50LlxuICAgKi9cbiAgY2FuQWN0aXZhdGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcm91dGUucGFyYW1zLmlkICE9PSAnbmV3JztcbiAgfVxufVxuIl19
@@ -5,5 +5,7 @@ export * from './tenant-list/tenant-list.guard';
5
5
  export * from './tenant-list/tenant-list.component';
6
6
  export * from './tenant-list/creation-time.filtering-form-renderer.component';
7
7
  export * from './tenant-list/status.filtering-form-renderer.component';
8
+ export * from './tenant-form/tenant-form.component';
8
9
  export * from './custom-properties/custom-properties.component';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZW5hbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLCtEQUErRCxDQUFDO0FBQzlFLGNBQWMsd0RBQXdELENBQUM7QUFDdkUsY0FBYyxpREFBaUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdGVuYW50cy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5hbnRzLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vdGVuYW50cy1uYXZpZ2F0aW9uLmZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5hbnQtbGlzdC90ZW5hbnQtbGlzdC5ndWFyZCc7XG5leHBvcnQgKiBmcm9tICcuL3RlbmFudC1saXN0L3RlbmFudC1saXN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RlbmFudC1saXN0L2NyZWF0aW9uLXRpbWUuZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGVuYW50LWxpc3Qvc3RhdHVzLmZpbHRlcmluZy1mb3JtLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2N1c3RvbS1wcm9wZXJ0aWVzL2N1c3RvbS1wcm9wZXJ0aWVzLmNvbXBvbmVudCc7XG4iXX0=
10
+ export * from './support-user-access/support-user-access.component';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZW5hbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLCtEQUErRCxDQUFDO0FBQzlFLGNBQWMsd0RBQXdELENBQUM7QUFDdkUsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMscURBQXFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RlbmFudHMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdGVuYW50cy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3RlbmFudHMtbmF2aWdhdGlvbi5mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vdGVuYW50LWxpc3QvdGVuYW50LWxpc3QuZ3VhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5hbnQtbGlzdC90ZW5hbnQtbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5hbnQtbGlzdC9jcmVhdGlvbi10aW1lLmZpbHRlcmluZy1mb3JtLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RlbmFudC1saXN0L3N0YXR1cy5maWx0ZXJpbmctZm9ybS1yZW5kZXJlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5hbnQtZm9ybS90ZW5hbnQtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jdXN0b20tcHJvcGVydGllcy9jdXN0b20tcHJvcGVydGllcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zdXBwb3J0LXVzZXItYWNjZXNzL3N1cHBvcnQtdXNlci1hY2Nlc3MuY29tcG9uZW50JztcbiJdfQ==
@@ -0,0 +1,31 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { AppStateService, C8yTranslatePipe, CommonModule, TenantUiService, Permissions } from '@c8y/ngx-components';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@c8y/ngx-components";
5
+ import * as i2 from "@angular/common";
6
+ export class SupportUserAccessComponent {
7
+ constructor(tenantUiService, appState, permissions) {
8
+ this.tenantUiService = tenantUiService;
9
+ this.appState = appState;
10
+ this.permissions = permissions;
11
+ }
12
+ async ngOnInit() {
13
+ this.isTopTenant = await this.tenantUiService.isManagementTenant();
14
+ this.setSupportUserLogin();
15
+ }
16
+ async setSupportUserLogin() {
17
+ const currentUser = (await this.appState.currentUser).value;
18
+ if (this.permissions.hasAnyRole([Permissions.ROLE_SUPPORT_ADMIN, Permissions.ROLE_SUPPORT_READ])) {
19
+ this.supportUserLogin = encodeURIComponent(`${currentUser.id}$`);
20
+ }
21
+ }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupportUserAccessComponent, deps: [{ token: i1.TenantUiService }, { token: i1.AppStateService }, { token: i1.Permissions }], target: i0.ɵɵFactoryTarget.Component }); }
23
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SupportUserAccessComponent, isStandalone: true, selector: "c8y-support-user-access", inputs: { tenant: "tenant" }, ngImport: i0, template: "<div class=\"card-header separator sticky-top large-padding\">\n <div class=\"card-title fit-w\">\n <i\n class=\"c8y-icon c8y-icon-c8y-support\"\n [ngClass]=\"{ 'c8y-icon-duocolor': tenant.supportUser?.enabled }\"\n ></i>\n {{ 'Support user access' | translate }}\n </div>\n <ng-container *ngIf=\"tenant.supportUser?.enabled && supportUserLogin && isTopTenant\">\n <a\n class=\"btn btn-default btn-xs\"\n title=\"{{ 'Log in' | translate }}\"\n href=\"//{{ tenant.domain }}/apps/administration/?user={{ supportUserLogin }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <i c8yIcon=\"external-link\"></i>\n {{ 'Log in' | translate }}\n </a>\n </ng-container>\n</div>\n<div class=\"card-block large-padding\">\n <div class=\"form-group\">\n <label>{{ 'Status' | translate }}</label>\n <div>\n <p class=\"form-control-static\">\n <span\n title=\"{{ 'Disabled' | translate }}\"\n *ngIf=\"!tenant.supportUser?.enabled\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"ban\"\n ></i>\n {{ 'Disabled' | translate }}\n </span>\n <span\n title=\"{{ 'Enabled' | translate }}\"\n *ngIf=\"tenant.supportUser?.enabled\"\n >\n <i\n class=\"text-success\"\n c8yIcon=\"check-circle\"\n ></i>\n {{ 'Enabled' | translate }}\n </span>\n </p>\n </div>\n </div>\n <div class=\"form-group\" data-cy=\"c8y-support-user-access--activeRequestCount\">\n <label>{{ 'Active requests count' | translate }}</label>\n\n <p class=\"form-control-static\">\n <span *ngIf=\"tenant.supportUser?.activeRequestCount\">\n <span class=\"badge badge-danger\">\n {{ tenant.supportUser?.activeRequestCount }}\n </span>\n </span>\n <span *ngIf=\"!tenant.supportUser?.enabled && tenant.supportUser?.activeRequestCount === 0\">\n {{ 'No active requests' | translate }}\n </span>\n <span *ngIf=\"tenant.supportUser?.enabled && tenant.supportUser?.activeRequestCount === 0\">\n {{ 'Not applicable' | translate }}\n </span>\n </p>\n </div>\n <div\n class=\"form-group\"\n *ngIf=\"tenant.supportUser?.enabled\"\n >\n <label>{{ 'Expiry date' | translate }}</label>\n <div>\n <p class=\"form-control-static\">\n <span *ngIf=\"tenant.supportUser?.expiryDate\">\n {{ tenant.supportUser?.expiryDate | c8yDate: 'medium' }}\n </span>\n <span *ngIf=\"!tenant.supportUser?.expiryDate\">{{ 'No limit' | translate }}</span>\n </p>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DatePipe, name: "c8yDate" }] }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupportUserAccessComponent, decorators: [{
26
+ type: Component,
27
+ args: [{ selector: 'c8y-support-user-access', standalone: true, imports: [CommonModule, C8yTranslatePipe], template: "<div class=\"card-header separator sticky-top large-padding\">\n <div class=\"card-title fit-w\">\n <i\n class=\"c8y-icon c8y-icon-c8y-support\"\n [ngClass]=\"{ 'c8y-icon-duocolor': tenant.supportUser?.enabled }\"\n ></i>\n {{ 'Support user access' | translate }}\n </div>\n <ng-container *ngIf=\"tenant.supportUser?.enabled && supportUserLogin && isTopTenant\">\n <a\n class=\"btn btn-default btn-xs\"\n title=\"{{ 'Log in' | translate }}\"\n href=\"//{{ tenant.domain }}/apps/administration/?user={{ supportUserLogin }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <i c8yIcon=\"external-link\"></i>\n {{ 'Log in' | translate }}\n </a>\n </ng-container>\n</div>\n<div class=\"card-block large-padding\">\n <div class=\"form-group\">\n <label>{{ 'Status' | translate }}</label>\n <div>\n <p class=\"form-control-static\">\n <span\n title=\"{{ 'Disabled' | translate }}\"\n *ngIf=\"!tenant.supportUser?.enabled\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"ban\"\n ></i>\n {{ 'Disabled' | translate }}\n </span>\n <span\n title=\"{{ 'Enabled' | translate }}\"\n *ngIf=\"tenant.supportUser?.enabled\"\n >\n <i\n class=\"text-success\"\n c8yIcon=\"check-circle\"\n ></i>\n {{ 'Enabled' | translate }}\n </span>\n </p>\n </div>\n </div>\n <div class=\"form-group\" data-cy=\"c8y-support-user-access--activeRequestCount\">\n <label>{{ 'Active requests count' | translate }}</label>\n\n <p class=\"form-control-static\">\n <span *ngIf=\"tenant.supportUser?.activeRequestCount\">\n <span class=\"badge badge-danger\">\n {{ tenant.supportUser?.activeRequestCount }}\n </span>\n </span>\n <span *ngIf=\"!tenant.supportUser?.enabled && tenant.supportUser?.activeRequestCount === 0\">\n {{ 'No active requests' | translate }}\n </span>\n <span *ngIf=\"tenant.supportUser?.enabled && tenant.supportUser?.activeRequestCount === 0\">\n {{ 'Not applicable' | translate }}\n </span>\n </p>\n </div>\n <div\n class=\"form-group\"\n *ngIf=\"tenant.supportUser?.enabled\"\n >\n <label>{{ 'Expiry date' | translate }}</label>\n <div>\n <p class=\"form-control-static\">\n <span *ngIf=\"tenant.supportUser?.expiryDate\">\n {{ tenant.supportUser?.expiryDate | c8yDate: 'medium' }}\n </span>\n <span *ngIf=\"!tenant.supportUser?.expiryDate\">{{ 'No limit' | translate }}</span>\n </p>\n </div>\n </div>\n</div>\n" }]
28
+ }], ctorParameters: () => [{ type: i1.TenantUiService }, { type: i1.AppStateService }, { type: i1.Permissions }], propDecorators: { tenant: [{
29
+ type: Input
30
+ }] } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydC11c2VyLWFjY2Vzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZW5hbnRzL3N1cHBvcnQtdXNlci1hY2Nlc3Mvc3VwcG9ydC11c2VyLWFjY2Vzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi90ZW5hbnRzL3N1cHBvcnQtdXNlci1hY2Nlc3Mvc3VwcG9ydC11c2VyLWFjY2Vzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osZUFBZSxFQUNmLFdBQVcsRUFDWixNQUFNLHFCQUFxQixDQUFDOzs7O0FBUTdCLE1BQU0sT0FBTywwQkFBMEI7SUFPckMsWUFDVSxlQUFnQyxFQUNoQyxRQUF5QixFQUN6QixXQUF3QjtRQUZ4QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDL0IsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNuRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQjtRQUMvQixNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDNUQsSUFDRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUM1RixDQUFDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLEdBQUcsV0FBVyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUM7K0dBekJVLDBCQUEwQjttR0FBMUIsMEJBQTBCLGlIQ2hCdkMsaXBGQWlGQSwyQ0RwRVksWUFBWTs7NEZBR1gsMEJBQTBCO2tCQU50QyxTQUFTOytCQUNFLHlCQUF5QixjQUN2QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUM7NElBS3pDLE1BQU07c0JBREwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVRlbmFudCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFwcFN0YXRlU2VydmljZSxcbiAgQzh5VHJhbnNsYXRlUGlwZSxcbiAgQ29tbW9uTW9kdWxlLFxuICBUZW5hbnRVaVNlcnZpY2UsXG4gIFBlcm1pc3Npb25zXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktc3VwcG9ydC11c2VyLWFjY2VzcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEM4eVRyYW5zbGF0ZVBpcGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vc3VwcG9ydC11c2VyLWFjY2Vzcy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU3VwcG9ydFVzZXJBY2Nlc3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICB0ZW5hbnQ6IElUZW5hbnQ7XG5cbiAgaXNUb3BUZW5hbnQ6IGJvb2xlYW47XG4gIHN1cHBvcnRVc2VyTG9naW46IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRlbmFudFVpU2VydmljZTogVGVuYW50VWlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uc1xuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc1RvcFRlbmFudCA9IGF3YWl0IHRoaXMudGVuYW50VWlTZXJ2aWNlLmlzTWFuYWdlbWVudFRlbmFudCgpO1xuICAgIHRoaXMuc2V0U3VwcG9ydFVzZXJMb2dpbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRTdXBwb3J0VXNlckxvZ2luKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gKGF3YWl0IHRoaXMuYXBwU3RhdGUuY3VycmVudFVzZXIpLnZhbHVlO1xuICAgIGlmIChcbiAgICAgIHRoaXMucGVybWlzc2lvbnMuaGFzQW55Um9sZShbUGVybWlzc2lvbnMuUk9MRV9TVVBQT1JUX0FETUlOLCBQZXJtaXNzaW9ucy5ST0xFX1NVUFBPUlRfUkVBRF0pXG4gICAgKSB7XG4gICAgICB0aGlzLnN1cHBvcnRVc2VyTG9naW4gPSBlbmNvZGVVUklDb21wb25lbnQoYCR7Y3VycmVudFVzZXIuaWR9JGApO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvciBzdGlja3ktdG9wIGxhcmdlLXBhZGRpbmdcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgZml0LXdcIj5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJjOHktaWNvbiBjOHktaWNvbi1jOHktc3VwcG9ydFwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdjOHktaWNvbi1kdW9jb2xvcic6IHRlbmFudC5zdXBwb3J0VXNlcj8uZW5hYmxlZCB9XCJcbiAgICA+PC9pPlxuICAgIHt7ICdTdXBwb3J0IHVzZXIgYWNjZXNzJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRlbmFudC5zdXBwb3J0VXNlcj8uZW5hYmxlZCAmJiBzdXBwb3J0VXNlckxvZ2luICYmIGlzVG9wVGVuYW50XCI+XG4gICAgPGFcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi14c1wiXG4gICAgICB0aXRsZT1cInt7ICdMb2cgaW4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIGhyZWY9XCIvL3t7IHRlbmFudC5kb21haW4gfX0vYXBwcy9hZG1pbmlzdHJhdGlvbi8/dXNlcj17eyBzdXBwb3J0VXNlckxvZ2luIH19XCJcbiAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwiZXh0ZXJuYWwtbGlua1wiPjwvaT5cbiAgICAgIHt7ICdMb2cgaW4nIHwgdHJhbnNsYXRlIH19XG4gICAgPC9hPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgbGFyZ2UtcGFkZGluZ1wiPlxuICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgIDxsYWJlbD57eyAnU3RhdHVzJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgPGRpdj5cbiAgICAgIDxwIGNsYXNzPVwiZm9ybS1jb250cm9sLXN0YXRpY1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIHRpdGxlPVwie3sgJ0Rpc2FibGVkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgKm5nSWY9XCIhdGVuYW50LnN1cHBvcnRVc2VyPy5lbmFibGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyXCJcbiAgICAgICAgICAgIGM4eUljb249XCJiYW5cIlxuICAgICAgICAgID48L2k+XG4gICAgICAgICAge3sgJ0Rpc2FibGVkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnRW5hYmxlZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICpuZ0lmPVwidGVuYW50LnN1cHBvcnRVc2VyPy5lbmFibGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtc3VjY2Vzc1wiXG4gICAgICAgICAgICBjOHlJY29uPVwiY2hlY2stY2lyY2xlXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICAgIHt7ICdFbmFibGVkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIGRhdGEtY3k9XCJjOHktc3VwcG9ydC11c2VyLWFjY2Vzcy0tYWN0aXZlUmVxdWVzdENvdW50XCI+XG4gICAgPGxhYmVsPnt7ICdBY3RpdmUgcmVxdWVzdHMgY291bnQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cblxuICAgIDxwIGNsYXNzPVwiZm9ybS1jb250cm9sLXN0YXRpY1wiPlxuICAgICAgPHNwYW4gKm5nSWY9XCJ0ZW5hbnQuc3VwcG9ydFVzZXI/LmFjdGl2ZVJlcXVlc3RDb3VudFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWRhbmdlclwiPlxuICAgICAgICAgIHt7IHRlbmFudC5zdXBwb3J0VXNlcj8uYWN0aXZlUmVxdWVzdENvdW50IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiIXRlbmFudC5zdXBwb3J0VXNlcj8uZW5hYmxlZCAmJiB0ZW5hbnQuc3VwcG9ydFVzZXI/LmFjdGl2ZVJlcXVlc3RDb3VudCA9PT0gMFwiPlxuICAgICAgICB7eyAnTm8gYWN0aXZlIHJlcXVlc3RzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJ0ZW5hbnQuc3VwcG9ydFVzZXI/LmVuYWJsZWQgJiYgdGVuYW50LnN1cHBvcnRVc2VyPy5hY3RpdmVSZXF1ZXN0Q291bnQgPT09IDBcIj5cbiAgICAgICAge3sgJ05vdCBhcHBsaWNhYmxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvcD5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZvcm0tZ3JvdXBcIlxuICAgICpuZ0lmPVwidGVuYW50LnN1cHBvcnRVc2VyPy5lbmFibGVkXCJcbiAgPlxuICAgIDxsYWJlbD57eyAnRXhwaXJ5IGRhdGUnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICA8ZGl2PlxuICAgICAgPHAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtc3RhdGljXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwidGVuYW50LnN1cHBvcnRVc2VyPy5leHBpcnlEYXRlXCI+XG4gICAgICAgICAge3sgdGVuYW50LnN1cHBvcnRVc2VyPy5leHBpcnlEYXRlIHwgYzh5RGF0ZTogJ21lZGl1bScgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiF0ZW5hbnQuc3VwcG9ydFVzZXI/LmV4cGlyeURhdGVcIj57eyAnTm8gbGltaXQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,116 @@
1
+ import { Validators } from '@angular/forms';
2
+ import { gettext } from '@c8y/ngx-components/gettext';
3
+ import { ValidationPattern, validateInternationalPhoneNumber } from '@c8y/ngx-components';
4
+ /**
5
+ * Define all hardTyped tenant form fields, checkboxes and select elements.
6
+ *
7
+ * while still benefiting from hard typing, thanks to "satisfies" keyword
8
+ */
9
+ const tenantPropertiesDefinitions = {
10
+ tenantID: {
11
+ id: 'tenantId',
12
+ validators: [],
13
+ defaultValue: null,
14
+ type: 'text',
15
+ label: gettext('ID')
16
+ },
17
+ domain: {
18
+ id: 'domain',
19
+ validators: [
20
+ Validators.required,
21
+ Validators.maxLength(32),
22
+ // TODO: To be consistent, pattern should be change for domain. It is tenantId, to avoid breaking tests, and be consistent with previous implementation.
23
+ Validators.pattern(ValidationPattern.rules.tenantId.pattern)
24
+ ],
25
+ defaultValue: null,
26
+ type: 'text',
27
+ label: gettext('Domain/URL'),
28
+ placeholder: gettext('e.g. my-tenant`used in URL`')
29
+ },
30
+ companyName: {
31
+ id: 'companyName',
32
+ validators: [
33
+ Validators.required,
34
+ Validators.maxLength(256),
35
+ Validators.pattern(ValidationPattern.rules.noWhiteSpaceAtBeginning.pattern)
36
+ ],
37
+ defaultValue: null,
38
+ type: 'text',
39
+ label: gettext('Name'),
40
+ placeholder: gettext('e.g. Company A')
41
+ },
42
+ contactName: {
43
+ id: 'contactName',
44
+ validators: [Validators.maxLength(30)],
45
+ defaultValue: null,
46
+ type: 'text',
47
+ label: gettext('Contact name'),
48
+ placeholder: gettext('e.g. Joe Doe`LOCALIZE`')
49
+ },
50
+ contactPhone: {
51
+ id: 'contactPhone',
52
+ validators: [Validators.required, validateInternationalPhoneNumber(), Validators.maxLength(20)],
53
+ defaultValue: null,
54
+ type: 'text',
55
+ label: gettext('Contact phone'),
56
+ placeholder: gettext('e.g. +49 9 876 543 210`LOCALIZE`')
57
+ },
58
+ administratorEmail: {
59
+ id: 'administratorEmail',
60
+ validators: [Validators.required, Validators.email, Validators.maxLength(256)],
61
+ defaultValue: null,
62
+ type: 'text',
63
+ label: gettext(`Administrator's email`),
64
+ placeholder: gettext('e.g. joe.doe@example.com`LOCALIZE`')
65
+ },
66
+ administratorUsername: {
67
+ id: 'administratorUsername',
68
+ validators: [
69
+ Validators.required,
70
+ Validators.pattern(ValidationPattern.rules.user.pattern),
71
+ Validators.maxLength(256)
72
+ ],
73
+ defaultValue: null,
74
+ type: 'text',
75
+ label: gettext(`Administrator's username`),
76
+ placeholder: gettext('e.g. joe`LOCALIZE`')
77
+ },
78
+ externalReference: {
79
+ id: 'externalReference',
80
+ validators: [],
81
+ defaultValue: null,
82
+ type: 'text',
83
+ label: gettext('External reference'),
84
+ placeholder: gettext('e.g. REF12345`reference number`')
85
+ },
86
+ sendPasswordResetEmail: {
87
+ id: 'sendPasswordResetEmail',
88
+ validators: [],
89
+ defaultValue: true,
90
+ type: 'checkbox',
91
+ label: gettext('Send password reset link as email')
92
+ },
93
+ tenantPolicy: {
94
+ id: 'tenantPolicy',
95
+ validators: [],
96
+ defaultValue: null,
97
+ type: 'select',
98
+ label: gettext('Tenant policy')
99
+ },
100
+ allowCreateTenants: {
101
+ id: 'allowCreateTenants',
102
+ validators: [],
103
+ defaultValue: null,
104
+ type: 'checkbox',
105
+ label: gettext('Allow creation of subtenants')
106
+ },
107
+ gainsightEnabled: {
108
+ id: 'gainsightEnabled',
109
+ validators: [],
110
+ defaultValue: false,
111
+ type: 'checkbox',
112
+ label: gettext('Enable Gainsight product experience tracking')
113
+ }
114
+ };
115
+ export const tenantFormInputsDefinitions = tenantPropertiesDefinitions;
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWZvcm0taW5wdXRzLWRlZmluaXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVuYW50cy90ZW5hbnQtZm9ybS90ZW5hbnQtZm9ybS1pbnB1dHMtZGVmaW5pdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVkxRjs7OztHQUlHO0FBQ0gsTUFBTSwyQkFBMkIsR0FBRztJQUNsQyxRQUFRLEVBQUU7UUFDUixFQUFFLEVBQUUsVUFBVTtRQUNkLFVBQVUsRUFBRSxFQUFFO1FBQ2QsWUFBWSxFQUFFLElBQUk7UUFDbEIsSUFBSSxFQUFFLE1BQU07UUFDWixLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztLQUNyQjtJQUNELE1BQU0sRUFBRTtRQUNOLEVBQUUsRUFBRSxRQUFRO1FBQ1osVUFBVSxFQUFFO1lBQ1YsVUFBVSxDQUFDLFFBQVE7WUFDbkIsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsd0pBQXdKO1lBQ3hKLFVBQVUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7U0FDN0Q7UUFDRCxZQUFZLEVBQUUsSUFBSTtRQUNsQixJQUFJLEVBQUUsTUFBTTtRQUNaLEtBQUssRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQzVCLFdBQVcsRUFBRSxPQUFPLENBQUMsNkJBQTZCLENBQUM7S0FDcEQ7SUFDRCxXQUFXLEVBQUU7UUFDWCxFQUFFLEVBQUUsYUFBYTtRQUNqQixVQUFVLEVBQUU7WUFDVixVQUFVLENBQUMsUUFBUTtZQUNuQixVQUFVLENBQUMsU0FBUyxDQUFD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QUFVO1FBQ2hCLEtBQUssRUFBRSxPQUFPLENBQUMsOEJBQThCLENBQUM7S0FDL0M7SUFDRCxnQkFBZ0IsRUFBRTtRQUNoQixFQUFFLEVBQUUsa0JBQWtCO1FBQ3RCLFVBQVUsRUFBRSxFQUFFO1FBQ2QsWUFBWSxFQUFFLEtBQUs7UUFDbkIsSUFBSSxFQUFFLFVBQVU7UUFDaEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyw4Q0FBOEMsQ0FBQztLQUMvRDtDQUNpRCxDQUFDO0FBSXJELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUVwQywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZ2V0dGV4dCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUGF0dGVybiwgdmFsaWRhdGVJbnRlcm5hdGlvbmFsUGhvbmVOdW1iZXIgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuLy8gTW9kZWwgZm9yIGluZGl2aWR1YWwgdGVuYW50IGZvcm0gZmllbGRzXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFByb3BlcnR5RGVmaW5pdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGw7XG4gIHR5cGU6ICd0ZXh0JyB8ICdjaGVja2JveCcgfCAnbnVtYmVyJyB8ICdzZWxlY3QnO1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbmUgYWxsIGhhcmRUeXBlZCB0ZW5hbnQgZm9ybSBmaWVsZHMsIGNoZWNrYm94ZXMgYW5kIHNlbGVjdCBlbGVtZW50cy5cbiAqXG4gKiB3aGlsZSBzdGlsbCBiZW5lZml0aW5nIGZyb20gaGFyZCB0eXBpbmcsIHRoYW5rcyB0byBcInNhdGlzZmllc1wiIGtleXdvcmRcbiAqL1xuY29uc3QgdGVuYW50UHJvcGVydGllc0RlZmluaXRpb25zID0ge1xuICB0ZW5hbnRJRDoge1xuICAgIGlkOiAndGVuYW50SWQnLFxuICAgIHZhbGlkYXRvcnM6IFtdLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgbGFiZWw6IGdldHRleHQoJ0lEJylcbiAgfSxcbiAgZG9tYWluOiB7XG4gICAgaWQ6ICdkb21haW4nLFxuICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgzMiksXG4gICAgICAvLyBUT0RPOiBUbyBiZSBjb25zaXN0ZW50LCBwYXR0ZXJuIHNob3VsZCBiZSBjaGFuZ2UgZm9yIGRvbWFpbi4gSXQgaXMgdGVuYW50SWQsIHRvIGF2b2lkIGJyZWFraW5nIHRlc3RzLCBhbmQgYmUgY29uc2lzdGVudCB3aXRoIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLlxuICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFZhbGlkYXRpb25QYXR0ZXJuLnJ1bGVzLnRlbmFudElkLnBhdHRlcm4pXG4gICAgXSxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgdHlwZTogJ3RleHQnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdEb21haW4vVVJMJyksXG4gICAgcGxhY2Vob2xkZXI6IGdldHRleHQoJ2UuZy4gbXktdGVuYW50YHVzZWQgaW4gVVJMYCcpXG4gIH0sXG4gIGNvbXBhbnlOYW1lOiB7XG4gICAgaWQ6ICdjb21wYW55TmFtZScsXG4gICAgdmFsaWRhdG9yczogW1xuICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NiksXG4gICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oVmFsaWRhdGlvblBhdHRlcm4ucnVsZXMubm9XaGl0ZVNwYWNlQXRCZWdpbm5pbmcucGF0dGVybilcbiAgICBdLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgbGFiZWw6IGdldHRleHQoJ05hbWUnKSxcbiAgICBwbGFjZWhvbGRlcjogZ2V0dGV4dCgnZS5nLiBDb21wYW55IEEnKVxuICB9LFxuICBjb250YWN0TmFtZToge1xuICAgIGlkOiAnY29udGFjdE5hbWUnLFxuICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1heExlbmd0aCgzMCldLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgbGFiZWw6IGdldHRleHQoJ0NvbnRhY3QgbmFtZScpLFxuICAgIHBsYWNlaG9sZGVyOiBnZXR0ZXh0KCdlLmcuIEpvZSBEb2VgTE9DQUxJWkVgJylcbiAgfSxcbiAgY29udGFjdFBob25lOiB7XG4gICAgaWQ6ICdjb250YWN0UGhvbmUnLFxuICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB2YWxpZGF0ZUludGVybmF0aW9uYWxQaG9uZU51bWJlcigpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyMCldLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgbGFiZWw6IGdldHRleHQoJ0NvbnRhY3QgcGhvbmUnKSxcbiAgICBwbGFjZWhvbGRlcjogZ2V0dGV4dCgnZS5nLiArNDkgOSA4NzYgNTQzIDIxMGBMT0NBTElaRWAnKVxuICB9LFxuICBhZG1pbmlzdHJhdG9yRW1haWw6IHtcbiAgICBpZDogJ2FkbWluaXN0cmF0b3JFbWFpbCcsXG4gICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NildLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgbGFiZWw6IGdldHRleHQoYEFkbWluaXN0cmF0b3IncyBlbWFpbGApLFxuICAgIHBsYWNlaG9sZGVyOiBnZXR0ZXh0KCdlLmcuIGpvZS5kb2VAZXhhbXBsZS5jb21gTE9DQUxJWkVgJylcbiAgfSxcbiAgYWRtaW5pc3RyYXRvclVzZXJuYW1lOiB7XG4gICAgaWQ6ICdhZG1pbmlzdHJhdG9yVXNlcm5hbWUnLFxuICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oVmFsaWRhdGlvblBhdHRlcm4ucnVsZXMudXNlci5wYXR0ZXJuKSxcbiAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NilcbiAgICBdLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgbGFiZWw6IGdldHRleHQoYEFkbWluaXN0cmF0b3IncyB1c2VybmFtZWApLFxuICAgIHBsYWNlaG9sZGVyOiBnZXR0ZXh0KCdlLmcuIGpvZWBMT0NBTElaRWAnKVxuICB9LFxuICBleHRlcm5hbFJlZmVyZW5jZToge1xuICAgIGlkOiAnZXh0ZXJuYWxSZWZlcmVuY2UnLFxuICAgIHZhbGlkYXRvcnM6IFtdLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgbGFiZWw6IGdldHRleHQoJ0V4dGVybmFsIHJlZmVyZW5jZScpLFxuICAgIHBsYWNlaG9sZGVyOiBnZXR0ZXh0KCdlLmcuIFJFRjEyMzQ1YHJlZmVyZW5jZSBudW1iZXJgJylcbiAgfSxcbiAgc2VuZFBhc3N3b3JkUmVzZXRFbWFpbDoge1xuICAgIGlkOiAnc2VuZFBhc3N3b3JkUmVzZXRFbWFpbCcsXG4gICAgdmFsaWRhdG9yczogW10sXG4gICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgbGFiZWw6IGdldHRleHQoJ1NlbmQgcGFzc3dvcmQgcmVzZXQgbGluayBhcyBlbWFpbCcpXG4gIH0sXG4gIHRlbmFudFBvbGljeToge1xuICAgIGlkOiAndGVuYW50UG9saWN5JyxcbiAgICB2YWxpZGF0b3JzOiBbXSxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgbGFiZWw6IGdldHRleHQoJ1RlbmFudCBwb2xpY3knKVxuICB9LFxuICBhbGxvd0NyZWF0ZVRlbmFudHM6IHtcbiAgICBpZDogJ2FsbG93Q3JlYXRlVGVuYW50cycsXG4gICAgdmFsaWRhdG9yczogW10sXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgbGFiZWw6IGdldHRleHQoJ0FsbG93IGNyZWF0aW9uIG9mIHN1YnRlbmFudHMnKVxuICB9LFxuICBnYWluc2lnaHRFbmFibGVkOiB7XG4gICAgaWQ6ICdnYWluc2lnaHRFbmFibGVkJyxcbiAgICB2YWxpZGF0b3JzOiBbXSxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgbGFiZWw6IGdldHRleHQoJ0VuYWJsZSBHYWluc2lnaHQgcHJvZHVjdCBleHBlcmllbmNlIHRyYWNraW5nJylcbiAgfVxufSBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgVGVuYW50UHJvcGVydHlEZWZpbml0aW9uPjtcblxudHlwZSBUZW5hbnRQcm9wZXJ0aWVzS2V5cyA9IGtleW9mIHR5cGVvZiB0ZW5hbnRQcm9wZXJ0aWVzRGVmaW5pdGlvbnM7XG5cbmV4cG9ydCBjb25zdCB0ZW5hbnRGb3JtSW5wdXRzRGVmaW5pdGlvbnM6IHtcbiAgW0sgaW4gVGVuYW50UHJvcGVydGllc0tleXNdOiBUZW5hbnRQcm9wZXJ0eURlZmluaXRpb247XG59ID0gdGVuYW50UHJvcGVydGllc0RlZmluaXRpb25zO1xuIl19