{"version":3,"file":"c8y-ngx-components-default-subscriptions.mjs","sources":["../../default-subscriptions/default-subscriptions.model.ts","../../default-subscriptions/default-subscriptions.service.ts","../../default-subscriptions/default-subscriptions.component.ts","../../default-subscriptions/default-subscriptions.component.html","../../default-subscriptions/default-subscriptions.guard.ts","../../default-subscriptions/default-subscriptions-navigation.factory.ts","../../default-subscriptions/default-subscriptions.module.ts","../../default-subscriptions/c8y-ngx-components-default-subscriptions.ts"],"sourcesContent":["import { IApplication } from '@c8y/client';\n\n/** The list of partial application objects. */\nexport type PartialAppsList = Array<Partial<IApplication>>;\n\n/** The interface for default subscriptions configuration. */\nexport interface DefaultSubscriptions {\n  /** Whether the list of on tenant creation subscriptions is overridden in the current tenant. Won't be defined for inherited configuration. */\n  overrideOnCreationSubscriptions?: boolean;\n  /** The list of applications subscribed to new tenants on creation. */\n  onCreationSubscriptions: PartialAppsList;\n  /** Whether the list of on platform upgrade subscriptions is overridden in the current tenant. Won't be defined for inherited configuration. */\n  overrideOnUpgradeSubscriptions?: boolean;\n  /** The list of applications subscribed to existing tenants on platform upgrade. */\n  onUpgradeSubscriptions: PartialAppsList;\n}\n\n/** The context for evaluating default subscriptions configuration */\nexport enum DefaultSubscriptionsContext {\n  /** Current tenant context (only current tenant options are taken into account). */\n  CURRENT_TENANT,\n  /** Parent tenant context (only parent tenant options are taken into account). */\n  PARENT_TENANT\n}\n","import { Injectable } from '@angular/core';\nimport { isUndefined, sortBy } from 'lodash-es';\nimport { debounceTime, take } from 'rxjs/operators';\n\nimport {\n  IApplication,\n  ApplicationType,\n  ApplicationService,\n  ISystemOption,\n  TenantService,\n  TenantOptionsService\n} from '@c8y/client';\nimport { HumanizeAppNamePipe } from '@c8y/ngx-components';\n\nimport {\n  PartialAppsList,\n  DefaultSubscriptions,\n  DefaultSubscriptionsContext as DefaultSubscriptionsContextTenant\n} from './default-subscriptions.model';\n\n@Injectable()\nexport class DefaultSubscriptionsService {\n  constructor(\n    private applicationService: ApplicationService,\n    private tenantService: TenantService,\n    private tenantOptionsService: TenantOptionsService,\n    private humanizeAppNamePipe: HumanizeAppNamePipe\n  ) {}\n\n  /**\n   * Gets the list of applications which can be used in default subscriptions, i.e.:\n   * - current tenant's all own applications,\n   * - inherited applications, which do not have the same names as current tenant's own apps.\n   * The list is sorted alphabetically by humanized app name and contains up to 2000 items.\n   * @returns The list of applications, which can be used in default subscriptions.\n   */\n  async getSubscribableTenantApps(): Promise<IApplication[]> {\n    const currentTenant = (await this.tenantService.current()).data;\n\n    const allApps = (await this.applicationService.listByTenant(null, { pageSize: 2000 })).data;\n    const ownApps = allApps.filter(app => app.owner.tenant.id === currentTenant.name);\n    const inheritedApps = allApps.filter(app => app.owner.tenant.id !== currentTenant.name);\n\n    const filteredApps: IApplication[] = [...ownApps];\n    inheritedApps.forEach(inheritedApp => {\n      if (!filteredApps.some(filteredApp => filteredApp.name === inheritedApp.name)) {\n        filteredApps.push(inheritedApp);\n      }\n    });\n\n    const filteredAppsWithHumanizedNames = await Promise.all(\n      filteredApps.map(async app => {\n        const humanizedName = await this.humanizeAppNamePipe\n          .transform(app.name)\n          .pipe(debounceTime(250), take(1))\n          .toPromise();\n        return { app, humanizedName };\n      })\n    );\n    const sortedAppsWithHumanizedNames = sortBy(filteredAppsWithHumanizedNames, ['humanizedName']);\n    const sortedApps = sortedAppsWithHumanizedNames.map(({ app }) => app);\n\n    return sortedApps;\n  }\n\n  /**\n   * Gets the default subscriptions configuration inherited from parent tenant.\n   * @returns The default subscriptions object with settings from parent tenant.\n   */\n  async getDefaultSubscriptionsEvaluatedFromParentTenant(): Promise<DefaultSubscriptions> {\n    return this.getDefaultSubscriptions(DefaultSubscriptionsContextTenant.PARENT_TENANT);\n  }\n\n  /**\n   * Gets the default subscriptions configuration from the current tenant.\n   * @returns The default subscriptions object with settings from the current tenant.\n   */\n  async getDefaultSubscriptionsFromCurrentTenant(): Promise<DefaultSubscriptions> {\n    return this.getDefaultSubscriptions(DefaultSubscriptionsContextTenant.CURRENT_TENANT);\n  }\n\n  /**\n   * Saves given default subscriptions configuration to the current tenant\n   * (either sets, updates, or deletes corresponding tenant options).\n   * @param defaultSubscriptions The default subscriptions configuration to be saved.\n   */\n  async saveDefaultSubscriptionsToCurrentTenant(defaultSubscriptions: DefaultSubscriptions) {\n    await this.saveOnCreationSubscriptions(defaultSubscriptions);\n    await this.saveOnUpgradeSubscriptions(defaultSubscriptions);\n  }\n\n  /**\n   * Gets default subscriptions in the context of current or parent tenant.\n   * @param contextTenant Tells whether to use current or parent tenant as context.\n   */\n  private async getDefaultSubscriptions(\n    contextTenant: DefaultSubscriptionsContextTenant\n  ): Promise<DefaultSubscriptions> {\n    let tenantOptionsParams: object;\n    let overridable: boolean;\n\n    switch (contextTenant) {\n      case DefaultSubscriptionsContextTenant.CURRENT_TENANT:\n        tenantOptionsParams = { evaluate: 'current' };\n        overridable = true;\n        break;\n\n      case DefaultSubscriptionsContextTenant.PARENT_TENANT:\n        tenantOptionsParams = { evaluate: 'inherited' };\n        overridable = false;\n        break;\n    }\n\n    const {\n      onCreationApps,\n      onCreationMicroservices,\n      onUpgradeAppsEnabled,\n      onUpgradeApps,\n      onUpgradeMicroservicesEnabled,\n      onUpgradeMicroservices\n    } = await this.getTenantOptions(tenantOptionsParams);\n\n    const onCreationSubscriptions = this.namesToPartialApps({\n      appsNamesStr: onCreationApps,\n      microservicesNamesStr: onCreationMicroservices\n    });\n\n    const onUpgradeAppsDefault = overridable ? null : onCreationApps;\n    const onUpgradeMicroservicesDefault = overridable ? null : onCreationMicroservices;\n    const onUpgradeSubscriptions = this.namesToPartialApps({\n      appsNamesStr: onUpgradeAppsEnabled ? onUpgradeApps : onUpgradeAppsDefault,\n      microservicesNamesStr: onUpgradeMicroservicesEnabled\n        ? onUpgradeMicroservices\n        : onUpgradeMicroservicesDefault\n    });\n\n    const defaultSubscriptions: DefaultSubscriptions = {\n      onCreationSubscriptions,\n      onUpgradeSubscriptions\n    };\n\n    if (overridable) {\n      defaultSubscriptions.overrideOnCreationSubscriptions =\n        onCreationApps !== null || onCreationMicroservices !== null;\n      defaultSubscriptions.overrideOnUpgradeSubscriptions =\n        onUpgradeAppsEnabled || onUpgradeMicroservicesEnabled;\n    }\n\n    return defaultSubscriptions;\n  }\n\n  private async getTenantOptions(params = {}) {\n    return {\n      onCreationApps: await this.getTenantOption(\n        {\n          category: 'configuration',\n          key: 'default.tenant.applications'\n        },\n        null,\n        params\n      ),\n      onCreationMicroservices: await this.getTenantOption(\n        {\n          category: 'configuration',\n          key: 'default.tenant.microservices'\n        },\n        null,\n        params\n      ),\n      onUpgradeAppsEnabled: await this.getTenantOption(\n        {\n          category: 'configuration',\n          key: 'on-update.tenant.applications.enabled'\n        },\n        false,\n        params\n      ),\n      onUpgradeApps: await this.getTenantOption(\n        {\n          category: 'configuration',\n          key: 'on-update.tenant.applications'\n        },\n        null,\n        params\n      ),\n      onUpgradeMicroservicesEnabled: await this.getTenantOption(\n        {\n          category: 'configuration',\n          key: 'on-update.tenant.microservices.enabled'\n        },\n        false,\n        params\n      ),\n      onUpgradeMicroservices: await this.getTenantOption(\n        {\n          category: 'configuration',\n          key: 'on-update.tenant.microservices'\n        },\n        null,\n        params\n      )\n    };\n  }\n\n  private async saveOnCreationSubscriptions(defaultSubscriptions: DefaultSubscriptions) {\n    if (defaultSubscriptions.overrideOnCreationSubscriptions) {\n      await this.setTenantOption({\n        category: 'configuration',\n        key: 'default.tenant.applications',\n        value: this.partialAppsListToAppsNames(defaultSubscriptions.onCreationSubscriptions)\n      });\n      await this.setTenantOption({\n        category: 'configuration',\n        key: 'default.tenant.microservices',\n        value: this.partialAppsToMicroservicesNames(defaultSubscriptions.onCreationSubscriptions)\n      });\n    } else {\n      await this.unsetTenantOption({\n        category: 'configuration',\n        key: 'default.tenant.applications'\n      });\n      await this.unsetTenantOption({\n        category: 'configuration',\n        key: 'default.tenant.microservices'\n      });\n    }\n  }\n\n  private async saveOnUpgradeSubscriptions(defaultSubscriptions: DefaultSubscriptions) {\n    if (defaultSubscriptions.overrideOnUpgradeSubscriptions) {\n      await this.setTenantOption({\n        category: 'configuration',\n        key: 'on-update.tenant.applications.enabled',\n        value: 'true'\n      });\n      await this.setTenantOption({\n        category: 'configuration',\n        key: 'on-update.tenant.microservices.enabled',\n        value: 'true'\n      });\n      await this.setTenantOption({\n        category: 'configuration',\n        key: 'on-update.tenant.applications',\n        value: this.partialAppsListToAppsNames(defaultSubscriptions.onUpgradeSubscriptions)\n      });\n      await this.setTenantOption({\n        category: 'configuration',\n        key: 'on-update.tenant.microservices',\n        value: this.partialAppsToMicroservicesNames(defaultSubscriptions.onUpgradeSubscriptions)\n      });\n    } else {\n      await this.unsetTenantOption({\n        category: 'configuration',\n        key: 'on-update.tenant.applications.enabled'\n      });\n      await this.unsetTenantOption({\n        category: 'configuration',\n        key: 'on-update.tenant.microservices.enabled'\n      });\n      await this.unsetTenantOption({\n        category: 'configuration',\n        key: 'on-update.tenant.applications'\n      });\n      await this.unsetTenantOption({\n        category: 'configuration',\n        key: 'on-update.tenant.microservices'\n      });\n    }\n  }\n\n  private async getTenantOption(option: ISystemOption, defaultValue = null, params = {}) {\n    let value;\n    try {\n      value = (await this.tenantOptionsService.detail(option, params)).data.value;\n      value = JSON.parse(value);\n    } catch (ex) {\n      value = !isUndefined(value) ? value : defaultValue;\n    }\n    return value;\n  }\n\n  private async setTenantOption(option: ISystemOption) {\n    return this.tenantOptionsService.update(option);\n  }\n\n  private async unsetTenantOption(option: ISystemOption) {\n    try {\n      await this.tenantOptionsService.delete(option);\n    } catch (ex) {\n      if (!ex || !ex.res || ex.res.status !== 404) {\n        throw ex;\n      }\n    }\n  }\n\n  private namesToPartialApps({\n    appsNamesStr,\n    microservicesNamesStr\n  }: {\n    appsNamesStr?: string;\n    microservicesNamesStr?: string;\n  }): PartialAppsList {\n    if (appsNamesStr === null && microservicesNamesStr === null) {\n      return null;\n    }\n\n    return [\n      ...(appsNamesStr || '')\n        .split(',')\n        .filter(name => name.length)\n        .map(name => ({ name: name.trim() })),\n      ...(microservicesNamesStr || '')\n        .split(',')\n        .filter(name => name.length)\n        .map(name => ({\n          name: name.trim(),\n          type: ApplicationType.MICROSERVICE\n        }))\n    ];\n  }\n\n  private partialAppsListToAppsNames(apps: PartialAppsList): string {\n    return apps\n      .filter(app => app.type !== ApplicationType.MICROSERVICE)\n      .map(app => app.name)\n      .join(',');\n  }\n\n  private partialAppsToMicroservicesNames(apps: PartialAppsList): string {\n    return apps\n      .filter(app => app.type === ApplicationType.MICROSERVICE)\n      .map(app => app.name)\n      .join(',');\n  }\n}\n","import { Component } from '@angular/core';\nimport {\n  FormArray,\n  FormBuilder,\n  FormGroup,\n  FormsModule,\n  ReactiveFormsModule\n} from '@angular/forms';\nimport { IApplication } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  TitleComponent,\n  BreadcrumbComponent,\n  BreadcrumbItemComponent,\n  C8yTranslateDirective,\n  RequiredInputPlaceholderDirective,\n  LoadingComponent,\n  EmptyStateComponent,\n  AppIconComponent,\n  C8yTranslatePipe,\n  HumanizeAppNamePipe\n} from '@c8y/ngx-components';\nimport { DefaultSubscriptions, PartialAppsList } from './default-subscriptions.model';\nimport { DefaultSubscriptionsService } from './default-subscriptions.service';\nimport { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';\n\n/**\n * The component shows the main view for managing default subscriptions configuration.\n */\n@Component({\n  selector: 'c8y-default-subscriptions',\n  templateUrl: './default-subscriptions.component.html',\n  imports: [\n    TitleComponent,\n    BreadcrumbComponent,\n    BreadcrumbItemComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    C8yTranslateDirective,\n    RequiredInputPlaceholderDirective,\n    NgIf,\n    LoadingComponent,\n    EmptyStateComponent,\n    NgFor,\n    AppIconComponent,\n    NgClass,\n    C8yTranslatePipe,\n    AsyncPipe,\n    HumanizeAppNamePipe\n  ]\n})\nexport class DefaultSubscriptionsComponent {\n  /** Default subscriptions inherited from parent tenant. */\n  parentDefaultSubscriptions: DefaultSubscriptions;\n  /** Default subscriptions defined in the current tenant. */\n  currentDefaultSubscriptions: DefaultSubscriptions;\n  /** Form object. */\n  form: FormGroup;\n  /** Whether the configuration is being loaded. */\n  loading: boolean;\n  /** Hint text for disabled checkboxes. */\n  disabledCheckboxHint = gettext('Select \"Override inherited\" to enable.');\n\n  constructor(\n    private fb: FormBuilder,\n    private defaultSubscriptionsService: DefaultSubscriptionsService,\n    private alertService: AlertService\n  ) {}\n\n  /** Initializes the loading of the form and the current settings. */\n  async ngOnInit() {\n    this.loading = true;\n    await this.initForm();\n    await this.loadDefaultSubscriptions();\n    this.loading = false;\n  }\n\n  /** Loads the list of apps, builds the form and hooks value change events for override switches. */\n  async initForm() {\n    this.form = this.fb.group({\n      overrideOnCreationSubscriptions: [''],\n      overrideOnUpgradeSubscriptions: [''],\n      appRows: this.fb.array([])\n    });\n\n    const apps = await this.defaultSubscriptionsService.getSubscribableTenantApps();\n    const appRows = this.form.controls.appRows as FormArray;\n    apps.forEach(app => {\n      appRows.push(\n        this.fb.group({\n          app: [app],\n          subscribedOnCreation: [''],\n          subscribedOnUpgrade: ['']\n        })\n      );\n    });\n\n    this.form\n      .get('overrideOnCreationSubscriptions')\n      .valueChanges.subscribe(value => this.onOverrideOnCreationSubscriptionsChange(value));\n\n    this.form\n      .get('overrideOnUpgradeSubscriptions')\n      .valueChanges.subscribe(value => this.onOverrideOnUpgradeSubscriptionsChange(value));\n  }\n\n  /**\n   * Checks if given application row should be displayed.\n   * The row is displayed when any of its checkboxes is selected or any of the lists is being overridden.\n   */\n  shouldShowAppRow(appRowRawValue): boolean {\n    const { subscribedOnCreation, subscribedOnUpgrade } = appRowRawValue;\n    const { overrideOnCreationSubscriptions, overrideOnUpgradeSubscriptions } = this.form.value;\n\n    return (\n      subscribedOnCreation ||\n      subscribedOnUpgrade ||\n      overrideOnCreationSubscriptions ||\n      overrideOnUpgradeSubscriptions\n    );\n  }\n\n  /** Checks if there are no application rows to be displayed. */\n  isEmptyView(): boolean {\n    return !this.form\n      .getRawValue()\n      .appRows.some(appRowRawValue => this.shouldShowAppRow(appRowRawValue));\n  }\n\n  /**\n   * Checks if given application is subscribed (present in the given list of applications).\n   * @param app Application object to check.\n   * @param subscribedApps The list of application objects to check against.\n   * @returns True, if the application is present in the list.\n   */\n  isSubscribed(app: IApplication, subscribedApps: PartialAppsList): boolean {\n    return subscribedApps && subscribedApps.some(subscribedApp => subscribedApp.name === app.name);\n  }\n\n  /** Saves the current value of form object to backend. */\n  async save() {\n    try {\n      const defaultSubscriptions = this.getDefaultSubscriptionsForSave();\n      await this.defaultSubscriptionsService.saveDefaultSubscriptionsToCurrentTenant(\n        defaultSubscriptions\n      );\n      this.alertService.success(gettext('Saved.'));\n    } catch (ex) {\n      this.alertService.addServerFailure(ex);\n    }\n  }\n\n  private onOverrideOnCreationSubscriptionsChange(overrideOnCreationSubscriptions: boolean) {\n    if (overrideOnCreationSubscriptions) {\n      this.enableSubscribeOnCreationCheckboxes();\n      return;\n    }\n    this.disableSubscribeOnCreationCheckboxes();\n    this.restoreSubscribeOnCreationFromParent();\n  }\n\n  private enableSubscribeOnCreationCheckboxes() {\n    const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n    appRowsControls.forEach(appRowControl => {\n      appRowControl.get('subscribedOnCreation').enable({ emitEvent: false });\n    });\n  }\n\n  private disableSubscribeOnCreationCheckboxes() {\n    const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n    appRowsControls.forEach(appRowControl => {\n      appRowControl.get('subscribedOnCreation').disable({ emitEvent: false });\n    });\n  }\n\n  private restoreSubscribeOnCreationFromParent() {\n    const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n    appRowsControls.forEach(appRowControl => {\n      appRowControl.patchValue({\n        subscribedOnCreation: this.isSubscribed(\n          appRowControl.value.app,\n          this.parentDefaultSubscriptions.onCreationSubscriptions\n        )\n      });\n    });\n  }\n\n  private onOverrideOnUpgradeSubscriptionsChange(overrideOnUpgradeSubscriptions: boolean) {\n    if (overrideOnUpgradeSubscriptions) {\n      this.enableSubscribeOnUpgradeCheckboxes();\n      return;\n    }\n    this.disableSubscribeOnUpgradeCheckboxes();\n    this.restoreSubscribeOnUpgradeFromParent();\n  }\n\n  private enableSubscribeOnUpgradeCheckboxes() {\n    const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n    appRowsControls.forEach(appRowControl => {\n      appRowControl.get('subscribedOnUpgrade').enable({ emitEvent: false });\n    });\n  }\n\n  private disableSubscribeOnUpgradeCheckboxes() {\n    const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n    appRowsControls.forEach(appRowControl => {\n      appRowControl.get('subscribedOnUpgrade').disable({ emitEvent: false });\n    });\n  }\n\n  private restoreSubscribeOnUpgradeFromParent() {\n    const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n    appRowsControls.forEach(appRowControl => {\n      appRowControl.patchValue({\n        subscribedOnUpgrade: this.isSubscribed(\n          appRowControl.value.app,\n          this.parentDefaultSubscriptions.onUpgradeSubscriptions\n        )\n      });\n    });\n  }\n\n  private async loadDefaultSubscriptions() {\n    this.parentDefaultSubscriptions =\n      await this.defaultSubscriptionsService.getDefaultSubscriptionsEvaluatedFromParentTenant();\n    this.currentDefaultSubscriptions =\n      await this.defaultSubscriptionsService.getDefaultSubscriptionsFromCurrentTenant();\n\n    const { overrideOnCreationSubscriptions, overrideOnUpgradeSubscriptions } =\n      this.currentDefaultSubscriptions;\n    const onCreationSubscriptions = overrideOnCreationSubscriptions\n      ? this.currentDefaultSubscriptions.onCreationSubscriptions\n      : this.parentDefaultSubscriptions.onCreationSubscriptions;\n    const onUpgradeSubscriptions = overrideOnUpgradeSubscriptions\n      ? this.currentDefaultSubscriptions.onUpgradeSubscriptions\n      : this.parentDefaultSubscriptions.onUpgradeSubscriptions;\n\n    this.form.patchValue({\n      overrideOnCreationSubscriptions,\n      overrideOnUpgradeSubscriptions\n    });\n    (this.form.controls.appRows as FormArray).controls.forEach(appRowControl => {\n      appRowControl.patchValue({\n        subscribedOnCreation: this.isSubscribed(appRowControl.value.app, onCreationSubscriptions),\n        subscribedOnUpgrade: this.isSubscribed(appRowControl.value.app, onUpgradeSubscriptions)\n      });\n    });\n  }\n\n  private getDefaultSubscriptionsForSave(): DefaultSubscriptions {\n    const { value } = this.form;\n    return {\n      overrideOnCreationSubscriptions: value.overrideOnCreationSubscriptions,\n      onCreationSubscriptions: value.overrideOnCreationSubscriptions\n        ? value.appRows.filter(app => app.subscribedOnCreation).map(app => app.app)\n        : null,\n      overrideOnUpgradeSubscriptions: value.overrideOnUpgradeSubscriptions,\n      onUpgradeSubscriptions: value.overrideOnUpgradeSubscriptions\n        ? value.appRows.filter(app => app.subscribedOnUpgrade).map(app => app.app)\n        : null\n    };\n  }\n}\n","<c8y-title>{{ 'Default subscriptions' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n  <c8y-breadcrumb-item [label]=\"'Ecosystem' | translate\" [icon]=\"'c8y-atom'\"></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [label]=\"'Default subscriptions' | translate\"\n    [icon]=\"'c8y-atom'\"\n  ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form [formGroup]=\"form\" (ngSubmit)=\"save()\">\n  <div class=\"card card--fullpage col-lg-max\">\n    <div class=\"card-header separator\">\n      <div class=\"card-title\" translate>Applications</div>\n    </div>\n    <div class=\"inner-scroll\">\n      <div class=\"sticky-top separator-bottom\">\n        <div class=\"d-flex\">\n          <div class=\"col-sm-6 col-xs-6 p-24 p-t-16 p-l-xs-16\">\n            <p translate>\n              Configure default subscriptions in the platform, both for tenant creation and for\n              platform upgrade. To display a full list of available applications, override inherited\n              settings.\n            </p>\n          </div>\n          <div class=\"col-sm-6 col-xs-6 bg-level-1 p-16 text-center separator-bottom\">\n            <div class=\"row\">\n              <div class=\"col-sm-6 col-xs-6\">\n                <p><strong translate>Subscribed on tenant creation</strong></p>\n                <div>\n                  <label class=\"c8y-switch\" title=\"{{ 'Override inherited' | translate }}\">\n                    <input type=\"checkbox\" formControlName=\"overrideOnCreationSubscriptions\" />\n                    <span></span>\n                    <span>\n                      {{ 'Override inherited' | translate }}\n                    </span>\n                  </label>\n                </div>\n              </div>\n              <div class=\"col-sm-6 col-xs-6\">\n                <p><strong translate>Subscribed on platform upgrade</strong></p>\n                <div>\n                  <label class=\"c8y-switch\" title=\"{{ 'Override inherited' | translate }}\">\n                    <input type=\"checkbox\" formControlName=\"overrideOnUpgradeSubscriptions\" />\n                    <span></span>\n                    <span>\n                      {{ 'Override inherited' | translate }}\n                    </span>\n                  </label>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"card-block\" *ngIf=\"loading\"></div>\n      <div class=\"card-block card-block d-flex a-i-center j-c-center d-col\" *ngIf=\"loading\">\n        <c8y-loading></c8y-loading>\n      </div>\n      <div class=\"card-block\" *ngIf=\"loading\"></div>\n\n      <ng-container formArrayName=\"appRows\">\n        <div class=\"bg-level-1\" *ngIf=\"!loading && isEmptyView()\"></div>\n        <div class=\"card-block bg-level-0\" *ngIf=\"!loading && isEmptyView()\">\n          <c8y-ui-empty-state\n            [icon]=\"'c8y-c8y-data'\"\n            [title]=\"'No application subscriptions yet.' | translate\"\n            [subtitle]=\"\n              'Select &quot;Override inherited&quot; to define the list of subscribed applications.'\n                | translate\n            \"\n          ></c8y-ui-empty-state>\n        </div>\n        <div class=\"bg-level-1\" *ngIf=\"!loading && isEmptyView()\"></div>\n\n        <div *ngFor=\"let appRowControl of form.get('appRows')['controls']; let i = index\">\n          <ng-container\n            *ngIf=\"shouldShowAppRow(appRowControl.getRawValue())\"\n            formArrayName=\"{{ i }}\"\n          >\n            <div class=\"d-flex a-i-stretch\">\n              <div class=\"col-sm-6 col-xs-6 separator-bottom\">\n                <div class=\"c8y-list__item__block\">\n                  <div class=\"c8y-list__item__appicon\">\n                    <c8y-app-icon\n                      [app]=\"appRowControl.value.app\"\n                      [name]=\"appRowControl.value.app.name\"\n                      [contextPath]=\"appRowControl.value.app.contextPath\"\n                    ></c8y-app-icon>\n                  </div>\n                  <div class=\"c8y-list__item__body\" data-cy=\"defaultSubscriptionForm--c8y-list_item\">\n                    <div class=\"content-flex-30\">\n                      <div class=\"col-6\">\n                        <p\n                          class=\"text-truncate\"\n                          title=\"{{ appRowControl.value.app | humanizeAppName | async }}\"\n                        >\n                          {{ appRowControl.value.app | humanizeAppName | async }}\n                        </p>\n                        <small class=\"text-muted\">{{ appRowControl.value.app.contextPath }}</small>\n                      </div>\n                      <div class=\"col-6 text-right-sm\">\n                        <p>\n                          <span class=\"text-label-small m-r-4\" translate>Tenant ID</span>\n                          {{ appRowControl.value.app.owner.tenant.id }}\n                        </p>\n                        <!-- TODO: uncomment when company name is available\n                            <p>\n                            <span class=\"text-label-small m-r-4\" translate>Company</span>\n                            <small class=\"text-muted\">company name</small>\n                          </p> -->\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n\n              <div\n                class=\"col-sm-3 col-xs-3 bg-level-1 separator-bottom d-flex j-c-center a-i-center\"\n              >\n                <label\n                  class=\"c8y-checkbox\"\n                  [ngClass]=\"{ disabled: appRowControl.controls.subscribedOnCreation.disabled }\"\n                >\n                  <input type=\"checkbox\" formControlName=\"subscribedOnCreation\" />\n                  <span *ngIf=\"!appRowControl.controls.subscribedOnCreation.disabled\"></span>\n                  <span\n                    *ngIf=\"appRowControl.controls.subscribedOnCreation.disabled\"\n                    title=\"{{ disabledCheckboxHint | translate }}\"\n                  ></span>\n                  <span class=\"sr-only\">{{ 'Subscribed on tenant creation' | translate }}</span>\n                </label>\n              </div>\n\n              <div\n                class=\"col-sm-3 col-xs-3 bg-level-1 separator-bottom d-flex j-c-center a-i-center\"\n              >\n                <label\n                  class=\"c8y-checkbox\"\n                  [ngClass]=\"{ disabled: appRowControl.controls.subscribedOnUpgrade.disabled }\"\n                >\n                  <input type=\"checkbox\" formControlName=\"subscribedOnUpgrade\" />\n                  <span *ngIf=\"!appRowControl.controls.subscribedOnUpgrade.disabled\"></span>\n                  <span\n                    *ngIf=\"appRowControl.controls.subscribedOnUpgrade.disabled\"\n                    title=\"{{ disabledCheckboxHint | translate }}\"\n                  ></span>\n                  <span class=\"sr-only\">{{ 'Subscribed on platform upgrade' | translate }}</span>\n                </label>\n              </div>\n            </div>\n          </ng-container>\n        </div>\n      </ng-container>\n    </div>\n    <div class=\"card-footer separator\">\n      <button\n        class=\"btn btn-primary\"\n        type=\"submit\"\n        title=\"{{ 'Save default subscriptions' | translate }}\"\n        [disabled]=\"form.invalid || form.pristine\"\n      >\n        {{ 'Save' | translate }}\n      </button>\n    </div>\n  </div>\n</form>\n","import { Injectable } from '@angular/core';\n\nimport { TenantUiService } from '@c8y/ngx-components';\n\n@Injectable()\nexport class DefaultSubscriptionsGuard {\n  private active: boolean;\n\n  constructor(private tenantUiService: TenantUiService) {}\n\n  /**\n   * Checks if default subscriptions feature should be active,\n   * i.e. whether the current tenant is the management or an enterprise tenant.\n   * **Note: the check is executed only once in the runtime.**\n   *\n   * @returns True, if the feature should be active.\n   */\n  async canActivate(): Promise<boolean> {\n    if (this.active === undefined) {\n      this.active =\n        (await this.tenantUiService.isManagementTenant()) ||\n        (await this.tenantUiService.isEnterpriseTenant());\n    }\n    return this.active;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\nimport { DefaultSubscriptionsGuard } from './default-subscriptions.guard';\n\n@Injectable()\nexport class DefaultSubscriptionsNavigationFactory implements NavigatorNodeFactory {\n  private navNode = new NavigatorNode({\n    label: gettext('Default subscriptions'),\n    path: '/default-subscriptions',\n    icon: 'c8y-c8y-data',\n    parent: gettext('Ecosystem'),\n    priority: 100\n  });\n\n  constructor(private defaultSubscriptionsGuard: DefaultSubscriptionsGuard) {}\n\n  /** Returns the navigation node if the feature is active. */\n  async get(): Promise<NavigatorNode> {\n    if (await this.defaultSubscriptionsGuard.canActivate()) {\n      return this.navNode;\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CoreModule, hookNavigator, hookRoute } from '@c8y/ngx-components';\n\nimport { DefaultSubscriptionsComponent } from './default-subscriptions.component';\nimport { DefaultSubscriptionsService } from './default-subscriptions.service';\nimport { DefaultSubscriptionsGuard } from './default-subscriptions.guard';\nimport { DefaultSubscriptionsNavigationFactory } from './default-subscriptions-navigation.factory';\n\n@NgModule({\n  imports: [CoreModule, ReactiveFormsModule, DefaultSubscriptionsComponent],\n  exports: [DefaultSubscriptionsComponent],\n  providers: [\n    DefaultSubscriptionsService,\n    DefaultSubscriptionsGuard,\n    hookNavigator(DefaultSubscriptionsNavigationFactory),\n    hookRoute({\n      path: 'default-subscriptions',\n      component: DefaultSubscriptionsComponent,\n      canActivate: [DefaultSubscriptionsGuard]\n    })\n  ]\n})\nexport class DefaultSubscriptionsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DefaultSubscriptionsContextTenant","i1","i2.DefaultSubscriptionsService","i3","i1.DefaultSubscriptionsGuard"],"mappings":"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"}