@c8y/ngx-components 1018.0.194 → 1018.0.201
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/common/global-config.service.d.ts +1 -1
- package/core/common/permissions.service.d.ts +69 -2
- package/core/common/tenant-ui.service.d.ts +1 -1
- package/core/i18n/pattern-messages.data.d.ts +20 -20
- package/esm2020/assets-navigator/asset-node.service.mjs +11 -4
- package/esm2020/auth-configuration/auth-configuration.guard.mjs +5 -2
- package/esm2020/auth-configuration/factories/navigation.factory.mjs +3 -3
- package/esm2020/cockpit-config/cockpit-config.guard.mjs +2 -2
- package/esm2020/cockpit-config/cockpit-config.service.mjs +2 -2
- package/esm2020/context-dashboard/add-dashboard.factory.mjs +13 -3
- package/esm2020/context-dashboard/context-dashboard.service.mjs +11 -3
- package/esm2020/context-dashboard/dashboard-detail.component.mjs +7 -2
- package/esm2020/context-dashboard/report-dashboard/report-dashboard-list.component.mjs +5 -3
- package/esm2020/core/common/global-config.service.mjs +7 -2
- package/esm2020/core/common/permissions.service.mjs +69 -2
- package/esm2020/core/common/tenant-ui.service.mjs +3 -2
- package/esm2020/core/common/user-preferences/user-preferences.service.mjs +10 -2
- package/esm2020/core/i18n/pattern-messages.data.mjs +21 -21
- package/esm2020/ecosystem/application-properties/application-properties.component.mjs +2 -2
- package/esm2020/ecosystem/ecosystem-navigation.factory.mjs +3 -3
- package/esm2020/ecosystem/packages/package-list/packages-list.component.mjs +2 -2
- package/esm2020/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.mjs +2 -2
- package/esm2020/files-repository/files-repository.guard.mjs +6 -3
- package/esm2020/protocol-lwm2m/components/bootstrap-parameters/lwm2m-bootstrap-parameters.component.mjs +2 -2
- package/esm2020/register-device/register-device-navigation.factory.mjs +3 -3
- package/esm2020/reports/export-schedules.component.mjs +3 -3
- package/esm2020/repository/configuration/device-tab/configuration-preview.component.mjs +14 -6
- package/esm2020/sms-gateway/sms-gateway.guard.mjs +2 -2
- package/esm2020/sms-gateway/sms-gateway.module.mjs +6 -6
- package/esm2020/sub-assets/add-group/add-group.component.mjs +7 -2
- package/esm2020/sub-assets/groups.component.mjs +5 -2
- package/esm2020/sub-assets/sub-assets.component.mjs +7 -2
- package/esm2020/sub-assets/sub-assets.service.mjs +22 -10
- package/esm2020/tenants/tenant-list/tenant-list.component.mjs +12 -7
- package/esm2020/upgrade/ng1/downgraded.services.mjs +3 -2
- package/esm2020/upgrade/ng1/index.mjs +4 -3
- package/fesm2015/c8y-ngx-components-assets-navigator.mjs +10 -3
- package/fesm2015/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-auth-configuration.mjs +7 -4
- package/fesm2015/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-cockpit-config.mjs +3 -3
- package/fesm2015/c8y-ngx-components-cockpit-config.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs +33 -8
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem.mjs +6 -6
- package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-files-repository.mjs +6 -3
- package/fesm2015/c8y-ngx-components-files-repository.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-protocol-lwm2m-components-bootstrap-parameters.mjs +2 -2
- package/fesm2015/c8y-ngx-components-protocol-lwm2m-components-bootstrap-parameters.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-register-device.mjs +3 -3
- package/fesm2015/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-reports.mjs +2 -2
- package/fesm2015/c8y-ngx-components-reports.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-repository-configuration.mjs +13 -5
- package/fesm2015/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-sms-gateway.mjs +6 -6
- package/fesm2015/c8y-ngx-components-sms-gateway.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-sub-assets.mjs +38 -13
- package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-tenants.mjs +11 -6
- package/fesm2015/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-upgrade.mjs +4 -2
- package/fesm2015/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +103 -24
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-assets-navigator.mjs +10 -3
- package/fesm2020/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-auth-configuration.mjs +7 -4
- package/fesm2020/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-cockpit-config.mjs +3 -3
- package/fesm2020/c8y-ngx-components-cockpit-config.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs +34 -9
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem.mjs +6 -6
- package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-files-repository.mjs +6 -3
- package/fesm2020/c8y-ngx-components-files-repository.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-protocol-lwm2m-components-bootstrap-parameters.mjs +2 -2
- package/fesm2020/c8y-ngx-components-protocol-lwm2m-components-bootstrap-parameters.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-register-device.mjs +3 -3
- package/fesm2020/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-reports.mjs +2 -2
- package/fesm2020/c8y-ngx-components-reports.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-repository-configuration.mjs +13 -5
- package/fesm2020/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-sms-gateway.mjs +6 -6
- package/fesm2020/c8y-ngx-components-sms-gateway.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-sub-assets.mjs +38 -13
- package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-tenants.mjs +11 -6
- package/fesm2020/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-upgrade.mjs +4 -2
- package/fesm2020/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +103 -24
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/tenants/tenant-list/tenant-list.component.d.ts +4 -2
- package/upgrade/ng1/downgraded.services.d.ts +1 -0
|
@@ -5,7 +5,7 @@ import { BehaviorSubject, from } from 'rxjs';
|
|
|
5
5
|
import { expand, reduce, shareReplay, takeWhile } from 'rxjs/operators';
|
|
6
6
|
import { saveAs } from 'file-saver';
|
|
7
7
|
import { TenantService, TenantStatus, UserService } from '@c8y/client';
|
|
8
|
-
import { AlertService, AppStateService, gettext, ModalService, Status, TenantUiService, PasswordService } from '@c8y/ngx-components';
|
|
8
|
+
import { AlertService, AppStateService, gettext, ModalService, Status, TenantUiService, PasswordService, Permissions } from '@c8y/ngx-components';
|
|
9
9
|
import { StatusFilteringFormRendererComponent } from './status.filtering-form-renderer.component';
|
|
10
10
|
import { CreationTimeFilteringFormRendererComponent } from './creation-time.filtering-form-renderer.component';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
@@ -15,7 +15,7 @@ import * as i3 from "@c8y/client";
|
|
|
15
15
|
import * as i4 from "@angular/common";
|
|
16
16
|
import * as i5 from "@angular/router";
|
|
17
17
|
export class TenantListComponent {
|
|
18
|
-
constructor(appState, alertService, modalService, translateService, tenantService, tenantUiService, location, passwordService, userService) {
|
|
18
|
+
constructor(appState, alertService, modalService, translateService, tenantService, tenantUiService, location, passwordService, userService, permissionsService) {
|
|
19
19
|
this.appState = appState;
|
|
20
20
|
this.alertService = alertService;
|
|
21
21
|
this.modalService = modalService;
|
|
@@ -25,7 +25,12 @@ export class TenantListComponent {
|
|
|
25
25
|
this.location = location;
|
|
26
26
|
this.passwordService = passwordService;
|
|
27
27
|
this.userService = userService;
|
|
28
|
+
this.permissionsService = permissionsService;
|
|
28
29
|
this.tenants$ = new BehaviorSubject(undefined);
|
|
30
|
+
this.isPermittedToCreateTenanant = this.permissionsService.hasAnyRole([
|
|
31
|
+
Permissions.ROLE_TENANT_MANAGEMENT_ADMIN,
|
|
32
|
+
Permissions.ROLE_TENANT_MANAGEMENT_CREATE
|
|
33
|
+
]);
|
|
29
34
|
this.TOP_TENANT_NAME = 'management';
|
|
30
35
|
this.title = null;
|
|
31
36
|
this.loadMoreItemsLabel = gettext('Load more tenants');
|
|
@@ -255,10 +260,10 @@ export class TenantListComponent {
|
|
|
255
260
|
saveAs(blob, filename);
|
|
256
261
|
}
|
|
257
262
|
}
|
|
258
|
-
TenantListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", 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 }], target: i0.ɵɵFactoryTarget.Component });
|
|
259
|
-
TenantListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", 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 label=\"{{ 'Tenants' | translate }}\" icon=\"c8y-layers\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Subtenants' | translate\"\n [icon]=\"'c8y-layers'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item *ngIf=\"!!(appState.state$ | async).newsletter\" [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\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 type=\"button\"\n title=\"{{ 'Create tenant' | translate }}\"\n (click)=\"createTenant()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Create tenant' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/users-guide/enterprise-tenant/#managing-tenants\"></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 <div class=\"c8y-empty-state j-c-center\">\n <ng-container *ngIf=\"!(tenants$ | async)\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-container *ngIf=\"(tenants$ | async)?.length === 0\">\n <div class=\"text-center\">\n <h1 c8yIcon=\"c8y-layers\"></h1>\n <h3 translate>There are no tenants defined.</h3>\n <p translate>Create the first tenant.</p>\n <div>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Create tenant' | translate }}\"\n (click)=\"createTenant()\"\n >\n {{ 'Create tenant' | translate }}\n </button>\n </div>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/enterprise-tenant/#managing-tenants\">\n User guide`KEEP_ORIGINAL`\n </a>\n .\n </small>\n </p>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(tenants$ | async)?.length > 0\">\n <div class=\"text-center\">\n <h1 class=\"c8y-icon-duocolor\" c8yIcon=\"search\"></h1>\n <h3 translate>No tenants to display.</h3>\n <p translate>Refine your search terms or check your spelling.</p>\n </div>\n </ng-container>\n </div>\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 *ngIf=\"context.item.status === TenantStatus.ACTIVE\"\n title=\"{{ 'Active`tenant`' | translate }}\"\n >\n <i c8yIcon=\"check-circle\" class=\"text-success\"></i>\n </span>\n <span\n *ngIf=\"context.item.status === TenantStatus.SUSPENDED\"\n title=\"{{ 'Suspended`tenant`' | translate }}\"\n >\n <i c8yIcon=\"ban\" class=\"text-danger\"></i>\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "directive", type: i5.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "component", type: i1.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i1.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { 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" }, { 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", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning"], 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: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DatePipe, name: "c8yDate" }] });
|
|
263
|
+
TenantListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", 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 });
|
|
264
|
+
TenantListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", 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 label=\"{{ 'Tenants' | translate }}\" icon=\"c8y-layers\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Subtenants' | translate\"\n [icon]=\"'c8y-layers'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item *ngIf=\"!!(appState.state$ | async).newsletter\" [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\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 type=\"button\"\n title=\"{{ 'Create tenant' | translate }}\"\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=\"/users-guide/enterprise-tenant/#managing-tenants\"></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 <div class=\"c8y-empty-state j-c-center\">\n <ng-container *ngIf=\"!(tenants$ | async)\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-container *ngIf=\"(tenants$ | async)?.length === 0\">\n <div class=\"text-center\">\n <h1 c8yIcon=\"c8y-layers\"></h1>\n <h3 translate>There are no tenants defined.</h3>\n <p translate>Create the first tenant.</p>\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 translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/enterprise-tenant/#managing-tenants\">\n User guide`KEEP_ORIGINAL`\n </a>\n .\n </small>\n </p>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(tenants$ | async)?.length > 0\">\n <div class=\"text-center\">\n <h1 class=\"c8y-icon-duocolor\" c8yIcon=\"search\"></h1>\n <h3 translate>No tenants to display.</h3>\n <p translate>Refine your search terms or check your spelling.</p>\n </div>\n </ng-container>\n </div>\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 *ngIf=\"context.item.status === TenantStatus.ACTIVE\"\n title=\"{{ 'Active`tenant`' | translate }}\"\n >\n <i c8yIcon=\"check-circle\" class=\"text-success\"></i>\n </span>\n <span\n *ngIf=\"context.item.status === TenantStatus.SUSPENDED\"\n title=\"{{ 'Suspended`tenant`' | translate }}\"\n >\n <i c8yIcon=\"ban\" class=\"text-danger\"></i>\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "directive", type: i5.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "component", type: i1.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i1.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { 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" }, { 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", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning"], 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: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DatePipe, name: "c8yDate" }] });
|
|
260
265
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: TenantListComponent, decorators: [{
|
|
261
266
|
type: Component,
|
|
262
|
-
args: [{ selector: 'c8y-tenant-list', template: "<c8y-title>\n {{ 'Subtenants' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item label=\"{{ 'Tenants' | translate }}\" icon=\"c8y-layers\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Subtenants' | translate\"\n [icon]=\"'c8y-layers'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item *ngIf=\"!!(appState.state$ | async).newsletter\" [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\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 type=\"button\"\n title=\"{{ 'Create tenant' | translate }}\"\n (click)=\"createTenant()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Create tenant' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/users-guide/enterprise-tenant/#managing-tenants\"></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 <div class=\"c8y-empty-state j-c-center\">\n <ng-container *ngIf=\"!(tenants$ | async)\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-container *ngIf=\"(tenants$ | async)?.length === 0\">\n <div class=\"text-center\">\n <h1 c8yIcon=\"c8y-layers\"></h1>\n <h3 translate>There are no tenants defined.</h3>\n <p translate>Create the first tenant.</p>\n <div>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Create tenant' | translate }}\"\n (click)=\"createTenant()\"\n >\n {{ 'Create tenant' | translate }}\n </button>\n </div>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/enterprise-tenant/#managing-tenants\">\n User guide`KEEP_ORIGINAL`\n </a>\n .\n </small>\n </p>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(tenants$ | async)?.length > 0\">\n <div class=\"text-center\">\n <h1 class=\"c8y-icon-duocolor\" c8yIcon=\"search\"></h1>\n <h3 translate>No tenants to display.</h3>\n <p translate>Refine your search terms or check your spelling.</p>\n </div>\n </ng-container>\n </div>\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 *ngIf=\"context.item.status === TenantStatus.ACTIVE\"\n title=\"{{ 'Active`tenant`' | translate }}\"\n >\n <i c8yIcon=\"check-circle\" class=\"text-success\"></i>\n </span>\n <span\n *ngIf=\"context.item.status === TenantStatus.SUSPENDED\"\n title=\"{{ 'Suspended`tenant`' | translate }}\"\n >\n <i c8yIcon=\"ban\" class=\"text-danger\"></i>\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n" }]
|
|
263
|
-
}], ctorParameters: function () { return [{ 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 }]; } });
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVuYW50cy90ZW5hbnQtbGlzdC90ZW5hbnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi90ZW5hbnRzL3RlbmFudC1saXN0L3RlbmFudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFJTCxhQUFhLEVBQ2IsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBRUwsWUFBWSxFQUNaLGVBQWUsRUFLZixPQUFPLEVBQ1AsWUFBWSxFQUVaLE1BQU0sRUFDTixlQUFlLEVBQ2YsZUFBZSxFQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7O0FBTS9HLE1BQU0sT0FBTyxtQkFBbUI7SUF3QjlCLFlBQ1MsUUFBeUIsRUFDeEIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLGVBQWdDLEVBQ2hDLFFBQWtCLEVBQ2xCLGVBQWdDLEVB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LENBQUM7O2dIQTlRVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix1REN0Q2hDLDY0SUF3SUE7MkZEbEdhLG1CQUFtQjtrQkFKL0IsU0FBUzsrQkFDRSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleHBhbmQsIHJlZHVjZSwgc2hhcmVSZXBsYXksIHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuXG5pbXBvcnQge1xuICBJQ3VycmVudFRlbmFudCxcbiAgSVJlc3VsdExpc3QsXG4gIElUZW5hbnQsXG4gIFRlbmFudFNlcnZpY2UsXG4gIFRlbmFudFN0YXR1cyxcbiAgVXNlclNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEJ1aWx0SW5BY3Rpb25UeXBlLFxuICBDb2x1bW4sXG4gIFNvcnRPcmRlcixcbiAgRGlzcGxheU9wdGlvbnMsXG4gIGdldHRleHQsXG4gIE1vZGFsU2VydmljZSxcbiAgUGFnaW5hdGlvbixcbiAgU3RhdHVzLFxuICBUZW5hbnRVaVNlcnZpY2UsXG4gIFBhc3N3b3JkU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuaW1wb3J0IHsgU3RhdHVzRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9zdGF0dXMuZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENyZWF0aW9uVGltZUZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vY3JlYXRpb24tdGltZS5maWx0ZXJpbmctZm9ybS1yZW5kZXJlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdGVuYW50LWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVuYW50LWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRlbmFudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB0ZW5hbnRzJDogQmVoYXZpb3JTdWJqZWN0PElUZW5hbnRbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50O1xuICBpc01hbmFnZW1lbnRUZW5hbnQ6IGJvb2xlYW47XG4gIFRPUF9URU5BTlRfTkFNRSA9ICdtYW5hZ2VtZW50JztcblxuICB0aXRsZTogc3RyaW5nID0gbnVsbDtcbiAgbG9hZE1vcmVJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkIG1vcmUgdGVuYW50cycpO1xuICBsb2FkaW5nSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZGluZyB0ZW5hbnRz4oCmJyk7XG5cbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlXG4gIH07XG5cbiAgY29sdW1uczogQ29sdW1uW10gPSB0aGlzLmdldENvbHVtbnMoKTtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICBzaG93U2VhcmNoID0gdHJ1ZTtcbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXSA9IHRoaXMuZ2V0QWN0aW9uQ29udHJvbHMoKTtcblxuICBUZW5hbnRTdGF0dXMgPSBUZW5hbnRTdGF0dXM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRVaVNlcnZpY2U6IFRlbmFudFVpU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHBhc3N3b3JkU2VydmljZTogUGFzc3dvcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRUZW5hbnQudmFsdWU7XG4gICAgdGhpcy5pc01hbmFnZW1lbnRUZW5hbnQgPSBhd2FpdCB0aGlzLnRlbmFudFVpU2VydmljZS5pc01hbmFnZW1lbnRUZW5hbnQoKTtcbiAgICB0aGlzLmxvYWRUZW5hbnRzKCk7XG4gIH1cblxuICBsb2FkVGVuYW50cygpIHtcbiAgICB0aGlzLnRlbmFudHMkLm5leHQodW5kZWZpbmVkKTtcbiAgICBmcm9tKHRoaXMudGVuYW50U2VydmljZS5saXN0KHsgcGFnZVNpemU6IDIwMDAsIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLCB3aXRoQXBwczogZmFsc2UgfSkpXG4gICAgICAucGlwZShcbiAgICAgICAgZXhwYW5kKHJlc3VsdExpc3QgPT4gcmVzdWx0TGlzdC5wYWdpbmcubmV4dFBhZ2UgIT09IG51bGwgJiYgcmVzdWx0TGlzdC5wYWdpbmcubmV4dCgpKSxcbiAgICAgICAgdGFrZVdoaWxlKHJlc3VsdExpc3QgPT4gcmVzdWx0TGlzdC5wYWdpbmcubmV4dFBhZ2UgIT09IG51bGwsIHRydWUpLFxuICAgICAgICByZWR1Y2UoXG4gICAgICAgICAgKHRlbmFudHM6IElUZW5hbnRbXSwgcmVzdWx0TGlzdDogSVJlc3VsdExpc3Q8SVRlbmFudD4pID0+IFtcbiAgICAgICAgICAgIC4uLnRlbmFudHMsXG4gICAgICAgICAgICAuLi5yZXN1bHRMaXN0LmRhdGFcbiAgICAgICAgICBdLFxuICAgICAgICAgIFtdXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRlbmFudHMgPT4gdGhpcy50ZW5hbnRzJC5uZXh0KHRlbmFudHMpKTtcbiAgfVxuXG4gIGdldENvbHVtbnMoKTogQ29sdW1uW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjb21wYW55JyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdUZW5hbnQnKSxcbiAgICAgICAgcGF0aDogJ2NvbXBhbnknLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydE9yZGVyOiAnYXNjJyBhcyBTb3J0T3JkZXJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnSUQnKSxcbiAgICAgICAgcGF0aDogJ2lkJyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdkb21haW4nLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ0RvbWFpbicpLFxuICAgICAgICBwYXRoOiAnZG9tYWluJyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwYXJlbnQnLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ1BhcmVudCB0ZW5hbnQnKSxcbiAgICAgICAgcGF0aDogJ3BhcmVudCcsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY29udGFjdE5hbWUnLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ0NvbnRhY3QgbmFtZScpLFxuICAgICAgICBwYXRoOiAnY29udGFjdE5hbWUnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NyZWF0aW9uVGltZScsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnQ3JlYXRlZCcpLFxuICAgICAgICBwYXRoOiAnY3JlYXRpb25UaW1lJyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50OiBDcmVhdGlvblRpbWVGaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZXh0ZXJuYWxSZWZlcmVuY2UnLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ0V4dGVybmFsIHJlZmVyZW5jZScpLFxuICAgICAgICBwYXRoOiAnY3VzdG9tUHJvcGVydGllcy5leHRlcm5hbFJlZmVyZW5jZScsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc3RhdHVzJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdTdGF0dXMnKSxcbiAgICAgICAgcGF0aDogJ3N0YXR1cycsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIGZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudDogU3RhdHVzRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBnZXRQYWdpbmF0aW9uKCk6IFBhZ2luYXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlU2l6ZTogMTAsXG4gICAgICBjdXJyZW50UGFnZTogMVxuICAgIH07XG4gIH1cblxuICBnZXRBY3Rpb25Db250cm9scygpOiBBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkVkaXQsXG4gICAgICAgIHRleHQ6IGdldHRleHQoJ0VkaXRgdGVuYW50YCcpLFxuICAgICAgICBjYWxsYmFjazogdGVuYW50ID0+IHRoaXMuZ29Ub0RldGFpbHModGVuYW50KVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2FjdGl2YXRlVGVuYW50QWN0aW9uJyxcbiAgICAgICAgaWNvbjogJ3Bvd2VyLW9mZicsXG4gICAgICAgIHRleHQ6IGdldHRleHQoJ0FjdGl2YXRlYHRlbmFudGAnKSxcbiAgICAgICAgY2FsbGJhY2s6ICh0ZW5hbnQ6IElUZW5hbnQpID0+IHRoaXMuYWN0aXZhdGVUZW5hbnQodGVuYW50KSxcbiAgICAgICAgc2hvd0lmOiAodGVuYW50OiBJVGVuYW50KSA9PiB0aGlzLmlzU3VzcGVuZGVkKHRlbmFudClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdzdXNwZW5kVGVuYW50QWN0aW9uJyxcbiAgICAgICAgaWNvbjogJ3Bvd2VyLW9mZicsXG4gICAgICAgIHRleHQ6IGdldHRleHQoJ1N1c3BlbmRgdGVuYW50YCcpLFxuICAgICAgICBjYWxsYmFjazogKHRlbmFudDogSVRlbmFudCkgPT4gdGhpcy5zdXNwZW5kVGVuYW50KHRlbmFudCksXG4gICAgICAgIHNob3dJZjogKHRlbmFudDogSVRlbmFudCkgPT4gdGhpcy5pc0FjdGl2ZSh0ZW5hbnQpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICAgIHRleHQ6IGdldHRleHQoJ0RlbGV0ZWB0ZW5hbnRgJyksXG4gICAgICAgIGNhbGxiYWNrOiB0ZW5hbnQgPT4gdGhpcy5kZWxldGUodGVuYW50KSxcbiAgICAgICAgc2hvd0lmOiAoKSA9PiB0aGlzLmlzTWFuYWdlbWVudFRlbmFudFxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBjcmVhdGVUZW5hbnQoKSB7XG4gICAgdGhpcy5sb2NhdGlvbi5nbygnL3RlbmFudHMvbmV3Jyk7XG4gIH1cblxuICBnb1RvRGV0YWlscyh0ZW5hbnQ6IElUZW5hbnQpIHtcbiAgICB0aGlzLmxvY2F0aW9uLmdvKGAvdGVuYW50cy8ke3RlbmFudC5pZH1gKTtcbiAgfVxuXG4gIGFzeW5jIGFjdGl2YXRlVGVuYW50KHRlbmFudCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGE6IHNhdmVkVGVuYW50IH0gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgaWQ6IHRlbmFudC5pZCxcbiAgICAgICAgc3RhdHVzOiBUZW5hbnRTdGF0dXMuQUNUSVZFXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5hc3NpZ24odGVuYW50LCBzYXZlZFRlbmFudCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ1RlbmFudCBhY3RpdmF0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3VzcGVuZFRlbmFudCh0ZW5hbnQpIHtcbiAgICBjb25zdCB0aXRsZSA9IGdldHRleHQoJ1N1c3BlbmQgdGVuYW50Jyk7XG4gICAgY29uc3QgY29uZmlybWF0aW9uVGV4dCA9IGdldHRleHQoXG4gICAgICAnWW91IGFyZSBhYm91dCB0byBzdXNwZW5kIHRlbmFudCBcInt7IGNvbXBhbnkgfX1cIiAoSUQgXCJ7eyBpZCB9fVwiKS4nXG4gICAgKTtcbiAgICBjb25zdCBwcm9jZWVkID0gZ2V0dGV4dCgnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nKTtcbiAgICBjb25zdCBib2R5ID0gW1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY29uZmlybWF0aW9uVGV4dCwge1xuICAgICAgICBjb21wYW55OiB0ZW5hbnQuY29tcGFueSxcbiAgICAgICAgaWQ6IHRlbmFudC5pZFxuICAgICAgfSksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChwcm9jZWVkKVxuICAgIF0uam9pbignICcpO1xuICAgIGNvbnN0IGxhYmVscyA9IHtcbiAgICAgIG9rOiBnZXR0ZXh0KCdTdXNwZW5kYHRlbmFudGAnKVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0odGl0bGUsIGJvZHksIFN0YXR1cy5EQU5HRVIsIGxhYmVscyk7XG4gICAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLnBhc3N3b3JkU2VydmljZS5jb25maXJtUGFzc3dvcmQoKS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChjb25maXJtZWQgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhOiBzYXZlZFRlbmFudCB9ID0gYXdhaXQgdGhpcy50ZW5hbnRTZXJ2aWNlLnVwZGF0ZSh7XG4gICAgICAgICAgaWQ6IHRlbmFudC5pZCxcbiAgICAgICAgICBzdGF0dXM6IFRlbmFudFN0YXR1cy5TVVNQRU5ERURcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGVuYW50LCBzYXZlZFRlbmFudCk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnVGVuYW50IHN1c3BlbmRlZC4nKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGUodGVuYW50KSB7XG4gICAgY29uc3QgdGl0bGUgPSBnZXR0ZXh0KCdEZWxldGUgdGVuYW50Jyk7XG4gICAgY29uc3QgY29uZmlybWF0aW9uVGV4dCA9IGdldHRleHQoXG4gICAgICAnWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGVuYW50IFwie3sgY29tcGFueSB9fVwiIChJRCBcInt7IGlkIH19XCIpLidcbiAgICApO1xuICAgIGNvbnN0IGhpbnQgPSBnZXR0ZXh0KCdUaGlzIG9wZXJhdGlvbiBpcyBpcnJldmVyc2libGUuJyk7XG4gICAgY29uc3QgcHJvY2VlZCA9IGdldHRleHQoJ0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/Jyk7XG4gICAgY29uc3QgYm9keSA9IFtcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGNvbmZpcm1hdGlvblRleHQsIHtcbiAgICAgICAgY29tcGFueTogdGVuYW50LmNvbXBhbnksXG4gICAgICAgIGlkOiB0ZW5hbnQuaWRcbiAgICAgIH0pLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoaGludCksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChwcm9jZWVkKVxuICAgIF0uam9pbignICcpO1xuICAgIGNvbnN0IGxhYmVscyA9IHtcbiAgICAgIG9rOiBnZXR0ZXh0KCdEZWxldGVgdGVuYW50YCcpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybSh0aXRsZSwgYm9keSwgU3RhdHVzLkRBTkdFUiwgbGFiZWxzKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMucGFzc3dvcmRTZXJ2aWNlLmNvbmZpcm1QYXNzd29yZCgpLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKGNvbmZpcm1lZCA9PT0gdHJ1ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuZGVsZXRlKHRlbmFudCk7XG4gICAgICAgIGNvbnN0IHRlbmFudHNXaXRob3V0UmVtb3ZlZE9uZSA9IHRoaXMudGVuYW50cyQudmFsdWUuZmlsdGVyKHQgPT4gdCAhPT0gdGVuYW50KTtcbiAgICAgICAgdGhpcy50ZW5hbnRzJC5uZXh0KHRlbmFudHNXaXRob3V0UmVtb3ZlZE9uZSk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoXG4gICAgICAgICAgZ2V0dGV4dCgnVGVuYW50IGlzIGJlaW5nIGRlbGV0ZWQgaW4gdGhlIGJhY2tncm91bmQuIFRoaXMgbWlnaHQgdGFrZSBhIHdoaWxl4oCmJylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzQWN0aXZlKHRlbmFudDogSVRlbmFudCkge1xuICAgIHJldHVybiB0ZW5hbnQuc3RhdHVzID09PSBUZW5hbnRTdGF0dXMuQUNUSVZFO1xuICB9XG5cbiAgaXNTdXNwZW5kZWQodGVuYW50OiBJVGVuYW50KSB7XG4gICAgcmV0dXJuIHRlbmFudC5zdGF0dXMgPT09IFRlbmFudFN0YXR1cy5TVVNQRU5ERUQ7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZE5ld3NsZXR0ZXJFbWFpbHMoKSB7XG4gICAgY29uc3QgeyByZXMsIGRhdGEgfSA9IGF3YWl0IHRoaXMudXNlclNlcnZpY2UuZ2V0TmV3c2xldHRlckVtYWlscygpO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcbiAgICBjb25zdCBjb250ZW50RGlzcG9zaXRpb24gPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IC9maWxlbmFtZT1cIiguKilcIi8uZXhlYyhjb250ZW50RGlzcG9zaXRpb24pWzFdO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHsgdHlwZTogY29udGVudFR5cGUgfSk7XG4gICAgc2F2ZUFzKGJsb2IsIGZpbGVuYW1lKTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT5cbiAge3sgJ1N1YnRlbmFudHMnIHwgdHJhbnNsYXRlIH19XG48L2M4eS10aXRsZT5cblxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBsYWJlbD1cInt7ICdUZW5hbnRzJyB8IHRyYW5zbGF0ZSB9fVwiIGljb249XCJjOHktbGF5ZXJzXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtsYWJlbF09XCInU3VidGVuYW50cycgfCB0cmFuc2xhdGVcIlxuICAgIFtpY29uXT1cIidjOHktbGF5ZXJzJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbSAqbmdJZj1cIiEhKGFwcFN0YXRlLnN0YXRlJCB8IGFzeW5jKS5uZXdzbGV0dGVyXCIgW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJ7e1xuICAgICAgJ0Rvd25sb2FkcyB0aGUgbGlzdCBvZiBlbWFpbHMgb2YgdXNlcnMgc3Vic2NyaWJlZCBmb3IgbmV3c2xldHRlciBvbiB0aGUgY3VycmVudCB0ZW5hbnQgYW5kIGl0cyBzdWJ0ZW5hbnRzLidcbiAgICAgICAgfCB0cmFuc2xhdGVcbiAgICB9fVwiXG4gICAgKGNsaWNrKT1cImRvd25sb2FkTmV3c2xldHRlckVtYWlscygpXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJkb3dubG9hZFwiPjwvaT5cbiAgICB7eyAnRW1haWwgYWRkcmVzc2VzJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJ7eyAnQ3JlYXRlIHRlbmFudCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIChjbGljayk9XCJjcmVhdGVUZW5hbnQoKVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAge3sgJ0NyZWF0ZSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHAgc3JjPVwiL3VzZXJzLWd1aWRlL2VudGVycHJpc2UtdGVuYW50LyNtYW5hZ2luZy10ZW5hbnRzXCI+PC9jOHktaGVscD5cblxuPGRpdiBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgYm9yZGVyLXRvcCBib3JkZXItYm90dG9tXCI+XG4gIDxjOHktZGF0YS1ncmlkXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbbG9hZE1vcmVJdGVtc0xhYmVsXT1cImxvYWRNb3JlSXRlbXNMYWJlbFwiXG4gICAgW2xvYWRpbmdJdGVtc0xhYmVsXT1cImxvYWRpbmdJdGVtc0xhYmVsXCJcbiAgICBbZGlzcGxheU9wdGlvbnNdPVwiZGlzcGxheU9wdGlvbnNcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtyb3dzXT1cInRlbmFudHMkIHwgYXN5bmNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtzaG93U2VhcmNoXT1cInNob3dTZWFyY2hcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgKG9uUmVsb2FkKT1cImxvYWRUZW5hbnRzKClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZSBqLWMtY2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISh0ZW5hbnRzJCB8IGFzeW5jKVwiPlxuICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHRlbmFudHMkIHwgYXN5bmMpPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPGgxIGM4eUljb249XCJjOHktbGF5ZXJzXCI+PC9oMT5cbiAgICAgICAgICA8aDMgdHJhbnNsYXRlPlRoZXJlIGFyZSBubyB0ZW5hbnRzIGRlZmluZWQuPC9oMz5cbiAgICAgICAgICA8cCB0cmFuc2xhdGU+Q3JlYXRlIHRoZSBmaXJzdCB0ZW5hbnQuPC9wPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQ3JlYXRlIHRlbmFudCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlVGVuYW50KClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnQ3JlYXRlIHRlbmFudCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwIGM4eS1ndWlkZS1kb2NzPlxuICAgICAgICAgICAgPHNtYWxsIHRyYW5zbGF0ZSBuZ05vbkJpbmRhYmxlPlxuICAgICAgICAgICAgICBGaW5kIG91dCBtb3JlIGluIHRoZVxuICAgICAgICAgICAgICA8YSBjOHktZ3VpZGUtaHJlZj1cInVzZXJzLWd1aWRlL2VudGVycHJpc2UtdGVuYW50LyNtYW5hZ2luZy10ZW5hbnRzXCI+XG4gICAgICAgICAgICAgICAgVXNlciBndWlkZWBLRUVQX09SSUdJTkFMYFxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIC5cbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHRlbmFudHMkIHwgYXN5bmMpPy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxoMSBjbGFzcz1cImM4eS1pY29uLWR1b2NvbG9yXCIgYzh5SWNvbj1cInNlYXJjaFwiPjwvaDE+XG4gICAgICAgICAgPGgzIHRyYW5zbGF0ZT5ObyB0ZW5hbnRzIHRvIGRpc3BsYXkuPC9oMz5cbiAgICAgICAgICA8cCB0cmFuc2xhdGU+UmVmaW5lIHlvdXIgc2VhcmNoIHRlcm1zIG9yIGNoZWNrIHlvdXIgc3BlbGxpbmcuPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cImNvbXBhbnlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmM4eUNlbGxSZW5kZXJlckRlZj1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxzcGFuIHRpdGxlPVwie3sgY29udGV4dC52YWx1ZSB9fVwiPlxuICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL3RlbmFudHMnLCBjb250ZXh0Lml0ZW0uaWRdXCI+e3sgY29udGV4dC52YWx1ZSB9fTwvYT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cInBhcmVudFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIHx8IGN1cnJlbnRUZW5hbnQubmFtZSB9fVwiPlxuICAgICAgICAgIHt7IGNvbnRleHQudmFsdWUgfHwgY3VycmVudFRlbmFudC5uYW1lIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJjcmVhdGlvblRpbWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmM4eUNlbGxSZW5kZXJlckRlZj1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxzcGFuIHRpdGxlPVwie3sgY29udGV4dC52YWx1ZSB8IGM4eURhdGUgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHwgYzh5RGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwic3RhdHVzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiY29udGV4dC5pdGVtLnN0YXR1cyA9PT0gVGVuYW50U3RhdHVzLkFDVElWRVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnQWN0aXZlYHRlbmFudGAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGM4eUljb249XCJjaGVjay1jaXJjbGVcIiBjbGFzcz1cInRleHQtc3VjY2Vzc1wiPjwvaT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiY29udGV4dC5pdGVtLnN0YXR1cyA9PT0gVGVuYW50U3RhdHVzLlNVU1BFTkRFRFwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnU3VzcGVuZGVkYHRlbmFudGAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGM4eUljb249XCJiYW5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PC9pPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG4gIDwvYzh5LWRhdGEtZ3JpZD5cbjwvZGl2PlxuIl19
|
|
267
|
+
args: [{ selector: 'c8y-tenant-list', template: "<c8y-title>\n {{ 'Subtenants' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item label=\"{{ 'Tenants' | translate }}\" icon=\"c8y-layers\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Subtenants' | translate\"\n [icon]=\"'c8y-layers'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item *ngIf=\"!!(appState.state$ | async).newsletter\" [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\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 type=\"button\"\n title=\"{{ 'Create tenant' | translate }}\"\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=\"/users-guide/enterprise-tenant/#managing-tenants\"></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 <div class=\"c8y-empty-state j-c-center\">\n <ng-container *ngIf=\"!(tenants$ | async)\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-container *ngIf=\"(tenants$ | async)?.length === 0\">\n <div class=\"text-center\">\n <h1 c8yIcon=\"c8y-layers\"></h1>\n <h3 translate>There are no tenants defined.</h3>\n <p translate>Create the first tenant.</p>\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 translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/enterprise-tenant/#managing-tenants\">\n User guide`KEEP_ORIGINAL`\n </a>\n .\n </small>\n </p>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(tenants$ | async)?.length > 0\">\n <div class=\"text-center\">\n <h1 class=\"c8y-icon-duocolor\" c8yIcon=\"search\"></h1>\n <h3 translate>No tenants to display.</h3>\n <p translate>Refine your search terms or check your spelling.</p>\n </div>\n </ng-container>\n </div>\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 *ngIf=\"context.item.status === TenantStatus.ACTIVE\"\n title=\"{{ 'Active`tenant`' | translate }}\"\n >\n <i c8yIcon=\"check-circle\" class=\"text-success\"></i>\n </span>\n <span\n *ngIf=\"context.item.status === TenantStatus.SUSPENDED\"\n title=\"{{ 'Suspended`tenant`' | translate }}\"\n >\n <i c8yIcon=\"ban\" class=\"text-danger\"></i>\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n" }]
|
|
268
|
+
}], ctorParameters: function () { return [{ 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 }]; } });
|
|
269
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVuYW50cy90ZW5hbnQtbGlzdC90ZW5hbnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi90ZW5hbnRzL3RlbmFudC1saXN0L3RlbmFudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFJTCxhQUFhLEVBQ2IsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBRUwsWUFBWSxFQUNaLGVBQWUsRUFLZixPQUFPLEVBQ1AsWUFBWSxFQUVaLE1BQU0sRUFDTixlQUFlLEVBQ2YsZUFBZSxFQUNmLFdBQVcsRUFDWixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7O0FBTS9HLE1BQU0sT0FBTyxtQkFBbUI7SUE0QjlCLFlBQ1MsUUFBeUIsRUFDeEIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLGVBQWdDLEVBQ2hDLFFBQWtCLEVBQ2xC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QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekIsQ0FBQzs7Z0hBblJVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLHVEQ3ZDaEMseS9JQTBJQTsyRkRuR2EsbUJBQW1CO2tCQUovQixTQUFTOytCQUNFLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGV4cGFuZCwgcmVkdWNlLCBzaGFyZVJlcGxheSwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5cbmltcG9ydCB7XG4gIElDdXJyZW50VGVuYW50LFxuICBJUmVzdWx0TGlzdCxcbiAgSVRlbmFudCxcbiAgVGVuYW50U2VydmljZSxcbiAgVGVuYW50U3RhdHVzLFxuICBVc2VyU2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBBbGVydFNlcnZpY2UsXG4gIEFwcFN0YXRlU2VydmljZSxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIENvbHVtbixcbiAgU29ydE9yZGVyLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgZ2V0dGV4dCxcbiAgTW9kYWxTZXJ2aWNlLFxuICBQYWdpbmF0aW9uLFxuICBTdGF0dXMsXG4gIFRlbmFudFVpU2VydmljZSxcbiAgUGFzc3dvcmRTZXJ2aWNlLFxuICBQZXJtaXNzaW9uc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuaW1wb3J0IHsgU3RhdHVzRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9zdGF0dXMuZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENyZWF0aW9uVGltZUZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vY3JlYXRpb24tdGltZS5maWx0ZXJpbmctZm9ybS1yZW5kZXJlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdGVuYW50LWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVuYW50LWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRlbmFudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB0ZW5hbnRzJDogQmVoYXZpb3JTdWJqZWN0PElUZW5hbnRbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIGlzUGVybWl0dGVkVG9DcmVhdGVUZW5hbmFudCA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmhhc0FueVJvbGUoW1xuICAgIFBlcm1pc3Npb25zLlJPTEVfVEVOQU5UX01BTkFHRU1FTlRfQURNSU4sXG4gICAgUGVybWlzc2lvbnMuUk9MRV9URU5BTlRfTUFOQUdFTUVOVF9DUkVBVEVcbiAgXSk7XG4gIGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50O1xuICBpc01hbmFnZW1lbnRUZW5hbnQ6IGJvb2xlYW47XG4gIFRPUF9URU5BTlRfTkFNRSA9ICdtYW5hZ2VtZW50JztcblxuICB0aXRsZTogc3RyaW5nID0gbnVsbDtcbiAgbG9hZE1vcmVJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkIG1vcmUgdGVuYW50cycpO1xuICBsb2FkaW5nSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZGluZyB0ZW5hbnRz4oCmJyk7XG5cbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlXG4gIH07XG5cbiAgY29sdW1uczogQ29sdW1uW10gPSB0aGlzLmdldENvbHVtbnMoKTtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICBzaG93U2VhcmNoID0gdHJ1ZTtcbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXSA9IHRoaXMuZ2V0QWN0aW9uQ29udHJvbHMoKTtcblxuICBUZW5hbnRTdGF0dXMgPSBUZW5hbnRTdGF0dXM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRVaVNlcnZpY2U6IFRlbmFudFVpU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHBhc3N3b3JkU2VydmljZTogUGFzc3dvcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1xuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRoaXMuaXNNYW5hZ2VtZW50VGVuYW50ID0gYXdhaXQgdGhpcy50ZW5hbnRVaVNlcnZpY2UuaXNNYW5hZ2VtZW50VGVuYW50KCk7XG4gICAgdGhpcy5sb2FkVGVuYW50cygpO1xuICB9XG5cbiAgbG9hZFRlbmFudHMoKSB7XG4gICAgdGhpcy50ZW5hbnRzJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgZnJvbSh0aGlzLnRlbmFudFNlcnZpY2UubGlzdCh7IHBhZ2VTaXplOiAyMDAwLCB3aXRoVG90YWxQYWdlczogdHJ1ZSwgd2l0aEFwcHM6IGZhbHNlIH0pKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGV4cGFuZChyZXN1bHRMaXN0ID0+IHJlc3VsdExpc3QucGFnaW5nLm5leHRQYWdlICE9PSBudWxsICYmIHJlc3VsdExpc3QucGFnaW5nLm5leHQoKSksXG4gICAgICAgIHRha2VXaGlsZShyZXN1bHRMaXN0ID0+IHJlc3VsdExpc3QucGFnaW5nLm5leHRQYWdlICE9PSBudWxsLCB0cnVlKSxcbiAgICAgICAgcmVkdWNlKFxuICAgICAgICAgICh0ZW5hbnRzOiBJVGVuYW50W10sIHJlc3VsdExpc3Q6IElSZXN1bHRMaXN0PElUZW5hbnQ+KSA9PiBbXG4gICAgICAgICAgICAuLi50ZW5hbnRzLFxuICAgICAgICAgICAgLi4ucmVzdWx0TGlzdC5kYXRhXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbXVxuICAgICAgICApLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh0ZW5hbnRzID0+IHRoaXMudGVuYW50cyQubmV4dCh0ZW5hbnRzKSk7XG4gIH1cblxuICBnZXRDb2x1bW5zKCk6IENvbHVtbltdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnY29tcGFueScsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnVGVuYW50JyksXG4gICAgICAgIHBhdGg6ICdjb21wYW55JyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgIHNvcnRPcmRlcjogJ2FzYycgYXMgU29ydE9yZGVyXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ0lEJyksXG4gICAgICAgIHBhdGg6ICdpZCcsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZG9tYWluJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdEb21haW4nKSxcbiAgICAgICAgcGF0aDogJ2RvbWFpbicsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncGFyZW50JyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdQYXJlbnQgdGVuYW50JyksXG4gICAgICAgIHBhdGg6ICdwYXJlbnQnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NvbnRhY3ROYW1lJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdDb250YWN0IG5hbWUnKSxcbiAgICAgICAgcGF0aDogJ2NvbnRhY3ROYW1lJyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjcmVhdGlvblRpbWUnLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ0NyZWF0ZWQnKSxcbiAgICAgICAgcGF0aDogJ2NyZWF0aW9uVGltZScsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIGZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudDogQ3JlYXRpb25UaW1lRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2V4dGVybmFsUmVmZXJlbmNlJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdFeHRlcm5hbCByZWZlcmVuY2UnKSxcbiAgICAgICAgcGF0aDogJ2N1c3RvbVByb3BlcnRpZXMuZXh0ZXJuYWxSZWZlcmVuY2UnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3N0YXR1cycsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnU3RhdHVzJyksXG4gICAgICAgIHBhdGg6ICdzdGF0dXMnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBmaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQ6IFN0YXR1c0ZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgIHJlc2l6YWJsZTogZmFsc2VcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgZ2V0UGFnaW5hdGlvbigpOiBQYWdpbmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVNpemU6IDEwLFxuICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuICB9XG5cbiAgZ2V0QWN0aW9uQ29udHJvbHMoKTogQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5FZGl0LFxuICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdFZGl0YHRlbmFudGAnKSxcbiAgICAgICAgY2FsbGJhY2s6IHRlbmFudCA9PiB0aGlzLmdvVG9EZXRhaWxzKHRlbmFudClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdhY3RpdmF0ZVRlbmFudEFjdGlvbicsXG4gICAgICAgIGljb246ICdwb3dlci1vZmYnLFxuICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdBY3RpdmF0ZWB0ZW5hbnRgJyksXG4gICAgICAgIGNhbGxiYWNrOiAodGVuYW50OiBJVGVuYW50KSA9PiB0aGlzLmFjdGl2YXRlVGVuYW50KHRlbmFudCksXG4gICAgICAgIHNob3dJZjogKHRlbmFudDogSVRlbmFudCkgPT4gdGhpcy5pc1N1c3BlbmRlZCh0ZW5hbnQpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnc3VzcGVuZFRlbmFudEFjdGlvbicsXG4gICAgICAgIGljb246ICdwb3dlci1vZmYnLFxuICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdTdXNwZW5kYHRlbmFudGAnKSxcbiAgICAgICAgY2FsbGJhY2s6ICh0ZW5hbnQ6IElUZW5hbnQpID0+IHRoaXMuc3VzcGVuZFRlbmFudCh0ZW5hbnQpLFxuICAgICAgICBzaG93SWY6ICh0ZW5hbnQ6IElUZW5hbnQpID0+IHRoaXMuaXNBY3RpdmUodGVuYW50KVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlLFxuICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdEZWxldGVgdGVuYW50YCcpLFxuICAgICAgICBjYWxsYmFjazogdGVuYW50ID0+IHRoaXMuZGVsZXRlKHRlbmFudCksXG4gICAgICAgIHNob3dJZjogKCkgPT4gdGhpcy5pc01hbmFnZW1lbnRUZW5hbnRcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgY3JlYXRlVGVuYW50KCkge1xuICAgIHRoaXMubG9jYXRpb24uZ28oJy90ZW5hbnRzL25ldycpO1xuICB9XG5cbiAgZ29Ub0RldGFpbHModGVuYW50OiBJVGVuYW50KSB7XG4gICAgdGhpcy5sb2NhdGlvbi5nbyhgL3RlbmFudHMvJHt0ZW5hbnQuaWR9YCk7XG4gIH1cblxuICBhc3luYyBhY3RpdmF0ZVRlbmFudCh0ZW5hbnQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhOiBzYXZlZFRlbmFudCB9ID0gYXdhaXQgdGhpcy50ZW5hbnRTZXJ2aWNlLnVwZGF0ZSh7XG4gICAgICAgIGlkOiB0ZW5hbnQuaWQsXG4gICAgICAgIHN0YXR1czogVGVuYW50U3RhdHVzLkFDVElWRVxuICAgICAgfSk7XG4gICAgICBPYmplY3QuYXNzaWduKHRlbmFudCwgc2F2ZWRUZW5hbnQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdUZW5hbnQgYWN0aXZhdGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN1c3BlbmRUZW5hbnQodGVuYW50KSB7XG4gICAgY29uc3QgdGl0bGUgPSBnZXR0ZXh0KCdTdXNwZW5kIHRlbmFudCcpO1xuICAgIGNvbnN0IGNvbmZpcm1hdGlvblRleHQgPSBnZXR0ZXh0KFxuICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gc3VzcGVuZCB0ZW5hbnQgXCJ7eyBjb21wYW55IH19XCIgKElEIFwie3sgaWQgfX1cIikuJ1xuICAgICk7XG4gICAgY29uc3QgcHJvY2VlZCA9IGdldHRleHQoJ0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/Jyk7XG4gICAgY29uc3QgYm9keSA9IFtcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGNvbmZpcm1hdGlvblRleHQsIHtcbiAgICAgICAgY29tcGFueTogdGVuYW50LmNvbXBhbnksXG4gICAgICAgIGlkOiB0ZW5hbnQuaWRcbiAgICAgIH0pLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocHJvY2VlZClcbiAgICBdLmpvaW4oJyAnKTtcbiAgICBjb25zdCBsYWJlbHMgPSB7XG4gICAgICBvazogZ2V0dGV4dCgnU3VzcGVuZGB0ZW5hbnRgJylcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKHRpdGxlLCBib2R5LCBTdGF0dXMuREFOR0VSLCBsYWJlbHMpO1xuICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5wYXNzd29yZFNlcnZpY2UuY29uZmlybVBhc3N3b3JkKCkudG9Qcm9taXNlKCk7XG4gICAgICBpZiAoY29uZmlybWVkID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YTogc2F2ZWRUZW5hbnQgfSA9IGF3YWl0IHRoaXMudGVuYW50U2VydmljZS51cGRhdGUoe1xuICAgICAgICAgIGlkOiB0ZW5hbnQuaWQsXG4gICAgICAgICAgc3RhdHVzOiBUZW5hbnRTdGF0dXMuU1VTUEVOREVEXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKHRlbmFudCwgc2F2ZWRUZW5hbnQpO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ1RlbmFudCBzdXNwZW5kZWQuJykpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlKHRlbmFudCkge1xuICAgIGNvbnN0IHRpdGxlID0gZ2V0dGV4dCgnRGVsZXRlIHRlbmFudCcpO1xuICAgIGNvbnN0IGNvbmZpcm1hdGlvblRleHQgPSBnZXR0ZXh0KFxuICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRlbmFudCBcInt7IGNvbXBhbnkgfX1cIiAoSUQgXCJ7eyBpZCB9fVwiKS4nXG4gICAgKTtcbiAgICBjb25zdCBoaW50ID0gZ2V0dGV4dCgnVGhpcyBvcGVyYXRpb24gaXMgaXJyZXZlcnNpYmxlLicpO1xuICAgIGNvbnN0IHByb2NlZWQgPSBnZXR0ZXh0KCdEbyB5b3Ugd2FudCB0byBwcm9jZWVkPycpO1xuICAgIGNvbnN0IGJvZHkgPSBbXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb25maXJtYXRpb25UZXh0LCB7XG4gICAgICAgIGNvbXBhbnk6IHRlbmFudC5jb21wYW55LFxuICAgICAgICBpZDogdGVuYW50LmlkXG4gICAgICB9KSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGhpbnQpLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocHJvY2VlZClcbiAgICBdLmpvaW4oJyAnKTtcbiAgICBjb25zdCBsYWJlbHMgPSB7XG4gICAgICBvazogZ2V0dGV4dCgnRGVsZXRlYHRlbmFudGAnKVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0odGl0bGUsIGJvZHksIFN0YXR1cy5EQU5HRVIsIGxhYmVscyk7XG4gICAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLnBhc3N3b3JkU2VydmljZS5jb25maXJtUGFzc3dvcmQoKS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChjb25maXJtZWQgPT09IHRydWUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy50ZW5hbnRTZXJ2aWNlLmRlbGV0ZSh0ZW5hbnQpO1xuICAgICAgICBjb25zdCB0ZW5hbnRzV2l0aG91dFJlbW92ZWRPbmUgPSB0aGlzLnRlbmFudHMkLnZhbHVlLmZpbHRlcih0ID0+IHQgIT09IHRlbmFudCk7XG4gICAgICAgIHRoaXMudGVuYW50cyQubmV4dCh0ZW5hbnRzV2l0aG91dFJlbW92ZWRPbmUpO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKFxuICAgICAgICAgIGdldHRleHQoJ1RlbmFudCBpcyBiZWluZyBkZWxldGVkIGluIHRoZSBiYWNrZ3JvdW5kLiBUaGlzIG1pZ2h0IHRha2UgYSB3aGlsZeKApicpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc0FjdGl2ZSh0ZW5hbnQ6IElUZW5hbnQpIHtcbiAgICByZXR1cm4gdGVuYW50LnN0YXR1cyA9PT0gVGVuYW50U3RhdHVzLkFDVElWRTtcbiAgfVxuXG4gIGlzU3VzcGVuZGVkKHRlbmFudDogSVRlbmFudCkge1xuICAgIHJldHVybiB0ZW5hbnQuc3RhdHVzID09PSBUZW5hbnRTdGF0dXMuU1VTUEVOREVEO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWROZXdzbGV0dGVyRW1haWxzKCkge1xuICAgIGNvbnN0IHsgcmVzLCBkYXRhIH0gPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmdldE5ld3NsZXR0ZXJFbWFpbHMoKTtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG4gICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJyk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSAvZmlsZW5hbWU9XCIoLiopXCIvLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKVsxXTtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pO1xuICAgIHNhdmVBcyhibG9iLCBmaWxlbmFtZSk7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGU+XG4gIHt7ICdTdWJ0ZW5hbnRzJyB8IHRyYW5zbGF0ZSB9fVxuPC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gbGFiZWw9XCJ7eyAnVGVuYW50cycgfCB0cmFuc2xhdGUgfX1cIiBpY29uPVwiYzh5LWxheWVyc1wiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbbGFiZWxdPVwiJ1N1YnRlbmFudHMnIHwgdHJhbnNsYXRlXCJcbiAgICBbaWNvbl09XCInYzh5LWxheWVycydcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gKm5nSWY9XCIhIShhcHBTdGF0ZS5zdGF0ZSQgfCBhc3luYykubmV3c2xldHRlclwiIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwie3tcbiAgICAgICdEb3dubG9hZHMgdGhlIGxpc3Qgb2YgZW1haWxzIG9mIHVzZXJzIHN1YnNjcmliZWQgZm9yIG5ld3NsZXR0ZXIgb24gdGhlIGN1cnJlbnQgdGVuYW50IGFuZCBpdHMgc3VidGVuYW50cy4nXG4gICAgICAgIHwgdHJhbnNsYXRlXG4gICAgfX1cIlxuICAgIChjbGljayk9XCJkb3dubG9hZE5ld3NsZXR0ZXJFbWFpbHMoKVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwiZG93bmxvYWRcIj48L2k+XG4gICAge3sgJ0VtYWlsIGFkZHJlc3NlcycgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwie3sgJ0NyZWF0ZSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAoY2xpY2spPVwiY3JlYXRlVGVuYW50KClcIlxuICAgIFtkaXNhYmxlZF09XCIhaXNQZXJtaXR0ZWRUb0NyZWF0ZVRlbmFuYW50XCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICB7eyAnQ3JlYXRlIHRlbmFudCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktaGVscCBzcmM9XCIvdXNlcnMtZ3VpZGUvZW50ZXJwcmlzZS10ZW5hbnQvI21hbmFnaW5nLXRlbmFudHNcIj48L2M4eS1oZWxwPlxuXG48ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBib3JkZXItdG9wIGJvcmRlci1ib3R0b21cIj5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFtsb2FkTW9yZUl0ZW1zTGFiZWxdPVwibG9hZE1vcmVJdGVtc0xhYmVsXCJcbiAgICBbbG9hZGluZ0l0ZW1zTGFiZWxdPVwibG9hZGluZ0l0ZW1zTGFiZWxcIlxuICAgIFtkaXNwbGF5T3B0aW9uc109XCJkaXNwbGF5T3B0aW9uc1wiXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgW3Jvd3NdPVwidGVuYW50cyQgfCBhc3luY1wiXG4gICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgW3Nob3dTZWFyY2hdPVwic2hvd1NlYXJjaFwiXG4gICAgW2FjdGlvbkNvbnRyb2xzXT1cImFjdGlvbkNvbnRyb2xzXCJcbiAgICAob25SZWxvYWQpPVwibG9hZFRlbmFudHMoKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiYzh5LWVtcHR5LXN0YXRlIGotYy1jZW50ZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKHRlbmFudHMkIHwgYXN5bmMpXCI+XG4gICAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodGVuYW50cyQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8aDEgYzh5SWNvbj1cImM4eS1sYXllcnNcIj48L2gxPlxuICAgICAgICAgIDxoMyB0cmFuc2xhdGU+VGhlcmUgYXJlIG5vIHRlbmFudHMgZGVmaW5lZC48L2gzPlxuICAgICAgICAgIDxwIHRyYW5zbGF0ZT5DcmVhdGUgdGhlIGZpcnN0IHRlbmFudC48L3A+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdDcmVhdGUgdGVuYW50JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVUZW5hbnQoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNQZXJtaXR0ZWRUb0NyZWF0ZVRlbmFuYW50XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ0NyZWF0ZSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cCBjOHktZ3VpZGUtZG9jcz5cbiAgICAgICAgICAgIDxzbWFsbCB0cmFuc2xhdGUgbmdOb25CaW5kYWJsZT5cbiAgICAgICAgICAgICAgRmluZCBvdXQgbW9yZSBpbiB0aGVcbiAgICAgICAgICAgICAgPGEgYzh5LWd1aWRlLWhyZWY9XCJ1c2Vycy1ndWlkZS9lbnRlcnByaXNlLXRlbmFudC8jbWFuYWdpbmctdGVuYW50c1wiPlxuICAgICAgICAgICAgICAgIFVzZXIgZ3VpZGVgS0VFUF9PUklHSU5BTGBcbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAuXG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih0ZW5hbnRzJCB8IGFzeW5jKT8ubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8aDEgY2xhc3M9XCJjOHktaWNvbi1kdW9jb2xvclwiIGM4eUljb249XCJzZWFyY2hcIj48L2gxPlxuICAgICAgICAgIDxoMyB0cmFuc2xhdGU+Tm8gdGVuYW50cyB0byBkaXNwbGF5LjwvaDM+XG4gICAgICAgICAgPHAgdHJhbnNsYXRlPlJlZmluZSB5b3VyIHNlYXJjaCB0ZXJtcyBvciBjaGVjayB5b3VyIHNwZWxsaW5nLjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJjb21wYW55XCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfX1cIj5cbiAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy90ZW5hbnRzJywgY29udGV4dC5pdGVtLmlkXVwiPnt7IGNvbnRleHQudmFsdWUgfX08L2E+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJwYXJlbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmM4eUNlbGxSZW5kZXJlckRlZj1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxzcGFuIHRpdGxlPVwie3sgY29udGV4dC52YWx1ZSB8fCBjdXJyZW50VGVuYW50Lm5hbWUgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHx8IGN1cnJlbnRUZW5hbnQubmFtZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwiY3JlYXRpb25UaW1lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBjOHlEYXRlIH19XCI+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8IGM4eURhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cInN0YXR1c1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cImNvbnRleHQuaXRlbS5zdGF0dXMgPT09IFRlbmFudFN0YXR1cy5BQ1RJVkVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ0FjdGl2ZWB0ZW5hbnRgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwiY2hlY2stY2lyY2xlXCIgY2xhc3M9XCJ0ZXh0LXN1Y2Nlc3NcIj48L2k+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cImNvbnRleHQuaXRlbS5zdGF0dXMgPT09IFRlbmFudFN0YXR1cy5TVVNQRU5ERURcIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ1N1c3BlbmRlZGB0ZW5hbnRgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwiYmFuXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjwvaT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuICA8L2M4eS1kYXRhLWdyaWQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { downgradeInjectable } from '@angular/upgrade/static';
|
|
2
|
-
import { AlertService, AppStateService, CachedLocaleDictionaryService, DocsService, FilesService, GainsightService, HeaderService, ModalService, PasswordService, UserMenuService } from '@c8y/ngx-components';
|
|
2
|
+
import { AlertService, AppStateService, CachedLocaleDictionaryService, DocsService, FilesService, GainsightService, GlobalConfigService, HeaderService, ModalService, PasswordService, UserMenuService } from '@c8y/ngx-components';
|
|
3
3
|
import { ApiService } from '@c8y/ngx-components/api';
|
|
4
4
|
import { DeviceTypeDetailEditedService } from '@c8y/ngx-components/device-protocols';
|
|
5
5
|
import { TranslateService } from '@ngx-translate/core';
|
|
@@ -22,6 +22,7 @@ export const cachedLocaleDictionaryService = downgradeInjectable(CachedLocaleDic
|
|
|
22
22
|
export const serverMessagesService = downgradeInjectable(ServerMessagesService);
|
|
23
23
|
export const modalService = downgradeInjectable(ModalService);
|
|
24
24
|
export const gainsightService = downgradeInjectable(GainsightService);
|
|
25
|
+
export const globalConfigService = downgradeInjectable(GlobalConfigService);
|
|
25
26
|
export const filesService = downgradeInjectable(FilesService);
|
|
26
27
|
export const deviceTypeDetailEditedService = downgradeInjectable(DeviceTypeDetailEditedService);
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmdyYWRlZC5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3VwZ3JhZGUvbmcxL2Rvd25ncmFkZWQuc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUNMLFlBQVksRUFDWixlQUFlLEVBQ2YsNkJBQTZCLEVBQzdCLFdBQVcsRUFDWCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGVBQWUsRUFDZixlQUFlLEVBQ2hCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVqRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3hFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDaEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDMUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLG1CQUFtQixDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFDaEcsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUNoRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDOUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN0RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxtQkFBbUIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZG93bmdyYWRlSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL3VwZ3JhZGUvc3RhdGljJztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBDYWNoZWRMb2NhbGVEaWN0aW9uYXJ5U2VydmljZSxcbiAgRG9jc1NlcnZpY2UsXG4gIEZpbGVzU2VydmljZSxcbiAgR2FpbnNpZ2h0U2VydmljZSxcbiAgR2xvYmFsQ29uZmlnU2VydmljZSxcbiAgSGVhZGVyU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBQYXNzd29yZFNlcnZpY2UsXG4gIFVzZXJNZW51U2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FwaSc7XG5pbXBvcnQgeyBEZXZpY2VUeXBlRGV0YWlsRWRpdGVkU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGV2aWNlLXByb3RvY29scyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBYnNvbHV0ZURhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vYWJzb2x1dGUtZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhCcmlkZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC1icmlkZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCcmlkZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vYnJpZGdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmVyTWVzc2FnZXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2ZXJNZXNzYWdlcy5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IGFic29sdXRlRGF0ZVNlcnZpY2UgPSBkb3duZ3JhZGVJbmplY3RhYmxlKEFic29sdXRlRGF0ZVNlcnZpY2UpO1xuZXhwb3J0IGNvbnN0IGJyaWRnZVNlcnZpY2UgPSBkb3duZ3JhZGVJbmplY3RhYmxlKEJyaWRnZVNlcnZpY2UpO1xuZXhwb3J0IGNvbnN0IGF1dGhCcmlkZ2VTZXJ2aWNlID0gZG93bmdyYWRlSW5qZWN0YWJsZShBdXRoQnJpZGdlU2VydmljZSk7XG5leHBvcnQgY29uc3QgYXBwU3RhdGVTZXJ2aWNlID0gZG93bmdyYWRlSW5qZWN0YWJsZShBcHBTdGF0ZVNlcnZpY2UpO1xuZXhwb3J0IGNvbnN0IGhlYWRlclNlcnZpY2UgPSBkb3duZ3JhZGVJbmplY3RhYmxlKEhlYWRlclNlcnZpY2UpO1xuZXhwb3J0IGNvbnN0IGFsZXJ0c1NlcnZpY2UgPSBkb3duZ3JhZGVJbmplY3RhYmxlKEFsZXJ0U2VydmljZSk7XG5leHBvcnQgY29uc3QgdXNlck1lbnVTZXJ2aWNlID0gZG93bmdyYWRlSW5qZWN0YWJsZShVc2VyTWVudVNlcnZpY2UpO1xuZXhwb3J0IGNvbnN0IGFwaVNlcnZpY2UgPSBkb3duZ3JhZGVJbmplY3RhYmxlKEFwaVNlcnZpY2UpO1xuZXhwb3J0IGNvbnN0IGRvY3NTZXJ2aWNlID0gZG93bmdyYWRlSW5qZWN0YWJsZShEb2NzU2VydmljZSk7XG5leHBvcnQgY29uc3QgcGFzc3dvcmRTZXJ2aWNlID0gZG93bmdyYWRlSW5qZWN0YWJsZShQYXNzd29yZFNlcnZpY2UpO1xuZXhwb3J0IGNvbnN0IHRyYW5zbGF0ZVNlcnZpY2UgPSBkb3duZ3JhZGVJbmplY3RhYmxlKFRyYW5zbGF0ZVNlcnZpY2UpO1xuZXhwb3J0IGNvbnN0IGNhY2hlZExvY2FsZURpY3Rpb25hcnlTZXJ2aWNlID0gZG93bmdyYWRlSW5qZWN0YWJsZShDYWNoZWRMb2NhbGVEaWN0aW9uYXJ5U2VydmljZSk7XG5leHBvcnQgY29uc3Qgc2VydmVyTWVzc2FnZXNTZXJ2aWNlID0gZG93bmdyYWRlSW5qZWN0YWJsZShTZXJ2ZXJNZXNzYWdlc1NlcnZpY2UpO1xuZXhwb3J0IGNvbnN0IG1vZGFsU2VydmljZSA9IGRvd25ncmFkZUluamVjdGFibGUoTW9kYWxTZXJ2aWNlKTtcbmV4cG9ydCBjb25zdCBnYWluc2lnaHRTZXJ2aWNlID0gZG93bmdyYWRlSW5qZWN0YWJsZShHYWluc2lnaHRTZXJ2aWNlKTtcbmV4cG9ydCBjb25zdCBnbG9iYWxDb25maWdTZXJ2aWNlID0gZG93bmdyYWRlSW5qZWN0YWJsZShHbG9iYWxDb25maWdTZXJ2aWNlKTtcbmV4cG9ydCBjb25zdCBmaWxlc1NlcnZpY2UgPSBkb3duZ3JhZGVJbmplY3RhYmxlKEZpbGVzU2VydmljZSk7XG5leHBvcnQgY29uc3QgZGV2aWNlVHlwZURldGFpbEVkaXRlZFNlcnZpY2UgPSBkb3duZ3JhZGVJbmplY3RhYmxlKERldmljZVR5cGVEZXRhaWxFZGl0ZWRTZXJ2aWNlKTtcbiJdfQ==
|
|
@@ -4,7 +4,7 @@ import { QueriesUtil } from '@c8y/client';
|
|
|
4
4
|
import * as angular from 'angular';
|
|
5
5
|
import { c8yAlertDecorator } from './alert.decorator';
|
|
6
6
|
import { appLogsAutoRefreshComponent, bootstrapComponent, dataGridComponent, datapointSelectionListComponent, emptyStateComponent, helpComponent, highlightComponent, loadingComponent, rangeDisplayComponent, userTotpComponent } from './downgraded.components';
|
|
7
|
-
import { absoluteDateService, alertsService, apiService, appStateService, authBridgeService, bridgeService, cachedLocaleDictionaryService, deviceTypeDetailEditedService, docsService, filesService, gainsightService, headerService, modalService, passwordService, serverMessagesService, translateService, userMenuService } from './downgraded.services';
|
|
7
|
+
import { absoluteDateService, alertsService, apiService, appStateService, authBridgeService, bridgeService, cachedLocaleDictionaryService, deviceTypeDetailEditedService, docsService, filesService, gainsightService, globalConfigService, headerService, modalService, passwordService, serverMessagesService, translateService, userMenuService } from './downgraded.services';
|
|
8
8
|
import { gettextCatalogDecorator } from './gettextCatalog.decorator';
|
|
9
9
|
import { groupTypesHierarchyNavigatorDecorator } from './groupsHierarchyNavigator.decorator';
|
|
10
10
|
import { c8yNg1HttpInterceptor } from './http.interceptor';
|
|
@@ -45,7 +45,8 @@ angular
|
|
|
45
45
|
.service('c8yPasswordConfirm', passwordService)
|
|
46
46
|
.service('c8yModalService', modalService)
|
|
47
47
|
.service('c8yGainsightService', gainsightService)
|
|
48
|
-
.service('c8yFilesService', filesService)
|
|
48
|
+
.service('c8yFilesService', filesService)
|
|
49
|
+
.service('c8yGlobalConfigService', globalConfigService);
|
|
49
50
|
angular
|
|
50
51
|
.module('c8y.ui')
|
|
51
52
|
.filter('absoluteDate', absoluteDateService)
|
|
@@ -67,4 +68,4 @@ angular
|
|
|
67
68
|
.factory('ngZone', downgradeInjectable(NgZone))
|
|
68
69
|
.factory('c8yDeviceTypeDetailEdited', deviceTypeDetailEditedService);
|
|
69
70
|
export const ng1Modules = ['app', NAME];
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi91cGdyYWRlL25nMS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLCtCQUErQixFQUMvQixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNsQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLFVBQVUsRUFDVixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYiw2QkFBNkIsRUFDN0IsNkJBQTZCLEVBQzdCLFdBQVcsRUFDWCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDaEIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FB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Q3ZFLFNBQVMsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUM7S0FDN0MsT0FBTyxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQztLQUN6QyxPQUFPLENBQUMsa0NBQWtDLEVBQUUsNkJBQTZCLENBQUM7S0FDMUUsU0FBUyxDQUFDLGdCQUFnQixFQUFFLHVCQUF1QixDQUFDO0tBQ3BELE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxxQkFBcUIsQ0FBQztLQUNuRCxPQUFPLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzlDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO0FBRXZFLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZG93bmdyYWRlSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL3VwZ3JhZGUvc3RhdGljJztcbmltcG9ydCB7IFF1ZXJpZXNVdGlsIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0ICogYXMgYW5ndWxhciBmcm9tICdhbmd1bGFyJztcbmltcG9ydCB7IGM4eUFsZXJ0RGVjb3JhdG9yIH0gZnJvbSAnLi9hbGVydC5kZWNvcmF0b3InO1xuaW1wb3J0IHtcbiAgYXBwTG9nc0F1dG9SZWZyZXNoQ29tcG9uZW50LFxuICBib290c3RyYXBDb21wb25lbnQsXG4gIGRhdGFHcmlkQ29tcG9uZW50LFxuICBkYXRhcG9pbnRTZWxlY3Rpb25MaXN0Q29tcG9uZW50LFxuICBlbXB0eVN0YXRlQ29tcG9uZW50LFxuICBoZWxwQ29tcG9uZW50LFxuICBoaWdobGlnaHRDb21wb25lbnQsXG4gIGxvYWRpbmdDb21wb25lbnQsXG4gIHJhbmdlRGlzcGxheUNvbXBvbmVudCxcbiAgdXNlclRvdHBDb21wb25lbnRcbn0gZnJvbSAnLi9kb3duZ3JhZGVkLmNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgYWJzb2x1dGVEYXRlU2VydmljZSxcbiAgYWxlcnRzU2VydmljZSxcbiAgYXBpU2VydmljZSxcbiAgYXBwU3RhdGVTZXJ2aWNlLFxuICBhdXRoQnJpZGdlU2VydmljZSxcbiAgYnJpZGdlU2VydmljZSxcbiAgY2FjaGVkTG9jYWxlRGljdGlvbmFyeVNlcnZpY2UsXG4gIGRldmljZVR5cGVEZXRhaWxFZGl0ZWRTZXJ2aWNlLFxuICBkb2NzU2VydmljZSxcbiAgZmlsZXNTZXJ2aWNlLFxuICBnYWluc2lnaHRTZXJ2aWNlLFxuICBnbG9iYWxDb25maWdTZXJ2aWNlLFxuICBoZWFkZXJTZXJ2aWNlLFxuICBtb2RhbFNlcnZpY2UsXG4gIHBhc3N3b3JkU2VydmljZSxcbiAgc2VydmVyTWVzc2FnZXNTZXJ2aWNlLFxuICB0cmFuc2xhdGVTZXJ2aWNlLFxuICB1c2VyTWVudVNlcnZpY2Vcbn0gZnJvbSAnLi9kb3duZ3JhZGVkLnNlcnZpY2VzJztcbmltcG9ydCB7IGdldHRleHRDYXRhbG9nRGVjb3JhdG9yIH0gZnJvbSAnLi9nZXR0ZXh0Q2F0YWxvZy5kZWNvcmF0b3InO1xuaW1wb3J0IHsgZ3JvdXBUeXBlc0hpZXJhcmNoeU5hdmlnYXRvckRlY29yYXRvciB9IGZyb20gJy4vZ3JvdXBzSGllcmFyY2h5TmF2aWdhdG9yLmRlY29yYXRvcic7XG5pbXBvcnQgeyBjOHlOZzFIdHRwSW50ZXJjZXB0b3IgfSBmcm9tICcuL2h0dHAuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgYzh5TmF2aWdhdG9yUHJvdmlkZXIgfSBmcm9tICcuL25hdmlnYXRvci5wcm92aWRlcic7XG5pbXBvcnQgeyByb290Q29tcG9uZW50IH0gZnJvbSAnLi9yb290LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjOHlUaXRsZURlY29yYXRvciB9IGZyb20gJy4vdGl0bGUuZGVjb3JhdG9yJztcbmltcG9ydCB7IGM4eVZpZXdzUHJvdmlkZXIgfSBmcm9tICcuL3ZpZXdzLnByb3ZpZGVyJztcblxuY29uc3QgTkFNRSA9ICdjOHkudXBncmFkZSc7XG4od2luZG93IGFzIGFueSkucHJldmVudE5nMUJvb3RzdHJhcCA9IHRydWU7XG5cbmFuZ3VsYXJcbiAgLm1vZHVsZShOQU1FLCBbXSlcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9ubHktYXJyb3ctZnVuY3Rpb25zXG4gIC5jb25maWcoZnVuY3Rpb24gKCRodHRwUHJvdmlkZXIpIHtcbiAgICAnbmdJbmplY3QnO1xuXG4gICAgY29uc3QgbmcxSW50ZXJjZXB0b3JJbmRleCA9ICRodHRwUHJvdmlkZXIuaW50ZXJjZXB0b3JzLmluZGV4T2YoJ2M4eUxvYWRpbmdJbmRpY2F0b3InKTtcbiAgICBpZiAobmcxSW50ZXJjZXB0b3JJbmRleCA+IC0xKSB7XG4gICAgICAkaHR0cFByb3ZpZGVyLmludGVyY2VwdG9ycy5zcGxpY2UobmcxSW50ZXJjZXB0b3JJbmRleCwgMSk7XG4gICAgfVxuICAgICRodHRwUHJvdmlkZXIuaW50ZXJjZXB0b3JzLnB1c2goYzh5TmcxSHR0cEludGVyY2VwdG9yKTtcbiAgfSlcbiAgLmNvbXBvbmVudCgnYzh5VWlSb290Jywgcm9vdENvbXBvbmVudClcbiAgLmRpcmVjdGl2ZSgnYzh5Qm9vdHN0cmFwJywgYm9vdHN0cmFwQ29tcG9uZW50KVxuICAuZmFjdG9yeSgnYzh5QnJpZGdlU2VydmljZScsIGJyaWRnZVNlcnZpY2UpXG4gIC5mYWN0b3J5KCdjOHlBdXRoQnJpZGdlU2VydmljZScsIGF1dGhCcmlkZ2VTZXJ2aWNlKVxuICAuZmFjdG9yeSgnYzh5QXBwU3RhdGVTZXJ2aWNlJywgYXBwU3RhdGVTZXJ2aWNlKVxuICAuZmFjdG9yeSgnYzh5SGVhZGVyU2VydmljZScsIGhlYWRlclNlcnZpY2UpXG4gIC5mYWN0b3J5KCdjOHlVc2VyTWVudVNlcnZpY2UnLCB1c2VyTWVudVNlcnZpY2UpXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAuc2VydmljZSgnYzh5UXVlcmllc1V0aWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVyaWVzVXRpbCgpO1xuICB9KVxuICAuZGVjb3JhdG9yKCdjOHlUaXRsZScsIGM4eVRpdGxlRGVjb3JhdG9yKVxuICAuZmFjdG9yeSgnYzh5QWxlcnQnLCBhbGVydHNTZXJ2aWNlKVxuICAuZGVjb3JhdG9yKCdjOHlBbGVydCcsIGM4eUFsZXJ0RGVjb3JhdG9yKVxuICAuZGVjb3JhdG9yKCdncm91cFR5cGVzSGllcmFyY2h5TmF2aWdhdG9yJywgZ3JvdXBUeXBlc0hpZXJhcmNoeU5hdmlnYXRvckRlY29yYXRvcikgLy8gcHJldmVudHMgbG9hZGluZyB0aGUgZ3JvdXBzXG4gIC5mYWN0b3J5KCdjOHlBcGlTZXJ2aWNlJywgYXBpU2VydmljZSlcbiAgLmZhY3RvcnkoJ2M4eURvY3MnLCBkb2NzU2VydmljZSlcbiAgLnNlcnZpY2UoJ2M4eVBhc3N3b3JkQ29uZmlybScsIHBhc3N3b3JkU2VydmljZSlcbiAgLnNlcnZpY2UoJ2M4eU1vZGFsU2VydmljZScsIG1vZGFsU2VydmljZSlcbiAgLnNlcnZpY2UoJ2M4eUdhaW5zaWdodFNlcnZpY2UnLCBnYWluc2lnaHRTZXJ2aWNlKVxuICAuc2VydmljZSgnYzh5RmlsZXNTZXJ2aWNlJywgZmlsZXNTZXJ2aWNlKVxuICAuc2VydmljZSgnYzh5R2xvYmFsQ29uZmlnU2VydmljZScsIGdsb2JhbENvbmZpZ1NlcnZpY2UpO1xuYW5ndWxhclxuICAubW9kdWxlKCdjOHkudWknKVxuICAuZmlsdGVyKCdhYnNvbHV0ZURhdGUnLCBhYnNvbHV0ZURhdGVTZXJ2aWNlKVxuICAuZGlyZWN0aXZlKCdjOHlMb2FkaW5nJywgbG9hZGluZ0NvbXBvbmVudClcbiAgLnByb3ZpZGVyKCdjOHlOYXZpZ2F0b3InLCBjOHlOYXZpZ2F0b3JQcm92aWRlcilcbiAgLnByb3ZpZGVyKCdjOHlWaWV3cycsIGM4eVZpZXdzUHJvdmlkZXIpXG4gIC5kaXJlY3RpdmUoJ2M4eVVzZXJUb3RwUmV2b2tlJywgdXNlclRvdHBDb21wb25lbnQpXG4gIC5kaXJlY3RpdmUoJ2M4eUFwcExvZ3NBdXRvUmVmcmVzaCcsIGFwcExvZ3NBdXRvUmVmcmVzaENvbXBvbmVudClcbiAgLmRpcmVjdGl2ZSgnYzh5RGF0YUdyaWQnLCBkYXRhR3JpZENvbXBvbmVudClcbiAgLmRpcmVjdGl2ZSgnYzh5UmFuZ2VEaXNwbGF5JywgcmFuZ2VEaXNwbGF5Q29tcG9uZW50KVxuICAuZGlyZWN0aXZlKCdjOHlIZWxwJywgaGVscENvbXBvbmVudClcbiAgLmRpcmVjdGl2ZSgnYzh5VWlFbXB0eVN0YXRlJywgZW1wdHlTdGF0ZUNvbXBvbmVudClcbiAgLmRpcmVjdGl2ZSgnYzh5RGF0YXBvaW50U2VsZWN0aW9uTGlzdCcsIGRhdGFwb2ludFNlbGVjdGlvbkxpc3RDb21wb25lbnQpXG4gIC5kaXJlY3RpdmUoJ2M4eUhpZ2hsaWdodCcsIGhpZ2hsaWdodENvbXBvbmVudClcbiAgLmZhY3RvcnkoJ2M4eVRyYW5zbGF0ZScsIHRyYW5zbGF0ZVNlcnZpY2UpXG4gIC5mYWN0b3J5KCdjOHlDYWNoZWRMb2NhbGVEaWN0aW9uYXJ5U2VydmljZScsIGNhY2hlZExvY2FsZURpY3Rpb25hcnlTZXJ2aWNlKVxuICAuZGVjb3JhdG9yKCdnZXR0ZXh0Q2F0YWxvZycsIGdldHRleHRDYXRhbG9nRGVjb3JhdG9yKVxuICAuZmFjdG9yeSgnYzh5U2VydmVyTWVzc2FnZXMnLCBzZXJ2ZXJNZXNzYWdlc1NlcnZpY2UpXG4gIC5mYWN0b3J5KCduZ1pvbmUnLCBkb3duZ3JhZGVJbmplY3RhYmxlKE5nWm9uZSkpXG4gIC5mYWN0b3J5KCdjOHlEZXZpY2VUeXBlRGV0YWlsRWRpdGVkJywgZGV2aWNlVHlwZURldGFpbEVkaXRlZFNlcnZpY2UpO1xuXG5leHBvcnQgY29uc3QgbmcxTW9kdWxlcyA9IFsnYXBwJywgTkFNRV07XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __awaiter, __rest } from 'tslib';
|
|
2
2
|
import * as i3 from '@c8y/ngx-components';
|
|
3
|
-
import { NavigatorNode, gettext, DeviceStatusComponent, GroupFragment, CoreModule, CommonModule, SearchModule, ModalModule, DeviceStatusModule, ModalService, hookNavigator } from '@c8y/ngx-components';
|
|
3
|
+
import { NavigatorNode, gettext, DeviceStatusComponent, GroupFragment, Permissions, CoreModule, CommonModule, SearchModule, ModalModule, DeviceStatusModule, ModalService, hookNavigator } from '@c8y/ngx-components';
|
|
4
4
|
import { get, debounce } from 'lodash-es';
|
|
5
5
|
import { BehaviorSubject, Subject, empty } from 'rxjs';
|
|
6
6
|
import * as i0 from '@angular/core';
|
|
@@ -524,7 +524,10 @@ class AssetNodeService {
|
|
|
524
524
|
};
|
|
525
525
|
const groupFilter = Object.assign(Object.assign({}, defaultFilter), customFilter);
|
|
526
526
|
// due to BE performance limitations we do not allow filtering and sorting for a user without inventory roles
|
|
527
|
-
if (!this.user.
|
|
527
|
+
if (!this.user.hasAnyRole(this.appState.currentUser.value, [
|
|
528
|
+
Permissions.ROLE_INVENTORY_READ,
|
|
529
|
+
Permissions.ROLE_MANAGED_OBJECT_READ
|
|
530
|
+
])) {
|
|
528
531
|
delete groupFilter.query;
|
|
529
532
|
Object.assign(groupFilter, {
|
|
530
533
|
fragmentType: GroupFragment.groupFragmentType,
|
|
@@ -657,7 +660,11 @@ class AssetNodeService {
|
|
|
657
660
|
* @param dropOnRoot Is the drop performed on the root node
|
|
658
661
|
*/
|
|
659
662
|
canDropNode(dropOnRoot) {
|
|
660
|
-
return (!dropOnRoot ||
|
|
663
|
+
return (!dropOnRoot ||
|
|
664
|
+
this.user.hasAnyRole(this.appState.currentUser.value, [
|
|
665
|
+
Permissions.ROLE_INVENTORY_ADMIN,
|
|
666
|
+
Permissions.ROLE_MANAGED_OBJECT_ADMIN
|
|
667
|
+
]));
|
|
661
668
|
}
|
|
662
669
|
/**
|
|
663
670
|
* There could be multiple breadcrumbs for devices,
|