{"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/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/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","import { Inject, Injectable, Optional } from '@angular/core';\nimport { gettext, NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\nimport { TenantListGuard } from './tenant-list/tenant-list.guard';\nimport { TenantsModuleConfig, TENANTS_MODULE_CONFIG } from './tenants.model';\n\n@Injectable()\nexport class TenantsNavigationFactory implements NavigatorNodeFactory {\n  private navs: NavigatorNode[] = [];\n\n  constructor(\n    private tenantListGuard: TenantListGuard,\n    @Optional() @Inject(TENANTS_MODULE_CONFIG) private config: TenantsModuleConfig\n  ) {}\n\n  async get(): Promise<NavigatorNode[]> {\n    const canActivateTenantList = await this.tenantListGuard.canActivate();\n    if (!this.navs.length) {\n      const subtenantsNavigatorNode = this.config?.subtenantsNavigatorNode ?? true;\n      if (subtenantsNavigatorNode !== false) {\n        this.navs.push(\n          new NavigatorNode({\n            parent: {\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 } from '@angular/core';\nimport { ITenant } from '@c8y/client';\nimport { FilterChip, FilteringFormRendererContext, gettext } from '@c8y/ngx-components';\nimport { DatePipe } from '@angular/common';\nimport { TranslateService } from '@ngx-translate/core';\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})\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])\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","<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      />\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      />\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 { FilteringFormRendererContext } from '@c8y/ngx-components';\n\n@Component({\n  templateUrl: './status.filtering-form-renderer.component.html',\n  selector: 'c8y-status-filtering-form-renderer'\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 } 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 {\n  ActionControl,\n  AlertService,\n  AppStateService,\n  BuiltInActionType,\n  Column,\n  DisplayOptions,\n  gettext,\n  ModalService,\n  Pagination,\n  PasswordService,\n  Permissions,\n  SortOrder,\n  Status,\n  TenantUiService\n} from '@c8y/ngx-components';\n\nimport { CreationTimeFilteringFormRendererComponent } from './creation-time.filtering-form-renderer.component';\nimport { StatusFilteringFormRendererComponent } from './status.filtering-form-renderer.component';\n\n@Component({\n  selector: 'c8y-tenant-list',\n  templateUrl: './tenant-list.component.html'\n})\nexport class TenantListComponent implements OnInit {\n  tenants$: BehaviorSubject<ITenant[]> = new BehaviorSubject(undefined);\n  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  ) {}\n\n  async ngOnInit() {\n    this.currentTenant = this.appState.currentTenant.value;\n    this.isManagementTenant = await this.tenantUiService.isManagementTenant();\n    this.loadTenants();\n  }\n\n  loadTenants() {\n    this.tenants$.next(undefined);\n    from(this.tenantService.list({ pageSize: 2000, withTotalPages: true, withApps: false }))\n      .pipe(\n        expand(resultList => resultList.paging.nextPage !== null && resultList.paging.next()),\n        takeWhile(resultList => resultList.paging.nextPage !== null, true),\n        reduce(\n          (tenants: ITenant[], resultList: IResultList<ITenant>) => [\n            ...tenants,\n            ...resultList.data\n          ],\n          []\n        ),\n        shareReplay(1)\n      )\n      .subscribe(tenants => this.tenants$.next(tenants));\n  }\n\n  getColumns(): Column[] {\n    return [\n      {\n        name: 'company',\n        header: gettext('Tenant'),\n        path: 'company',\n        filterable: true,\n        sortable: true,\n        sortOrder: 'asc' as SortOrder\n      },\n      {\n        name: 'id',\n        header: gettext('ID'),\n        path: 'id',\n        filterable: true,\n        sortable: true\n      },\n      {\n        name: 'domain',\n        header: gettext('Domain'),\n        path: 'domain',\n        filterable: true,\n        sortable: true\n      },\n      {\n        name: 'parent',\n        header: gettext('Parent tenant'),\n        path: 'parent',\n        filterable: true,\n        sortable: true\n      },\n      {\n        name: 'contactName',\n        header: gettext('Contact name'),\n        path: 'contactName',\n        filterable: true,\n        sortable: true\n      },\n      {\n        name: 'creationTime',\n        header: gettext('Created'),\n        path: 'creationTime',\n        filterable: true,\n        filteringFormRendererComponent: CreationTimeFilteringFormRendererComponent,\n        sortable: true\n      },\n      {\n        name: 'externalReference',\n        header: gettext('External reference'),\n        path: 'customProperties.externalReference',\n        filterable: true,\n        sortable: true\n      },\n      {\n        name: 'status',\n        header: gettext('Status'),\n        path: 'status',\n        filterable: true,\n        filteringFormRendererComponent: StatusFilteringFormRendererComponent,\n        sortable: true,\n        resizable: false\n      }\n    ];\n  }\n\n  getPagination(): Pagination {\n    return {\n      pageSize: 10,\n      currentPage: 1\n    };\n  }\n\n  getActionControls(): ActionControl[] {\n    return [\n      {\n        type: BuiltInActionType.Edit,\n        text: gettext('Edit`tenant`'),\n        callback: tenant => this.goToDetails(tenant)\n      },\n      {\n        type: 'activateTenantAction',\n        icon: 'power-off',\n        text: gettext('Activate`tenant`'),\n        callback: (tenant: ITenant) => this.activateTenant(tenant),\n        showIf: (tenant: ITenant) => this.isSuspended(tenant)\n      },\n      {\n        type: 'suspendTenantAction',\n        icon: 'power-off',\n        text: gettext('Suspend`tenant`'),\n        callback: (tenant: ITenant) => this.suspendTenant(tenant),\n        showIf: (tenant: ITenant) => this.isActive(tenant)\n      },\n      {\n        type: BuiltInActionType.Delete,\n        text: gettext('Delete`tenant`'),\n        callback: tenant => this.delete(tenant),\n        showIf: () => this.isManagementTenant\n      }\n    ];\n  }\n\n  createTenant() {\n    this.location.go('/tenants/new');\n  }\n\n  goToDetails(tenant: ITenant) {\n    this.location.go(`/tenants/${tenant.id}`);\n  }\n\n  async activateTenant(tenant) {\n    try {\n      const { data: savedTenant } = await this.tenantService.update({\n        id: tenant.id,\n        status: TenantStatus.ACTIVE\n      });\n      Object.assign(tenant, savedTenant);\n      this.alertService.success(gettext('Tenant activated.'));\n    } catch (ex) {\n      if (ex) {\n        this.alertService.addServerFailure(ex);\n      }\n    }\n  }\n\n  async suspendTenant(tenant) {\n    const title = gettext('Suspend tenant');\n    const confirmationText = gettext(\n      'You are about to suspend tenant \"{{ company }}\" (ID \"{{ id }}\").'\n    );\n    const proceed = gettext('Do you want to proceed?');\n    const body = [\n      this.translateService.instant(confirmationText, {\n        company: tenant.company,\n        id: tenant.id\n      }),\n      this.translateService.instant(proceed)\n    ].join(' ');\n    const labels = {\n      ok: gettext('Suspend`tenant`')\n    };\n    try {\n      await this.modalService.confirm(title, body, Status.DANGER, labels);\n      const confirmed = await this.passwordService.confirmPassword().toPromise();\n      if (confirmed === true) {\n        const { data: savedTenant } = await this.tenantService.update({\n          id: tenant.id,\n          status: TenantStatus.SUSPENDED\n        });\n        Object.assign(tenant, savedTenant);\n        this.alertService.success(gettext('Tenant suspended.'));\n      }\n    } catch (ex) {\n      if (ex) {\n        this.alertService.addServerFailure(ex);\n      }\n    }\n  }\n\n  async delete(tenant) {\n    const title = gettext('Delete tenant');\n    const confirmationText = gettext(\n      'You are about to delete tenant \"{{ company }}\" (ID \"{{ id }}\").'\n    );\n    const hint = gettext('This operation is irreversible.');\n    const proceed = gettext('Do you want to proceed?');\n    const body = [\n      this.translateService.instant(confirmationText, {\n        company: tenant.company,\n        id: tenant.id\n      }),\n      this.translateService.instant(hint),\n      this.translateService.instant(proceed)\n    ].join(' ');\n    const labels = {\n      ok: gettext('Delete`tenant`')\n    };\n    try {\n      await this.modalService.confirm(title, body, Status.DANGER, labels);\n      const confirmed = await this.passwordService.confirmPassword().toPromise();\n      if (confirmed === true) {\n        await this.tenantService.delete(tenant);\n        const tenantsWithoutRemovedOne = this.tenants$.value.filter(t => t !== tenant);\n        this.tenants$.next(tenantsWithoutRemovedOne);\n        this.alertService.success(\n          gettext('Tenant is being deleted in the background. This might take a while…')\n        );\n      }\n    } catch (ex) {\n      if (ex) {\n        this.alertService.addServerFailure(ex);\n      }\n    }\n  }\n\n  isActive(tenant: ITenant) {\n    return tenant.status === TenantStatus.ACTIVE;\n  }\n\n  isSuspended(tenant: ITenant) {\n    return tenant.status === TenantStatus.SUSPENDED;\n  }\n\n  async downloadNewsletterEmails() {\n    const { res, data } = await this.userService.getNewsletterEmails();\n    const contentType = res.headers.get('content-type');\n    const contentDisposition = res.headers.get('content-disposition');\n    const filename = /filename=\"(.*)\"/.exec(contentDisposition)[1];\n    const blob = new Blob([data], { type: contentType });\n    saveAs(blob, filename);\n  }\n}\n","<c8y-title>\n  {{ 'Subtenants' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n  <c8y-breadcrumb-item\n    icon=\"c8y-layers\"\n    label=\"{{ 'Tenants' | translate }}\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [icon]=\"'c8y-layers'\"\n    [label]=\"'Subtenants' | translate\"\n  ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n  *ngIf=\"!!(appState.state$ | async).newsletter\"\n  [placement]=\"'right'\"\n>\n  <button\n    class=\"btn btn-link\"\n    title=\"{{\n      'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n        | translate\n    }}\"\n    type=\"button\"\n    (click)=\"downloadNewsletterEmails()\"\n  >\n    <i c8yIcon=\"download\"></i>\n    {{ 'Email addresses' | translate }}\n  </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n  <button\n    class=\"btn btn-link\"\n    title=\"{{ 'Create tenant' | translate }}\"\n    type=\"button\"\n    (click)=\"createTenant()\"\n    [disabled]=\"!isPermittedToCreateTenanant\"\n  >\n    <i c8yIcon=\"plus-circle\"></i>\n    {{ 'Create tenant' | translate }}\n  </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#managing-subtenants\"></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n  <c8y-data-grid\n    [title]=\"title\"\n    [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n    [loadingItemsLabel]=\"loadingItemsLabel\"\n    [displayOptions]=\"displayOptions\"\n    [columns]=\"columns\"\n    [rows]=\"tenants$ | async\"\n    [pagination]=\"pagination\"\n    [showSearch]=\"showSearch\"\n    [actionControls]=\"actionControls\"\n    (onReload)=\"loadTenants()\"\n  >\n    <ng-container *ngIf=\"!(tenants$ | async); else empty\">\n      <c8y-loading></c8y-loading>\n    </ng-container>\n    <ng-template #empty>\n      <c8y-ui-empty-state\n        [icon]=\"stats?.size > 0 ? 'search' : 'c8y-layers'\"\n        [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n        [subtitle]=\"\n          stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\n        \"\n        *emptyStateContext=\"let stats\"\n        [horizontal]=\"stats?.size > 0\"\n      >\n        <ng-container *ngIf=\"stats?.size === 0\">\n          <div>\n            <button\n              class=\"btn btn-primary\"\n              title=\"{{ 'Create tenant' | translate }}\"\n              (click)=\"createTenant()\"\n              [disabled]=\"!isPermittedToCreateTenanant\"\n            >\n              {{ 'Create tenant' | translate }}\n            </button>\n          </div>\n          <p c8y-guide-docs>\n            <small\n              translate\n              ngNonBindable\n            >\n              Find out more in the\n              <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants\">user documentation</a>\n              .\n            </small>\n          </p>\n        </ng-container>\n      </c8y-ui-empty-state>\n    </ng-template>\n\n    <c8y-column name=\"company\">\n      <ng-container *c8yCellRendererDef=\"let context\">\n        <span title=\"{{ context.value }}\">\n          <a [routerLink]=\"['/tenants', context.item.id]\">{{ context.value }}</a>\n        </span>\n      </ng-container>\n    </c8y-column>\n\n    <c8y-column name=\"parent\">\n      <ng-container *c8yCellRendererDef=\"let context\">\n        <span title=\"{{ context.value || currentTenant.name }}\">\n          {{ context.value || currentTenant.name }}\n        </span>\n      </ng-container>\n    </c8y-column>\n\n    <c8y-column name=\"creationTime\">\n      <ng-container *c8yCellRendererDef=\"let context\">\n        <span title=\"{{ context.value | c8yDate }}\">\n          {{ context.value | c8yDate }}\n        </span>\n      </ng-container>\n    </c8y-column>\n\n    <c8y-column name=\"status\">\n      <ng-container *c8yCellRendererDef=\"let context\">\n        <span\n          title=\"{{ 'Active`tenant`' | translate }}\"\n          *ngIf=\"context.item.status === TenantStatus.ACTIVE\"\n        >\n          <i\n            class=\"text-success\"\n            c8yIcon=\"check-circle\"\n          ></i>\n        </span>\n        <span\n          title=\"{{ 'Suspended`tenant`' | translate }}\"\n          *ngIf=\"context.item.status === TenantStatus.SUSPENDED\"\n        >\n          <i\n            class=\"text-danger\"\n            c8yIcon=\"ban\"\n          ></i>\n        </span>\n      </ng-container>\n    </c8y-column>\n  </c8y-data-grid>\n</div>\n","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 { AlertService, CoreModule, FormsModule, gettext } 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';\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  ) {}\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\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    } catch (error) {\n      this.alertService.addServerFailure(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 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","<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\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  //TODO: External reference - going to be moved to the Properties tab.\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  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  // TODO: Gainsight checkbox - going to be moved to the Properties tab.\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, TenantLimit>;\n\ntype Keys = keyof typeof tenantLimitsCustomPropertiesDefinition;\n\nexport const tenantLimitsCustomProperties: { [K in Keys]: TenantLimit } =\n  tenantLimitsCustomPropertiesDefinition;\n","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport {\n  ApplicationService,\n  IResult,\n  ITenant,\n  TenantOptionsService,\n  TenantService\n} from '@c8y/client';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { AlertService, CoreModule, FormsModule, gettext } from '@c8y/ngx-components';\nimport { tenantLimitsCustomProperties } from './tenant-limits-definitions';\nimport { get } from 'lodash-es';\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  limitsForm: FormGroup = new FormGroup({});\n  tenant: ITenant | null = null;\n  initialized = false;\n\n  constructor(\n    private tenantService: TenantService,\n    private tenantOptionsService: TenantOptionsService,\n    private alertService: AlertService,\n    private activatedRoute: ActivatedRoute,\n    private applicationService: ApplicationService\n  ) {}\n\n  async ngOnInit() {\n    await this.loadTenantDetails();\n    await this.setupConditionalFields();\n    this.generateForm();\n    this.initialized = true;\n  }\n\n  async onSubmit() {\n    if (this.limitsForm.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('Limit values saved.'));\n    } catch (error) {\n      this.alertService.addServerFailure(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      const gainsightAvailable = await this.isGainsightAvailable();\n\n      if (!cepModuleEnabled) {\n        delete this.fieldDefinitions.cepServerQueueLimit;\n      }\n      if (!dataBrokerModuleEnabled) {\n        delete this.fieldDefinitions.dataBrokerQueueLimit;\n      }\n      if (!gainsightAvailable) {\n        delete this.fieldDefinitions.gainsightEnabled;\n      }\n      this.fieldKeys = Object.keys(this.fieldDefinitions);\n    } catch (ex) {\n      this.alertService.addServerFailure(ex);\n    }\n  }\n\n  private async isGainsightAvailable() {\n    if (get(window, 'C8Y_APP.gainsightKey')) {\n      return true;\n    }\n\n    try {\n      const res = await this.tenantOptionsService.detail({\n        category: 'configuration',\n        key: 'system.gainsight.api.key'\n      });\n      return !!res.data.value;\n    } catch (error) {\n      return false;\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  }\n\n  private getDirtyValues(): 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","<c8y-breadcrumb>\n  <c8y-breadcrumb-item\n    [icon]=\"'c8y-layers'\"\n    [label]=\"'Tenants' | translate\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [icon]=\"'c8y-layers'\"\n    [label]=\"'Subtenants' | translate\"\n    [path]=\"'/tenants'\"\n  ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n  [formGroup]=\"limitsForm\"\n  (ngSubmit)=\"onSubmit()\"\n>\n  <div class=\"card card--fullpage m-b-0\">\n    <div class=\"card-header separator\">\n      <div\n        class=\"card-title\"\n        translate\n      >\n        Limits\n      </div>\n    </div>\n\n    <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#setting-limits\"></c8y-help>\n\n    <div class=\"inner-scroll\">\n      <div\n        class=\"card-block\"\n        *ngIf=\"!initialized\"\n      >\n        <c8y-loading></c8y-loading>\n      </div>\n\n      <div\n        class=\"card-block\"\n        *ngIf=\"initialized\"\n      >\n        <ng-container *ngFor=\"let key of fieldKeys\">\n          <ng-container *ngIf=\"fieldDefinitions[key].type === 'text'\">\n            <ng-container\n              *ngTemplateOutlet=\"textField; context: { $implicit: fieldDefinitions[key] }\"\n            ></ng-container>\n          </ng-container>\n          <ng-container *ngIf=\"fieldDefinitions[key].type === 'number'\">\n            <ng-container\n              *ngTemplateOutlet=\"numberField; context: { $implicit: fieldDefinitions[key] }\"\n            ></ng-container>\n          </ng-container>\n          <ng-container *ngIf=\"fieldDefinitions[key].type === 'checkbox'\">\n            <ng-container\n              *ngTemplateOutlet=\"checkboxField; context: { $implicit: fieldDefinitions[key] }\"\n            ></ng-container>\n          </ng-container>\n        </ng-container>\n      </div>\n    </div>\n\n    <div\n      class=\"card-footer separator\"\n      *ngIf=\"initialized\"\n    >\n      <button\n        class=\"btn btn-default\"\n        type=\"button\"\n        [routerLink]=\"['/tenants']\"\n        translate\n      >\n        Cancel\n      </button>\n      <button\n        class=\"btn btn-primary\"\n        type=\"submit\"\n        [disabled]=\"limitsForm.invalid\"\n        translate\n      >\n        Save\n      </button>\n    </div>\n  </div>\n\n  <ng-template\n    #textField\n    let-fieldDefinition\n  >\n    <c8y-form-group>\n      <label [for]=\"fieldDefinition.id\">\n        {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n      </label>\n      <input\n        class=\"form-control\"\n        type=\"text\"\n        [id]=\"fieldDefinition.id\"\n        [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n        [formControlName]=\"fieldDefinition.id\"\n      />\n    </c8y-form-group>\n  </ng-template>\n\n  <ng-template\n    #numberField\n    let-fieldDefinition\n  >\n    <c8y-form-group>\n      <label [for]=\"fieldDefinition.id\">\n        {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n      </label>\n      <input\n        class=\"form-control\"\n        type=\"number\"\n        [id]=\"fieldDefinition.id\"\n        [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n        [formControlName]=\"fieldDefinition.id\"\n      />\n    </c8y-form-group>\n  </ng-template>\n\n  <ng-template\n    #checkboxField\n    let-fieldDefinition\n  >\n    <c8y-form-group>\n      <label\n        class=\"c8y-checkbox\"\n        [title]=\"fieldDefinition.label | translate\"\n        [for]=\"fieldDefinition.id\"\n      >\n        <input\n          type=\"checkbox\"\n          [id]=\"fieldDefinition.id\"\n          [formControlName]=\"fieldDefinition.id\"\n        />\n        <span></span>\n        <span>{{ fieldDefinition.label | translate }}</span>\n      </label>\n    </c8y-form-group>\n  </ng-template>\n</form>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\n\nimport { CoreModule, gettext, 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 { CustomPropertiesComponent } from './custom-properties/custom-properties.component';\nimport { TenantLimitsComponent } from './tenant-limits/tenant-limits.component';\n\n@NgModule({\n  imports: [RouterModule, BsDatepickerModule, CoreModule],\n  exports: [],\n  declarations: [\n    TenantListComponent,\n    CreationTimeFilteringFormRendererComponent,\n    StatusFilteringFormRendererComponent\n  ],\n  providers: [\n    TenantListGuard,\n    hookNavigator(TenantsNavigationFactory),\n    hookRoute({\n      path: 'tenants',\n      icon: 'c8y-layers',\n      component: TenantListComponent,\n      canActivate: [TenantListGuard]\n    }),\n    hookRoute([\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      },\n      {\n        path: 'limits',\n        component: TenantLimitsComponent,\n        icon: 'sliders',\n        label: gettext('Limits'),\n        context: ViewContext.Tenant,\n        priority: 3\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":["i2","i4","i3","i5","i1","i4.CustomPropertiesService","i6","gettext"],"mappings":"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"}