UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

1 lines • 50.9 kB
{"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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