@c8y/ngx-components 1023.17.19 → 1023.22.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth-configuration/index.d.ts +4 -2
- package/auth-configuration/index.d.ts.map +1 -1
- package/datapoint-explorer/view/index.d.ts.map +1 -1
- package/echart/index.d.ts +3 -0
- package/echart/index.d.ts.map +1 -1
- package/echart/models/index.d.ts +3 -0
- package/echart/models/index.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +25 -17
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +4 -2
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +98 -59
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-group-breadcrumbs.mjs +2 -2
- package/fesm2022/c8y-ngx-components-group-breadcrumbs.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector.mjs +7 -8
- package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +2 -3
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +7 -9
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +6 -8
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +6 -8
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs +2 -2
- package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +9 -4
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +4 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +5 -4
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +5 -5
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +2 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +15 -12
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/icon-selector/index.d.ts.map +1 -1
- package/index.d.ts.map +1 -1
- package/locales/de.po +42 -31
- package/locales/es.po +45 -28
- package/locales/fr.po +45 -31
- package/locales/ja_JP.po +38 -31
- package/locales/ko.po +42 -31
- package/locales/locales.pot +42 -24
- package/locales/nl.po +45 -27
- package/locales/pl.po +44 -28
- package/locales/pt_BR.po +45 -28
- package/locales/zh_CN.po +46 -31
- package/locales/zh_TW.po +46 -31
- package/operations/stepper-bulk-type-firmware/index.d.ts.map +1 -1
- package/operations/stepper-bulk-type-software/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/repository/firmware/index.d.ts.map +1 -1
- package/repository/software/index.d.ts.map +1 -1
- package/trusted-certificates/index.d.ts.map +1 -1
- package/widgets/implementations/datapoints-graph/index.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/index.d.ts +1 -1
- package/widgets/implementations/info-gauge/index.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-tenants.mjs","sources":["../../tenants/tenant-list/tenant-list.guard.ts","../../tenants/tenants.model.ts","../../tenants/tenants-navigation.factory.ts","../../tenants/tenant-list/creation-time.filtering-form-renderer.component.ts","../../tenants/tenant-list/creation-time.filtering-form-renderer.component.html","../../tenants/tenant-list/status.filtering-form-renderer.component.ts","../../tenants/tenant-list/status.filtering-form-renderer.component.html","../../tenants/tenant-list/tenant-list.component.ts","../../tenants/tenant-list/tenant-list.component.html","../../tenants/tenant-form/tenant-form-inputs-definitions.ts","../../tenants/support-user-access/support-user-access.component.ts","../../tenants/support-user-access/support-user-access.component.html","../../tenants/tenant-form/tenant-form.component.ts","../../tenants/tenant-form/tenant-form.component.html","../../tenants/custom-properties/custom-properties.service.ts","../../tenants/custom-properties/custom-property-field/custom-property-field.component.ts","../../tenants/custom-properties/custom-property-field/custom-property-field.component.html","../../tenants/custom-properties/custom-properties.component.ts","../../tenants/custom-properties/custom-properties.component.html","../../tenants/tenant-limits/tenant-limits-definitions.ts","../../tenants/tenant-limits/tenant-limits.component.ts","../../tenants/tenant-limits/tenant-limits.component.html","../../tenants/existing-tenant.guard.ts","../../tenants/tenants.module.ts","../../tenants/c8y-ngx-components-tenants.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { TenantUiService } from '@c8y/ngx-components';\n\n@Injectable()\nexport class TenantListGuard {\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 { 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\nexport const PRODUCT_EXPERIENCE_TENANT_MANAGEMENT = {\n EVENTS: {\n TENANT_MANAGEMENT: 'tenantManagement'\n },\n COMPONENTS: {\n TENANT_LIST: 'tenant-list',\n TENANT_FORM: 'tenant-form',\n TENANT_CUSTOM_PROPERTIES: 'tenant-custom-properties',\n TENANT_LIMITS: 'tenant-limits'\n },\n ACTIONS: {\n TENANT_CREATION_INITIALIZED: 'tenantCreationInitialized',\n TENANT_CREATION_STARTED_FILLING: 'tenantCreationStartedFilling',\n TENANT_CREATION_SAVED: 'tenantCreationSaved',\n TENANT_PROPERTIES_OPENED: 'tenantPropertiesOpened',\n TENANT_PROPERTIES_STARTED_CHANGING: 'tenantPropertiesStartedChanging',\n TENANT_PROPERTIES_SAVED: 'tenantPropertiesSaved',\n TENANT_CUSTOM_PROPERTIES_OPENED: 'tenantCustomPropertiesOpened',\n TENANT_CUSTOM_PROPERTIES_STARTED_CHANGING: 'tenantCustomPropertiesStartedChanging',\n TENANT_CUSTOM_PROPERTIES_SAVED: 'tenantCustomPropertiesSaved',\n TENANT_LIMITS_OPENED: 'tenantLimitsOpened',\n TENANT_LIMITS_STARTED_CHANGING: 'tenantLimitsStartedChanging',\n TENANT_LIMITS_SAVED: 'tenantLimitsSaved'\n },\n RESULTS: {\n SUCCESS: 'success',\n FAILURE: 'failure'\n }\n} as const;\nexport type TenantManagementActionType =\n (typeof PRODUCT_EXPERIENCE_TENANT_MANAGEMENT.ACTIONS)[keyof typeof PRODUCT_EXPERIENCE_TENANT_MANAGEMENT.ACTIONS];\nexport type TenantManagementResultType =\n (typeof PRODUCT_EXPERIENCE_TENANT_MANAGEMENT.RESULTS)[keyof typeof PRODUCT_EXPERIENCE_TENANT_MANAGEMENT.RESULTS];\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { 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: {\n label: gettext('Tenants'),\n icon: 'c8y-layers'\n },\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, ElementRef } from '@angular/core';\nimport { ITenant } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n FilterChip,\n FilteringFormRendererContext,\n FormGroupComponent,\n C8yTranslatePipe,\n DatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FormsModule } from '@angular/forms';\nimport { BsDatepickerInputDirective, BsDatepickerDirective } from 'ngx-bootstrap/datepicker';\n\nexport interface Model {\n dateFrom: Date;\n dateTo: Date;\n}\n\n@Component({\n templateUrl: './creation-time.filtering-form-renderer.component.html',\n selector: 'c8y-creation-time-filtering-form-renderer',\n imports: [\n FormsModule,\n FormGroupComponent,\n BsDatepickerInputDirective,\n BsDatepickerDirective,\n C8yTranslatePipe\n ],\n providers: [DatePipe]\n})\nexport class CreationTimeFilteringFormRendererComponent {\n model: Model;\n\n constructor(\n public context: FilteringFormRendererContext,\n private c8yDate: DatePipe,\n private translateService: TranslateService\n ) {\n this.model = (this.context.property.externalFilterQuery || {}).model || {};\n }\n\n applyFilter() {\n this.context.applyFilter({\n externalFilterQuery: {\n model: this.model,\n chips: this.getChipsForModel(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 getChipsForModel(model: Model): FilterChip[] {\n const updateChips = externalFilterQuery => {\n externalFilterQuery.chips = this.getChipsForModel(externalFilterQuery.model);\n };\n const createChip = (key: keyof Model, displayValueTpl: string): FilterChip => {\n return {\n columnName: this.context.property.name,\n path: ['model', key],\n displayValue: this.translateService.instant(displayValueTpl, {\n date: this.c8yDate.transform(this.model[key], 'mediumDate')\n }),\n value: this.model[key],\n remove() {\n delete this.externalFilterQuery.model[key];\n updateChips(this.externalFilterQuery);\n return {\n columnName: this.columnName,\n externalFilterQuery: this.externalFilterQuery\n };\n }\n };\n };\n\n const chips = [];\n if (model.dateFrom) {\n chips.push(createChip('dateFrom', gettext('from: {{ date }}')));\n }\n if (model.dateTo) {\n chips.push(createChip('dateTo', gettext('to: {{ date }}')));\n }\n return chips;\n }\n\n resetFilter() {\n this.context.resetFilter();\n }\n\n // this method is only used for workaround for ngx-bootstrap issue (preventing the datepicker from closing dropdown when clicking inside the datepicker container)\n // TODO: remove this method when the issue is resolved https://github.com/valor-software/ngx-bootstrap/issues/6736\n datepickerShown({ _element }: { _element: ElementRef }) {\n const datepickerContainerElement = _element.nativeElement;\n datepickerContainerElement.addEventListener('click', (e: MouseEvent) => {\n e.stopPropagation();\n });\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\n class=\"datepicker d-block m-b-16\"\n style=\"max-height: 32px\"\n >\n <input\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Created from`date`' | translate }}\"\n name=\"dateFrom\"\n [(ngModel)]=\"model.dateFrom\"\n bsDatepicker\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true }\"\n [maxDate]=\"model.dateTo\"\n (onShown)=\"datepickerShown($event)\"\n />\n </c8y-form-group>\n <c8y-form-group\n class=\"datepicker m-l-0 d-block\"\n style=\"max-height: 32px\"\n >\n <input\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Created to`date`' | translate }}\"\n name=\"dateTo\"\n [(ngModel)]=\"model.dateTo\"\n bsDatepicker\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true }\"\n [minDate]=\"model.dateFrom\"\n (onShown)=\"datepickerShown($event)\"\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 title=\"{{ 'Reset' | translate }}\"\n (click)=\"resetFilter()\"\n >\n {{ 'Reset' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n [disabled]=\"filterForm.invalid || !(model.dateFrom || model.dateTo)\"\n (click)=\"applyFilter()\"\n >\n {{ 'Apply' | translate }}\n </button>\n</div>\n","import { Component } from '@angular/core';\nimport { ITenant, TenantStatus } from '@c8y/client';\nimport {\n FilteringFormRendererContext,\n FormGroupComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n templateUrl: './status.filtering-form-renderer.component.html',\n selector: 'c8y-status-filtering-form-renderer',\n imports: [FormsModule, FormGroupComponent, C8yTranslatePipe]\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 { Location, NgIf, AsyncPipe } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { saveAs } from 'file-saver';\nimport { BehaviorSubject, from } from 'rxjs';\nimport { expand, reduce, shareReplay, takeWhile } from 'rxjs/operators';\n\nimport {\n ICurrentTenant,\n IResultList,\n ITenant,\n TenantService,\n TenantStatus,\n UserService\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ActionControl,\n AlertService,\n AppStateService,\n BuiltInActionType,\n Column,\n DisplayOptions,\n GainsightService,\n ModalService,\n Pagination,\n PasswordService,\n Permissions,\n SortOrder,\n Status,\n TenantUiService,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n HelpComponent,\n DataGridComponent,\n LoadingComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n GuideDocsComponent,\n C8yTranslateDirective,\n GuideHrefDirective,\n ColumnDirective,\n CellRendererDefDirective,\n C8yTranslatePipe,\n DatePipe\n} from '@c8y/ngx-components';\n\nimport { CreationTimeFilteringFormRendererComponent } from './creation-time.filtering-form-renderer.component';\nimport { StatusFilteringFormRendererComponent } from './status.filtering-form-renderer.component';\nimport { PRODUCT_EXPERIENCE_TENANT_MANAGEMENT } from './../tenants.model';\nimport { RouterLink } from '@angular/router';\n\nconst { EVENTS, COMPONENTS, ACTIONS } = PRODUCT_EXPERIENCE_TENANT_MANAGEMENT;\n\n@Component({\n selector: 'c8y-tenant-list',\n templateUrl: './tenant-list.component.html',\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n NgIf,\n ActionBarItemComponent,\n IconDirective,\n HelpComponent,\n DataGridComponent,\n LoadingComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n GuideDocsComponent,\n C8yTranslateDirective,\n GuideHrefDirective,\n ColumnDirective,\n CellRendererDefDirective,\n RouterLink,\n C8yTranslatePipe,\n AsyncPipe,\n DatePipe\n ]\n})\nexport class TenantListComponent implements OnInit {\n tenants$: BehaviorSubject<ITenant[]> = new BehaviorSubject(undefined);\n isPermittedToCreateTenanant = this.permissionsService.hasAnyRole([\n Permissions.ROLE_TENANT_MANAGEMENT_ADMIN,\n Permissions.ROLE_TENANT_MANAGEMENT_CREATE\n ]);\n currentTenant: ICurrentTenant;\n isManagementTenant: boolean;\n TOP_TENANT_NAME = '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 hover: true\n };\n\n columns: Column[] = this.getColumns();\n pagination: Pagination = this.getPagination();\n showSearch = true;\n actionControls: ActionControl[] = this.getActionControls();\n\n noResultsMessage = gettext('No tenants to display.');\n noDataMessage = gettext('There are no tenants defined.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n noDataSubtitle = gettext('Create the first tenant.');\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 private permissionsService: Permissions,\n private gainsightService: GainsightService\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: async (tenant: ITenant) => {\n await this.activateTenant(tenant);\n this.loadTenants();\n },\n showIf: (tenant: ITenant) => this.isSuspended(tenant)\n },\n {\n type: 'suspendTenantAction',\n icon: 'power-off',\n text: gettext('Suspend`tenant`'),\n callback: async (tenant: ITenant) => {\n await this.suspendTenant(tenant);\n this.loadTenants();\n },\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(options: { sendGainsightEvent: boolean } = { sendGainsightEvent: true }) {\n if (options.sendGainsightEvent) {\n this.gainsightService.triggerEvent(EVENTS.TENANT_MANAGEMENT, {\n component: COMPONENTS.TENANT_LIST,\n action: ACTIONS.TENANT_CREATION_INITIALIZED\n });\n }\n\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 icon=\"c8y-layers\"\n label=\"{{ 'Tenants' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n *ngIf=\"!!(appState.state$ | async).newsletter\"\n [placement]=\"'right'\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\n type=\"button\"\n (click)=\"downloadNewsletterEmails()\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Email addresses' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Create tenant' | translate }}\"\n type=\"button\"\n (click)=\"createTenant({ sendGainsightEvent: false })\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Create tenant' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#managing-subtenants\"></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"tenants$ | async\"\n [pagination]=\"pagination\"\n [showSearch]=\"showSearch\"\n [actionControls]=\"actionControls\"\n (onReload)=\"loadTenants()\"\n >\n <ng-container *ngIf=\"!(tenants$ | async); else empty\">\n <c8y-loading></c8y-loading>\n </ng-container>\n <ng-template #empty>\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-layers'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"\n stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\n \"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <ng-container *ngIf=\"stats?.size === 0\">\n <div>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Create tenant' | translate }}\"\n (click)=\"createTenant()\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n {{ 'Create tenant' | translate }}\n </button>\n </div>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants\">user documentation</a>\n .\n </small>\n </p>\n </ng-container>\n </c8y-ui-empty-state>\n </ng-template>\n\n <c8y-column name=\"company\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n <a [routerLink]=\"['/tenants', context.item.id]\">{{ context.value }}</a>\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"parent\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value || currentTenant.name }}\">\n {{ context.value || currentTenant.name }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"creationTime\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | c8yDate }}\">\n {{ context.value | c8yDate }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"status\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n title=\"{{ 'Active`tenant`' | translate }}\"\n *ngIf=\"context.item.status === TenantStatus.ACTIVE\"\n >\n <i\n class=\"text-success\"\n c8yIcon=\"check-circle\"\n ></i>\n </span>\n <span\n title=\"{{ 'Suspended`tenant`' | translate }}\"\n *ngIf=\"context.item.status === TenantStatus.SUSPENDED\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"ban\"\n ></i>\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n","import { ValidatorFn, Validators } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ValidationPattern, validateInternationalPhoneNumber } from '@c8y/ngx-components';\n\n// Model for individual tenant form fields\nexport interface TenantPropertyDefinition {\n id: string;\n defaultValue: number | string | boolean | null;\n type: 'text' | 'checkbox' | 'number' | 'select';\n label: string;\n validators: ValidatorFn[];\n placeholder?: string;\n}\n\n/**\n * Define all hardTyped tenant form fields, checkboxes and select elements.\n *\n * while still benefiting from hard typing, thanks to \"satisfies\" keyword\n */\nconst tenantPropertiesDefinitions = {\n tenantID: {\n id: 'tenantId',\n validators: [],\n defaultValue: null,\n type: 'text',\n label: gettext('ID')\n },\n domain: {\n id: 'domain',\n validators: [\n Validators.required,\n Validators.maxLength(32),\n // TODO: To be consistent, pattern should be change for domain. It is tenantId, to avoid breaking tests, and be consistent with previous implementation.\n Validators.pattern(ValidationPattern.rules.tenantId.pattern)\n ],\n defaultValue: null,\n type: 'text',\n label: gettext('Domain/URL'),\n placeholder: gettext('e.g. my-tenant`used in URL`')\n },\n companyName: {\n id: 'companyName',\n validators: [\n Validators.required,\n Validators.maxLength(256),\n Validators.pattern(ValidationPattern.rules.noLeadingOrTrailingWhitespaces.pattern)\n ],\n defaultValue: null,\n type: 'text',\n label: gettext('Name'),\n placeholder: gettext('e.g. Company A')\n },\n contactName: {\n id: 'contactName',\n validators: [Validators.maxLength(30)],\n defaultValue: null,\n type: 'text',\n label: gettext('Contact name'),\n placeholder: gettext('e.g. Joe Doe`LOCALIZE`')\n },\n contactPhone: {\n id: 'contactPhone',\n validators: [Validators.required, validateInternationalPhoneNumber(), Validators.maxLength(20)],\n defaultValue: null,\n type: 'text',\n label: gettext('Contact phone'),\n placeholder: gettext('e.g. +49 9 876 543 210`LOCALIZE`')\n },\n administratorEmail: {\n id: 'administratorEmail',\n validators: [Validators.required, Validators.email, Validators.maxLength(256)],\n defaultValue: null,\n type: 'text',\n label: gettext(`Administrator's email`),\n placeholder: gettext('e.g. joe.doe@example.com`LOCALIZE`')\n },\n administratorUsername: {\n id: 'administratorUsername',\n validators: [\n Validators.required,\n Validators.pattern(ValidationPattern.rules.user.pattern),\n Validators.maxLength(256)\n ],\n defaultValue: null,\n type: 'text',\n label: gettext(`Administrator's username`),\n placeholder: gettext('e.g. joe`LOCALIZE`')\n },\n externalReference: {\n id: 'externalReference',\n validators: [],\n defaultValue: null,\n type: 'text',\n label: gettext('External reference'),\n placeholder: gettext('e.g. REF12345`reference number`')\n },\n sendPasswordResetEmail: {\n id: 'sendPasswordResetEmail',\n validators: [],\n defaultValue: true,\n type: 'checkbox',\n label: gettext('Send password reset link as email')\n },\n tenantPolicy: {\n id: 'tenantPolicy',\n validators: [],\n defaultValue: null,\n type: 'select',\n label: gettext('Tenant policy')\n },\n allowCreateTenants: {\n id: 'allowCreateTenants',\n validators: [],\n defaultValue: null,\n type: 'checkbox',\n label: gettext('Allow creation of subtenants')\n },\n gainsightEnabled: {\n id: 'gainsightEnabled',\n validators: [],\n defaultValue: false,\n type: 'checkbox',\n label: gettext('Enable Gainsight product experience tracking')\n }\n} satisfies Record<string, TenantPropertyDefinition>;\n\ntype TenantPropertiesKeys = keyof typeof tenantPropertiesDefinitions;\n\nexport const tenantFormInputsDefinitions: {\n [K in TenantPropertiesKeys]: TenantPropertyDefinition;\n} = tenantPropertiesDefinitions;\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ITenant } from '@c8y/client';\nimport {\n AppStateService,\n C8yTranslatePipe,\n CommonModule,\n TenantUiService,\n Permissions\n} from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-support-user-access',\n standalone: true,\n imports: [CommonModule, C8yTranslatePipe],\n templateUrl: './support-user-access.component.html'\n})\nexport class SupportUserAccessComponent implements OnInit {\n @Input()\n tenant: ITenant;\n\n isTopTenant: boolean;\n supportUserLogin: string;\n\n constructor(\n private tenantUiService: TenantUiService,\n private appState: AppStateService,\n private permissions: Permissions\n ) {}\n\n async ngOnInit() {\n this.isTopTenant = await this.tenantUiService.isManagementTenant();\n this.getSupportUserLogin();\n }\n\n private async getSupportUserLogin(): Promise<void> {\n const currentUser = (await this.appState.currentUser).value;\n if (\n this.permissions.hasAnyRole([Permissions.ROLE_SUPPORT_ADMIN, Permissions.ROLE_SUPPORT_READ])\n ) {\n this.supportUserLogin = encodeURIComponent(`${currentUser.id}$`);\n }\n }\n}\n","<div class=\"card-header separator sticky-top large-padding\">\n <div class=\"card-title fit-w\">\n <i\n class=\"c8y-icon c8y-icon-c8y-support\"\n [ngClass]=\"{ 'c8y-icon-duocolor': tenant.supportUser?.enabled }\"\n ></i>\n {{ 'Support user access' | translate }}\n </div>\n @if (tenant.supportUser?.enabled && supportUserLogin && isTopTenant) {\n <a\n class=\"btn btn-default btn-xs\"\n title=\"{{ 'Log in' | translate }}\"\n href=\"//{{ tenant.domain }}/apps/administration/?skipSSORedirect=true&user={{\n supportUserLogin\n }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <i c8yIcon=\"external-link\"></i>\n {{ 'Log in' | translate }}\n </a>\n }\n</div>\n<div class=\"card-block large-padding\">\n <div class=\"form-group\">\n <label>{{ 'Status' | translate }}</label>\n <div>\n <p class=\"form-control-static\">\n @if (!tenant.supportUser?.enabled) {\n <span title=\"{{ 'Disabled' | translate }}\">\n <i\n class=\"text-danger\"\n c8yIcon=\"ban\"\n ></i>\n {{ 'Disabled' | translate }}\n </span>\n } @else {\n <span title=\"{{ 'Enabled' | translate }}\">\n <i\n class=\"text-success\"\n c8yIcon=\"check-circle\"\n ></i>\n {{ 'Enabled' | translate }}\n </span>\n }\n </p>\n </div>\n </div>\n <div\n class=\"form-group\"\n data-cy=\"c8y-support-user-access--activeRequestCount\"\n >\n <label>{{ 'Active requests count' | translate }}</label>\n\n <p class=\"form-control-static\">\n @if (tenant.supportUser?.activeRequestCount) {\n <span>\n <span class=\"badge badge-danger\">\n {{ tenant.supportUser?.activeRequestCount }}\n </span>\n </span>\n }\n @if (!tenant.supportUser?.enabled && tenant.supportUser?.activeRequestCount === 0) {\n <span>\n {{ 'No active requests' | translate }}\n </span>\n }\n @if (tenant.supportUser?.enabled && tenant.supportUser?.activeRequestCount === 0) {\n <span>\n {{ 'Not applicable' | translate }}\n </span>\n }\n </p>\n </div>\n @if (tenant.supportUser?.enabled) {\n <div class=\"form-group\">\n <label>{{ 'Expiry date' | translate }}</label>\n <div>\n <p class=\"form-control-static\">\n @if (tenant.supportUser?.expiryDate) {\n <span>\n {{ tenant.supportUser.expiryDate | c8yDate: 'medium' }}\n </span>\n } @else {\n <span>{{ 'No limit' | translate }}</span>\n }\n </p>\n </div>\n </div>\n }\n</div>\n","import { Component, OnInit, Optional, ViewChild } from '@angular/core';\nimport { ITenant, TenantService, ITenantPolicy } from '@c8y/client';\nimport { FormControl, FormGroup, NgForm, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n TenantUiService,\n AlertService,\n NewPassword,\n GainsightService,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n C8yTranslateDirective,\n LoadingComponent,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n NewPasswordComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { assign, cloneDeep, find } from 'lodash-es';\nimport { Location, NgIf, NgFor, NgTemplateOutlet } from '@angular/common';\nimport { Ng1TenantPoliciesService } from '@c8y/ngx-components/upgrade/upgraded-services';\nimport { tenantFormInputsDefinitions } from './tenant-form-inputs-definitions';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n TenantManagementActionType,\n PRODUCT_EXPERIENCE_TENANT_MANAGEMENT,\n TenantManagementResultType\n} from '../tenants.model';\nimport { take } from 'rxjs/operators';\nimport { SupportUserAccessComponent } from '../support-user-access/support-user-access.component';\n\nconst { ACTIONS, COMPONENTS, EVENTS, RESULTS } = PRODUCT_EXPERIENCE_TENANT_MANAGEMENT;\n\n@Component({\n templateUrl: './tenant-form.component.html',\n selector: 'c8y-tenant-form',\n imports: [\n NgIf,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n FormsModule,\n ReactiveFormsModule,\n C8yTranslateDirective,\n LoadingComponent,\n NgFor,\n NgTemplateOutlet,\n SupportUserAccessComponent,\n RouterLink,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n NewPasswordComponent,\n C8yTranslatePipe\n ]\n})\nexport class TenantFormComponent implements OnInit {\n @ViewChild('passwordForm') passwordForm: NgForm;\n MANAGEMENT_TENANT_NAME = this.tenantUiService.MANAGEMENT;\n title: string;\n host: string;\n isTopTenant: boolean;\n isNew: boolean;\n isEnterpriseEditionTenant: boolean;\n tenant: ITenant | null = null;\n tenantPolicies: Array<ITenantPolicy>;\n tenantPolicyNone = { name: this.translateService.instant(gettext('None')) };\n tenantId: string;\n passwordStrengthEnforced: boolean;\n saveInProgress = false;\n showPasswordComponent = false;\n tenantPolicy: ITenantPolicy;\n fieldKeys: string[];\n tenantForm: FormGroup = new FormGroup({});\n fieldDefinitions = { ...tenantFormInputsDefinitions };\n initialized = false;\n\n constructor(\n @Optional() public tenantPoliciesServiceProvider: Ng1TenantPoliciesService,\n private tenantService: TenantService,\n private tenantUiService: TenantUiService,\n private location: Location,\n private alertService: AlertService,\n private activatedRoute: ActivatedRoute,\n private translateService: TranslateService,\n private gainsightService: GainsightService\n ) {}\n\n async ngOnInit(): Promise<void> {\n await this.getHost();\n this.getTenantId();\n await this.getTenant();\n await this.checkIfIsEnterpriseEdition();\n\n this.initialized = true;\n\n if (!this.isNew) {\n this.sendGainsightEvent(ACTIONS.TENANT_PROPERTIES_OPENED);\n }\n\n this.tenantForm.valueChanges.pipe(take(1)).subscribe(() => {\n this.sendGainsightEvent(\n this.isNew\n ? ACTIONS.TENANT_CREATION_STARTED_FILLING\n : ACTIONS.TENANT_PROPERTIES_STARTED_CHANGING\n );\n });\n }\n\n async onTenantPolicyChange(): Promise<void> {\n const passwordSettings = await this.tenantUiService.getPasswordStrengthSettings();\n this.tenantPolicy = find(this.tenantPolicies, {\n id: this.tenantForm.controls.tenantPolicy.value.id\n });\n const enforcedOnSystemLevel = passwordSettings.enforceStrength;\n const enforcedOnTenantLevel = passwordSettings.strengthValidity;\n const enforcedOnTenantPolicyLevel = this.tenantPoliciesServiceProvider\n ? await this.tenantPoliciesServiceProvider.doesEnforceStrongPassword(this.tenantPolicy)\n : undefined;\n\n if (this.isNew) {\n this.passwordStrengthEnforced = enforcedOnSystemLevel || enforcedOnTenantPolicyLevel;\n } else {\n this.passwordStrengthEnforced = enforcedOnSystemLevel || enforcedOnTenantLevel;\n }\n }\n\n setForm(): void {\n this.tenantForm.patchValue({\n tenantId: this.tenant.id,\n domain: this.tenant.domain,\n companyName: this.tenant.company,\n contactName: this.tenant.contactName,\n contactPhone: this.tenant.contactPhone,\n administratorEmail: this.tenant.adminEmail,\n administratorUsername: this.tenant.adminName,\n sendPasswordResetEmail: this.tenant.sendPasswordResetEmail,\n allowCreateTenants: this.tenant.allowCreateTenants,\n externalReference: this.tenant.customProperties.externalReference,\n gainsightEnabled: this.tenant.customProperties.gainsightEnabled\n });\n }\n\n getTenantId(): void {\n this.tenantId = this.activatedRoute.snapshot.parent.data.contextData.id;\n this.isNew = !this.tenantId;\n }\n\n async onSubmit(): Promise<void> {\n let tenantToBeSaved: ITenant;\n\n if (!this.isNew) {\n const formRawValue = this.tenantForm.getRawValue();\n const customProperties = {\n ...this.tenant.customProperties,\n externalReference: formRawValue.externalReference,\n gainsightEnabled: formRawValue.gainsightEnabled\n };\n tenantToBeSaved = {\n id: this.tenant.id,\n company: formRawValue.companyName,\n contactName: formRawValue.contactName,\n contactPhone: formRawValue.contactPhone,\n domain: formRawValue.domain,\n status: this.tenant.status,\n allowCreateTenants: this.tenantForm.value.allowCreateTenants,\n customProperties: customProperties\n };\n } else {\n tenantToBeSaved = {\n adminEmail: this.tenantForm.value.administratorEmail,\n adminName: this.tenantForm.value.administratorUsername,\n company: this.tenantForm.value.companyName,\n contactName: this.tenantForm.value.contactName,\n contactPhone: this.tenantForm.value.contactPhone,\n domain: this.tenantForm.value.domain,\n adminPass: this.tenantForm.value.password,\n sendPasswordResetEmail: this.tenantForm.value.sendPasswordResetEmail,\n tenantPolicyId: this.tenantForm.value.tenantPolicy?.id\n };\n }\n\n if (this.isNew && this.host) {\n tenantToBeSaved.domain = tenantToBeSaved.domain + this.host;\n }\n const t: ITenant = cloneDeep(tenantToBeSaved);\n if (t.storageLimitPerDevice === undefined) {\n t.storageLimitPerDevice = 0;\n }\n\n this.setSaveInProgress(true);\n\n try {\n let savedTenant;\n if (this.isNew) {\n savedTenant = (await this.tenantService.create(t)).data;\n if (this.tenantForm.value.allowCreateTenants) {\n assign(savedTenant, { allowCreateTenants: this.tenantForm.value.allowCreateTenants });\n await this.tenantService.update(savedTenant);\n }\n } else {\n savedTenant = (await this.tenantService.update(t)).data;\n }\n this.sendGainsightEvent(\n this.isNew ? ACTIONS.TENANT_CREATION_SAVED : ACTIONS.TENANT_PROPERTIES_SAVED,\n { result: RESULTS.SUCCESS }\n );\n this.onSave(savedTenant, this.tenantForm);\n } catch (error) {\n this.alertService.addServerFailure(error);\n this.sendGainsightEvent(\n this.isNew ? ACTIONS.TENANT_CREATION_SAVED : ACTIONS.TENANT_PROPERTIES_SAVED,\n { result: RESULTS.FAILURE, error }\n );\n } finally {\n this.setSaveInProgress(false);\n }\n }\n\n onSave(tenant: ITenant, form: FormGroup): void {\n if (this.isNew) {\n setTimeout(() => {\n this.location.go(`/tenants/${tenant.id}`);\n location.reload();\n }, 2000);\n this.alertService.success(gettext('Tenant saved.'));\n }\n assign(this.tenant, tenant);\n this.alertService.success(gettext('Tenant saved.'));\n form.markAsPristine();\n }\n\n setSaveInProgress(value: boolean): void {\n this.saveInProgress = value;\n }\n\n cancel(): void {\n this.location.go('tenants');\n }\n\n shouldDisableSave(): boolean {\n const disabled = !this.tenantForm.valid || !this.tenantForm.dirty || this.saveInProgress;\n\n if (this.showPasswordComponent) {\n if (this.passwordForm) {\n return disabled || !this.passwordForm.valid;\n } else {\n return true;\n }\n } else {\n return disabled;\n }\n }\n\n onNewPasswordChanged(newPassword: NewPassword): void {\n this.tenantForm.addControl('password', new FormControl(newPassword.password));\n }\n\n onCheckboxChange(inputField): void {\n if (inputField === 'sendPasswordResetEmail') {\n this.showPasswordComponent = !this.tenantForm.value.sendPasswordResetEmail;\n this.removePasswordControl(this.showPasswordComponent);\n }\n }\n\n private setDisabledState(): void {\n if (!this.isNew) {\n this.tenantForm.controls.tenantId.disable();\n this.tenantForm.controls.domain.disable();\n this.tenantForm.controls.administratorEmail.disable();\n this.tenantForm.controls.administratorUsername.disable();\n }\n }\n\n private async shouldShowSubtenantCheckbox(): Promise<boolean> {\n const currentTenantIsManagement = await this.tenantUiService.isManagementTenant();\n const editedTenantIsChildOfManagement =\n this.tenant && this.tenant.parent === this.MANAGEMENT_TENANT_NAME;\n return currentTenantIsManagement && (editedTenantIsChildOfManagement || this.isNew);\n }\n\n private removePasswordControl(passwordComponentShown: boolean): void {\n if (!passwordComponentShown) {\n this.tenantForm.removeControl('password');\n }\n }\n\n private async getTenant(): Promise<void> {\n if (this.tenantId && this.tenantId !== 'new') {\n const detailedTenant = (await this.tenantService.detail(this.tenantId)).data;\n this.title = detailedTenant.company;\n this.onTenant(detailedTenant);\n await this.generateForm();\n this.setForm();\n this.setDisabledState();\n } else {\n this.title = this.translateService.instant(gettext('New tenant'));\n await this.generateForm();\n await this.loadTenantPolicies();\n }\n }\n\n private async loadTenantPolicies(): Promise<void> {\n if (this.tenantPoliciesServiceProvider) {\n this.onTenantPolicies(await this.tenantPoliciesServiceProvider.list());\n }\n }\n\n private async getHost(): Promise<void> {\n const currentTenant = await this.tenantService.current();\n this.host = `.${currentTenant.data.domainName.split('.').slice(1).join('.')}`;\n }\n\n private async checkIfIsEnterpriseEdition(): Promise<void> {\n this.isEnterpriseEditionTenant = await this.tenantUiService.isEnterpriseTenant();\n }\n\n private onTenantPolicies(tenantPolicies): void {\n this.tenantPolicies = [this.tenantPolicyNone, ...tenantPolicies];\n }\n\n private onTenant(tenant: ITenant = {}): void {\n this.tenant = tenant;\n }\n\n private async generateForm(): Promise<void> {\n const shouldShowSubtenantCheckbox = await this.shouldShowSubtenantCheckbox();\n const gainsightAvailable = !!(await this.gainsightService.getGainsightKey());\n if (!shouldShowSubtenantCheckbox) {\n delete this.fieldDefinitions.allowCreateTenants;\n }\n if (!this.isNew) {\n delete this.fieldDefinitions.sendPasswordResetEmail;\n }\n if (this.isNew || (this.host && this.isEnterpriseEditionTenant)) {\n delete this.fieldDefinitions.tenantID;\n }\n if (!this.isNew && !this.host) {\n delete this.fieldDefinitions.domain;\n }\n if (this.isNew || !gainsightAvailable) {\n delete this.fieldDefinitions.gainsightEnabled;\n }\n if (this.isNew) {\n delete this.fieldDefinitions.externalReference;\n }\n\n for (const field of Object.values(this.fieldDefinitions)) {\n this.tenantForm.addControl(field.id, new FormControl(field.defaultValue, field.validators));\n }\n\n this.fieldKeys = Object.keys(this.fieldDefinitions);\n }\n\n private sendGainsightEvent(\n action: TenantManagementActionType,\n props: { result?: TenantManagementResultType; error?: unknown } = {}\n ) {\n this.gainsightService.triggerEvent(EVENTS.TENANT_MANAGEMENT, {\n component: COMPONENTS.TENANT_FORM,\n action,\n ...props\n });\n }\n}\n","<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n [formGroup]=\"tenantForm\"\n (ngSubmit)=\"onSubmit()\"\n>\n <div class=\"card content-fullpage d-grid grid__col--8-4--md\">\n <div class=\"inner-scroll bg-level-0\">\n <div class=\"card-header separator large-padding sticky-top\">\n <div\n class=\"card-title\"\n translate\n >\n Identification\n </div>\n </div>\n\n <div>\n <div\n class=\"card-block\"\n *ngIf=\"!initialized\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let key of fieldKeys\">\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'text'\">\n <ng-container\n *ngTemplateOutlet=\"textField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'number'\">\n <ng-container\n *ngTemplateOutlet=\"numberField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'checkbox'\">\n <ng-container\n *ngTemplateOutlet=\"checkboxField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'select'\">\n <ng-container\n *ngTemplateOutlet=\"selectField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div\n class=\"inner-scroll bg-level-1\"\n *ngIf=\"!isNew && tenant\"\n >\n <c8y-support-user-access [tenant]=\"tenant\"></c8y-support-user-access>\n </div>\n\n <!-- FOOTER CARD -->\n <div\n class=\"card-footer separator large-padding grid__col--fullspan\"\n *ngIf=\"initialized\"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n data-cy=\"c8y-tenant-form--cancelButton\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n [disabled]=\"shouldDisableSave()\"\n data-cy=\"c8y-tenant-form--saveButton\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n\n <!-- NG TEMPLATES -->\n <ng-template\n #textField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n [attr.data-cy]=\"'c8y-tenant-form--' + fieldDefinition.id\"\n />\n <span\n class=\"input-group-addon\"\n *ngIf=\"fieldDefinition.id === 'domain' && host && isNew\"\n >\n {{ host }}\n </span>\n </div>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #numberField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n [attr.data-cy]=\"'c8y-tenant-form--' + fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #checkboxField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n (change)=\"onCheckboxChange(fieldDefinition.id)\"\n [attr.data-cy]=\"'c8y-tenant-form--' + fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n <form\n #passwordForm=\"ngForm\"\n *ngIf=\"showPasswordComponent && fieldDefinition.id === 'sendPasswordResetEmail'\"\n >\n <c8y-new-password\n [showChangePasswordButton]=\"false\"\n [requireStrongPassword]=\"passwordStrengthEnforced\"\n (password)=\"onNewPasswordChanged($event)\"\n ></c8y-new-password>\n </form>\n </ng-template>\n\n <ng-template\n #selectField\n let-fieldDefinition\n >\n <c8y-form-group *ngIf=\"tenantPolicies && tenantPolicies.length > 0\">\n <label>{{ fieldDefinition.label | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n title=\"{{ fieldDefinition.label | translate }}\"\n name=\"tenantPolicy\"\n (change)=\"onTenantPolicyChange()\"\n formControlName=\"tenantPolicy\"\n [attr.data-cy]=\"'c8y-tenant-form--' + fieldDefinition.id\"\n >\n <option\n *ngFor=\"let tenantPolicy of tenantPolicies\"\n [ngValue]=\"tenantPolicy\"\n >\n {{ tenantPolicy.name }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n </ng-template>\n</form>\n","import { Injectable } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\nimport { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { JSONSchema7, JSONSchema7TypeName } from 'json-schema';\nimport { ValidationPattern } from '@c8y/ngx-components';\n\ntype PropertiesType = { [key: string]: JSONSchema7 };\n\n// Model for individual tenant custom property field\nexport interface TenantCustomPropertyField {\n id: string;\n label: string;\n type: JSONSchema7TypeName | JSONSchema7TypeName[];\n format?: 'datetime' | string;\n formControlReference: AbstractControl;\n}\n\nconst defaultFilters = {\n query: \"(type eq 'c8y_JsonSchema') and (appliesTo.TENANTS eq true)\",\n pageSize: 1000,\n withTotalPages: true\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CustomPropertiesService {\n constructor(private inventoryService: InventoryService) {}\n\n async getFormAndFieldList(): Promise<{ form: FormGroup; fields: TenantCustomPropertyField[] }> {\n const schema = await this.getCustomProperties();\n const formGroup = this.buildFormGroup(schema);\n const fields = this.buildFieldList(formGroup, schema);\n return { form: formGroup, fields };\n }\n\n private async getCustomProperties(): Promise<PropertiesType> {\n let customFieldsSchema: PropertiesType = {};\n const customProperties = await this.inventoryService.list(defaultFilters);\n\n customProperties.data.forEach(item => {\n const fieldSchema: PropertiesType = item['c8y_JsonSchema'].properties;\n customFieldsSchema = { ...customFieldsSchema, ...(fieldSchema as object) };\n });\n return customFieldsSchema;\n }\n\n private buildFormGroup(schema: PropertiesType): FormGroup {\n const fg = new FormGroup({});\n\n for (const [key, value] of Object.entries(schema)) {\n const control = new FormControl(value.default, []);\n this.applyValidators(control, value);\n fg.addControl(key, control);\n }\n return fg;\n }\n\n private applyValidators(control: FormControl, props: JSONSchema7): void {\n const validatorsMap = {\n required: Validators.required,\n minimum: Validators.min(props.minimum),\n maximum: Validators.max(props.maximum),\n minLength: Validators.minLength(props.minLength),\n maxLength: Validators.maxLength(props.maxLength),\n pattern: Validators.pattern(props.pattern)\n };\n\n Object.entries(validatorsMap).forEach(([key, validator]) => {\n if (props[key as keyof JSONSchema7] !== undefined) {\n control.addValidators(validator);\n }\n });\n\n if (props.type === 'integer') {\n control.addValidators(Validators.pattern(ValidationPattern.rules.integer.pattern));\n }\n }\n\n private buildFieldList(form: FormGroup, schema: PropertiesType): TenantCustomPropertyField[] {\n const fieldList: TenantCustomPropertyField[] = [];\n Object.entries(schema).forEach(([key, value]) => {\n fieldList.push({\n id: key,\n label: value.title,\n type: value.type,\n format: value.format,\n formControlReference: form.get(key) as FormControl\n });\n });\n\n return fieldList;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { TenantCustomPropertyField } from '../custom-properties.service';\nimport { CommonModule } from '@angular/common';\nimport { C8yTranslatePipe, DateTimePickerModule, FormGroupComponent } from '@c8y/ngx-components';\nimport { FormsModule } from '@c8y/ngx-components';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'c8y-custom-property-field',\n standalone: true,\n imports: [\n CommonModule,\n C8yTranslatePipe,\n FormGroupComponent,\n FormsModule,\n ReactiveFormsModule,\n DateTimePickerModule\n ],\n templateUrl: './custom-property-field.component.html'\n})\nexport class CustomPropertyFieldComponent {\n @Input()\n fieldDefinition: TenantCustomPropertyField;\n\n @Input()\n form: FormGroup;\n}\n","<ng-container *ngIf=\"form && fieldDefinition\">\n <ng-container [ngSwitch]=\"fieldDefinition.type\">\n <ng-container *ngSwitchCase=\"'boolean'\">\n <c8y-form-group [formGroup]=\"form\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'number'\">\n <c8y-form-group [formGroup]=\"form\">\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'integer'\">\n <c8y-form-group [formGroup]=\"form\">\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'string'\">\n <c8y-form-group\n *ngIf=\"!fieldDefinition.format\"\n [formGroup]=\"form\"\n >\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n\n <c8y-form-group\n *ngIf=\"fieldDefinition.format === 'datetime'\"\n [formGroup]=\"form\"\n >\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <c8y-date-time-picker\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n data-cy=\"c8y-custom-property-field--date-time-picker\"\n ></c8y-date-time-picker>\n </c8y-form-group>\n </ng-container>\n </ng-container>\n</ng-container>\n","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { IResult, ITenant, TenantService } from '@c8y/client';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, CoreModule, FormsModule, GainsightService } from '@c8y/ngx-components';\nimport {\n CustomPropertiesService,\n TenantCustomPropertyField\n} from '../custom-properties/custom-properties.service';\nimport { CustomPropertyFieldComponent } from '../custom-properties/custom-property-field/custom-property-field.component';\nimport {\n TenantManagementActionType,\n PRODUCT_EXPERIENCE_TENANT_MANAGEMENT,\n TenantManagementResultType\n} from '../tenants.model';\nimport { take } from 'rxjs/operators';\n\nconst { ACTIONS, EVENTS, COMPONENTS, RESULTS } = PRODUCT_EXPERIENCE_TENANT_MANAGEMENT;\n\n@Component({\n selector: 'c8y-custom-properties',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CoreModule,\n RouterLink,\n CustomPropertyFieldComponent\n ],\n templateUrl: './custom-properties.component.html'\n})\nexport class CustomPropertiesComponent implements OnInit {\n fieldDefinitions: TenantCustomPropertyField[];\n customPropsForm: FormGroup = new FormGroup({});\n tenant: ITenant | null = null;\n initialized = false;\n\n constructor(\n private tenantService: TenantService,\n private alertService: AlertService,\n private activatedRoute: ActivatedRoute,\n private customPropertiesService: CustomPropertiesService,\n private gainsightService: GainsightService\n ) {}\n\n async ngOnInit() {\n await this.loadTenantDetails();\n const { form, fields } = await this.customPropertiesService.getFormAndFieldList();\n this.customPropsForm = form;\n this.fieldDefinitions = fields;\n this.applyValuesFromTenant();\n this.initialized = true;\n\n this.sendGainsightEvent(ACTIONS.TENANT_CUSTOM_PROPERTIES_OPENED);\n\n this.customPropsForm.valueChanges.pipe(take(1)).subscribe(() => {\n this.sendGainsightEvent(ACTIONS.TENANT_CUSTOM_PROPERTIES_STARTED_CHANGING);\n });\n }\n\n async onSubmit(): Promise<void> {\n if (this.customPropsForm.invalid || !this.tenant) {\n return;\n }\n\n const updatedTenant: ITenant = {\n ...this.tenant,\n customProperties: {\n ...this.tenant.customProperties,\n ...this.getDirtyValues()\n }\n };\n\n try {\n await this.tenantService.update(updatedTenant);\n this.alertService.success(gettext('Custom properties values saved.'));\n this.sendGainsightEvent(ACTIONS.TENANT_CUSTOM_PROPERTIES_SAVED, { result: RESULTS.SUCCESS });\n } catch (error) {\n this.alertService.addServerFailure(error);\n this.sendGainsightEvent(ACTIONS.TENANT_CUSTOM_PROPERTIES_SAVED, {\n result: RESULTS.FAILURE,\n error\n });\n }\n }\n\n private async loadTenantDetails() {\n try {\n const result: IResult<ITenant> = await this.tenantService.detail(\n this.activatedRoute.snapshot.parent.data.contextData.id\n );\n this.tenant = result.data;\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n }\n\n private applyValuesFromTenant(): void {\n const customProps = this.tenant?.customProperties || {};\n this.customPropsForm.patchValue(customProps);\n }\n\n private getDirtyValues(): { [key: string]: unknown } {\n const dirtyValues: { [key: string]: unknown } = {};\n Object.keys(this.customPropsForm.controls).forEach(key => {\n const control = this.customPropsForm.controls[key];\n if (control && control.dirty && control.value !== null) {\n dirtyValues[key] = control.value;\n }\n });\n\n return dirtyValues;\n }\n\n private sendGainsightEvent(\n action: TenantManagementActionType,\n props: { result?: TenantManagementResultType; error?: unknown } = {}\n ) {\n this.gainsightService.triggerEvent(EVENTS.TENANT_MANAGEMENT, {\n component: COMPONENTS.TENANT_CUSTOM_PROPERTIES,\n action,\n ...props\n });\n }\n}\n","<c8y-title *ngIf=\"tenant\">\n {{ tenant.company }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container>\n <form\n [formGroup]=\"customPropsForm\"\n (ngSubmit)=\"onSubmit()\"\n >\n <div class=\"card card--fullpage m-b-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Custom properties\n </div>\n </div>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block\"\n *ngIf=\"!initialized\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#custom-properties\"></c8y-help>\n\n <!-- empty state -->\n <c8y-ui-empty-state\n [icon]=\"'property-script'\"\n [title]=\"'No custom properties to display.' | translate\"\n [subtitle]=\"'Add a new tenant property in Properties library.' | translate\"\n *ngIf=\"fieldDefinitions?.length === 0 && initialized\"\n >\n <p c8y-guide-docs>\n <small translate>\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants/#custom-properties\">\n User guide\n </a>\n .\n </small>\n </p>\n </c8y-ui-empty-state>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let field of fieldDefinitions\">\n <c8y-custom-property-field\n [fieldDefinition]=\"field\"\n [form]=\"customPropsForm\"\n ></c8y-custom-property-field>\n </ng-container>\n </div>\n </div>\n\n <div\n class=\"card-footer separator\"\n *ngIf=\"initialized\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n translate\n data-cy=\"custom-properties--cancel-button\"\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!(!customPropsForm.invalid && customPropsForm.dirty)\"\n translate\n data-cy=\"custom-properties--save-button\"\n >\n Save\n </button>\n </div>\n </div>\n </form>\n</ng-container>\n","import { ValidatorFn, Validators } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n// Model for individual tenant limit field\nexport interface TenantLimit {\n id: string;\n validators: ValidatorFn[];\n defaultValue: number | string | boolean | null;\n type: 'text' | 'checkbox' | 'number';\n label: string;\n labelArgs?: object;\n placeholder?: string;\n placeholderArgs?: object;\n}\n\nconst MAX_DEVICE_STORAGE_LIMIT_MiB = Math.round(Number.MAX_SAFE_INTEGER / 1024 / 1024);\n\n/**\n * Define all hardTyped custom properties, and their configuration in one place.\n *\n * This exported const utilizes typescript inferring,\n * while still benefiting from hard typing, thanks to \"satisfies\" keyword\n */\nconst tenantLimitsCustomPropertiesDefinition = {\n limitDevicesNumber: {\n id: 'limit.devices.number',\n validators: [Validators.min(0)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit number of devices'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 1000 }\n },\n limitHttpRequests: {\n id: 'limit.http.requests',\n validators: [Validators.min(-1)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit HTTP requests'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 10000 }\n },\n limitHttpQueue: {\n id: 'limit.http.queue',\n validators: [Validators.min(-1)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit HTTP queue'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 100 }\n },\n limitStreamRequests: {\n id: 'limit.stream.requests',\n validators: [Validators.min(-1)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit stream requests'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 100 }\n },\n limitStreamQueue: {\n id: 'limit.stream.queue',\n validators: [Validators.min(-1)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit stream queue'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 100 }\n },\n cepServerQueueLimit: {\n id: 'cepServer.queue.limit',\n validators: [Validators.min(-1)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit CEP server queue'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 100 }\n },\n dataBrokerQueueLimit: {\n id: 'data-broker.queue.limit',\n validators: [Validators.min(0)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit data broker queue'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 100 }\n },\n deviceStorageLimitMiB: {\n id: 'deviceStorageLimitMiB',\n validators: [Validators.min(0), Validators.max(MAX_DEVICE_STORAGE_LIMIT_MiB)],\n defaultValue: 0,\n type: 'number',\n label: gettext('Storage limit per device (MiB)'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 100 }\n }\n} satisfies Record<string, TenantLimit>;\n\nexport type TenantLimitsCustomPropertiesKeys = keyof typeof tenantLimitsCustomPropertiesDefinition;\n\nexport const tenantLimitsCustomProperties: {\n [K in TenantLimitsCustomPropertiesKeys]: TenantLimit;\n} = tenantLimitsCustomPropertiesDefinition;\n","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { ApplicationService, IResult, ITenant, TenantService } from '@c8y/client';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n CoreModule,\n FormsModule,\n GainsightService,\n OptionsService\n} from '@c8y/ngx-components';\nimport {\n tenantLimitsCustomProperties,\n TenantLimitsCustomPropertiesKeys\n} from './tenant-limits-definitions';\nimport {\n TenantManagementActionType,\n PRODUCT_EXPERIENCE_TENANT_MANAGEMENT,\n TenantManagementResultType\n} from '../tenants.model';\nimport { take } from 'rxjs/operators';\n\nconst { ACTIONS, EVENTS, COMPONENTS, RESULTS } = PRODUCT_EXPERIENCE_TENANT_MANAGEMENT;\n\n@Component({\n selector: 'c8y-tenant-limits',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule, CoreModule, RouterLink],\n templateUrl: './tenant-limits.component.html'\n})\nexport class TenantLimitsComponent implements OnInit {\n fieldDefinitions = { ...tenantLimitsCustomProperties };\n fieldKeys: string[];\n storageLimitFeatureEnabled: boolean;\n limitsForm: FormGroup = new FormGroup({});\n tenant: ITenant | null = null;\n initialized = false;\n deviceStorageLimitInfoMessage = gettext('Default: 0 (unlimited storage)');\n\n constructor(\n private tenantService: TenantService,\n private alertService: AlertService,\n private activatedRoute: ActivatedRoute,\n private applicationService: ApplicationService,\n private options: OptionsService,\n private gainsightService: GainsightService\n ) {}\n\n async ngOnInit() {\n await this.loadTenantDetails();\n await this.setupConditionalFields();\n this.generateForm();\n this.initialized = true;\n\n this.sendGainsightEvent(ACTIONS.TENANT_LIMITS_OPENED);\n }\n\n async onSubmit() {\n if (this.limitsForm.invalid || !this.tenant) {\n return;\n }\n\n const { deviceStorageLimitMiB, ...customProperties } = this.getDirtyValues();\n\n const updatedTenant: ITenant = {\n ...this.tenant,\n customProperties: {\n ...this.tenant.customProperties,\n ...customProperties\n }\n };\n\n if (this.storageLimitFeatureEnabled) {\n updatedTenant.storageLimitPerDevice = (deviceStorageLimitMiB || 0) * 1024 * 1024;\n } else {\n updatedTenant.storageLimitPerDevice = 0;\n }\n\n try {\n await this.tenantService.update(updatedTenant);\n this.alertService.success(gettext('Limit values saved.'));\n this.sendGainsightEvent(ACTIONS.TENANT_LIMITS_SAVED, { result: RESULTS.SUCCESS });\n } catch (error) {\n this.alertService.addServerFailure(error);\n this.sendGainsightEvent(ACTIONS.TENANT_LIMITS_SAVED, { result: RESULTS.FAILURE, error });\n }\n }\n\n private async loadTenantDetails() {\n try {\n const result: IResult<ITenant> = await this.tenantService.detail(\n this.activatedRoute.snapshot.parent.data.contextData.id\n );\n this.tenant = result.data;\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n }\n\n private async setupConditionalFields() {\n try {\n const apps = (\n await this.applicationService.listByUser(undefined, {\n dropOverwrittenApps: true,\n noPaging: true\n })\n ).data;\n\n const cepModuleEnabled = apps.some(app => app.name === 'cep' || app.contextPath === 'cep');\n const dataBrokerModuleEnabled = apps.some(\n app => app.name === 'feature-broker' || app.contextPath === 'feature-broker'\n );\n this.storageLimitFeatureEnabled = this.options.storageLimitationFeatureEnabled;\n\n if (!cepModuleEnabled) {\n delete this.fieldDefinitions.cepServerQueueLimit;\n }\n if (!dataBrokerModuleEnabled) {\n delete this.fieldDefinitions.dataBrokerQueueLimit;\n }\n if (!this.storageLimitFeatureEnabled) {\n delete this.fieldDefinitions.deviceStorageLimitMiB;\n }\n\n this.fieldKeys = Object.keys(this.fieldDefinitions);\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n\n private generateForm() {\n for (const field of Object.values(tenantLimitsCustomProperties)) {\n this.limitsForm.addControl(field.id, new FormControl(field.defaultValue, field.validators));\n }\n const customProps = this.tenant?.customProperties || {};\n this.limitsForm.patchValue(customProps);\n if (this.storageLimitFeatureEnabled) {\n const deviceStorageLimitMiB = (this.tenant?.storageLimitPerDevice || 0) / 1024 / 1024;\n this.limitsForm.patchValue({ deviceStorageLimitMiB });\n }\n\n this.limitsForm.valueChanges.pipe(take(1)).subscribe(() => {\n this.sendGainsightEvent(ACTIONS.TENANT_LIMITS_STARTED_CHANGING);\n });\n }\n\n private getDirtyValues(): Partial<{ [K in TenantLimitsCustomPropertiesKeys]: any }> {\n const dirtyValues: { [key: string]: any } = {};\n Object.keys(this.limitsForm.controls).forEach(key => {\n const control = this.limitsForm.controls[key];\n if (control && control.dirty) {\n dirtyValues[key] = control.value;\n }\n });\n return dirtyValues;\n }\n\n private sendGainsightEvent(\n action: TenantManagementActionType,\n props: { result?: TenantManagementResultType; error?: unknown } = {}\n ) {\n this.gainsightService.triggerEvent(EVENTS.TENANT_MANAGEMENT, {\n component: COMPONENTS.TENANT_LIMITS,\n action,\n ...props\n });\n }\n}\n","<c8y-title *ngIf=\"tenant\">\n {{ tenant.company }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n [formGroup]=\"limitsForm\"\n (ngSubmit)=\"onSubmit()\"\n>\n <div class=\"card card--fullpage m-b-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Limits\n </div>\n </div>\n\n <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#setting-limits\"></c8y-help>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block\"\n *ngIf=\"!initialized\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let key of fieldKeys\">\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'text'\">\n <ng-container\n *ngTemplateOutlet=\"textField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'number'\">\n <ng-container\n *ngTemplateOutlet=\"numberField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'checkbox'\">\n <ng-container\n *ngTemplateOutlet=\"checkboxField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div\n class=\"card-footer separator\"\n *ngIf=\"initialized\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"limitsForm.invalid\"\n translate\n >\n Save\n </button>\n </div>\n </div>\n\n <ng-template\n #textField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #numberField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <ng-container\n *ngIf=\"\n fieldDefinitions.deviceStorageLimitMiB &&\n fieldDefinitions.deviceStorageLimitMiB.id === fieldDefinition.id &&\n limitsForm.controls[fieldDefinition.id] as control\n \"\n >\n <div\n class=\"icon-flex\"\n *ngIf=\"!control.dirty || (control.dirty && !control.errors)\"\n >\n <p class=\"help-block\">\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n <span>{{ deviceStorageLimitInfoMessage | translate }}</span>\n </p>\n </div>\n </ng-container>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #checkboxField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n </ng-template>\n</form>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class ExistingTenantGuard {\n /**\n * Checks if the current route is displayed for an existing tenant.\n *\n * @returns `true` if visiting a route for an existing tenant.\n */\n canActivate(route: ActivatedRouteSnapshot): boolean {\n return route.params.id !== 'new';\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, hookNavigator, hookRoute, ViewContext } 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';\nimport { TenantFormComponent } from './tenant-form/tenant-form.component';\nimport { CustomPropertiesComponent } from './custom-properties/custom-properties.component';\nimport { TenantLimitsComponent } from './tenant-limits/tenant-limits.component';\nimport { SupportUserAccessComponent } from './support-user-access/support-user-access.component';\nimport { ExistingTenantGuard } from './existing-tenant.guard';\n\n@NgModule({\n imports: [\n BsDatepickerModule,\n CoreModule,\n RouterModule,\n SupportUserAccessComponent,\n TenantListComponent,\n CreationTimeFilteringFormRendererComponent,\n StatusFilteringFormRendererComponent,\n TenantFormComponent\n ],\n exports: [],\n providers: [\n TenantListGuard,\n ExistingTenantGuard,\n hookNavigator(TenantsNavigationFactory),\n hookRoute([\n {\n path: 'tenants',\n icon: 'c8y-layers',\n component: TenantListComponent,\n canActivate: [TenantListGuard]\n },\n {\n path: 'tenants/new',\n component: TenantFormComponent\n },\n {\n path: 'properties',\n component: TenantFormComponent,\n icon: 'new-property',\n label: gettext('Properties'),\n context: ViewContext.Tenant,\n priority: 10000\n },\n {\n path: 'custom_properties',\n component: CustomPropertiesComponent,\n icon: 'property-script',\n label: gettext('Custom properties'),\n context: ViewContext.Tenant,\n priority: 4,\n canActivate: [ExistingTenantGuard]\n },\n {\n path: 'limits',\n component: TenantLimitsComponent,\n icon: 'sliders',\n label: gettext('Limits'),\n context: ViewContext.Tenant,\n priority: 3,\n canActivate: [ExistingTenantGuard]\n }\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":["i3","i2","EVENTS","COMPONENTS","ACTIONS","RESULTS","i1","i5","i6","i7","CommonModule","FormsModule","i4.CustomPropertiesService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-tenants.mjs","sources":["../../tenants/tenant-list/tenant-list.guard.ts","../../tenants/tenants.model.ts","../../tenants/tenants-navigation.factory.ts","../../tenants/tenant-list/creation-time.filtering-form-renderer.component.ts","../../tenants/tenant-list/creation-time.filtering-form-renderer.component.html","../../tenants/tenant-list/status.filtering-form-renderer.component.ts","../../tenants/tenant-list/status.filtering-form-renderer.component.html","../../tenants/tenant-list/tenant-list.component.ts","../../tenants/tenant-list/tenant-list.component.html","../../tenants/tenant-form/tenant-form-inputs-definitions.ts","../../tenants/support-user-access/support-user-access.component.ts","../../tenants/support-user-access/support-user-access.component.html","../../tenants/tenant-form/tenant-form.component.ts","../../tenants/tenant-form/tenant-form.component.html","../../tenants/custom-properties/custom-properties.service.ts","../../tenants/custom-properties/custom-property-field/custom-property-field.component.ts","../../tenants/custom-properties/custom-property-field/custom-property-field.component.html","../../tenants/custom-properties/custom-properties.component.ts","../../tenants/custom-properties/custom-properties.component.html","../../tenants/tenant-limits/tenant-limits-definitions.ts","../../tenants/tenant-limits/tenant-limits.component.ts","../../tenants/tenant-limits/tenant-limits.component.html","../../tenants/existing-tenant.guard.ts","../../tenants/tenants.module.ts","../../tenants/c8y-ngx-components-tenants.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { TenantUiService } from '@c8y/ngx-components';\n\n@Injectable()\nexport class TenantListGuard {\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 { 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\nexport const PRODUCT_EXPERIENCE_TENANT_MANAGEMENT = {\n EVENTS: {\n TENANT_MANAGEMENT: 'tenantManagement'\n },\n COMPONENTS: {\n TENANT_LIST: 'tenant-list',\n TENANT_FORM: 'tenant-form',\n TENANT_CUSTOM_PROPERTIES: 'tenant-custom-properties',\n TENANT_LIMITS: 'tenant-limits'\n },\n ACTIONS: {\n TENANT_CREATION_INITIALIZED: 'tenantCreationInitialized',\n TENANT_CREATION_STARTED_FILLING: 'tenantCreationStartedFilling',\n TENANT_CREATION_SAVED: 'tenantCreationSaved',\n TENANT_PROPERTIES_OPENED: 'tenantPropertiesOpened',\n TENANT_PROPERTIES_STARTED_CHANGING: 'tenantPropertiesStartedChanging',\n TENANT_PROPERTIES_SAVED: 'tenantPropertiesSaved',\n TENANT_CUSTOM_PROPERTIES_OPENED: 'tenantCustomPropertiesOpened',\n TENANT_CUSTOM_PROPERTIES_STARTED_CHANGING: 'tenantCustomPropertiesStartedChanging',\n TENANT_CUSTOM_PROPERTIES_SAVED: 'tenantCustomPropertiesSaved',\n TENANT_LIMITS_OPENED: 'tenantLimitsOpened',\n TENANT_LIMITS_STARTED_CHANGING: 'tenantLimitsStartedChanging',\n TENANT_LIMITS_SAVED: 'tenantLimitsSaved'\n },\n RESULTS: {\n SUCCESS: 'success',\n FAILURE: 'failure'\n }\n} as const;\nexport type TenantManagementActionType =\n (typeof PRODUCT_EXPERIENCE_TENANT_MANAGEMENT.ACTIONS)[keyof typeof PRODUCT_EXPERIENCE_TENANT_MANAGEMENT.ACTIONS];\nexport type TenantManagementResultType =\n (typeof PRODUCT_EXPERIENCE_TENANT_MANAGEMENT.RESULTS)[keyof typeof PRODUCT_EXPERIENCE_TENANT_MANAGEMENT.RESULTS];\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { 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: {\n label: gettext('Tenants'),\n icon: 'c8y-layers'\n },\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, ElementRef } from '@angular/core';\nimport { ITenant } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n FilterChip,\n FilteringFormRendererContext,\n FormGroupComponent,\n C8yTranslatePipe,\n DatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FormsModule } from '@angular/forms';\nimport { BsDatepickerInputDirective, BsDatepickerDirective } from 'ngx-bootstrap/datepicker';\n\nexport interface Model {\n dateFrom: Date;\n dateTo: Date;\n}\n\n@Component({\n templateUrl: './creation-time.filtering-form-renderer.component.html',\n selector: 'c8y-creation-time-filtering-form-renderer',\n imports: [\n FormsModule,\n FormGroupComponent,\n BsDatepickerInputDirective,\n BsDatepickerDirective,\n C8yTranslatePipe\n ],\n providers: [DatePipe]\n})\nexport class CreationTimeFilteringFormRendererComponent {\n model: Model;\n\n constructor(\n public context: FilteringFormRendererContext,\n private c8yDate: DatePipe,\n private translateService: TranslateService\n ) {\n this.model = (this.context.property.externalFilterQuery || {}).model || {};\n }\n\n applyFilter() {\n this.context.applyFilter({\n externalFilterQuery: {\n model: this.model,\n chips: this.getChipsForModel(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 getChipsForModel(model: Model): FilterChip[] {\n const updateChips = externalFilterQuery => {\n externalFilterQuery.chips = this.getChipsForModel(externalFilterQuery.model);\n };\n const createChip = (key: keyof Model, displayValueTpl: string): FilterChip => {\n return {\n columnName: this.context.property.name,\n path: ['model', key],\n displayValue: this.translateService.instant(displayValueTpl, {\n date: this.c8yDate.transform(this.model[key], 'mediumDate')\n }),\n value: this.model[key],\n remove() {\n delete this.externalFilterQuery.model[key];\n updateChips(this.externalFilterQuery);\n return {\n columnName: this.columnName,\n externalFilterQuery: this.externalFilterQuery\n };\n }\n };\n };\n\n const chips = [];\n if (model.dateFrom) {\n chips.push(createChip('dateFrom', gettext('from: {{ date }}')));\n }\n if (model.dateTo) {\n chips.push(createChip('dateTo', gettext('to: {{ date }}')));\n }\n return chips;\n }\n\n resetFilter() {\n this.context.resetFilter();\n }\n\n // this method is only used for workaround for ngx-bootstrap issue (preventing the datepicker from closing dropdown when clicking inside the datepicker container)\n // TODO: remove this method when the issue is resolved https://github.com/valor-software/ngx-bootstrap/issues/6736\n datepickerShown({ _element }: { _element: ElementRef }) {\n const datepickerContainerElement = _element.nativeElement;\n datepickerContainerElement.addEventListener('click', (e: MouseEvent) => {\n e.stopPropagation();\n });\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\n class=\"datepicker d-block m-b-16\"\n style=\"max-height: 32px\"\n >\n <input\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Created from`date`' | translate }}\"\n name=\"dateFrom\"\n [(ngModel)]=\"model.dateFrom\"\n bsDatepicker\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true }\"\n [maxDate]=\"model.dateTo\"\n (onShown)=\"datepickerShown($event)\"\n />\n </c8y-form-group>\n <c8y-form-group\n class=\"datepicker m-l-0 d-block\"\n style=\"max-height: 32px\"\n >\n <input\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Created to`date`' | translate }}\"\n name=\"dateTo\"\n [(ngModel)]=\"model.dateTo\"\n bsDatepicker\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true }\"\n [minDate]=\"model.dateFrom\"\n (onShown)=\"datepickerShown($event)\"\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 title=\"{{ 'Reset' | translate }}\"\n (click)=\"resetFilter()\"\n >\n {{ 'Reset' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n [disabled]=\"filterForm.invalid || !(model.dateFrom || model.dateTo)\"\n (click)=\"applyFilter()\"\n >\n {{ 'Apply' | translate }}\n </button>\n</div>\n","import { Component } from '@angular/core';\nimport { ITenant, TenantStatus } from '@c8y/client';\nimport {\n FilteringFormRendererContext,\n FormGroupComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n templateUrl: './status.filtering-form-renderer.component.html',\n selector: 'c8y-status-filtering-form-renderer',\n imports: [FormsModule, FormGroupComponent, C8yTranslatePipe]\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 { Location, NgIf, AsyncPipe } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { saveAs } from 'file-saver';\nimport { BehaviorSubject, from } from 'rxjs';\nimport { expand, reduce, shareReplay, takeWhile } from 'rxjs/operators';\n\nimport {\n ICurrentTenant,\n IResultList,\n ITenant,\n TenantService,\n TenantStatus,\n UserService\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ActionControl,\n AlertService,\n AppStateService,\n BuiltInActionType,\n Column,\n DisplayOptions,\n GainsightService,\n ModalService,\n Pagination,\n PasswordService,\n Permissions,\n SortOrder,\n Status,\n TenantUiService,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n HelpComponent,\n DataGridComponent,\n LoadingComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n GuideDocsComponent,\n C8yTranslateDirective,\n GuideHrefDirective,\n ColumnDirective,\n CellRendererDefDirective,\n C8yTranslatePipe,\n DatePipe\n} from '@c8y/ngx-components';\n\nimport { CreationTimeFilteringFormRendererComponent } from './creation-time.filtering-form-renderer.component';\nimport { StatusFilteringFormRendererComponent } from './status.filtering-form-renderer.component';\nimport { PRODUCT_EXPERIENCE_TENANT_MANAGEMENT } from './../tenants.model';\nimport { RouterLink } from '@angular/router';\n\nconst { EVENTS, COMPONENTS, ACTIONS } = PRODUCT_EXPERIENCE_TENANT_MANAGEMENT;\n\n@Component({\n selector: 'c8y-tenant-list',\n templateUrl: './tenant-list.component.html',\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n NgIf,\n ActionBarItemComponent,\n IconDirective,\n HelpComponent,\n DataGridComponent,\n LoadingComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n GuideDocsComponent,\n C8yTranslateDirective,\n GuideHrefDirective,\n ColumnDirective,\n CellRendererDefDirective,\n RouterLink,\n C8yTranslatePipe,\n AsyncPipe,\n DatePipe\n ]\n})\nexport class TenantListComponent implements OnInit {\n tenants$: BehaviorSubject<ITenant[]> = new BehaviorSubject(undefined);\n isPermittedToCreateTenanant = this.permissionsService.hasAnyRole([\n Permissions.ROLE_TENANT_MANAGEMENT_ADMIN,\n Permissions.ROLE_TENANT_MANAGEMENT_CREATE\n ]);\n currentTenant: ICurrentTenant;\n isManagementTenant: boolean;\n TOP_TENANT_NAME = '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 hover: true\n };\n\n columns: Column[] = this.getColumns();\n pagination: Pagination = this.getPagination();\n showSearch = true;\n actionControls: ActionControl[] = this.getActionControls();\n\n noResultsMessage = gettext('No tenants to display.');\n noDataMessage = gettext('There are no tenants defined.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n noDataSubtitle = gettext('Create the first tenant.');\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 private permissionsService: Permissions,\n private gainsightService: GainsightService\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: async (tenant: ITenant) => {\n await this.activateTenant(tenant);\n this.loadTenants();\n },\n showIf: (tenant: ITenant) => this.isSuspended(tenant)\n },\n {\n type: 'suspendTenantAction',\n icon: 'power-off',\n text: gettext('Suspend`tenant`'),\n callback: async (tenant: ITenant) => {\n await this.suspendTenant(tenant);\n this.loadTenants();\n },\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(options: { sendGainsightEvent: boolean } = { sendGainsightEvent: true }) {\n if (options.sendGainsightEvent) {\n this.gainsightService.triggerEvent(EVENTS.TENANT_MANAGEMENT, {\n component: COMPONENTS.TENANT_LIST,\n action: ACTIONS.TENANT_CREATION_INITIALIZED\n });\n }\n\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 icon=\"c8y-layers\"\n label=\"{{ 'Tenants' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n *ngIf=\"!!(appState.state$ | async).newsletter\"\n [placement]=\"'right'\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\n type=\"button\"\n (click)=\"downloadNewsletterEmails()\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Email addresses' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Create tenant' | translate }}\"\n type=\"button\"\n (click)=\"createTenant({ sendGainsightEvent: false })\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Create tenant' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#managing-subtenants\"></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"tenants$ | async\"\n [pagination]=\"pagination\"\n [showSearch]=\"showSearch\"\n [actionControls]=\"actionControls\"\n (onReload)=\"loadTenants()\"\n >\n <ng-container *ngIf=\"!(tenants$ | async); else empty\">\n <c8y-loading></c8y-loading>\n </ng-container>\n <ng-template #empty>\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-layers'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"\n stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\n \"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <ng-container *ngIf=\"stats?.size === 0\">\n <div>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Create tenant' | translate }}\"\n (click)=\"createTenant()\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n {{ 'Create tenant' | translate }}\n </button>\n </div>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants\">user documentation</a>\n .\n </small>\n </p>\n </ng-container>\n </c8y-ui-empty-state>\n </ng-template>\n\n <c8y-column name=\"company\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n <a [routerLink]=\"['/tenants', context.item.id]\">{{ context.value }}</a>\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"parent\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value || currentTenant.name }}\">\n {{ context.value || currentTenant.name }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"creationTime\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | c8yDate }}\">\n {{ context.value | c8yDate }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"status\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n title=\"{{ 'Active`tenant`' | translate }}\"\n *ngIf=\"context.item.status === TenantStatus.ACTIVE\"\n >\n <i\n class=\"text-success\"\n c8yIcon=\"check-circle\"\n ></i>\n </span>\n <span\n title=\"{{ 'Suspended`tenant`' | translate }}\"\n *ngIf=\"context.item.status === TenantStatus.SUSPENDED\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"ban\"\n ></i>\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n","import { ValidatorFn, Validators } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ValidationPattern, validateInternationalPhoneNumber } from '@c8y/ngx-components';\n\n// Model for individual tenant form fields\nexport interface TenantPropertyDefinition {\n id: string;\n defaultValue: number | string | boolean | null;\n type: 'text' | 'checkbox' | 'number' | 'select';\n label: string;\n validators: ValidatorFn[];\n placeholder?: string;\n}\n\n/**\n * Define all hardTyped tenant form fields, checkboxes and select elements.\n *\n * while still benefiting from hard typing, thanks to \"satisfies\" keyword\n */\nconst tenantPropertiesDefinitions = {\n tenantID: {\n id: 'tenantId',\n validators: [],\n defaultValue: null,\n type: 'text',\n label: gettext('ID')\n },\n domain: {\n id: 'domain',\n validators: [\n Validators.required,\n Validators.maxLength(32),\n // TODO: To be consistent, pattern should be change for domain. It is tenantId, to avoid breaking tests, and be consistent with previous implementation.\n Validators.pattern(ValidationPattern.rules.tenantId.pattern)\n ],\n defaultValue: null,\n type: 'text',\n label: gettext('Domain/URL'),\n placeholder: gettext('e.g. my-tenant`used in URL`')\n },\n companyName: {\n id: 'companyName',\n validators: [\n Validators.required,\n Validators.maxLength(256),\n Validators.pattern(ValidationPattern.rules.noLeadingOrTrailingWhitespaces.pattern)\n ],\n defaultValue: null,\n type: 'text',\n label: gettext('Name'),\n placeholder: gettext('e.g. Company A')\n },\n contactName: {\n id: 'contactName',\n validators: [Validators.maxLength(30)],\n defaultValue: null,\n type: 'text',\n label: gettext('Contact name'),\n placeholder: gettext('e.g. Joe Doe`LOCALIZE`')\n },\n contactPhone: {\n id: 'contactPhone',\n validators: [Validators.required, validateInternationalPhoneNumber(), Validators.maxLength(20)],\n defaultValue: null,\n type: 'text',\n label: gettext('Contact phone'),\n placeholder: gettext('e.g. +49 9 876 543 210`LOCALIZE`')\n },\n administratorEmail: {\n id: 'administratorEmail',\n validators: [Validators.required, Validators.email, Validators.maxLength(256)],\n defaultValue: null,\n type: 'text',\n label: gettext(`Administrator's email`),\n placeholder: gettext('e.g. joe.doe@example.com`LOCALIZE`')\n },\n administratorUsername: {\n id: 'administratorUsername',\n validators: [\n Validators.required,\n Validators.pattern(ValidationPattern.rules.user.pattern),\n Validators.maxLength(256)\n ],\n defaultValue: null,\n type: 'text',\n label: gettext(`Administrator's username`),\n placeholder: gettext('e.g. joe`LOCALIZE`')\n },\n externalReference: {\n id: 'externalReference',\n validators: [],\n defaultValue: null,\n type: 'text',\n label: gettext('External reference'),\n placeholder: gettext('e.g. REF12345`reference number`')\n },\n sendPasswordResetEmail: {\n id: 'sendPasswordResetEmail',\n validators: [],\n defaultValue: true,\n type: 'checkbox',\n label: gettext('Send password reset link as email')\n },\n tenantPolicy: {\n id: 'tenantPolicy',\n validators: [],\n defaultValue: null,\n type: 'select',\n label: gettext('Tenant policy')\n },\n allowCreateTenants: {\n id: 'allowCreateTenants',\n validators: [],\n defaultValue: null,\n type: 'checkbox',\n label: gettext('Allow creation of subtenants')\n },\n gainsightEnabled: {\n id: 'gainsightEnabled',\n validators: [],\n defaultValue: false,\n type: 'checkbox',\n label: gettext('Enable Gainsight product experience tracking')\n }\n} satisfies Record<string, TenantPropertyDefinition>;\n\ntype TenantPropertiesKeys = keyof typeof tenantPropertiesDefinitions;\n\nexport const tenantFormInputsDefinitions: {\n [K in TenantPropertiesKeys]: TenantPropertyDefinition;\n} = tenantPropertiesDefinitions;\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ITenant } from '@c8y/client';\nimport {\n AppStateService,\n C8yTranslatePipe,\n CommonModule,\n TenantUiService,\n Permissions\n} from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-support-user-access',\n standalone: true,\n imports: [CommonModule, C8yTranslatePipe],\n templateUrl: './support-user-access.component.html'\n})\nexport class SupportUserAccessComponent implements OnInit {\n @Input()\n tenant: ITenant;\n\n isTopTenant: boolean;\n supportUserLogin: string;\n\n constructor(\n private tenantUiService: TenantUiService,\n private appState: AppStateService,\n private permissions: Permissions\n ) {}\n\n async ngOnInit() {\n this.isTopTenant = await this.tenantUiService.isManagementTenant();\n this.getSupportUserLogin();\n }\n\n private async getSupportUserLogin(): Promise<void> {\n const currentUser = (await this.appState.currentUser).value;\n if (\n this.permissions.hasAnyRole([Permissions.ROLE_SUPPORT_ADMIN, Permissions.ROLE_SUPPORT_READ])\n ) {\n this.supportUserLogin = encodeURIComponent(`${currentUser.id}$`);\n }\n }\n}\n","<div class=\"card-header separator sticky-top large-padding\">\n <div class=\"card-title fit-w\">\n <i\n class=\"c8y-icon c8y-icon-c8y-support\"\n [ngClass]=\"{ 'c8y-icon-duocolor': tenant.supportUser?.enabled }\"\n ></i>\n {{ 'Support user access' | translate }}\n </div>\n @if (tenant.supportUser?.enabled && supportUserLogin && isTopTenant) {\n <a\n class=\"btn btn-default btn-xs\"\n title=\"{{ 'Log in' | translate }}\"\n href=\"//{{ tenant.domain }}/apps/administration/?skipSSORedirect=true&user={{\n supportUserLogin\n }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <i c8yIcon=\"external-link\"></i>\n {{ 'Log in' | translate }}\n </a>\n }\n</div>\n<div class=\"card-block large-padding\">\n <div class=\"form-group\">\n <label>{{ 'Status' | translate }}</label>\n <div>\n <p class=\"form-control-static\">\n @if (!tenant.supportUser?.enabled) {\n <span title=\"{{ 'Disabled' | translate }}\">\n <i\n class=\"text-danger\"\n c8yIcon=\"ban\"\n ></i>\n {{ 'Disabled' | translate }}\n </span>\n } @else {\n <span title=\"{{ 'Enabled' | translate }}\">\n <i\n class=\"text-success\"\n c8yIcon=\"check-circle\"\n ></i>\n {{ 'Enabled' | translate }}\n </span>\n }\n </p>\n </div>\n </div>\n <div\n class=\"form-group\"\n data-cy=\"c8y-support-user-access--activeRequestCount\"\n >\n <label>{{ 'Active requests count' | translate }}</label>\n\n <p class=\"form-control-static\">\n @if (tenant.supportUser?.activeRequestCount) {\n <span>\n <span class=\"badge badge-danger\">\n {{ tenant.supportUser?.activeRequestCount }}\n </span>\n </span>\n }\n @if (!tenant.supportUser?.enabled && tenant.supportUser?.activeRequestCount === 0) {\n <span>\n {{ 'No active requests' | translate }}\n </span>\n }\n @if (tenant.supportUser?.enabled && tenant.supportUser?.activeRequestCount === 0) {\n <span>\n {{ 'Not applicable' | translate }}\n </span>\n }\n </p>\n </div>\n @if (tenant.supportUser?.enabled) {\n <div class=\"form-group\">\n <label>{{ 'Expiry date' | translate }}</label>\n <div>\n <p class=\"form-control-static\">\n @if (tenant.supportUser?.expiryDate) {\n <span>\n {{ tenant.supportUser.expiryDate | c8yDate: 'medium' }}\n </span>\n } @else {\n <span>{{ 'No limit' | translate }}</span>\n }\n </p>\n </div>\n </div>\n }\n</div>\n","import { Component, OnInit, Optional, ViewChild } from '@angular/core';\nimport { ITenant, TenantService, ITenantPolicy } from '@c8y/client';\nimport { FormControl, FormGroup, NgForm, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n TenantUiService,\n AlertService,\n NewPassword,\n GainsightService,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n C8yTranslateDirective,\n LoadingComponent,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n NewPasswordComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { assign, cloneDeep, find } from 'lodash-es';\nimport { Location, NgIf, NgFor, NgTemplateOutlet } from '@angular/common';\nimport { Ng1TenantPoliciesService } from '@c8y/ngx-components/upgrade/upgraded-services';\nimport { tenantFormInputsDefinitions } from './tenant-form-inputs-definitions';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n TenantManagementActionType,\n PRODUCT_EXPERIENCE_TENANT_MANAGEMENT,\n TenantManagementResultType\n} from '../tenants.model';\nimport { take } from 'rxjs/operators';\nimport { SupportUserAccessComponent } from '../support-user-access/support-user-access.component';\n\nconst { ACTIONS, COMPONENTS, EVENTS, RESULTS } = PRODUCT_EXPERIENCE_TENANT_MANAGEMENT;\n\n@Component({\n templateUrl: './tenant-form.component.html',\n selector: 'c8y-tenant-form',\n imports: [\n NgIf,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n FormsModule,\n ReactiveFormsModule,\n C8yTranslateDirective,\n LoadingComponent,\n NgFor,\n NgTemplateOutlet,\n SupportUserAccessComponent,\n RouterLink,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n NewPasswordComponent,\n C8yTranslatePipe\n ]\n})\nexport class TenantFormComponent implements OnInit {\n @ViewChild('passwordForm') passwordForm: NgForm;\n MANAGEMENT_TENANT_NAME = this.tenantUiService.MANAGEMENT;\n title: string;\n host: string;\n isTopTenant: boolean;\n isNew: boolean;\n isEnterpriseEditionTenant: boolean;\n tenant: ITenant | null = null;\n tenantPolicies: Array<ITenantPolicy>;\n tenantPolicyNone = { name: this.translateService.instant(gettext('None')) };\n tenantId: string;\n passwordStrengthEnforced: boolean;\n saveInProgress = false;\n showPasswordComponent = false;\n tenantPolicy: ITenantPolicy;\n fieldKeys: string[];\n tenantForm: FormGroup = new FormGroup({});\n fieldDefinitions = { ...tenantFormInputsDefinitions };\n initialized = false;\n\n constructor(\n @Optional() public tenantPoliciesServiceProvider: Ng1TenantPoliciesService,\n private tenantService: TenantService,\n private tenantUiService: TenantUiService,\n private location: Location,\n private alertService: AlertService,\n private activatedRoute: ActivatedRoute,\n private translateService: TranslateService,\n private gainsightService: GainsightService\n ) {}\n\n async ngOnInit(): Promise<void> {\n await this.getHost();\n this.getTenantId();\n await this.getTenant();\n await this.checkIfIsEnterpriseEdition();\n\n this.initialized = true;\n\n if (!this.isNew) {\n this.sendGainsightEvent(ACTIONS.TENANT_PROPERTIES_OPENED);\n }\n\n this.tenantForm.valueChanges.pipe(take(1)).subscribe(() => {\n this.sendGainsightEvent(\n this.isNew\n ? ACTIONS.TENANT_CREATION_STARTED_FILLING\n : ACTIONS.TENANT_PROPERTIES_STARTED_CHANGING\n );\n });\n }\n\n async onTenantPolicyChange(): Promise<void> {\n const passwordSettings = await this.tenantUiService.getPasswordStrengthSettings();\n this.tenantPolicy = find(this.tenantPolicies, {\n id: this.tenantForm.controls.tenantPolicy.value.id\n });\n const enforcedOnSystemLevel = passwordSettings.enforceStrength;\n const enforcedOnTenantLevel = passwordSettings.strengthValidity;\n const enforcedOnTenantPolicyLevel = this.tenantPoliciesServiceProvider\n ? await this.tenantPoliciesServiceProvider.doesEnforceStrongPassword(this.tenantPolicy)\n : undefined;\n\n if (this.isNew) {\n this.passwordStrengthEnforced = enforcedOnSystemLevel || enforcedOnTenantPolicyLevel;\n } else {\n this.passwordStrengthEnforced = enforcedOnSystemLevel || enforcedOnTenantLevel;\n }\n }\n\n setForm(): void {\n this.tenantForm.patchValue({\n tenantId: this.tenant.id,\n domain: this.tenant.domain,\n companyName: this.tenant.company,\n contactName: this.tenant.contactName,\n contactPhone: this.tenant.contactPhone,\n administratorEmail: this.tenant.adminEmail,\n administratorUsername: this.tenant.adminName,\n sendPasswordResetEmail: this.tenant.sendPasswordResetEmail,\n allowCreateTenants: this.tenant.allowCreateTenants,\n externalReference: this.tenant.customProperties.externalReference,\n gainsightEnabled: this.tenant.customProperties.gainsightEnabled\n });\n }\n\n getTenantId(): void {\n this.tenantId = this.activatedRoute.snapshot.parent.data.contextData.id;\n this.isNew = !this.tenantId;\n }\n\n async onSubmit(): Promise<void> {\n let tenantToBeSaved: ITenant;\n\n if (!this.isNew) {\n const formRawValue = this.tenantForm.getRawValue();\n const customProperties = {\n ...this.tenant.customProperties,\n externalReference: formRawValue.externalReference,\n gainsightEnabled: formRawValue.gainsightEnabled\n };\n tenantToBeSaved = {\n id: this.tenant.id,\n company: formRawValue.companyName,\n contactName: formRawValue.contactName,\n contactPhone: formRawValue.contactPhone,\n domain: formRawValue.domain,\n status: this.tenant.status,\n allowCreateTenants: this.tenantForm.value.allowCreateTenants,\n customProperties: customProperties\n };\n } else {\n tenantToBeSaved = {\n adminEmail: this.tenantForm.value.administratorEmail,\n adminName: this.tenantForm.value.administratorUsername,\n company: this.tenantForm.value.companyName,\n contactName: this.tenantForm.value.contactName,\n contactPhone: this.tenantForm.value.contactPhone,\n domain: this.tenantForm.value.domain,\n adminPass: this.tenantForm.value.password,\n sendPasswordResetEmail: this.tenantForm.value.sendPasswordResetEmail,\n tenantPolicyId: this.tenantForm.value.tenantPolicy?.id\n };\n }\n\n if (this.isNew && this.host) {\n tenantToBeSaved.domain = tenantToBeSaved.domain + this.host;\n }\n const t: ITenant = cloneDeep(tenantToBeSaved);\n if (t.storageLimitPerDevice === undefined) {\n t.storageLimitPerDevice = 0;\n }\n\n this.setSaveInProgress(true);\n\n try {\n let savedTenant;\n if (this.isNew) {\n savedTenant = (await this.tenantService.create(t)).data;\n if (this.tenantForm.value.allowCreateTenants) {\n assign(savedTenant, { allowCreateTenants: this.tenantForm.value.allowCreateTenants });\n await this.tenantService.update(savedTenant);\n }\n } else {\n savedTenant = (await this.tenantService.update(t)).data;\n }\n this.sendGainsightEvent(\n this.isNew ? ACTIONS.TENANT_CREATION_SAVED : ACTIONS.TENANT_PROPERTIES_SAVED,\n { result: RESULTS.SUCCESS }\n );\n this.onSave(savedTenant, this.tenantForm);\n } catch (error) {\n this.alertService.addServerFailure(error);\n this.sendGainsightEvent(\n this.isNew ? ACTIONS.TENANT_CREATION_SAVED : ACTIONS.TENANT_PROPERTIES_SAVED,\n { result: RESULTS.FAILURE, error }\n );\n } finally {\n this.setSaveInProgress(false);\n }\n }\n\n onSave(tenant: ITenant, form: FormGroup): void {\n if (this.isNew) {\n setTimeout(() => {\n this.location.go(`/tenants/${tenant.id}`);\n location.reload();\n }, 2000);\n this.alertService.success(gettext('Tenant saved.'));\n }\n assign(this.tenant, tenant);\n this.alertService.success(gettext('Tenant saved.'));\n form.markAsPristine();\n }\n\n setSaveInProgress(value: boolean): void {\n this.saveInProgress = value;\n }\n\n cancel(): void {\n this.location.go('tenants');\n }\n\n shouldDisableSave(): boolean {\n const disabled = !this.tenantForm.valid || !this.tenantForm.dirty || this.saveInProgress;\n\n if (this.showPasswordComponent) {\n if (this.passwordForm) {\n return disabled || !this.passwordForm.valid;\n } else {\n return true;\n }\n } else {\n return disabled;\n }\n }\n\n onNewPasswordChanged(newPassword: NewPassword): void {\n this.tenantForm.addControl('password', new FormControl(newPassword.password));\n }\n\n onCheckboxChange(inputField): void {\n if (inputField === 'sendPasswordResetEmail') {\n this.showPasswordComponent = !this.tenantForm.value.sendPasswordResetEmail;\n this.removePasswordControl(this.showPasswordComponent);\n }\n }\n\n private setDisabledState(): void {\n if (!this.isNew) {\n this.tenantForm.controls.tenantId.disable();\n this.tenantForm.controls.domain.disable();\n this.tenantForm.controls.administratorEmail.disable();\n this.tenantForm.controls.administratorUsername.disable();\n }\n }\n\n private async shouldShowSubtenantCheckbox(): Promise<boolean> {\n const currentTenantIsManagement = await this.tenantUiService.isManagementTenant();\n const editedTenantIsChildOfManagement =\n this.tenant && this.tenant.parent === this.MANAGEMENT_TENANT_NAME;\n return currentTenantIsManagement && (editedTenantIsChildOfManagement || this.isNew);\n }\n\n private removePasswordControl(passwordComponentShown: boolean): void {\n if (!passwordComponentShown) {\n this.tenantForm.removeControl('password');\n }\n }\n\n private async getTenant(): Promise<void> {\n if (this.tenantId && this.tenantId !== 'new') {\n const detailedTenant = (await this.tenantService.detail(this.tenantId)).data;\n this.title = detailedTenant.company;\n this.onTenant(detailedTenant);\n await this.generateForm();\n this.setForm();\n this.setDisabledState();\n } else {\n this.title = this.translateService.instant(gettext('New tenant'));\n await this.generateForm();\n await this.loadTenantPolicies();\n }\n }\n\n private async loadTenantPolicies(): Promise<void> {\n if (this.tenantPoliciesServiceProvider) {\n this.onTenantPolicies(await this.tenantPoliciesServiceProvider.list());\n }\n }\n\n private async getHost(): Promise<void> {\n const currentTenant = await this.tenantService.current();\n this.host = `.${currentTenant.data.domainName.split('.').slice(1).join('.')}`;\n }\n\n private async checkIfIsEnterpriseEdition(): Promise<void> {\n this.isEnterpriseEditionTenant = await this.tenantUiService.isEnterpriseTenant();\n }\n\n private onTenantPolicies(tenantPolicies): void {\n this.tenantPolicies = [this.tenantPolicyNone, ...tenantPolicies];\n }\n\n private onTenant(tenant: ITenant = {}): void {\n this.tenant = tenant;\n }\n\n private async generateForm(): Promise<void> {\n const shouldShowSubtenantCheckbox = await this.shouldShowSubtenantCheckbox();\n const gainsightAvailable = !!(await this.gainsightService.getGainsightKey());\n if (!shouldShowSubtenantCheckbox) {\n delete this.fieldDefinitions.allowCreateTenants;\n }\n if (!this.isNew) {\n delete this.fieldDefinitions.sendPasswordResetEmail;\n }\n if (this.isNew || (this.host && this.isEnterpriseEditionTenant)) {\n delete this.fieldDefinitions.tenantID;\n }\n if (!this.isNew && !this.host) {\n delete this.fieldDefinitions.domain;\n }\n if (this.isNew || !gainsightAvailable) {\n delete this.fieldDefinitions.gainsightEnabled;\n }\n if (this.isNew) {\n delete this.fieldDefinitions.externalReference;\n }\n\n for (const field of Object.values(this.fieldDefinitions)) {\n this.tenantForm.addControl(field.id, new FormControl(field.defaultValue, field.validators));\n }\n\n this.fieldKeys = Object.keys(this.fieldDefinitions);\n }\n\n private sendGainsightEvent(\n action: TenantManagementActionType,\n props: { result?: TenantManagementResultType; error?: unknown } = {}\n ) {\n this.gainsightService.triggerEvent(EVENTS.TENANT_MANAGEMENT, {\n component: COMPONENTS.TENANT_FORM,\n action,\n ...props\n });\n }\n}\n","<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n [formGroup]=\"tenantForm\"\n (ngSubmit)=\"onSubmit()\"\n>\n <div class=\"card content-fullpage d-grid grid__col--8-4--md\">\n <div class=\"inner-scroll bg-level-0\">\n <div class=\"card-header separator large-padding sticky-top\">\n <div\n class=\"card-title\"\n translate\n >\n Identification\n </div>\n </div>\n\n <div>\n <div\n class=\"card-block\"\n *ngIf=\"!initialized\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let key of fieldKeys\">\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'text'\">\n <ng-container\n *ngTemplateOutlet=\"textField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'number'\">\n <ng-container\n *ngTemplateOutlet=\"numberField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'checkbox'\">\n <ng-container\n *ngTemplateOutlet=\"checkboxField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'select'\">\n <ng-container\n *ngTemplateOutlet=\"selectField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div\n class=\"inner-scroll bg-level-1\"\n *ngIf=\"!isNew && tenant\"\n >\n <c8y-support-user-access [tenant]=\"tenant\"></c8y-support-user-access>\n </div>\n\n <!-- FOOTER CARD -->\n <div\n class=\"card-footer separator large-padding grid__col--fullspan\"\n *ngIf=\"initialized\"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n data-cy=\"c8y-tenant-form--cancelButton\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n [disabled]=\"shouldDisableSave()\"\n data-cy=\"c8y-tenant-form--saveButton\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n\n <!-- NG TEMPLATES -->\n <ng-template\n #textField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n [attr.data-cy]=\"'c8y-tenant-form--' + fieldDefinition.id\"\n />\n <span\n class=\"input-group-addon\"\n *ngIf=\"fieldDefinition.id === 'domain' && host && isNew\"\n >\n {{ host }}\n </span>\n </div>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #numberField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n [attr.data-cy]=\"'c8y-tenant-form--' + fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #checkboxField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n (change)=\"onCheckboxChange(fieldDefinition.id)\"\n [attr.data-cy]=\"'c8y-tenant-form--' + fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n <form\n #passwordForm=\"ngForm\"\n *ngIf=\"showPasswordComponent && fieldDefinition.id === 'sendPasswordResetEmail'\"\n >\n <c8y-new-password\n [showChangePasswordButton]=\"false\"\n [requireStrongPassword]=\"passwordStrengthEnforced\"\n (password)=\"onNewPasswordChanged($event)\"\n ></c8y-new-password>\n </form>\n </ng-template>\n\n <ng-template\n #selectField\n let-fieldDefinition\n >\n <c8y-form-group *ngIf=\"tenantPolicies && tenantPolicies.length > 0\">\n <label>{{ fieldDefinition.label | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n title=\"{{ fieldDefinition.label | translate }}\"\n name=\"tenantPolicy\"\n (change)=\"onTenantPolicyChange()\"\n formControlName=\"tenantPolicy\"\n [attr.data-cy]=\"'c8y-tenant-form--' + fieldDefinition.id\"\n >\n <option\n *ngFor=\"let tenantPolicy of tenantPolicies\"\n [ngValue]=\"tenantPolicy\"\n >\n {{ tenantPolicy.name }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n </ng-template>\n</form>\n","import { Injectable } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\nimport { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { JSONSchema7, JSONSchema7TypeName } from 'json-schema';\nimport { ValidationPattern } from '@c8y/ngx-components';\n\ntype PropertiesType = { [key: string]: JSONSchema7 };\n\n// Model for individual tenant custom property field\nexport interface TenantCustomPropertyField {\n id: string;\n label: string;\n type: JSONSchema7TypeName | JSONSchema7TypeName[];\n format?: 'datetime' | string;\n formControlReference: AbstractControl;\n}\n\nconst defaultFilters = {\n query: \"(type eq 'c8y_JsonSchema') and (appliesTo.TENANTS eq true)\",\n pageSize: 1000,\n withTotalPages: true\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CustomPropertiesService {\n constructor(private inventoryService: InventoryService) {}\n\n async getFormAndFieldList(): Promise<{ form: FormGroup; fields: TenantCustomPropertyField[] }> {\n const schema = await this.getCustomProperties();\n const formGroup = this.buildFormGroup(schema);\n const fields = this.buildFieldList(formGroup, schema);\n return { form: formGroup, fields };\n }\n\n private async getCustomProperties(): Promise<PropertiesType> {\n let customFieldsSchema: PropertiesType = {};\n const customProperties = await this.inventoryService.list(defaultFilters);\n\n customProperties.data.forEach(item => {\n const fieldSchema: PropertiesType = item['c8y_JsonSchema'].properties;\n customFieldsSchema = { ...customFieldsSchema, ...(fieldSchema as object) };\n });\n return customFieldsSchema;\n }\n\n private buildFormGroup(schema: PropertiesType): FormGroup {\n const fg = new FormGroup({});\n\n for (const [key, value] of Object.entries(schema)) {\n const control = new FormControl(value.default, []);\n this.applyValidators(control, value);\n fg.addControl(key, control);\n }\n return fg;\n }\n\n private applyValidators(control: FormControl, props: JSONSchema7): void {\n const validatorsMap = {\n required: Validators.required,\n minimum: Validators.min(props.minimum),\n maximum: Validators.max(props.maximum),\n minLength: Validators.minLength(props.minLength),\n maxLength: Validators.maxLength(props.maxLength),\n pattern: Validators.pattern(props.pattern)\n };\n\n Object.entries(validatorsMap).forEach(([key, validator]) => {\n if (props[key as keyof JSONSchema7] !== undefined) {\n control.addValidators(validator);\n }\n });\n\n if (props.type === 'integer') {\n control.addValidators(Validators.pattern(ValidationPattern.rules.integer.pattern));\n }\n }\n\n private buildFieldList(form: FormGroup, schema: PropertiesType): TenantCustomPropertyField[] {\n const fieldList: TenantCustomPropertyField[] = [];\n Object.entries(schema).forEach(([key, value]) => {\n fieldList.push({\n id: key,\n label: value.title,\n type: value.type,\n format: value.format,\n formControlReference: form.get(key) as FormControl\n });\n });\n\n return fieldList;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { TenantCustomPropertyField } from '../custom-properties.service';\nimport { CommonModule } from '@angular/common';\nimport { C8yTranslatePipe, DateTimePickerModule, FormGroupComponent } from '@c8y/ngx-components';\nimport { FormsModule } from '@c8y/ngx-components';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'c8y-custom-property-field',\n standalone: true,\n imports: [\n CommonModule,\n C8yTranslatePipe,\n FormGroupComponent,\n FormsModule,\n ReactiveFormsModule,\n DateTimePickerModule\n ],\n templateUrl: './custom-property-field.component.html'\n})\nexport class CustomPropertyFieldComponent {\n @Input()\n fieldDefinition: TenantCustomPropertyField;\n\n @Input()\n form: FormGroup;\n}\n","<ng-container *ngIf=\"form && fieldDefinition\">\n <ng-container [ngSwitch]=\"fieldDefinition.type\">\n <ng-container *ngSwitchCase=\"'boolean'\">\n <c8y-form-group [formGroup]=\"form\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'number'\">\n <c8y-form-group [formGroup]=\"form\">\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'integer'\">\n <c8y-form-group [formGroup]=\"form\">\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'string'\">\n <c8y-form-group\n *ngIf=\"!fieldDefinition.format\"\n [formGroup]=\"form\"\n >\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n\n <c8y-form-group\n *ngIf=\"fieldDefinition.format === 'datetime'\"\n [formGroup]=\"form\"\n >\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <c8y-date-time-picker\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n data-cy=\"c8y-custom-property-field--date-time-picker\"\n ></c8y-date-time-picker>\n </c8y-form-group>\n </ng-container>\n </ng-container>\n</ng-container>\n","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { IResult, ITenant, TenantService } from '@c8y/client';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, CoreModule, FormsModule, GainsightService } from '@c8y/ngx-components';\nimport {\n CustomPropertiesService,\n TenantCustomPropertyField\n} from '../custom-properties/custom-properties.service';\nimport { CustomPropertyFieldComponent } from '../custom-properties/custom-property-field/custom-property-field.component';\nimport {\n TenantManagementActionType,\n PRODUCT_EXPERIENCE_TENANT_MANAGEMENT,\n TenantManagementResultType\n} from '../tenants.model';\nimport { take } from 'rxjs/operators';\n\nconst { ACTIONS, EVENTS, COMPONENTS, RESULTS } = PRODUCT_EXPERIENCE_TENANT_MANAGEMENT;\n\n@Component({\n selector: 'c8y-custom-properties',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CoreModule,\n RouterLink,\n CustomPropertyFieldComponent\n ],\n templateUrl: './custom-properties.component.html'\n})\nexport class CustomPropertiesComponent implements OnInit {\n fieldDefinitions: TenantCustomPropertyField[];\n customPropsForm: FormGroup = new FormGroup({});\n tenant: ITenant | null = null;\n initialized = false;\n\n constructor(\n private tenantService: TenantService,\n private alertService: AlertService,\n private activatedRoute: ActivatedRoute,\n private customPropertiesService: CustomPropertiesService,\n private gainsightService: GainsightService\n ) {}\n\n async ngOnInit() {\n await this.loadTenantDetails();\n const { form, fields } = await this.customPropertiesService.getFormAndFieldList();\n this.customPropsForm = form;\n this.fieldDefinitions = fields;\n this.applyValuesFromTenant();\n this.initialized = true;\n\n this.sendGainsightEvent(ACTIONS.TENANT_CUSTOM_PROPERTIES_OPENED);\n\n this.customPropsForm.valueChanges.pipe(take(1)).subscribe(() => {\n this.sendGainsightEvent(ACTIONS.TENANT_CUSTOM_PROPERTIES_STARTED_CHANGING);\n });\n }\n\n async onSubmit(): Promise<void> {\n if (this.customPropsForm.invalid || !this.tenant) {\n return;\n }\n\n const updatedTenant: ITenant = {\n ...this.tenant,\n customProperties: {\n ...this.tenant.customProperties,\n ...this.getDirtyValues()\n }\n };\n\n try {\n await this.tenantService.update(updatedTenant);\n this.alertService.success(gettext('Custom properties values saved.'));\n this.sendGainsightEvent(ACTIONS.TENANT_CUSTOM_PROPERTIES_SAVED, { result: RESULTS.SUCCESS });\n } catch (error) {\n this.alertService.addServerFailure(error);\n this.sendGainsightEvent(ACTIONS.TENANT_CUSTOM_PROPERTIES_SAVED, {\n result: RESULTS.FAILURE,\n error\n });\n }\n }\n\n private async loadTenantDetails() {\n try {\n const result: IResult<ITenant> = await this.tenantService.detail(\n this.activatedRoute.snapshot.parent.data.contextData.id\n );\n this.tenant = result.data;\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n }\n\n private applyValuesFromTenant(): void {\n const customProps = this.tenant?.customProperties || {};\n this.customPropsForm.patchValue(customProps);\n }\n\n private getDirtyValues(): { [key: string]: unknown } {\n const dirtyValues: { [key: string]: unknown } = {};\n Object.keys(this.customPropsForm.controls).forEach(key => {\n const control = this.customPropsForm.controls[key];\n if (control && control.dirty && control.value !== null) {\n dirtyValues[key] = control.value;\n }\n });\n\n return dirtyValues;\n }\n\n private sendGainsightEvent(\n action: TenantManagementActionType,\n props: { result?: TenantManagementResultType; error?: unknown } = {}\n ) {\n this.gainsightService.triggerEvent(EVENTS.TENANT_MANAGEMENT, {\n component: COMPONENTS.TENANT_CUSTOM_PROPERTIES,\n action,\n ...props\n });\n }\n}\n","@if (tenant) {\n <c8y-title>\n {{ tenant.company }}\n </c8y-title>\n}\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container>\n <form\n [formGroup]=\"customPropsForm\"\n (ngSubmit)=\"onSubmit()\"\n >\n <div class=\"card card--fullpage m-b-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Custom properties\n </div>\n </div>\n\n <div class=\"inner-scroll\">\n @if (!initialized) {\n <div class=\"card-block\">\n <c8y-loading></c8y-loading>\n </div>\n }\n\n <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#custom-properties\"></c8y-help>\n\n <!-- empty state -->\n @if (fieldDefinitions?.length === 0 && initialized) {\n <c8y-ui-empty-state\n [icon]=\"'property-script'\"\n [title]=\"'No custom properties to display.' | translate\"\n [subtitle]=\"'Add a new tenant property in Properties library.' | translate\"\n >\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants/#custom-properties\">\n User guide\n </a>\n .\n </small>\n </p>\n </c8y-ui-empty-state>\n }\n\n @if (initialized) {\n <div class=\"card-block\">\n @for (field of fieldDefinitions; track field.id) {\n <c8y-custom-property-field\n [fieldDefinition]=\"field\"\n [form]=\"customPropsForm\"\n ></c8y-custom-property-field>\n }\n </div>\n }\n </div>\n\n @if (initialized) {\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n translate\n data-cy=\"custom-properties--cancel-button\"\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!(!customPropsForm.invalid && customPropsForm.dirty)\"\n translate\n data-cy=\"custom-properties--save-button\"\n >\n Save\n </button>\n </div>\n }\n </div>\n </form>\n</ng-container>\n","import { ValidatorFn, Validators } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n// Model for individual tenant limit field\nexport interface TenantLimit {\n id: string;\n validators: ValidatorFn[];\n defaultValue: number | string | boolean | null;\n type: 'text' | 'checkbox' | 'number';\n label: string;\n labelArgs?: object;\n placeholder?: string;\n placeholderArgs?: object;\n}\n\nconst MAX_DEVICE_STORAGE_LIMIT_MiB = Math.round(Number.MAX_SAFE_INTEGER / 1024 / 1024);\n\n/**\n * Define all hardTyped custom properties, and their configuration in one place.\n *\n * This exported const utilizes typescript inferring,\n * while still benefiting from hard typing, thanks to \"satisfies\" keyword\n */\nconst tenantLimitsCustomPropertiesDefinition = {\n limitDevicesNumber: {\n id: 'limit.devices.number',\n validators: [Validators.min(0)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit number of devices'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 1000 }\n },\n limitHttpRequests: {\n id: 'limit.http.requests',\n validators: [Validators.min(-1)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit HTTP requests'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 10000 }\n },\n limitHttpQueue: {\n id: 'limit.http.queue',\n validators: [Validators.min(-1)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit HTTP queue'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 100 }\n },\n limitStreamRequests: {\n id: 'limit.stream.requests',\n validators: [Validators.min(-1)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit stream requests'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 100 }\n },\n limitStreamQueue: {\n id: 'limit.stream.queue',\n validators: [Validators.min(-1)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit stream queue'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 100 }\n },\n cepServerQueueLimit: {\n id: 'cepServer.queue.limit',\n validators: [Validators.min(-1)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit CEP server queue'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 100 }\n },\n dataBrokerQueueLimit: {\n id: 'data-broker.queue.limit',\n validators: [Validators.min(0)],\n defaultValue: null,\n type: 'number',\n label: gettext('Limit data broker queue'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 100 }\n },\n deviceStorageLimitMiB: {\n id: 'deviceStorageLimitMiB',\n validators: [Validators.min(0), Validators.max(MAX_DEVICE_STORAGE_LIMIT_MiB)],\n defaultValue: 0,\n type: 'number',\n label: gettext('Storage limit per device (MiB)'),\n placeholder: gettext('e.g. {{ example }}'),\n placeholderArgs: { example: 100 }\n }\n} satisfies Record<string, TenantLimit>;\n\nexport type TenantLimitsCustomPropertiesKeys = keyof typeof tenantLimitsCustomPropertiesDefinition;\n\nexport const tenantLimitsCustomProperties: {\n [K in TenantLimitsCustomPropertiesKeys]: TenantLimit;\n} = tenantLimitsCustomPropertiesDefinition;\n","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { ApplicationService, IResult, ITenant, TenantService } from '@c8y/client';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n CoreModule,\n FormsModule,\n GainsightService,\n OptionsService\n} from '@c8y/ngx-components';\nimport {\n tenantLimitsCustomProperties,\n TenantLimitsCustomPropertiesKeys\n} from './tenant-limits-definitions';\nimport {\n TenantManagementActionType,\n PRODUCT_EXPERIENCE_TENANT_MANAGEMENT,\n TenantManagementResultType\n} from '../tenants.model';\nimport { take } from 'rxjs/operators';\n\nconst { ACTIONS, EVENTS, COMPONENTS, RESULTS } = PRODUCT_EXPERIENCE_TENANT_MANAGEMENT;\n\n@Component({\n selector: 'c8y-tenant-limits',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule, CoreModule, RouterLink],\n templateUrl: './tenant-limits.component.html'\n})\nexport class TenantLimitsComponent implements OnInit {\n fieldDefinitions = { ...tenantLimitsCustomProperties };\n fieldKeys: string[];\n storageLimitFeatureEnabled: boolean;\n limitsForm: FormGroup = new FormGroup({});\n tenant: ITenant | null = null;\n initialized = false;\n deviceStorageLimitInfoMessage = gettext('Default: 0 (unlimited storage)');\n\n constructor(\n private tenantService: TenantService,\n private alertService: AlertService,\n private activatedRoute: ActivatedRoute,\n private applicationService: ApplicationService,\n private options: OptionsService,\n private gainsightService: GainsightService\n ) {}\n\n async ngOnInit() {\n await this.loadTenantDetails();\n await this.setupConditionalFields();\n this.generateForm();\n this.initialized = true;\n\n this.sendGainsightEvent(ACTIONS.TENANT_LIMITS_OPENED);\n }\n\n async onSubmit() {\n if (this.limitsForm.invalid || !this.tenant) {\n return;\n }\n\n const { deviceStorageLimitMiB, ...customProperties } = this.getDirtyValues();\n\n const updatedTenant: ITenant = {\n ...this.tenant,\n customProperties: {\n ...this.tenant.customProperties,\n ...customProperties\n }\n };\n\n if (this.storageLimitFeatureEnabled) {\n updatedTenant.storageLimitPerDevice = (deviceStorageLimitMiB || 0) * 1024 * 1024;\n } else {\n updatedTenant.storageLimitPerDevice = 0;\n }\n\n try {\n await this.tenantService.update(updatedTenant);\n this.alertService.success(gettext('Limit values saved.'));\n this.sendGainsightEvent(ACTIONS.TENANT_LIMITS_SAVED, { result: RESULTS.SUCCESS });\n } catch (error) {\n this.alertService.addServerFailure(error);\n this.sendGainsightEvent(ACTIONS.TENANT_LIMITS_SAVED, { result: RESULTS.FAILURE, error });\n }\n }\n\n private async loadTenantDetails() {\n try {\n const result: IResult<ITenant> = await this.tenantService.detail(\n this.activatedRoute.snapshot.parent.data.contextData.id\n );\n this.tenant = result.data;\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n }\n\n private async setupConditionalFields() {\n try {\n const apps = (\n await this.applicationService.listByUser(undefined, {\n dropOverwrittenApps: true,\n noPaging: true\n })\n ).data;\n\n const cepModuleEnabled = apps.some(app => app.name === 'cep' || app.contextPath === 'cep');\n const dataBrokerModuleEnabled = apps.some(\n app => app.name === 'feature-broker' || app.contextPath === 'feature-broker'\n );\n this.storageLimitFeatureEnabled = this.options.storageLimitationFeatureEnabled;\n\n if (!cepModuleEnabled) {\n delete this.fieldDefinitions.cepServerQueueLimit;\n }\n if (!dataBrokerModuleEnabled) {\n delete this.fieldDefinitions.dataBrokerQueueLimit;\n }\n if (!this.storageLimitFeatureEnabled) {\n delete this.fieldDefinitions.deviceStorageLimitMiB;\n }\n\n this.fieldKeys = Object.keys(this.fieldDefinitions);\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n\n private generateForm() {\n for (const field of Object.values(tenantLimitsCustomProperties)) {\n this.limitsForm.addControl(field.id, new FormControl(field.defaultValue, field.validators));\n }\n const customProps = this.tenant?.customProperties || {};\n this.limitsForm.patchValue(customProps);\n if (this.storageLimitFeatureEnabled) {\n const deviceStorageLimitMiB = (this.tenant?.storageLimitPerDevice || 0) / 1024 / 1024;\n this.limitsForm.patchValue({ deviceStorageLimitMiB });\n }\n\n this.limitsForm.valueChanges.pipe(take(1)).subscribe(() => {\n this.sendGainsightEvent(ACTIONS.TENANT_LIMITS_STARTED_CHANGING);\n });\n }\n\n private getDirtyValues(): Partial<{ [K in TenantLimitsCustomPropertiesKeys]: any }> {\n const dirtyValues: { [key: string]: any } = {};\n Object.keys(this.limitsForm.controls).forEach(key => {\n const control = this.limitsForm.controls[key];\n if (control && control.dirty) {\n dirtyValues[key] = control.value;\n }\n });\n return dirtyValues;\n }\n\n private sendGainsightEvent(\n action: TenantManagementActionType,\n props: { result?: TenantManagementResultType; error?: unknown } = {}\n ) {\n this.gainsightService.triggerEvent(EVENTS.TENANT_MANAGEMENT, {\n component: COMPONENTS.TENANT_LIMITS,\n action,\n ...props\n });\n }\n}\n","<c8y-title *ngIf=\"tenant\">\n {{ tenant.company }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n [formGroup]=\"limitsForm\"\n (ngSubmit)=\"onSubmit()\"\n>\n <div class=\"card card--fullpage m-b-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Limits\n </div>\n </div>\n\n <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#setting-limits\"></c8y-help>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block\"\n *ngIf=\"!initialized\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let key of fieldKeys\">\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'text'\">\n <ng-container\n *ngTemplateOutlet=\"textField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'number'\">\n <ng-container\n *ngTemplateOutlet=\"numberField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'checkbox'\">\n <ng-container\n *ngTemplateOutlet=\"checkboxField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div\n class=\"card-footer separator\"\n *ngIf=\"initialized\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"limitsForm.invalid\"\n translate\n >\n Save\n </button>\n </div>\n </div>\n\n <ng-template\n #textField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #numberField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <ng-container\n *ngIf=\"\n fieldDefinitions.deviceStorageLimitMiB &&\n fieldDefinitions.deviceStorageLimitMiB.id === fieldDefinition.id &&\n limitsForm.controls[fieldDefinition.id] as control\n \"\n >\n <div\n class=\"icon-flex\"\n *ngIf=\"!control.dirty || (control.dirty && !control.errors)\"\n >\n <p class=\"help-block\">\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n <span>{{ deviceStorageLimitInfoMessage | translate }}</span>\n </p>\n </div>\n </ng-container>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #checkboxField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n </ng-template>\n</form>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class ExistingTenantGuard {\n /**\n * Checks if the current route is displayed for an existing tenant.\n *\n * @returns `true` if visiting a route for an existing tenant.\n */\n canActivate(route: ActivatedRouteSnapshot): boolean {\n return route.params.id !== 'new';\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, hookNavigator, hookRoute, ViewContext } 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';\nimport { TenantFormComponent } from './tenant-form/tenant-form.component';\nimport { CustomPropertiesComponent } from './custom-properties/custom-properties.component';\nimport { TenantLimitsComponent } from './tenant-limits/tenant-limits.component';\nimport { SupportUserAccessComponent } from './support-user-access/support-user-access.component';\nimport { ExistingTenantGuard } from './existing-tenant.guard';\n\n@NgModule({\n imports: [\n BsDatepickerModule,\n CoreModule,\n RouterModule,\n SupportUserAccessComponent,\n TenantListComponent,\n CreationTimeFilteringFormRendererComponent,\n StatusFilteringFormRendererComponent,\n TenantFormComponent\n ],\n exports: [],\n providers: [\n TenantListGuard,\n ExistingTenantGuard,\n hookNavigator(TenantsNavigationFactory),\n hookRoute([\n {\n path: 'tenants',\n icon: 'c8y-layers',\n component: TenantListComponent,\n canActivate: [TenantListGuard]\n },\n {\n path: 'tenants/new',\n component: TenantFormComponent\n },\n {\n path: 'properties',\n component: TenantFormComponent,\n icon: 'new-property',\n label: gettext('Properties'),\n context: ViewContext.Tenant,\n priority: 10000\n },\n {\n path: 'custom_properties',\n component: CustomPropertiesComponent,\n icon: 'property-script',\n label: gettext('Custom properties'),\n context: ViewContext.Tenant,\n priority: 4,\n canActivate: [ExistingTenantGuard]\n },\n {\n path: 'limits',\n component: TenantLimitsComponent,\n icon: 'sliders',\n label: gettext('Limits'),\n context: ViewContext.Tenant,\n priority: 3,\n canActivate: [ExistingTenantGuard]\n }\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":["i3","i2","EVENTS","COMPONENTS","ACTIONS","RESULTS","i1","i5","i6","i7","CommonModule","FormsModule","i4.CustomPropertiesService"],"mappings":"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"}
|