@c8y/ngx-components 1017.0.183 → 1017.0.185

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.
@@ -14,8 +14,8 @@ export const documentationItems = [
14
14
  },
15
15
  {
16
16
  icon: 'c8y-device-management',
17
- label: gettext('Device integration tutorial`KEEP_ORIGINAL`'),
18
- url: '/device-tutorials/tutorials-introduction',
17
+ label: gettext('Device integration guide`KEEP_ORIGINAL`'),
18
+ url: '/device-integration/introduction',
19
19
  type: 'doc'
20
20
  },
21
21
  {
@@ -30,12 +30,6 @@ export const documentationItems = [
30
30
  url: '/microservice-sdk/introduction',
31
31
  type: 'doc'
32
32
  },
33
- {
34
- icon: 'c8y-tools',
35
- label: gettext('Device SDK guide`KEEP_ORIGINAL`'),
36
- url: '/device-sdk/introduction',
37
- type: 'doc'
38
- },
39
33
  {
40
34
  icon: 'c8y-smart-rest',
41
35
  label: gettext('Web SDK guide`KEEP_ORIGINAL`'),
@@ -61,4 +55,4 @@ export const documentationItems = [
61
55
  type: 'doc'
62
56
  }
63
57
  ];
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdHMuaXRlbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2RvY3MvZGVmYXVsdHMuaXRlbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDO1FBQ0UsSUFBSSxFQUFFLGNBQWM7UUFDcEIsS0FBSyxFQUFFLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQztRQUMvQyxHQUFHLEVBQUUsd0JBQXdCO1FBQzdCLElBQUksRUFBRSxLQUFLO0tBQ1o7SUFDRDtRQUNFLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSxPQUFPLENBQUMsMkJBQTJCLENBQUM7UUFDM0MsR0FBRyxFQUFFLDhCQUE4QjtRQUNuQyxJQUFJLEVBQUUsS0FBSztLQUNaO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsdUJBQXVCO1FBQzdCLEtBQUssRUFBRSxPQUFPLENBQUMsNENBQTRDLENBQUM7UUFDNUQsR0FBRyxFQUFFLDBDQUEwQztRQUMvQyxJQUFJLEVBQUUsS0FBSztLQUNaO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsVUFBVTtRQUNoQixLQUFLLEVBQUUsT0FBTyxDQUFDLG9DQUFvQyxDQUFDO1FBQ3BELEdBQUcsRUFBRSxnQkFBZ0I7UUFDckIsSUFBSSxFQUFFLEtBQUs7S0FDWjtJQUNEO1FBQ0UsSUFBSSxFQUFFLFdBQVc7UUFDakIsS0FBSyxFQUFFLE9BQU8sQ0FBQyx1Q0FBdUMsQ0FBQztRQUN2RCxHQUFHLEVBQUUsZ0NBQWdDO1FBQ3JDLElBQUksRUFBRSxLQUFLO0tBQ1o7SUFDRDtRQUNFLElBQUksRUFBRSxXQUFXO1FBQ2pCLEtBQUssRUFBRSxPQUFPLENBQUMsaUNBQWlDLENBQUM7UUFDakQsR0FBRyxFQUFFLDBCQUEwQjtRQUMvQixJQUFJLEVBQUUsS0FBSztLQUNaO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLEtBQUssRUFBRSxPQUFPLENBQUMsOEJBQThCLENBQUM7UUFDOUMsR0FBRyxFQUFFLG1CQUFtQjtRQUN4QixJQUFJLEVBQUUsS0FBSztLQUNaO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLEtBQUssRUFBRSxPQUFPLENBQUMsMENBQTBDLENBQUM7UUFDMUQsR0FBRyxFQUFFLHFCQUFxQjtRQUMxQixJQUFJLEVBQUUsS0FBSztLQUNaO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsY0FBYztRQUNwQixLQUFLLEVBQUUsT0FBTyxDQUFDLGdDQUFnQyxDQUFDO1FBQ2hELEdBQUcsRUFBRSxnQ0FBZ0M7UUFDckMsSUFBSSxFQUFFLEtBQUs7S0FDWjtJQUNEO1FBQ0UsSUFBSSxFQUFFLE9BQU87UUFDYixLQUFLLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUMvQixHQUFHLEVBQUUsNkNBQTZDO1FBQ2xELElBQUksRUFBRSxLQUFLO0tBQ1o7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5cbmV4cG9ydCBjb25zdCBkb2N1bWVudGF0aW9uSXRlbXMgPSBbXG4gIHtcbiAgICBpY29uOiAnYzh5LWM4eS1kYXRhJywgLy8gZG91YmxlIGM4eS0gaXMgY29ycmVjdCFcbiAgICBsYWJlbDogZ2V0dGV4dCgnQ29uY2VwdHMgZ3VpZGVgS0VFUF9PUklHSU5BTGAnKSxcbiAgICB1cmw6ICcvY29uY2VwdHMvaW50cm9kdWN0aW9uJyxcbiAgICB0eXBlOiAnZG9jJ1xuICB9LFxuICB7XG4gICAgaWNvbjogJ2M4eS11c2VyJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnVXNlciBndWlkZWBLRUVQX09SSUdJTkFMYCcpLFxuICAgIHVybDogJy91c2Vycy1ndWlkZS9nZXR0aW5nLXN0YXJ0ZWQnLFxuICAgIHR5cGU6ICdkb2MnXG4gIH0sXG4gIHtcbiAgICBpY29uOiAnYzh5LWRldmljZS1tYW5hZ2VtZW50JyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnRGV2aWNlIGludGVncmF0aW9uIHR1dG9yaWFsYEtFRVBfT1JJR0lOQUxgJyksXG4gICAgdXJsOiAnL2RldmljZS10dXRvcmlhbHMvdHV0b3JpYWxzLWludHJvZHVjdGlvbicsXG4gICAgdHlwZTogJ2RvYydcbiAgfSxcbiAge1xuICAgIGljb246ICdjOHktYm9vaycsXG4gICAgbGFiZWw6IGdldHRleHQoJ0N1bXVsb2NpdHkgSW9UIEVkZ2VgS0VFUF9PUklHSU5BTGAnKSxcbiAgICB1cmw6ICcvZWRnZS9vdmVydmlldycsXG4gICAgdHlwZTogJ2RvYydcbiAgfSxcbiAge1xuICAgIGljb246ICdjOHktdG9vbHMnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdNaWNyb3NlcnZpY2UgU0RLIGd1aWRlYEtFRVBfT1JJR0lOQUxgJyksXG4gICAgdXJsOiAnL21pY3Jvc2VydmljZS1zZGsvaW50cm9kdWN0aW9uJyxcbiAgICB0eXBlOiAnZG9jJ1xuICB9LFxuICB7XG4gICAgaWNvbjogJ2M4eS10b29scycsXG4gICAgbGFiZWw6IGdldHRleHQoJ0RldmljZSBTREsgZ3VpZGVgS0VFUF9PUklHSU5BTGAnKSxcbiAgICB1cmw6ICcvZGV2aWNlLXNkay9pbnRyb2R1Y3Rpb24nLFxuICAgIHR5cGU6ICdkb2MnXG4gIH0sXG4gIHtcbiAgICBpY29uOiAnYzh5LXNtYXJ0LXJlc3QnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdXZWIgU0RLIGd1aWRlYEtFRVBfT1JJR0lOQUxgJyksXG4gICAgdXJsOiAnL3dlYi9pbnRyb2R1Y3Rpb24nLFxuICAgIHR5cGU6ICdkb2MnXG4gIH0sXG4gIHtcbiAgICBpY29uOiAnYzh5LWRhdGEtZXhwbG9yZXInLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdTdHJlYW1pbmcgYW5hbHl0aWNzIGd1aWRlYEtFRVBfT1JJR0lOQUxgJyksXG4gICAgdXJsOiAnL2FwYW1hL2ludHJvZHVjdGlvbicsXG4gICAgdHlwZTogJ2RvYydcbiAgfSxcbiAge1xuICAgIGljb246ICdjOHktYm9va21hcmsnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdSZWZlcmVuY2UgZ3VpZGVgS0VFUF9PUklHSU5BTGAnKSxcbiAgICB1cmw6ICcvcmVmZXJlbmNlL3Jlc3QtaW1wbGVtZW50YXRpb24nLFxuICAgIHR5cGU6ICdkb2MnXG4gIH0sXG4gIHtcbiAgICBpY29uOiAnZ2F2ZWwnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdMZWdhbCBub3RpY2VzJyksXG4gICAgdXJsOiAnaHR0cHM6Ly9kb2N1bWVudGF0aW9uLnNvZnR3YXJlYWcuY29tL2xlZ2FsLycsXG4gICAgdHlwZTogJ2RvYydcbiAgfVxuXTtcbiJdfQ==
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdHMuaXRlbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2RvY3MvZGVmYXVsdHMuaXRlbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDO1FBQ0UsSUFBSSxFQUFFLGNBQWM7UUFDcEIsS0FBSyxFQUFFLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQztRQUMvQyxHQUFHLEVBQUUsd0JBQXdCO1FBQzdCLElBQUksRUFBRSxLQUFLO0tBQ1o7SUFDRDtRQUNFLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSxPQUFPLENBQUMsMkJBQTJCLENBQUM7UUFDM0MsR0FBRyxFQUFFLDhCQUE4QjtRQUNuQyxJQUFJLEVBQUUsS0FBSztLQUNaO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsdUJBQXVCO1FBQzdCLEtBQUssRUFBRSxPQUFPLENBQUMseUNBQXlDLENBQUM7UUFDekQsR0FBRyxFQUFFLGtDQUFrQztRQUN2QyxJQUFJLEVBQUUsS0FBSztLQUNaO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsVUFBVTtRQUNoQixLQUFLLEVBQUUsT0FBTyxDQUFDLG9DQUFvQyxDQUFDO1FBQ3BELEdBQUcsRUFBRSxnQkFBZ0I7UUFDckIsSUFBSSxFQUFFLEtBQUs7S0FDWjtJQUNEO1FBQ0UsSUFBSSxFQUFFLFdBQVc7UUFDakIsS0FBSyxFQUFFLE9BQU8sQ0FBQyx1Q0FBdUMsQ0FBQztRQUN2RCxHQUFHLEVBQUUsZ0NBQWdDO1FBQ3JDLElBQUksRUFBRSxLQUFLO0tBQ1o7SUFDRDtRQUNFLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQztRQUM5QyxHQUFHLEVBQUUsbUJBQW1CO1FBQ3hCLElBQUksRUFBRSxLQUFLO0tBQ1o7SUFDRDtRQUNFLElBQUksRUFBRSxtQkFBbUI7UUFDekIsS0FBSyxFQUFFLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQztRQUMxRCxHQUFHLEVBQUUscUJBQXFCO1FBQzFCLElBQUksRUFBRSxLQUFLO0tBQ1o7SUFDRDtRQUNFLElBQUksRUFBRSxjQUFjO1FBQ3BCLEtBQUssRUFBRSxPQUFPLENBQUMsZ0NBQWdDLENBQUM7UUFDaEQsR0FBRyxFQUFFLGdDQUFnQztRQUNyQyxJQUFJLEVBQUUsS0FBSztLQUNaO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsT0FBTztRQUNiLEtBQUssRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDO1FBQy9CLEdBQUcsRUFBRSw2Q0FBNkM7UUFDbEQsSUFBSSxFQUFFLEtBQUs7S0FDWjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bi9nZXR0ZXh0JztcblxuZXhwb3J0IGNvbnN0IGRvY3VtZW50YXRpb25JdGVtcyA9IFtcbiAge1xuICAgIGljb246ICdjOHktYzh5LWRhdGEnLCAvLyBkb3VibGUgYzh5LSBpcyBjb3JyZWN0IVxuICAgIGxhYmVsOiBnZXR0ZXh0KCdDb25jZXB0cyBndWlkZWBLRUVQX09SSUdJTkFMYCcpLFxuICAgIHVybDogJy9jb25jZXB0cy9pbnRyb2R1Y3Rpb24nLFxuICAgIHR5cGU6ICdkb2MnXG4gIH0sXG4gIHtcbiAgICBpY29uOiAnYzh5LXVzZXInLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdVc2VyIGd1aWRlYEtFRVBfT1JJR0lOQUxgJyksXG4gICAgdXJsOiAnL3VzZXJzLWd1aWRlL2dldHRpbmctc3RhcnRlZCcsXG4gICAgdHlwZTogJ2RvYydcbiAgfSxcbiAge1xuICAgIGljb246ICdjOHktZGV2aWNlLW1hbmFnZW1lbnQnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdEZXZpY2UgaW50ZWdyYXRpb24gZ3VpZGVgS0VFUF9PUklHSU5BTGAnKSxcbiAgICB1cmw6ICcvZGV2aWNlLWludGVncmF0aW9uL2ludHJvZHVjdGlvbicsXG4gICAgdHlwZTogJ2RvYydcbiAgfSxcbiAge1xuICAgIGljb246ICdjOHktYm9vaycsXG4gICAgbGFiZWw6IGdldHRleHQoJ0N1bXVsb2NpdHkgSW9UIEVkZ2VgS0VFUF9PUklHSU5BTGAnKSxcbiAgICB1cmw6ICcvZWRnZS9vdmVydmlldycsXG4gICAgdHlwZTogJ2RvYydcbiAgfSxcbiAge1xuICAgIGljb246ICdjOHktdG9vbHMnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdNaWNyb3NlcnZpY2UgU0RLIGd1aWRlYEtFRVBfT1JJR0lOQUxgJyksXG4gICAgdXJsOiAnL21pY3Jvc2VydmljZS1zZGsvaW50cm9kdWN0aW9uJyxcbiAgICB0eXBlOiAnZG9jJ1xuICB9LFxuICB7XG4gICAgaWNvbjogJ2M4eS1zbWFydC1yZXN0JyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnV2ViIFNESyBndWlkZWBLRUVQX09SSUdJTkFMYCcpLFxuICAgIHVybDogJy93ZWIvaW50cm9kdWN0aW9uJyxcbiAgICB0eXBlOiAnZG9jJ1xuICB9LFxuICB7XG4gICAgaWNvbjogJ2M4eS1kYXRhLWV4cGxvcmVyJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnU3RyZWFtaW5nIGFuYWx5dGljcyBndWlkZWBLRUVQX09SSUdJTkFMYCcpLFxuICAgIHVybDogJy9hcGFtYS9pbnRyb2R1Y3Rpb24nLFxuICAgIHR5cGU6ICdkb2MnXG4gIH0sXG4gIHtcbiAgICBpY29uOiAnYzh5LWJvb2ttYXJrJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnUmVmZXJlbmNlIGd1aWRlYEtFRVBfT1JJR0lOQUxgJyksXG4gICAgdXJsOiAnL3JlZmVyZW5jZS9yZXN0LWltcGxlbWVudGF0aW9uJyxcbiAgICB0eXBlOiAnZG9jJ1xuICB9LFxuICB7XG4gICAgaWNvbjogJ2dhdmVsJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnTGVnYWwgbm90aWNlcycpLFxuICAgIHVybDogJ2h0dHBzOi8vZG9jdW1lbnRhdGlvbi5zb2Z0d2FyZWFnLmNvbS9sZWdhbC8nLFxuICAgIHR5cGU6ICdkb2MnXG4gIH1cbl07XG4iXX0=
@@ -256,9 +256,9 @@ export class TenantListComponent {
256
256
  }
257
257
  }
258
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\n label=\"{{ 'Tenants' | translate }}\"\n icon=\"cog\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Subtenants' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n\n<c8y-action-bar-item *ngIf=\"!!(appState.state$ | async).newsletter\" [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\n (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 class=\"btn btn-link\" title=\"{{ 'Create tenant' | translate }}\" (click)=\"createTenant()\">\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=\"gears\"></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-edition/#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" }] });
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=\"cog\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'cog'\" [label]=\"'Subtenants' | translate\"></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 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 class=\"btn btn-link\" title=\"{{ 'Create tenant' | translate }}\" (click)=\"createTenant()\">\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=\"gears\"></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" }] });
260
260
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: TenantListComponent, decorators: [{
261
261
  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\n label=\"{{ 'Tenants' | translate }}\"\n icon=\"cog\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Subtenants' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n\n<c8y-action-bar-item *ngIf=\"!!(appState.state$ | async).newsletter\" [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\n (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 class=\"btn btn-link\" title=\"{{ 'Create tenant' | translate }}\" (click)=\"createTenant()\">\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=\"gears\"></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-edition/#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" }]
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=\"cog\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'cog'\" [label]=\"'Subtenants' | translate\"></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 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 class=\"btn btn-link\" title=\"{{ 'Create tenant' | translate }}\" (click)=\"createTenant()\">\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=\"gears\"></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
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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LENBQUM7O2dIQTlRVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix1REN0Q2hDLDgwSUFzSUE7MkZEaEdhLG1CQUFtQjtrQkFKL0IsU0FBUzsrQkFDRSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleHBhbmQsIHJlZHVjZSwgc2hhcmVSZXBsYXksIHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuXG5pbXBvcnQge1xuICBJQ3VycmVudFRlbmFudCxcbiAgSVJlc3VsdExpc3QsXG4gIElUZW5hbnQsXG4gIFRlbmFudFNlcnZpY2UsXG4gIFRlbmFudFN0YXR1cyxcbiAgVXNlclNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEJ1aWx0SW5BY3Rpb25UeXBlLFxuICBDb2x1bW4sXG4gIFNvcnRPcmRlcixcbiAgRGlzcGxheU9wdGlvbnMsXG4gIGdldHRleHQsXG4gIE1vZGFsU2VydmljZSxcbiAgUGFnaW5hdGlvbixcbiAgU3RhdHVzLFxuICBUZW5hbnRVaVNlcnZpY2UsXG4gIFBhc3N3b3JkU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuaW1wb3J0IHsgU3RhdHVzRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9zdGF0dXMuZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENyZWF0aW9uVGltZUZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vY3JlYXRpb24tdGltZS5maWx0ZXJpbmctZm9ybS1yZW5kZXJlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdGVuYW50LWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVuYW50LWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRlbmFudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB0ZW5hbnRzJDogQmVoYXZpb3JTdWJqZWN0PElUZW5hbnRbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50O1xuICBpc01hbmFnZW1lbnRUZW5hbnQ6IGJvb2xlYW47XG4gIFRPUF9URU5BTlRfTkFNRTogc3RyaW5nID0gJ21hbmFnZW1lbnQnO1xuXG4gIHRpdGxlOiBzdHJpbmcgPSBudWxsO1xuICBsb2FkTW9yZUl0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWQgbW9yZSB0ZW5hbnRzJyk7XG4gIGxvYWRpbmdJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkaW5nIHRlbmFudHPigKYnKTtcblxuICBkaXNwbGF5T3B0aW9uczogRGlzcGxheU9wdGlvbnMgPSB7XG4gICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgIHN0cmlwZWQ6IHRydWUsXG4gICAgZmlsdGVyOiB0cnVlLFxuICAgIGdyaWRIZWFkZXI6IHRydWVcbiAgfTtcblxuICBjb2x1bW5zOiBDb2x1bW5bXSA9IHRoaXMuZ2V0Q29sdW1ucygpO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gdGhpcy5nZXRQYWdpbmF0aW9uKCk7XG4gIHNob3dTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gdGhpcy5nZXRBY3Rpb25Db250cm9scygpO1xuXG4gIFRlbmFudFN0YXR1cyA9IFRlbmFudFN0YXR1cztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFVpU2VydmljZTogVGVuYW50VWlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgcGFzc3dvcmRTZXJ2aWNlOiBQYXNzd29yZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY3VycmVudFRlbmFudCA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICB0aGlzLmlzTWFuYWdlbWVudFRlbmFudCA9IGF3YWl0IHRoaXMudGVuYW50VWlTZXJ2aWNlLmlzTWFuYWdlbWVudFRlbmFudCgpO1xuICAgIHRoaXMubG9hZFRlbmFudHMoKTtcbiAgfVxuXG4gIGxvYWRUZW5hbnRzKCkge1xuICAgIHRoaXMudGVuYW50cyQubmV4dCh1bmRlZmluZWQpO1xuICAgIGZyb20odGhpcy50ZW5hbnRTZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogMjAwMCwgd2l0aFRvdGFsUGFnZXM6IHRydWUsIHdpdGhBcHBzOiBmYWxzZSB9KSlcbiAgICAgIC5waXBlKFxuICAgICAgICBleHBhbmQocmVzdWx0TGlzdCA9PiByZXN1bHRMaXN0LnBhZ2luZy5uZXh0UGFnZSAhPT0gbnVsbCAmJiByZXN1bHRMaXN0LnBhZ2luZy5uZXh0KCkpLFxuICAgICAgICB0YWtlV2hpbGUocmVzdWx0TGlzdCA9PiByZXN1bHRMaXN0LnBhZ2luZy5uZXh0UGFnZSAhPT0gbnVsbCwgdHJ1ZSksXG4gICAgICAgIHJlZHVjZShcbiAgICAgICAgICAodGVuYW50czogSVRlbmFudFtdLCByZXN1bHRMaXN0OiBJUmVzdWx0TGlzdDxJVGVuYW50PikgPT4gW1xuICAgICAgICAgICAgLi4udGVuYW50cyxcbiAgICAgICAgICAgIC4uLnJlc3VsdExpc3QuZGF0YVxuICAgICAgICAgIF0sXG4gICAgICAgICAgW11cbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGVuYW50cyA9PiB0aGlzLnRlbmFudHMkLm5leHQodGVuYW50cykpO1xuICB9XG5cbiAgZ2V0Q29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NvbXBhbnknLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ1RlbmFudCcpLFxuICAgICAgICBwYXRoOiAnY29tcGFueScsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0T3JkZXI6ICdhc2MnIGFzIFNvcnRPcmRlclxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdJRCcpLFxuICAgICAgICBwYXRoOiAnaWQnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2RvbWFpbicsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnRG9tYWluJyksXG4gICAgICAgIHBhdGg6ICdkb21haW4nLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3BhcmVudCcsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnUGFyZW50IHRlbmFudCcpLFxuICAgICAgICBwYXRoOiAncGFyZW50JyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjb250YWN0TmFtZScsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnQ29udGFjdCBuYW1lJyksXG4gICAgICAgIHBhdGg6ICdjb250YWN0TmFtZScsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY3JlYXRpb25UaW1lJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdDcmVhdGVkJyksXG4gICAgICAgIHBhdGg6ICdjcmVhdGlvblRpbWUnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBmaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQ6IENyZWF0aW9uVGltZUZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdleHRlcm5hbFJlZmVyZW5jZScsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnRXh0ZXJuYWwgcmVmZXJlbmNlJyksXG4gICAgICAgIHBhdGg6ICdjdXN0b21Qcm9wZXJ0aWVzLmV4dGVybmFsUmVmZXJlbmNlJyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdGF0dXMnLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ1N0YXR1cycpLFxuICAgICAgICBwYXRoOiAnc3RhdHVzJyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50OiBTdGF0dXNGaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICByZXNpemFibGU6IGZhbHNlXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGdldFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcbiAgfVxuXG4gIGdldEFjdGlvbkNvbnRyb2xzKCk6IEFjdGlvbkNvbnRyb2xbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnRWRpdGB0ZW5hbnRgJyksXG4gICAgICAgIGNhbGxiYWNrOiB0ZW5hbnQgPT4gdGhpcy5nb1RvRGV0YWlscyh0ZW5hbnQpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnYWN0aXZhdGVUZW5hbnRBY3Rpb24nLFxuICAgICAgICBpY29uOiAncG93ZXItb2ZmJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnQWN0aXZhdGVgdGVuYW50YCcpLFxuICAgICAgICBjYWxsYmFjazogKHRlbmFudDogSVRlbmFudCkgPT4gdGhpcy5hY3RpdmF0ZVRlbmFudCh0ZW5hbnQpLFxuICAgICAgICBzaG93SWY6ICh0ZW5hbnQ6IElUZW5hbnQpID0+IHRoaXMuaXNTdXNwZW5kZWQodGVuYW50KVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N1c3BlbmRUZW5hbnRBY3Rpb24nLFxuICAgICAgICBpY29uOiAncG93ZXItb2ZmJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnU3VzcGVuZGB0ZW5hbnRgJyksXG4gICAgICAgIGNhbGxiYWNrOiAodGVuYW50OiBJVGVuYW50KSA9PiB0aGlzLnN1c3BlbmRUZW5hbnQodGVuYW50KSxcbiAgICAgICAgc2hvd0lmOiAodGVuYW50OiBJVGVuYW50KSA9PiB0aGlzLmlzQWN0aXZlKHRlbmFudClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZSxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnRGVsZXRlYHRlbmFudGAnKSxcbiAgICAgICAgY2FsbGJhY2s6IHRlbmFudCA9PiB0aGlzLmRlbGV0ZSh0ZW5hbnQpLFxuICAgICAgICBzaG93SWY6ICgpID0+IHRoaXMuaXNNYW5hZ2VtZW50VGVuYW50XG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGNyZWF0ZVRlbmFudCgpIHtcbiAgICB0aGlzLmxvY2F0aW9uLmdvKCcvdGVuYW50cy9uZXcnKTtcbiAgfVxuXG4gIGdvVG9EZXRhaWxzKHRlbmFudDogSVRlbmFudCkge1xuICAgIHRoaXMubG9jYXRpb24uZ28oYC90ZW5hbnRzLyR7dGVuYW50LmlkfWApO1xuICB9XG5cbiAgYXN5bmMgYWN0aXZhdGVUZW5hbnQodGVuYW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YTogc2F2ZWRUZW5hbnQgfSA9IGF3YWl0IHRoaXMudGVuYW50U2VydmljZS51cGRhdGUoe1xuICAgICAgICBpZDogdGVuYW50LmlkLFxuICAgICAgICBzdGF0dXM6IFRlbmFudFN0YXR1cy5BQ1RJVkVcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmFzc2lnbih0ZW5hbnQsIHNhdmVkVGVuYW50KTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnVGVuYW50IGFjdGl2YXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdXNwZW5kVGVuYW50KHRlbmFudCkge1xuICAgIGNvbnN0IHRpdGxlID0gZ2V0dGV4dCgnU3VzcGVuZCB0ZW5hbnQnKTtcbiAgICBjb25zdCBjb25maXJtYXRpb25UZXh0ID0gZ2V0dGV4dChcbiAgICAgICdZb3UgYXJlIGFib3V0IHRvIHN1c3BlbmQgdGVuYW50IFwie3sgY29tcGFueSB9fVwiIChJRCBcInt7IGlkIH19XCIpLidcbiAgICApO1xuICAgIGNvbnN0IHByb2NlZWQgPSBnZXR0ZXh0KCdEbyB5b3Ugd2FudCB0byBwcm9jZWVkPycpO1xuICAgIGNvbnN0IGJvZHkgPSBbXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb25maXJtYXRpb25UZXh0LCB7XG4gICAgICAgIGNvbXBhbnk6IHRlbmFudC5jb21wYW55LFxuICAgICAgICBpZDogdGVuYW50LmlkXG4gICAgICB9KSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHByb2NlZWQpXG4gICAgXS5qb2luKCcgJyk7XG4gICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgb2s6IGdldHRleHQoJ1N1c3BlbmRgdGVuYW50YCcpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybSh0aXRsZSwgYm9keSwgU3RhdHVzLkRBTkdFUiwgbGFiZWxzKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMucGFzc3dvcmRTZXJ2aWNlLmNvbmZpcm1QYXNzd29yZCgpLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKGNvbmZpcm1lZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCB7IGRhdGE6IHNhdmVkVGVuYW50IH0gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgICBpZDogdGVuYW50LmlkLFxuICAgICAgICAgIHN0YXR1czogVGVuYW50U3RhdHVzLlNVU1BFTkRFRFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0ZW5hbnQsIHNhdmVkVGVuYW50KTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdUZW5hbnQgc3VzcGVuZGVkLicpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZSh0ZW5hbnQpIHtcbiAgICBjb25zdCB0aXRsZSA9IGdldHRleHQoJ0RlbGV0ZSB0ZW5hbnQnKTtcbiAgICBjb25zdCBjb25maXJtYXRpb25UZXh0ID0gZ2V0dGV4dChcbiAgICAgICdZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0ZW5hbnQgXCJ7eyBjb21wYW55IH19XCIgKElEIFwie3sgaWQgfX1cIikuJ1xuICAgICk7XG4gICAgY29uc3QgaGludCA9IGdldHRleHQoJ1RoaXMgb3BlcmF0aW9uIGlzIGlycmV2ZXJzaWJsZS4nKTtcbiAgICBjb25zdCBwcm9jZWVkID0gZ2V0dGV4dCgnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nKTtcbiAgICBjb25zdCBib2R5ID0gW1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY29uZmlybWF0aW9uVGV4dCwge1xuICAgICAgICBjb21wYW55OiB0ZW5hbnQuY29tcGFueSxcbiAgICAgICAgaWQ6IHRlbmFudC5pZFxuICAgICAgfSksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChoaW50KSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHByb2NlZWQpXG4gICAgXS5qb2luKCcgJyk7XG4gICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgb2s6IGdldHRleHQoJ0RlbGV0ZWB0ZW5hbnRgJylcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKHRpdGxlLCBib2R5LCBTdGF0dXMuREFOR0VSLCBsYWJlbHMpO1xuICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5wYXNzd29yZFNlcnZpY2UuY29uZmlybVBhc3N3b3JkKCkudG9Qcm9taXNlKCk7XG4gICAgICBpZiAoY29uZmlybWVkID09PSB0cnVlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5kZWxldGUodGVuYW50KTtcbiAgICAgICAgY29uc3QgdGVuYW50c1dpdGhvdXRSZW1vdmVkT25lID0gdGhpcy50ZW5hbnRzJC52YWx1ZS5maWx0ZXIodCA9PiB0ICE9PSB0ZW5hbnQpO1xuICAgICAgICB0aGlzLnRlbmFudHMkLm5leHQodGVuYW50c1dpdGhvdXRSZW1vdmVkT25lKTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhcbiAgICAgICAgICBnZXR0ZXh0KCdUZW5hbnQgaXMgYmVpbmcgZGVsZXRlZCBpbiB0aGUgYmFja2dyb3VuZC4gVGhpcyBtaWdodCB0YWtlIGEgd2hpbGXigKYnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNBY3RpdmUodGVuYW50OiBJVGVuYW50KSB7XG4gICAgcmV0dXJuIHRlbmFudC5zdGF0dXMgPT09IFRlbmFudFN0YXR1cy5BQ1RJVkU7XG4gIH1cblxuICBpc1N1c3BlbmRlZCh0ZW5hbnQ6IElUZW5hbnQpIHtcbiAgICByZXR1cm4gdGVuYW50LnN0YXR1cyA9PT0gVGVuYW50U3RhdHVzLlNVU1BFTkRFRDtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkTmV3c2xldHRlckVtYWlscygpIHtcbiAgICBjb25zdCB7IHJlcywgZGF0YSB9ID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS5nZXROZXdzbGV0dGVyRW1haWxzKCk7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpO1xuICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gL2ZpbGVuYW1lPVwiKC4qKVwiLy5leGVjKGNvbnRlbnREaXNwb3NpdGlvbilbMV07XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtkYXRhXSwgeyB0eXBlOiBjb250ZW50VHlwZSB9KTtcbiAgICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUpO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPlxuICB7eyAnU3VidGVuYW50cycgfCB0cmFuc2xhdGUgfX1cbjwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgbGFiZWw9XCJ7eyAnVGVuYW50cycgfCB0cmFuc2xhdGUgfX1cIlxuICAgIGljb249XCJjb2dcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjb2cnXCJcbiAgICBbbGFiZWxdPVwiJ1N1YnRlbmFudHMnIHwgdHJhbnNsYXRlXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gKm5nSWY9XCIhIShhcHBTdGF0ZS5zdGF0ZSQgfCBhc3luYykubmV3c2xldHRlclwiIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3tcbiAgICAgICdEb3dubG9hZHMgdGhlIGxpc3Qgb2YgZW1haWxzIG9mIHVzZXJzIHN1YnNjcmliZWQgZm9yIG5ld3NsZXR0ZXIgb24gdGhlIGN1cnJlbnQgdGVuYW50IGFuZCBpdHMgc3VidGVuYW50cy4nXG4gICAgICAgIHwgdHJhbnNsYXRlXG4gICAgfX1cIlxuICAgIChjbGljayk9XCJkb3dubG9hZE5ld3NsZXR0ZXJFbWFpbHMoKVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwiZG93bmxvYWRcIj48L2k+XG4gICAge3sgJ0VtYWlsIGFkZHJlc3NlcycgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgdGl0bGU9XCJ7eyAnQ3JlYXRlIHRlbmFudCcgfCB0cmFuc2xhdGUgfX1cIiAoY2xpY2spPVwiY3JlYXRlVGVuYW50KClcIj5cbiAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAge3sgJ0NyZWF0ZSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHAgc3JjPVwiL3VzZXJzLWd1aWRlL2VudGVycHJpc2UtdGVuYW50LyNtYW5hZ2luZy10ZW5hbnRzXCI+PC9jOHktaGVscD5cblxuPGRpdiBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgYm9yZGVyLXRvcCBib3JkZXItYm90dG9tXCI+XG4gIDxjOHktZGF0YS1ncmlkXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbbG9hZE1vcmVJdGVtc0xhYmVsXT1cImxvYWRNb3JlSXRlbXNMYWJlbFwiXG4gICAgW2xvYWRpbmdJdGVtc0xhYmVsXT1cImxvYWRpbmdJdGVtc0xhYmVsXCJcbiAgICBbZGlzcGxheU9wdGlvbnNdPVwiZGlzcGxheU9wdGlvbnNcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtyb3dzXT1cInRlbmFudHMkIHwgYXN5bmNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtzaG93U2VhcmNoXT1cInNob3dTZWFyY2hcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgKG9uUmVsb2FkKT1cImxvYWRUZW5hbnRzKClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZSBqLWMtY2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISh0ZW5hbnRzJCB8IGFzeW5jKVwiPlxuICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHRlbmFudHMkIHwgYXN5bmMpPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPGgxIGM4eUljb249XCJnZWFyc1wiPjwvaDE+XG4gICAgICAgICAgPGgzIHRyYW5zbGF0ZT5UaGVyZSBhcmUgbm8gdGVuYW50cyBkZWZpbmVkLjwvaDM+XG4gICAgICAgICAgPHAgdHJhbnNsYXRlPkNyZWF0ZSB0aGUgZmlyc3QgdGVuYW50LjwvcD5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0NyZWF0ZSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZVRlbmFudCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ0NyZWF0ZSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cCBjOHktZ3VpZGUtZG9jcz5cbiAgICAgICAgICAgIDxzbWFsbCB0cmFuc2xhdGUgbmdOb25CaW5kYWJsZT5cbiAgICAgICAgICAgICAgRmluZCBvdXQgbW9yZSBpbiB0aGVcbiAgICAgICAgICAgICAgPGEgYzh5LWd1aWRlLWhyZWY9XCJ1c2Vycy1ndWlkZS9lbnRlcnByaXNlLWVkaXRpb24vI21hbmFnaW5nLXRlbmFudHNcIj5cbiAgICAgICAgICAgICAgICBVc2VyIGd1aWRlYEtFRVBfT1JJR0lOQUxgXG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgLlxuICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodGVuYW50cyQgfCBhc3luYyk/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwiYzh5LWljb24tZHVvY29sb3JcIiBjOHlJY29uPVwic2VhcmNoXCI+PC9oMT5cbiAgICAgICAgICA8aDMgdHJhbnNsYXRlPk5vIHRlbmFudHMgdG8gZGlzcGxheS48L2gzPlxuICAgICAgICAgIDxwIHRyYW5zbGF0ZT5SZWZpbmUgeW91ciBzZWFyY2ggdGVybXMgb3IgY2hlY2sgeW91ciBzcGVsbGluZy48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwiY29tcGFueVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIH19XCI+XG4gICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvdGVuYW50cycsIGNvbnRleHQuaXRlbS5pZF1cIj57eyBjb250ZXh0LnZhbHVlIH19PC9hPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwicGFyZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfHwgY3VycmVudFRlbmFudC5uYW1lIH19XCI+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8fCBjdXJyZW50VGVuYW50Lm5hbWUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cImNyZWF0aW9uVGltZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIHwgYzh5RGF0ZSB9fVwiPlxuICAgICAgICAgIHt7IGNvbnRleHQudmFsdWUgfCBjOHlEYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJzdGF0dXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmM4eUNlbGxSZW5kZXJlckRlZj1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJjb250ZXh0Lml0ZW0uc3RhdHVzID09PSBUZW5hbnRTdGF0dXMuQUNUSVZFXCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdBY3RpdmVgdGVuYW50YCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cImNoZWNrLWNpcmNsZVwiIGNsYXNzPVwidGV4dC1zdWNjZXNzXCI+PC9pPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJjb250ZXh0Lml0ZW0uc3RhdHVzID09PSBUZW5hbnRTdGF0dXMuU1VTUEVOREVEXCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdTdXNwZW5kZWRgdGVuYW50YCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cImJhblwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48L2k+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cbiAgPC9jOHktZGF0YS1ncmlkPlxuPC9kaXY+XG4iXX0=
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVuYW50cy90ZW5hbnQtbGlzdC90ZW5hbnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi90ZW5hbnRzL3RlbmFudC1saXN0L3RlbmFudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFJTCxhQUFhLEVBQ2IsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBRUwsWUFBWSxFQUNaLGVBQWUsRUFLZixPQUFPLEVBQ1AsWUFBWSxFQUVaLE1BQU0sRUFDTixlQUFlLEVBQ2YsZUFBZSxFQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7O0FBTS9HLE1BQU0sT0FBTyxtQkFBbUI7SUF3QjlCLFlBQ1MsUUFBeUIsRUFDeEIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLGVBQWdDLEVBQ2hDLFFBQWtCLEVBQ2xCLGVBQWdDLEVB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LENBQUM7O2dIQTlRVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix1REN0Q2hDLCt5SUErSEE7MkZEekZhLG1CQUFtQjtrQkFKL0IsU0FBUzsrQkFDRSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleHBhbmQsIHJlZHVjZSwgc2hhcmVSZXBsYXksIHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuXG5pbXBvcnQge1xuICBJQ3VycmVudFRlbmFudCxcbiAgSVJlc3VsdExpc3QsXG4gIElUZW5hbnQsXG4gIFRlbmFudFNlcnZpY2UsXG4gIFRlbmFudFN0YXR1cyxcbiAgVXNlclNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEJ1aWx0SW5BY3Rpb25UeXBlLFxuICBDb2x1bW4sXG4gIFNvcnRPcmRlcixcbiAgRGlzcGxheU9wdGlvbnMsXG4gIGdldHRleHQsXG4gIE1vZGFsU2VydmljZSxcbiAgUGFnaW5hdGlvbixcbiAgU3RhdHVzLFxuICBUZW5hbnRVaVNlcnZpY2UsXG4gIFBhc3N3b3JkU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuaW1wb3J0IHsgU3RhdHVzRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9zdGF0dXMuZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENyZWF0aW9uVGltZUZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vY3JlYXRpb24tdGltZS5maWx0ZXJpbmctZm9ybS1yZW5kZXJlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdGVuYW50LWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVuYW50LWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRlbmFudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB0ZW5hbnRzJDogQmVoYXZpb3JTdWJqZWN0PElUZW5hbnRbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50O1xuICBpc01hbmFnZW1lbnRUZW5hbnQ6IGJvb2xlYW47XG4gIFRPUF9URU5BTlRfTkFNRTogc3RyaW5nID0gJ21hbmFnZW1lbnQnO1xuXG4gIHRpdGxlOiBzdHJpbmcgPSBudWxsO1xuICBsb2FkTW9yZUl0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWQgbW9yZSB0ZW5hbnRzJyk7XG4gIGxvYWRpbmdJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkaW5nIHRlbmFudHPigKYnKTtcblxuICBkaXNwbGF5T3B0aW9uczogRGlzcGxheU9wdGlvbnMgPSB7XG4gICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgIHN0cmlwZWQ6IHRydWUsXG4gICAgZmlsdGVyOiB0cnVlLFxuICAgIGdyaWRIZWFkZXI6IHRydWVcbiAgfTtcblxuICBjb2x1bW5zOiBDb2x1bW5bXSA9IHRoaXMuZ2V0Q29sdW1ucygpO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gdGhpcy5nZXRQYWdpbmF0aW9uKCk7XG4gIHNob3dTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gdGhpcy5nZXRBY3Rpb25Db250cm9scygpO1xuXG4gIFRlbmFudFN0YXR1cyA9IFRlbmFudFN0YXR1cztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFVpU2VydmljZTogVGVuYW50VWlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgcGFzc3dvcmRTZXJ2aWNlOiBQYXNzd29yZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY3VycmVudFRlbmFudCA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICB0aGlzLmlzTWFuYWdlbWVudFRlbmFudCA9IGF3YWl0IHRoaXMudGVuYW50VWlTZXJ2aWNlLmlzTWFuYWdlbWVudFRlbmFudCgpO1xuICAgIHRoaXMubG9hZFRlbmFudHMoKTtcbiAgfVxuXG4gIGxvYWRUZW5hbnRzKCkge1xuICAgIHRoaXMudGVuYW50cyQubmV4dCh1bmRlZmluZWQpO1xuICAgIGZyb20odGhpcy50ZW5hbnRTZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogMjAwMCwgd2l0aFRvdGFsUGFnZXM6IHRydWUsIHdpdGhBcHBzOiBmYWxzZSB9KSlcbiAgICAgIC5waXBlKFxuICAgICAgICBleHBhbmQocmVzdWx0TGlzdCA9PiByZXN1bHRMaXN0LnBhZ2luZy5uZXh0UGFnZSAhPT0gbnVsbCAmJiByZXN1bHRMaXN0LnBhZ2luZy5uZXh0KCkpLFxuICAgICAgICB0YWtlV2hpbGUocmVzdWx0TGlzdCA9PiByZXN1bHRMaXN0LnBhZ2luZy5uZXh0UGFnZSAhPT0gbnVsbCwgdHJ1ZSksXG4gICAgICAgIHJlZHVjZShcbiAgICAgICAgICAodGVuYW50czogSVRlbmFudFtdLCByZXN1bHRMaXN0OiBJUmVzdWx0TGlzdDxJVGVuYW50PikgPT4gW1xuICAgICAgICAgICAgLi4udGVuYW50cyxcbiAgICAgICAgICAgIC4uLnJlc3VsdExpc3QuZGF0YVxuICAgICAgICAgIF0sXG4gICAgICAgICAgW11cbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGVuYW50cyA9PiB0aGlzLnRlbmFudHMkLm5leHQodGVuYW50cykpO1xuICB9XG5cbiAgZ2V0Q29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NvbXBhbnknLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ1RlbmFudCcpLFxuICAgICAgICBwYXRoOiAnY29tcGFueScsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0T3JkZXI6ICdhc2MnIGFzIFNvcnRPcmRlclxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdJRCcpLFxuICAgICAgICBwYXRoOiAnaWQnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2RvbWFpbicsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnRG9tYWluJyksXG4gICAgICAgIHBhdGg6ICdkb21haW4nLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3BhcmVudCcsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnUGFyZW50IHRlbmFudCcpLFxuICAgICAgICBwYXRoOiAncGFyZW50JyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjb250YWN0TmFtZScsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnQ29udGFjdCBuYW1lJyksXG4gICAgICAgIHBhdGg6ICdjb250YWN0TmFtZScsXG4gICAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY3JlYXRpb25UaW1lJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdDcmVhdGVkJyksXG4gICAgICAgIHBhdGg6ICdjcmVhdGlvblRpbWUnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBmaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQ6IENyZWF0aW9uVGltZUZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdleHRlcm5hbFJlZmVyZW5jZScsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnRXh0ZXJuYWwgcmVmZXJlbmNlJyksXG4gICAgICAgIHBhdGg6ICdjdXN0b21Qcm9wZXJ0aWVzLmV4dGVybmFsUmVmZXJlbmNlJyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdGF0dXMnLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ1N0YXR1cycpLFxuICAgICAgICBwYXRoOiAnc3RhdHVzJyxcbiAgICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50OiBTdGF0dXNGaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQsXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICByZXNpemFibGU6IGZhbHNlXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGdldFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcbiAgfVxuXG4gIGdldEFjdGlvbkNvbnRyb2xzKCk6IEFjdGlvbkNvbnRyb2xbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnRWRpdGB0ZW5hbnRgJyksXG4gICAgICAgIGNhbGxiYWNrOiB0ZW5hbnQgPT4gdGhpcy5nb1RvRGV0YWlscyh0ZW5hbnQpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnYWN0aXZhdGVUZW5hbnRBY3Rpb24nLFxuICAgICAgICBpY29uOiAncG93ZXItb2ZmJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnQWN0aXZhdGVgdGVuYW50YCcpLFxuICAgICAgICBjYWxsYmFjazogKHRlbmFudDogSVRlbmFudCkgPT4gdGhpcy5hY3RpdmF0ZVRlbmFudCh0ZW5hbnQpLFxuICAgICAgICBzaG93SWY6ICh0ZW5hbnQ6IElUZW5hbnQpID0+IHRoaXMuaXNTdXNwZW5kZWQodGVuYW50KVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N1c3BlbmRUZW5hbnRBY3Rpb24nLFxuICAgICAgICBpY29uOiAncG93ZXItb2ZmJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnU3VzcGVuZGB0ZW5hbnRgJyksXG4gICAgICAgIGNhbGxiYWNrOiAodGVuYW50OiBJVGVuYW50KSA9PiB0aGlzLnN1c3BlbmRUZW5hbnQodGVuYW50KSxcbiAgICAgICAgc2hvd0lmOiAodGVuYW50OiBJVGVuYW50KSA9PiB0aGlzLmlzQWN0aXZlKHRlbmFudClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZSxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnRGVsZXRlYHRlbmFudGAnKSxcbiAgICAgICAgY2FsbGJhY2s6IHRlbmFudCA9PiB0aGlzLmRlbGV0ZSh0ZW5hbnQpLFxuICAgICAgICBzaG93SWY6ICgpID0+IHRoaXMuaXNNYW5hZ2VtZW50VGVuYW50XG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGNyZWF0ZVRlbmFudCgpIHtcbiAgICB0aGlzLmxvY2F0aW9uLmdvKCcvdGVuYW50cy9uZXcnKTtcbiAgfVxuXG4gIGdvVG9EZXRhaWxzKHRlbmFudDogSVRlbmFudCkge1xuICAgIHRoaXMubG9jYXRpb24uZ28oYC90ZW5hbnRzLyR7dGVuYW50LmlkfWApO1xuICB9XG5cbiAgYXN5bmMgYWN0aXZhdGVUZW5hbnQodGVuYW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YTogc2F2ZWRUZW5hbnQgfSA9IGF3YWl0IHRoaXMudGVuYW50U2VydmljZS51cGRhdGUoe1xuICAgICAgICBpZDogdGVuYW50LmlkLFxuICAgICAgICBzdGF0dXM6IFRlbmFudFN0YXR1cy5BQ1RJVkVcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmFzc2lnbih0ZW5hbnQsIHNhdmVkVGVuYW50KTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnVGVuYW50IGFjdGl2YXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdXNwZW5kVGVuYW50KHRlbmFudCkge1xuICAgIGNvbnN0IHRpdGxlID0gZ2V0dGV4dCgnU3VzcGVuZCB0ZW5hbnQnKTtcbiAgICBjb25zdCBjb25maXJtYXRpb25UZXh0ID0gZ2V0dGV4dChcbiAgICAgICdZb3UgYXJlIGFib3V0IHRvIHN1c3BlbmQgdGVuYW50IFwie3sgY29tcGFueSB9fVwiIChJRCBcInt7IGlkIH19XCIpLidcbiAgICApO1xuICAgIGNvbnN0IHByb2NlZWQgPSBnZXR0ZXh0KCdEbyB5b3Ugd2FudCB0byBwcm9jZWVkPycpO1xuICAgIGNvbnN0IGJvZHkgPSBbXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb25maXJtYXRpb25UZXh0LCB7XG4gICAgICAgIGNvbXBhbnk6IHRlbmFudC5jb21wYW55LFxuICAgICAgICBpZDogdGVuYW50LmlkXG4gICAgICB9KSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHByb2NlZWQpXG4gICAgXS5qb2luKCcgJyk7XG4gICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgb2s6IGdldHRleHQoJ1N1c3BlbmRgdGVuYW50YCcpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybSh0aXRsZSwgYm9keSwgU3RhdHVzLkRBTkdFUiwgbGFiZWxzKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMucGFzc3dvcmRTZXJ2aWNlLmNvbmZpcm1QYXNzd29yZCgpLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKGNvbmZpcm1lZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCB7IGRhdGE6IHNhdmVkVGVuYW50IH0gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgICBpZDogdGVuYW50LmlkLFxuICAgICAgICAgIHN0YXR1czogVGVuYW50U3RhdHVzLlNVU1BFTkRFRFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0ZW5hbnQsIHNhdmVkVGVuYW50KTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdUZW5hbnQgc3VzcGVuZGVkLicpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZSh0ZW5hbnQpIHtcbiAgICBjb25zdCB0aXRsZSA9IGdldHRleHQoJ0RlbGV0ZSB0ZW5hbnQnKTtcbiAgICBjb25zdCBjb25maXJtYXRpb25UZXh0ID0gZ2V0dGV4dChcbiAgICAgICdZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0ZW5hbnQgXCJ7eyBjb21wYW55IH19XCIgKElEIFwie3sgaWQgfX1cIikuJ1xuICAgICk7XG4gICAgY29uc3QgaGludCA9IGdldHRleHQoJ1RoaXMgb3BlcmF0aW9uIGlzIGlycmV2ZXJzaWJsZS4nKTtcbiAgICBjb25zdCBwcm9jZWVkID0gZ2V0dGV4dCgnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nKTtcbiAgICBjb25zdCBib2R5ID0gW1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY29uZmlybWF0aW9uVGV4dCwge1xuICAgICAgICBjb21wYW55OiB0ZW5hbnQuY29tcGFueSxcbiAgICAgICAgaWQ6IHRlbmFudC5pZFxuICAgICAgfSksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChoaW50KSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHByb2NlZWQpXG4gICAgXS5qb2luKCcgJyk7XG4gICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgb2s6IGdldHRleHQoJ0RlbGV0ZWB0ZW5hbnRgJylcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKHRpdGxlLCBib2R5LCBTdGF0dXMuREFOR0VSLCBsYWJlbHMpO1xuICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5wYXNzd29yZFNlcnZpY2UuY29uZmlybVBhc3N3b3JkKCkudG9Qcm9taXNlKCk7XG4gICAgICBpZiAoY29uZmlybWVkID09PSB0cnVlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5kZWxldGUodGVuYW50KTtcbiAgICAgICAgY29uc3QgdGVuYW50c1dpdGhvdXRSZW1vdmVkT25lID0gdGhpcy50ZW5hbnRzJC52YWx1ZS5maWx0ZXIodCA9PiB0ICE9PSB0ZW5hbnQpO1xuICAgICAgICB0aGlzLnRlbmFudHMkLm5leHQodGVuYW50c1dpdGhvdXRSZW1vdmVkT25lKTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhcbiAgICAgICAgICBnZXR0ZXh0KCdUZW5hbnQgaXMgYmVpbmcgZGVsZXRlZCBpbiB0aGUgYmFja2dyb3VuZC4gVGhpcyBtaWdodCB0YWtlIGEgd2hpbGXigKYnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNBY3RpdmUodGVuYW50OiBJVGVuYW50KSB7XG4gICAgcmV0dXJuIHRlbmFudC5zdGF0dXMgPT09IFRlbmFudFN0YXR1cy5BQ1RJVkU7XG4gIH1cblxuICBpc1N1c3BlbmRlZCh0ZW5hbnQ6IElUZW5hbnQpIHtcbiAgICByZXR1cm4gdGVuYW50LnN0YXR1cyA9PT0gVGVuYW50U3RhdHVzLlNVU1BFTkRFRDtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkTmV3c2xldHRlckVtYWlscygpIHtcbiAgICBjb25zdCB7IHJlcywgZGF0YSB9ID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS5nZXROZXdzbGV0dGVyRW1haWxzKCk7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpO1xuICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gL2ZpbGVuYW1lPVwiKC4qKVwiLy5leGVjKGNvbnRlbnREaXNwb3NpdGlvbilbMV07XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtkYXRhXSwgeyB0eXBlOiBjb250ZW50VHlwZSB9KTtcbiAgICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUpO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPlxuICB7eyAnU3VidGVuYW50cycgfCB0cmFuc2xhdGUgfX1cbjwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIGxhYmVsPVwie3sgJ1RlbmFudHMnIHwgdHJhbnNsYXRlIH19XCIgaWNvbj1cImNvZ1wiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2ljb25dPVwiJ2NvZydcIiBbbGFiZWxdPVwiJ1N1YnRlbmFudHMnIHwgdHJhbnNsYXRlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gKm5nSWY9XCIhIShhcHBTdGF0ZS5zdGF0ZSQgfCBhc3luYykubmV3c2xldHRlclwiIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3tcbiAgICAgICdEb3dubG9hZHMgdGhlIGxpc3Qgb2YgZW1haWxzIG9mIHVzZXJzIHN1YnNjcmliZWQgZm9yIG5ld3NsZXR0ZXIgb24gdGhlIGN1cnJlbnQgdGVuYW50IGFuZCBpdHMgc3VidGVuYW50cy4nXG4gICAgICAgIHwgdHJhbnNsYXRlXG4gICAgfX1cIlxuICAgIChjbGljayk9XCJkb3dubG9hZE5ld3NsZXR0ZXJFbWFpbHMoKVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwiZG93bmxvYWRcIj48L2k+XG4gICAge3sgJ0VtYWlsIGFkZHJlc3NlcycgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgdGl0bGU9XCJ7eyAnQ3JlYXRlIHRlbmFudCcgfCB0cmFuc2xhdGUgfX1cIiAoY2xpY2spPVwiY3JlYXRlVGVuYW50KClcIj5cbiAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAge3sgJ0NyZWF0ZSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHAgc3JjPVwiL3VzZXJzLWd1aWRlL2VudGVycHJpc2UtdGVuYW50LyNtYW5hZ2luZy10ZW5hbnRzXCI+PC9jOHktaGVscD5cblxuPGRpdiBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgYm9yZGVyLXRvcCBib3JkZXItYm90dG9tXCI+XG4gIDxjOHktZGF0YS1ncmlkXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbbG9hZE1vcmVJdGVtc0xhYmVsXT1cImxvYWRNb3JlSXRlbXNMYWJlbFwiXG4gICAgW2xvYWRpbmdJdGVtc0xhYmVsXT1cImxvYWRpbmdJdGVtc0xhYmVsXCJcbiAgICBbZGlzcGxheU9wdGlvbnNdPVwiZGlzcGxheU9wdGlvbnNcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtyb3dzXT1cInRlbmFudHMkIHwgYXN5bmNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtzaG93U2VhcmNoXT1cInNob3dTZWFyY2hcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgKG9uUmVsb2FkKT1cImxvYWRUZW5hbnRzKClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZSBqLWMtY2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISh0ZW5hbnRzJCB8IGFzeW5jKVwiPlxuICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHRlbmFudHMkIHwgYXN5bmMpPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPGgxIGM4eUljb249XCJnZWFyc1wiPjwvaDE+XG4gICAgICAgICAgPGgzIHRyYW5zbGF0ZT5UaGVyZSBhcmUgbm8gdGVuYW50cyBkZWZpbmVkLjwvaDM+XG4gICAgICAgICAgPHAgdHJhbnNsYXRlPkNyZWF0ZSB0aGUgZmlyc3QgdGVuYW50LjwvcD5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0NyZWF0ZSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZVRlbmFudCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ0NyZWF0ZSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cCBjOHktZ3VpZGUtZG9jcz5cbiAgICAgICAgICAgIDxzbWFsbCB0cmFuc2xhdGUgbmdOb25CaW5kYWJsZT5cbiAgICAgICAgICAgICAgRmluZCBvdXQgbW9yZSBpbiB0aGVcbiAgICAgICAgICAgICAgPGEgYzh5LWd1aWRlLWhyZWY9XCJ1c2Vycy1ndWlkZS9lbnRlcnByaXNlLXRlbmFudC8jbWFuYWdpbmctdGVuYW50c1wiPlxuICAgICAgICAgICAgICAgIFVzZXIgZ3VpZGVgS0VFUF9PUklHSU5BTGBcbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAuXG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih0ZW5hbnRzJCB8IGFzeW5jKT8ubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8aDEgY2xhc3M9XCJjOHktaWNvbi1kdW9jb2xvclwiIGM4eUljb249XCJzZWFyY2hcIj48L2gxPlxuICAgICAgICAgIDxoMyB0cmFuc2xhdGU+Tm8gdGVuYW50cyB0byBkaXNwbGF5LjwvaDM+XG4gICAgICAgICAgPHAgdHJhbnNsYXRlPlJlZmluZSB5b3VyIHNlYXJjaCB0ZXJtcyBvciBjaGVjayB5b3VyIHNwZWxsaW5nLjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJjb21wYW55XCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfX1cIj5cbiAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy90ZW5hbnRzJywgY29udGV4dC5pdGVtLmlkXVwiPnt7IGNvbnRleHQudmFsdWUgfX08L2E+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJwYXJlbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmM4eUNlbGxSZW5kZXJlckRlZj1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxzcGFuIHRpdGxlPVwie3sgY29udGV4dC52YWx1ZSB8fCBjdXJyZW50VGVuYW50Lm5hbWUgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHx8IGN1cnJlbnRUZW5hbnQubmFtZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwiY3JlYXRpb25UaW1lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBjOHlEYXRlIH19XCI+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8IGM4eURhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cInN0YXR1c1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cImNvbnRleHQuaXRlbS5zdGF0dXMgPT09IFRlbmFudFN0YXR1cy5BQ1RJVkVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ0FjdGl2ZWB0ZW5hbnRgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwiY2hlY2stY2lyY2xlXCIgY2xhc3M9XCJ0ZXh0LXN1Y2Nlc3NcIj48L2k+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cImNvbnRleHQuaXRlbS5zdGF0dXMgPT09IFRlbmFudFN0YXR1cy5TVVNQRU5ERURcIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ1N1c3BlbmRlZGB0ZW5hbnRgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwiYmFuXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjwvaT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuICA8L2M4eS1kYXRhLWdyaWQ+XG48L2Rpdj5cbiJdfQ==
@@ -393,10 +393,10 @@ class TenantListComponent {
393
393
  }
394
394
  }
395
395
  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$2.TranslateService }, { token: i3.TenantService }, { token: i1.TenantUiService }, { token: i4.Location }, { token: i1.PasswordService }, { token: i3.UserService }], target: i0.ɵɵFactoryTarget.Component });
396
- 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\n label=\"{{ 'Tenants' | translate }}\"\n icon=\"cog\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Subtenants' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n\n<c8y-action-bar-item *ngIf=\"!!(appState.state$ | async).newsletter\" [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\n (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 class=\"btn btn-link\" title=\"{{ 'Create tenant' | translate }}\" (click)=\"createTenant()\">\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=\"gears\"></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-edition/#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" }] });
396
+ 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=\"cog\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'cog'\" [label]=\"'Subtenants' | translate\"></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 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 class=\"btn btn-link\" title=\"{{ 'Create tenant' | translate }}\" (click)=\"createTenant()\">\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=\"gears\"></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" }] });
397
397
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: TenantListComponent, decorators: [{
398
398
  type: Component,
399
- args: [{ selector: 'c8y-tenant-list', template: "<c8y-title>\n {{ 'Subtenants' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n label=\"{{ 'Tenants' | translate }}\"\n icon=\"cog\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Subtenants' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n\n<c8y-action-bar-item *ngIf=\"!!(appState.state$ | async).newsletter\" [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\n (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 class=\"btn btn-link\" title=\"{{ 'Create tenant' | translate }}\" (click)=\"createTenant()\">\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=\"gears\"></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-edition/#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" }]
399
+ 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=\"cog\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'cog'\" [label]=\"'Subtenants' | translate\"></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 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 class=\"btn btn-link\" title=\"{{ 'Create tenant' | translate }}\" (click)=\"createTenant()\">\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=\"gears\"></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" }]
400
400
  }], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: i1.AlertService }, { type: i1.ModalService }, { type: i2$2.TranslateService }, { type: i3.TenantService }, { type: i1.TenantUiService }, { type: i4.Location }, { type: i1.PasswordService }, { type: i3.UserService }]; } });
401
401
 
402
402
  class TenantsModule {
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-tenants.mjs","sources":["../../tenants/tenants.model.ts","../../tenants/tenant-list/tenant-list.guard.ts","../../tenants/tenants-navigation.factory.ts","../../tenants/tenant-list/status.filtering-form-renderer.component.ts","../../tenants/tenant-list/status.filtering-form-renderer.component.html","../../tenants/tenant-list/creation-time.filtering-form-renderer.component.ts","../../tenants/tenant-list/creation-time.filtering-form-renderer.component.html","../../tenants/tenant-list/tenant-list.component.ts","../../tenants/tenant-list/tenant-list.component.html","../../tenants/tenants.module.ts","../../tenants/c8y-ngx-components-tenants.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { NavigatorNode } from '@c8y/ngx-components';\n\nexport const TENANTS_MODULE_CONFIG = new InjectionToken<TenantsModuleConfig>('TenantsModuleConfig');\n\n/**\n * Configuration object for `TenantsModule`.\n */\nexport interface TenantsModuleConfig {\n /**\n * Allows for hiding or customizing \"Subtenants\" navigator node:\n * - `subtenantsNavigatorNode: true` - shows the default navigator node (default),\n * - `subtenantsNavigatorNode: false` - hides the navigator node,\n * - `subtenantsNavigatorNode: { label: 'My subtenants' }` - overrides default navigator node,\n * - `subtenantsNavigatorNode: new NavigatorNode({ label: 'My subtenants' })` - overrides default navigator node.\n */\n subtenantsNavigatorNode?: boolean | Partial<NavigatorNode>;\n}\n","import { Injectable } from '@angular/core';\nimport { CanActivate } from '@angular/router';\nimport { TenantUiService } from '@c8y/ngx-components';\n\n@Injectable()\nexport class TenantListGuard implements CanActivate {\n private active: boolean;\n\n constructor(private tenantUiService: TenantUiService) {}\n\n /**\n * Checks if tenant list should be active,\n * i.e. whether the current tenant can read other tenants.\n * **Note: the check is executed only once in the runtime.**\n *\n * @returns True, if the feature should be active.\n */\n canActivate(): boolean {\n if (this.active === undefined) {\n this.active = this.tenantUiService.canReadTenants();\n }\n return this.active;\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { gettext, NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\nimport { TenantListGuard } from './tenant-list/tenant-list.guard';\nimport { TenantsModuleConfig, TENANTS_MODULE_CONFIG } from './tenants.model';\n\n@Injectable()\nexport class TenantsNavigationFactory implements NavigatorNodeFactory {\n private navs: NavigatorNode[] = [];\n\n constructor(\n private tenantListGuard: TenantListGuard,\n @Optional() @Inject(TENANTS_MODULE_CONFIG) private config: TenantsModuleConfig\n ) {}\n\n async get(): Promise<NavigatorNode[]> {\n const canActivateTenantList = await this.tenantListGuard.canActivate();\n if (!this.navs.length) {\n const subtenantsNavigatorNode = this.config?.subtenantsNavigatorNode ?? true;\n if (subtenantsNavigatorNode !== false) {\n this.navs.push(\n new NavigatorNode({\n parent: gettext('Tenants'),\n label: gettext('Subtenants'),\n icon: 'c8y-sub-tenants',\n path: 'tenants',\n routerLinkExact: false,\n priority: 4000,\n hidden: !canActivateTenantList,\n ...(subtenantsNavigatorNode === true ? {} : subtenantsNavigatorNode)\n })\n );\n }\n }\n return this.navs;\n }\n}\n","import { Component } from '@angular/core';\nimport { ITenant, TenantStatus } from '@c8y/client';\nimport { FilteringFormRendererContext } from '@c8y/ngx-components';\n\n@Component({\n templateUrl: './status.filtering-form-renderer.component.html'\n})\nexport class StatusFilteringFormRendererComponent {\n model: {\n active: boolean;\n suspended: boolean;\n };\n\n constructor(public context: FilteringFormRendererContext) {\n this.model = (this.context.property.externalFilterQuery || {}).model || {};\n }\n\n applyFilter() {\n this.context.applyFilter({\n externalFilterQuery: {\n model: this.model\n },\n filterPredicate: (tenant: ITenant) =>\n Boolean(\n (!this.model.active && !this.model.suspended) ||\n (this.model.active && tenant.status === TenantStatus.ACTIVE) ||\n (this.model.suspended && tenant.status === TenantStatus.SUSPENDED)\n )\n });\n }\n\n resetFilter() {\n this.context.resetFilter();\n }\n}\n","<form #filterForm=\"ngForm\">\n <div class=\"m-b-8 p-t-8\">\n <label>{{ 'Filter by status' | translate }}</label>\n <c8y-form-group class=\"m-b-0\">\n <label class=\"c8y-checkbox\">\n <input type=\"checkbox\" name=\"active\" [(ngModel)]=\"model.active\" />\n <span></span>\n <span>{{ 'Active`tenant`' | translate }}</span>\n </label>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-0\">\n <label class=\"c8y-checkbox\">\n <input type=\"checkbox\" name=\"suspended\" [(ngModel)]=\"model.suspended\" />\n <span></span>\n <span>{{ 'Suspended`tenant`' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n</form>\n\n<div class=\"data-grid__dropdown__footer d-flex separator-top\">\n <button\n class=\"btn btn-default btn-sm m-r-8 flex-grow\"\n (click)=\"resetFilter()\"\n title=\"{{ 'Reset' | translate }}\"\n >\n {{ 'Reset' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n [disabled]=\"filterForm.invalid\"\n (click)=\"applyFilter()\"\n title=\"{{ 'Apply' | translate }}\"\n >\n {{ 'Apply' | translate }}\n </button>\n</div>\n","import { Component } from '@angular/core';\nimport { ITenant } from '@c8y/client';\nimport { FilteringFormRendererContext } from '@c8y/ngx-components';\n\n@Component({\n templateUrl: './creation-time.filtering-form-renderer.component.html'\n})\nexport class CreationTimeFilteringFormRendererComponent {\n model: {\n dateFrom: Date;\n dateTo: Date;\n };\n\n constructor(public context: FilteringFormRendererContext) {\n this.model = (this.context.property.externalFilterQuery || {}).model || {};\n }\n\n applyFilter() {\n this.context.applyFilter({\n externalFilterQuery: {\n model: this.model\n },\n filterPredicate: (tenant: ITenant) => {\n const creationTime = new Date(tenant.creationTime);\n let dateFrom;\n let dateTo;\n\n if (this.model.dateFrom) {\n dateFrom = this.model.dateFrom;\n dateFrom.setHours(0, 0, 0, 0);\n }\n\n if (this.model.dateTo) {\n dateTo = this.model.dateTo;\n dateTo.setHours(23, 59, 59, 999);\n }\n\n return Boolean(\n (!dateFrom && !dateTo) ||\n (dateFrom && !dateTo && dateFrom <= creationTime) ||\n (!dateFrom && dateTo && creationTime <= dateTo) ||\n (dateFrom && dateTo && dateFrom <= creationTime && creationTime <= dateTo)\n );\n }\n });\n }\n\n resetFilter() {\n this.context.resetFilter();\n }\n}\n","<form #filterForm=\"ngForm\">\n <div class=\"m-b-8 p-t-8\">\n <label>{{ 'Filter by creation time' | translate }}</label>\n <c8y-form-group class=\"datepicker d-block m-b-16\" style=\"max-height: 32px\">\n <input\n name=\"dateFrom\"\n [(ngModel)]=\"model.dateFrom\"\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Created from`date`' | translate }}\"\n bsDatepicker\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true }\"\n [maxDate]=\"model.dateTo\"\n />\n </c8y-form-group>\n <c8y-form-group class=\"datepicker m-l-0 d-block\" style=\"max-height: 32px\">\n <input\n name=\"dateTo\"\n [(ngModel)]=\"model.dateTo\"\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Created to`date`' | translate }}\"\n bsDatepicker\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true }\"\n [minDate]=\"model.dateFrom\"\n />\n </c8y-form-group>\n </div>\n</form>\n\n<div class=\"data-grid__dropdown__footer d-flex separator-top\">\n <button\n class=\"btn btn-default btn-sm m-r-8 flex-grow\"\n (click)=\"resetFilter()\"\n title=\"{{ 'Reset' | translate }}\"\n >\n {{ 'Reset' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n [disabled]=\"filterForm.invalid\"\n (click)=\"applyFilter()\"\n title=\"{{ 'Apply' | translate }}\"\n >\n {{ 'Apply' | translate }}\n </button>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, from } from 'rxjs';\nimport { expand, reduce, shareReplay, takeWhile } from 'rxjs/operators';\nimport { saveAs } from 'file-saver';\n\nimport {\n ICurrentTenant,\n IResultList,\n ITenant,\n TenantService,\n TenantStatus,\n UserService\n} from '@c8y/client';\nimport {\n ActionControl,\n AlertService,\n AppStateService,\n BuiltInActionType,\n Column,\n SortOrder,\n DisplayOptions,\n gettext,\n ModalService,\n Pagination,\n Status,\n TenantUiService,\n PasswordService\n} from '@c8y/ngx-components';\n\nimport { StatusFilteringFormRendererComponent } from './status.filtering-form-renderer.component';\nimport { CreationTimeFilteringFormRendererComponent } from './creation-time.filtering-form-renderer.component';\n\n@Component({\n selector: 'c8y-tenant-list',\n templateUrl: './tenant-list.component.html'\n})\nexport class TenantListComponent implements OnInit {\n tenants$: BehaviorSubject<ITenant[]> = new BehaviorSubject(undefined);\n currentTenant: ICurrentTenant;\n isManagementTenant: boolean;\n TOP_TENANT_NAME: string = 'management';\n\n title: string = null;\n loadMoreItemsLabel: string = gettext('Load more tenants');\n loadingItemsLabel: string = gettext('Loading tenants…');\n\n displayOptions: DisplayOptions = {\n bordered: false,\n striped: true,\n filter: true,\n gridHeader: true\n };\n\n columns: Column[] = this.getColumns();\n pagination: Pagination = this.getPagination();\n showSearch: boolean = true;\n actionControls: ActionControl[] = this.getActionControls();\n\n TenantStatus = TenantStatus;\n\n constructor(\n public appState: AppStateService,\n private alertService: AlertService,\n private modalService: ModalService,\n private translateService: TranslateService,\n private tenantService: TenantService,\n private tenantUiService: TenantUiService,\n private location: Location,\n private passwordService: PasswordService,\n private userService: UserService\n ) {}\n\n async ngOnInit() {\n this.currentTenant = this.appState.currentTenant.value;\n this.isManagementTenant = await this.tenantUiService.isManagementTenant();\n this.loadTenants();\n }\n\n loadTenants() {\n this.tenants$.next(undefined);\n from(this.tenantService.list({ pageSize: 2000, withTotalPages: true, withApps: false }))\n .pipe(\n expand(resultList => resultList.paging.nextPage !== null && resultList.paging.next()),\n takeWhile(resultList => resultList.paging.nextPage !== null, true),\n reduce(\n (tenants: ITenant[], resultList: IResultList<ITenant>) => [\n ...tenants,\n ...resultList.data\n ],\n []\n ),\n shareReplay(1)\n )\n .subscribe(tenants => this.tenants$.next(tenants));\n }\n\n getColumns(): Column[] {\n return [\n {\n name: 'company',\n header: gettext('Tenant'),\n path: 'company',\n filterable: true,\n sortable: true,\n sortOrder: 'asc' as SortOrder\n },\n {\n name: 'id',\n header: gettext('ID'),\n path: 'id',\n filterable: true,\n sortable: true\n },\n {\n name: 'domain',\n header: gettext('Domain'),\n path: 'domain',\n filterable: true,\n sortable: true\n },\n {\n name: 'parent',\n header: gettext('Parent tenant'),\n path: 'parent',\n filterable: true,\n sortable: true\n },\n {\n name: 'contactName',\n header: gettext('Contact name'),\n path: 'contactName',\n filterable: true,\n sortable: true\n },\n {\n name: 'creationTime',\n header: gettext('Created'),\n path: 'creationTime',\n filterable: true,\n filteringFormRendererComponent: CreationTimeFilteringFormRendererComponent,\n sortable: true\n },\n {\n name: 'externalReference',\n header: gettext('External reference'),\n path: 'customProperties.externalReference',\n filterable: true,\n sortable: true\n },\n {\n name: 'status',\n header: gettext('Status'),\n path: 'status',\n filterable: true,\n filteringFormRendererComponent: StatusFilteringFormRendererComponent,\n sortable: true,\n resizable: false\n }\n ];\n }\n\n getPagination(): Pagination {\n return {\n pageSize: 10,\n currentPage: 1\n };\n }\n\n getActionControls(): ActionControl[] {\n return [\n {\n type: BuiltInActionType.Edit,\n text: gettext('Edit`tenant`'),\n callback: tenant => this.goToDetails(tenant)\n },\n {\n type: 'activateTenantAction',\n icon: 'power-off',\n text: gettext('Activate`tenant`'),\n callback: (tenant: ITenant) => this.activateTenant(tenant),\n showIf: (tenant: ITenant) => this.isSuspended(tenant)\n },\n {\n type: 'suspendTenantAction',\n icon: 'power-off',\n text: gettext('Suspend`tenant`'),\n callback: (tenant: ITenant) => this.suspendTenant(tenant),\n showIf: (tenant: ITenant) => this.isActive(tenant)\n },\n {\n type: BuiltInActionType.Delete,\n text: gettext('Delete`tenant`'),\n callback: tenant => this.delete(tenant),\n showIf: () => this.isManagementTenant\n }\n ];\n }\n\n createTenant() {\n this.location.go('/tenants/new');\n }\n\n goToDetails(tenant: ITenant) {\n this.location.go(`/tenants/${tenant.id}`);\n }\n\n async activateTenant(tenant) {\n try {\n const { data: savedTenant } = await this.tenantService.update({\n id: tenant.id,\n status: TenantStatus.ACTIVE\n });\n Object.assign(tenant, savedTenant);\n this.alertService.success(gettext('Tenant activated.'));\n } catch (ex) {\n if (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n }\n\n async suspendTenant(tenant) {\n const title = gettext('Suspend tenant');\n const confirmationText = gettext(\n 'You are about to suspend tenant \"{{ company }}\" (ID \"{{ id }}\").'\n );\n const proceed = gettext('Do you want to proceed?');\n const body = [\n this.translateService.instant(confirmationText, {\n company: tenant.company,\n id: tenant.id\n }),\n this.translateService.instant(proceed)\n ].join(' ');\n const labels = {\n ok: gettext('Suspend`tenant`')\n };\n try {\n await this.modalService.confirm(title, body, Status.DANGER, labels);\n const confirmed = await this.passwordService.confirmPassword().toPromise();\n if (confirmed === true) {\n const { data: savedTenant } = await this.tenantService.update({\n id: tenant.id,\n status: TenantStatus.SUSPENDED\n });\n Object.assign(tenant, savedTenant);\n this.alertService.success(gettext('Tenant suspended.'));\n }\n } catch (ex) {\n if (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n }\n\n async delete(tenant) {\n const title = gettext('Delete tenant');\n const confirmationText = gettext(\n 'You are about to delete tenant \"{{ company }}\" (ID \"{{ id }}\").'\n );\n const hint = gettext('This operation is irreversible.');\n const proceed = gettext('Do you want to proceed?');\n const body = [\n this.translateService.instant(confirmationText, {\n company: tenant.company,\n id: tenant.id\n }),\n this.translateService.instant(hint),\n this.translateService.instant(proceed)\n ].join(' ');\n const labels = {\n ok: gettext('Delete`tenant`')\n };\n try {\n await this.modalService.confirm(title, body, Status.DANGER, labels);\n const confirmed = await this.passwordService.confirmPassword().toPromise();\n if (confirmed === true) {\n await this.tenantService.delete(tenant);\n const tenantsWithoutRemovedOne = this.tenants$.value.filter(t => t !== tenant);\n this.tenants$.next(tenantsWithoutRemovedOne);\n this.alertService.success(\n gettext('Tenant is being deleted in the background. This might take a while…')\n );\n }\n } catch (ex) {\n if (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n }\n\n isActive(tenant: ITenant) {\n return tenant.status === TenantStatus.ACTIVE;\n }\n\n isSuspended(tenant: ITenant) {\n return tenant.status === TenantStatus.SUSPENDED;\n }\n\n async downloadNewsletterEmails() {\n const { res, data } = await this.userService.getNewsletterEmails();\n const contentType = res.headers.get('content-type');\n const contentDisposition = res.headers.get('content-disposition');\n const filename = /filename=\"(.*)\"/.exec(contentDisposition)[1];\n const blob = new Blob([data], { type: contentType });\n saveAs(blob, filename);\n }\n}\n","<c8y-title>\n {{ 'Subtenants' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n label=\"{{ 'Tenants' | translate }}\"\n icon=\"cog\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Subtenants' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n\n<c8y-action-bar-item *ngIf=\"!!(appState.state$ | async).newsletter\" [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\n (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 class=\"btn btn-link\" title=\"{{ 'Create tenant' | translate }}\" (click)=\"createTenant()\">\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=\"gears\"></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-edition/#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","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\n\nimport { CoreModule, hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { TenantsNavigationFactory } from './tenants-navigation.factory';\nimport { TenantListComponent } from './tenant-list/tenant-list.component';\nimport { CreationTimeFilteringFormRendererComponent } from './tenant-list/creation-time.filtering-form-renderer.component';\nimport { StatusFilteringFormRendererComponent } from './tenant-list/status.filtering-form-renderer.component';\nimport { TenantsModuleConfig, TENANTS_MODULE_CONFIG } from './tenants.model';\nimport { TenantListGuard } from './tenant-list/tenant-list.guard';\n\n@NgModule({\n imports: [RouterModule, BsDatepickerModule, CoreModule],\n exports: [],\n declarations: [\n TenantListComponent,\n CreationTimeFilteringFormRendererComponent,\n StatusFilteringFormRendererComponent\n ],\n entryComponents: [\n TenantListComponent,\n CreationTimeFilteringFormRendererComponent,\n StatusFilteringFormRendererComponent\n ],\n providers: [\n TenantListGuard,\n hookNavigator(TenantsNavigationFactory),\n hookRoute({\n path: 'tenants',\n component: TenantListComponent,\n canActivate: [TenantListGuard]\n })\n ]\n})\nexport class TenantsModule {\n static config(config: TenantsModuleConfig = {}): ModuleWithProviders<TenantsModule> {\n return {\n ngModule: TenantsModule,\n providers: [\n {\n provide: TENANTS_MODULE_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-tenants.mjs","sources":["../../tenants/tenants.model.ts","../../tenants/tenant-list/tenant-list.guard.ts","../../tenants/tenants-navigation.factory.ts","../../tenants/tenant-list/status.filtering-form-renderer.component.ts","../../tenants/tenant-list/status.filtering-form-renderer.component.html","../../tenants/tenant-list/creation-time.filtering-form-renderer.component.ts","../../tenants/tenant-list/creation-time.filtering-form-renderer.component.html","../../tenants/tenant-list/tenant-list.component.ts","../../tenants/tenant-list/tenant-list.component.html","../../tenants/tenants.module.ts","../../tenants/c8y-ngx-components-tenants.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { NavigatorNode } from '@c8y/ngx-components';\n\nexport const TENANTS_MODULE_CONFIG = new InjectionToken<TenantsModuleConfig>('TenantsModuleConfig');\n\n/**\n * Configuration object for `TenantsModule`.\n */\nexport interface TenantsModuleConfig {\n /**\n * Allows for hiding or customizing \"Subtenants\" navigator node:\n * - `subtenantsNavigatorNode: true` - shows the default navigator node (default),\n * - `subtenantsNavigatorNode: false` - hides the navigator node,\n * - `subtenantsNavigatorNode: { label: 'My subtenants' }` - overrides default navigator node,\n * - `subtenantsNavigatorNode: new NavigatorNode({ label: 'My subtenants' })` - overrides default navigator node.\n */\n subtenantsNavigatorNode?: boolean | Partial<NavigatorNode>;\n}\n","import { Injectable } from '@angular/core';\nimport { CanActivate } from '@angular/router';\nimport { TenantUiService } from '@c8y/ngx-components';\n\n@Injectable()\nexport class TenantListGuard implements CanActivate {\n private active: boolean;\n\n constructor(private tenantUiService: TenantUiService) {}\n\n /**\n * Checks if tenant list should be active,\n * i.e. whether the current tenant can read other tenants.\n * **Note: the check is executed only once in the runtime.**\n *\n * @returns True, if the feature should be active.\n */\n canActivate(): boolean {\n if (this.active === undefined) {\n this.active = this.tenantUiService.canReadTenants();\n }\n return this.active;\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { gettext, NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\nimport { TenantListGuard } from './tenant-list/tenant-list.guard';\nimport { TenantsModuleConfig, TENANTS_MODULE_CONFIG } from './tenants.model';\n\n@Injectable()\nexport class TenantsNavigationFactory implements NavigatorNodeFactory {\n private navs: NavigatorNode[] = [];\n\n constructor(\n private tenantListGuard: TenantListGuard,\n @Optional() @Inject(TENANTS_MODULE_CONFIG) private config: TenantsModuleConfig\n ) {}\n\n async get(): Promise<NavigatorNode[]> {\n const canActivateTenantList = await this.tenantListGuard.canActivate();\n if (!this.navs.length) {\n const subtenantsNavigatorNode = this.config?.subtenantsNavigatorNode ?? true;\n if (subtenantsNavigatorNode !== false) {\n this.navs.push(\n new NavigatorNode({\n parent: gettext('Tenants'),\n label: gettext('Subtenants'),\n icon: 'c8y-sub-tenants',\n path: 'tenants',\n routerLinkExact: false,\n priority: 4000,\n hidden: !canActivateTenantList,\n ...(subtenantsNavigatorNode === true ? {} : subtenantsNavigatorNode)\n })\n );\n }\n }\n return this.navs;\n }\n}\n","import { Component } from '@angular/core';\nimport { ITenant, TenantStatus } from '@c8y/client';\nimport { FilteringFormRendererContext } from '@c8y/ngx-components';\n\n@Component({\n templateUrl: './status.filtering-form-renderer.component.html'\n})\nexport class StatusFilteringFormRendererComponent {\n model: {\n active: boolean;\n suspended: boolean;\n };\n\n constructor(public context: FilteringFormRendererContext) {\n this.model = (this.context.property.externalFilterQuery || {}).model || {};\n }\n\n applyFilter() {\n this.context.applyFilter({\n externalFilterQuery: {\n model: this.model\n },\n filterPredicate: (tenant: ITenant) =>\n Boolean(\n (!this.model.active && !this.model.suspended) ||\n (this.model.active && tenant.status === TenantStatus.ACTIVE) ||\n (this.model.suspended && tenant.status === TenantStatus.SUSPENDED)\n )\n });\n }\n\n resetFilter() {\n this.context.resetFilter();\n }\n}\n","<form #filterForm=\"ngForm\">\n <div class=\"m-b-8 p-t-8\">\n <label>{{ 'Filter by status' | translate }}</label>\n <c8y-form-group class=\"m-b-0\">\n <label class=\"c8y-checkbox\">\n <input type=\"checkbox\" name=\"active\" [(ngModel)]=\"model.active\" />\n <span></span>\n <span>{{ 'Active`tenant`' | translate }}</span>\n </label>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-0\">\n <label class=\"c8y-checkbox\">\n <input type=\"checkbox\" name=\"suspended\" [(ngModel)]=\"model.suspended\" />\n <span></span>\n <span>{{ 'Suspended`tenant`' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n</form>\n\n<div class=\"data-grid__dropdown__footer d-flex separator-top\">\n <button\n class=\"btn btn-default btn-sm m-r-8 flex-grow\"\n (click)=\"resetFilter()\"\n title=\"{{ 'Reset' | translate }}\"\n >\n {{ 'Reset' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n [disabled]=\"filterForm.invalid\"\n (click)=\"applyFilter()\"\n title=\"{{ 'Apply' | translate }}\"\n >\n {{ 'Apply' | translate }}\n </button>\n</div>\n","import { Component } from '@angular/core';\nimport { ITenant } from '@c8y/client';\nimport { FilteringFormRendererContext } from '@c8y/ngx-components';\n\n@Component({\n templateUrl: './creation-time.filtering-form-renderer.component.html'\n})\nexport class CreationTimeFilteringFormRendererComponent {\n model: {\n dateFrom: Date;\n dateTo: Date;\n };\n\n constructor(public context: FilteringFormRendererContext) {\n this.model = (this.context.property.externalFilterQuery || {}).model || {};\n }\n\n applyFilter() {\n this.context.applyFilter({\n externalFilterQuery: {\n model: this.model\n },\n filterPredicate: (tenant: ITenant) => {\n const creationTime = new Date(tenant.creationTime);\n let dateFrom;\n let dateTo;\n\n if (this.model.dateFrom) {\n dateFrom = this.model.dateFrom;\n dateFrom.setHours(0, 0, 0, 0);\n }\n\n if (this.model.dateTo) {\n dateTo = this.model.dateTo;\n dateTo.setHours(23, 59, 59, 999);\n }\n\n return Boolean(\n (!dateFrom && !dateTo) ||\n (dateFrom && !dateTo && dateFrom <= creationTime) ||\n (!dateFrom && dateTo && creationTime <= dateTo) ||\n (dateFrom && dateTo && dateFrom <= creationTime && creationTime <= dateTo)\n );\n }\n });\n }\n\n resetFilter() {\n this.context.resetFilter();\n }\n}\n","<form #filterForm=\"ngForm\">\n <div class=\"m-b-8 p-t-8\">\n <label>{{ 'Filter by creation time' | translate }}</label>\n <c8y-form-group class=\"datepicker d-block m-b-16\" style=\"max-height: 32px\">\n <input\n name=\"dateFrom\"\n [(ngModel)]=\"model.dateFrom\"\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Created from`date`' | translate }}\"\n bsDatepicker\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true }\"\n [maxDate]=\"model.dateTo\"\n />\n </c8y-form-group>\n <c8y-form-group class=\"datepicker m-l-0 d-block\" style=\"max-height: 32px\">\n <input\n name=\"dateTo\"\n [(ngModel)]=\"model.dateTo\"\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Created to`date`' | translate }}\"\n bsDatepicker\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true }\"\n [minDate]=\"model.dateFrom\"\n />\n </c8y-form-group>\n </div>\n</form>\n\n<div class=\"data-grid__dropdown__footer d-flex separator-top\">\n <button\n class=\"btn btn-default btn-sm m-r-8 flex-grow\"\n (click)=\"resetFilter()\"\n title=\"{{ 'Reset' | translate }}\"\n >\n {{ 'Reset' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n [disabled]=\"filterForm.invalid\"\n (click)=\"applyFilter()\"\n title=\"{{ 'Apply' | translate }}\"\n >\n {{ 'Apply' | translate }}\n </button>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, from } from 'rxjs';\nimport { expand, reduce, shareReplay, takeWhile } from 'rxjs/operators';\nimport { saveAs } from 'file-saver';\n\nimport {\n ICurrentTenant,\n IResultList,\n ITenant,\n TenantService,\n TenantStatus,\n UserService\n} from '@c8y/client';\nimport {\n ActionControl,\n AlertService,\n AppStateService,\n BuiltInActionType,\n Column,\n SortOrder,\n DisplayOptions,\n gettext,\n ModalService,\n Pagination,\n Status,\n TenantUiService,\n PasswordService\n} from '@c8y/ngx-components';\n\nimport { StatusFilteringFormRendererComponent } from './status.filtering-form-renderer.component';\nimport { CreationTimeFilteringFormRendererComponent } from './creation-time.filtering-form-renderer.component';\n\n@Component({\n selector: 'c8y-tenant-list',\n templateUrl: './tenant-list.component.html'\n})\nexport class TenantListComponent implements OnInit {\n tenants$: BehaviorSubject<ITenant[]> = new BehaviorSubject(undefined);\n currentTenant: ICurrentTenant;\n isManagementTenant: boolean;\n TOP_TENANT_NAME: string = 'management';\n\n title: string = null;\n loadMoreItemsLabel: string = gettext('Load more tenants');\n loadingItemsLabel: string = gettext('Loading tenants…');\n\n displayOptions: DisplayOptions = {\n bordered: false,\n striped: true,\n filter: true,\n gridHeader: true\n };\n\n columns: Column[] = this.getColumns();\n pagination: Pagination = this.getPagination();\n showSearch: boolean = true;\n actionControls: ActionControl[] = this.getActionControls();\n\n TenantStatus = TenantStatus;\n\n constructor(\n public appState: AppStateService,\n private alertService: AlertService,\n private modalService: ModalService,\n private translateService: TranslateService,\n private tenantService: TenantService,\n private tenantUiService: TenantUiService,\n private location: Location,\n private passwordService: PasswordService,\n private userService: UserService\n ) {}\n\n async ngOnInit() {\n this.currentTenant = this.appState.currentTenant.value;\n this.isManagementTenant = await this.tenantUiService.isManagementTenant();\n this.loadTenants();\n }\n\n loadTenants() {\n this.tenants$.next(undefined);\n from(this.tenantService.list({ pageSize: 2000, withTotalPages: true, withApps: false }))\n .pipe(\n expand(resultList => resultList.paging.nextPage !== null && resultList.paging.next()),\n takeWhile(resultList => resultList.paging.nextPage !== null, true),\n reduce(\n (tenants: ITenant[], resultList: IResultList<ITenant>) => [\n ...tenants,\n ...resultList.data\n ],\n []\n ),\n shareReplay(1)\n )\n .subscribe(tenants => this.tenants$.next(tenants));\n }\n\n getColumns(): Column[] {\n return [\n {\n name: 'company',\n header: gettext('Tenant'),\n path: 'company',\n filterable: true,\n sortable: true,\n sortOrder: 'asc' as SortOrder\n },\n {\n name: 'id',\n header: gettext('ID'),\n path: 'id',\n filterable: true,\n sortable: true\n },\n {\n name: 'domain',\n header: gettext('Domain'),\n path: 'domain',\n filterable: true,\n sortable: true\n },\n {\n name: 'parent',\n header: gettext('Parent tenant'),\n path: 'parent',\n filterable: true,\n sortable: true\n },\n {\n name: 'contactName',\n header: gettext('Contact name'),\n path: 'contactName',\n filterable: true,\n sortable: true\n },\n {\n name: 'creationTime',\n header: gettext('Created'),\n path: 'creationTime',\n filterable: true,\n filteringFormRendererComponent: CreationTimeFilteringFormRendererComponent,\n sortable: true\n },\n {\n name: 'externalReference',\n header: gettext('External reference'),\n path: 'customProperties.externalReference',\n filterable: true,\n sortable: true\n },\n {\n name: 'status',\n header: gettext('Status'),\n path: 'status',\n filterable: true,\n filteringFormRendererComponent: StatusFilteringFormRendererComponent,\n sortable: true,\n resizable: false\n }\n ];\n }\n\n getPagination(): Pagination {\n return {\n pageSize: 10,\n currentPage: 1\n };\n }\n\n getActionControls(): ActionControl[] {\n return [\n {\n type: BuiltInActionType.Edit,\n text: gettext('Edit`tenant`'),\n callback: tenant => this.goToDetails(tenant)\n },\n {\n type: 'activateTenantAction',\n icon: 'power-off',\n text: gettext('Activate`tenant`'),\n callback: (tenant: ITenant) => this.activateTenant(tenant),\n showIf: (tenant: ITenant) => this.isSuspended(tenant)\n },\n {\n type: 'suspendTenantAction',\n icon: 'power-off',\n text: gettext('Suspend`tenant`'),\n callback: (tenant: ITenant) => this.suspendTenant(tenant),\n showIf: (tenant: ITenant) => this.isActive(tenant)\n },\n {\n type: BuiltInActionType.Delete,\n text: gettext('Delete`tenant`'),\n callback: tenant => this.delete(tenant),\n showIf: () => this.isManagementTenant\n }\n ];\n }\n\n createTenant() {\n this.location.go('/tenants/new');\n }\n\n goToDetails(tenant: ITenant) {\n this.location.go(`/tenants/${tenant.id}`);\n }\n\n async activateTenant(tenant) {\n try {\n const { data: savedTenant } = await this.tenantService.update({\n id: tenant.id,\n status: TenantStatus.ACTIVE\n });\n Object.assign(tenant, savedTenant);\n this.alertService.success(gettext('Tenant activated.'));\n } catch (ex) {\n if (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n }\n\n async suspendTenant(tenant) {\n const title = gettext('Suspend tenant');\n const confirmationText = gettext(\n 'You are about to suspend tenant \"{{ company }}\" (ID \"{{ id }}\").'\n );\n const proceed = gettext('Do you want to proceed?');\n const body = [\n this.translateService.instant(confirmationText, {\n company: tenant.company,\n id: tenant.id\n }),\n this.translateService.instant(proceed)\n ].join(' ');\n const labels = {\n ok: gettext('Suspend`tenant`')\n };\n try {\n await this.modalService.confirm(title, body, Status.DANGER, labels);\n const confirmed = await this.passwordService.confirmPassword().toPromise();\n if (confirmed === true) {\n const { data: savedTenant } = await this.tenantService.update({\n id: tenant.id,\n status: TenantStatus.SUSPENDED\n });\n Object.assign(tenant, savedTenant);\n this.alertService.success(gettext('Tenant suspended.'));\n }\n } catch (ex) {\n if (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n }\n\n async delete(tenant) {\n const title = gettext('Delete tenant');\n const confirmationText = gettext(\n 'You are about to delete tenant \"{{ company }}\" (ID \"{{ id }}\").'\n );\n const hint = gettext('This operation is irreversible.');\n const proceed = gettext('Do you want to proceed?');\n const body = [\n this.translateService.instant(confirmationText, {\n company: tenant.company,\n id: tenant.id\n }),\n this.translateService.instant(hint),\n this.translateService.instant(proceed)\n ].join(' ');\n const labels = {\n ok: gettext('Delete`tenant`')\n };\n try {\n await this.modalService.confirm(title, body, Status.DANGER, labels);\n const confirmed = await this.passwordService.confirmPassword().toPromise();\n if (confirmed === true) {\n await this.tenantService.delete(tenant);\n const tenantsWithoutRemovedOne = this.tenants$.value.filter(t => t !== tenant);\n this.tenants$.next(tenantsWithoutRemovedOne);\n this.alertService.success(\n gettext('Tenant is being deleted in the background. This might take a while…')\n );\n }\n } catch (ex) {\n if (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n }\n\n isActive(tenant: ITenant) {\n return tenant.status === TenantStatus.ACTIVE;\n }\n\n isSuspended(tenant: ITenant) {\n return tenant.status === TenantStatus.SUSPENDED;\n }\n\n async downloadNewsletterEmails() {\n const { res, data } = await this.userService.getNewsletterEmails();\n const contentType = res.headers.get('content-type');\n const contentDisposition = res.headers.get('content-disposition');\n const filename = /filename=\"(.*)\"/.exec(contentDisposition)[1];\n const blob = new Blob([data], { type: contentType });\n saveAs(blob, filename);\n }\n}\n","<c8y-title>\n {{ 'Subtenants' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item label=\"{{ 'Tenants' | translate }}\" icon=\"cog\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'cog'\" [label]=\"'Subtenants' | translate\"></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 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 class=\"btn btn-link\" title=\"{{ 'Create tenant' | translate }}\" (click)=\"createTenant()\">\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=\"gears\"></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","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\n\nimport { CoreModule, hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { TenantsNavigationFactory } from './tenants-navigation.factory';\nimport { TenantListComponent } from './tenant-list/tenant-list.component';\nimport { CreationTimeFilteringFormRendererComponent } from './tenant-list/creation-time.filtering-form-renderer.component';\nimport { StatusFilteringFormRendererComponent } from './tenant-list/status.filtering-form-renderer.component';\nimport { TenantsModuleConfig, TENANTS_MODULE_CONFIG } from './tenants.model';\nimport { TenantListGuard } from './tenant-list/tenant-list.guard';\n\n@NgModule({\n imports: [RouterModule, BsDatepickerModule, CoreModule],\n exports: [],\n declarations: [\n TenantListComponent,\n CreationTimeFilteringFormRendererComponent,\n StatusFilteringFormRendererComponent\n ],\n entryComponents: [\n TenantListComponent,\n CreationTimeFilteringFormRendererComponent,\n StatusFilteringFormRendererComponent\n ],\n providers: [\n TenantListGuard,\n hookNavigator(TenantsNavigationFactory),\n hookRoute({\n path: 'tenants',\n component: TenantListComponent,\n canActivate: [TenantListGuard]\n })\n ]\n})\nexport class TenantsModule {\n static config(config: TenantsModuleConfig = {}): ModuleWithProviders<TenantsModule> {\n return {\n ngModule: TenantsModule,\n providers: [\n {\n provide: TENANTS_MODULE_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3"],"mappings":"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"}