@c8y/ngx-components 1023.6.3 → 1023.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
  2. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +1 -1
  3. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs.map +1 -1
  4. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  5. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  6. package/fesm2022/c8y-ngx-components-app-logs.mjs.map +1 -1
  7. package/fesm2022/c8y-ngx-components-asset-properties.mjs +2 -2
  8. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  9. package/fesm2022/c8y-ngx-components-asset-property-grid.component-B1q7kXRu.mjs.map +1 -1
  10. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  11. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  12. package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs.map +1 -1
  14. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  16. package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-Bl18pHcM.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C5QMFdX1.mjs.map +1 -1
  18. package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-C-Lc5Ble.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-BXfM7hTQ.mjs.map +1 -1
  20. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DN-f35bA.mjs.map +1 -1
  22. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +1 -1
  23. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  24. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-m7YeEj9R.mjs.map +1 -1
  25. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
  26. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  27. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  28. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  29. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  30. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  31. package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs.map +1 -1
  32. package/fesm2022/c8y-ngx-components-device-protocols.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
  35. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  37. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  39. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-editor.mjs.map +1 -1
  41. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +1 -1
  42. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -1
  43. package/fesm2022/c8y-ngx-components-file-preview.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
  45. package/fesm2022/c8y-ngx-components-global-context.mjs +12 -12
  46. package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
  47. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  48. package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
  49. package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
  50. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  51. package/fesm2022/c8y-ngx-components-messaging-management.mjs +1 -1
  52. package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
  53. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
  54. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
  55. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
  56. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
  57. package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs.map +1 -1
  58. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
  59. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
  60. package/fesm2022/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
  61. package/fesm2022/c8y-ngx-components-operations-operation-details.mjs.map +1 -1
  62. package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs.map +1 -1
  63. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
  64. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +1 -1
  65. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  66. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
  67. package/fesm2022/c8y-ngx-components-operations-status-filter.mjs.map +1 -1
  68. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
  69. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  70. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  71. package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs.map +1 -1
  72. package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
  73. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
  74. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  75. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  76. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +1 -1
  77. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -1
  78. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -1
  79. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
  80. package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
  81. package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
  82. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  83. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  84. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  85. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  86. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  87. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +1 -1
  89. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-static-assets.mjs.map +1 -1
  91. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  93. package/fesm2022/c8y-ngx-components-time-context.mjs +1 -1
  94. package/fesm2022/c8y-ngx-components-time-context.mjs.map +1 -1
  95. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
  96. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
  97. package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
  98. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  99. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +1 -1
  100. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
  101. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  102. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  103. package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs.map +1 -1
  104. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +1 -1
  105. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
  106. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  107. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  108. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
  109. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
  110. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  111. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
  112. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +4 -4
  113. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
  114. package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs.map +1 -1
  115. package/fesm2022/c8y-ngx-components.mjs +2 -2
  116. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  117. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-ecosystem-application-plugins.mjs","sources":["../../ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.ts","../../ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.html","../../ecosystem/application-plugins/appState.pipe.ts","../../ecosystem/application-plugins/apps-to-update-remotes-select.component.ts","../../ecosystem/application-plugins/apps-to-update-remotes-select.component.html","../../ecosystem/application-plugins/plugin-list.service.ts","../../ecosystem/application-plugins/plugin-list-item.component.ts","../../ecosystem/application-plugins/plugin-list-item.component.html","../../ecosystem/application-plugins/plugin-list.component.ts","../../ecosystem/application-plugins/plugin-list.component.html","../../ecosystem/application-plugins/install-plugin.component.ts","../../ecosystem/application-plugins/install-plugin.component.html","../../ecosystem/application-plugins/label-cell-renderer.component.ts","../../ecosystem/application-plugins/label-cell-renderer.component.html","../../ecosystem/application-plugins/orphaned-status-cell-renderer.component.ts","../../ecosystem/application-plugins/orphaned-status-cell-renderer.component.html","../../ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.ts","../../ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.html","../../ecosystem/application-plugins/application-plugin-readme.component.ts","../../ecosystem/application-plugins/application-plugin-readme.component.html","../../ecosystem/application-plugins/application-plugins.component.ts","../../ecosystem/application-plugins/application-plugins.component.html","../../ecosystem/application-plugins/application-plugins.guard.ts","../../ecosystem/application-plugins/application-plugins.module.ts","../../ecosystem/application-plugins/c8y-ngx-components-ecosystem-application-plugins.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ApplicationPlugin, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { ListFiltersComponent } from '@c8y/ngx-components/ecosystem/shared';\n\n@Component({\n selector: 'c8y-only-latest-filter',\n templateUrl: './only-latest-filter.component.html',\n imports: [FormsModule, ReactiveFormsModule, C8yTranslatePipe]\n})\nexport class OnlyLatestFilterComponent {\n onlyLatestFormControl: FormControl;\n private readonly filterLabel = gettext('Only latest versions');\n\n constructor(public filterComponent: ListFiltersComponent) {\n this.onlyLatestFormControl = new FormControl(true);\n (this.filterComponent.formGroup.controls.custom as FormGroup).addControl(\n this.filterLabel,\n this.onlyLatestFormControl\n );\n filterComponent.customFilters.set(\n this.filterLabel,\n (plugin: ApplicationPlugin, enabled: boolean) => {\n return !enabled || !!plugin.tags?.includes('latest');\n }\n );\n }\n}\n","<label class=\"c8y-switch\">\n <input\n type=\"checkbox\"\n checked=\"checked\"\n [formControl]=\"onlyLatestFormControl\"\n />\n <span></span>\n {{ 'Show only latest version of plugins' | translate }}\n</label>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IApplication } from '@c8y/client';\nimport { ApplicationState, EcosystemService } from '@c8y/ngx-components/ecosystem/shared';\n@Pipe({\n name: 'appState',\n pure: true\n})\nexport class AppStatePipe implements PipeTransform {\n constructor(private ecosystemService: EcosystemService) {}\n\n transform(\n app: IApplication,\n arg: keyof ApplicationState\n ): ApplicationState[keyof ApplicationState] {\n const appState = this.ecosystemService.getAppState(app);\n return appState[arg];\n }\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n WizardConfig,\n WizardModalService,\n IconDirective,\n C8yTranslateDirective,\n FilterInputComponent,\n ListGroupComponent,\n ListItemComponent,\n ListItemCheckboxComponent,\n ListItemIconComponent,\n AppIconComponent,\n EmptyStateComponent,\n C8yTranslatePipe,\n HumanizeAppNamePipe\n} from '@c8y/ngx-components';\nimport { EcosystemService } from '@c8y/ngx-components/ecosystem/shared';\nimport { ApplicationType, IApplication } from '@c8y/client';\nimport { ModalOptions, BsModalRef } from 'ngx-bootstrap/modal';\nimport { UpdateType } from './apps-to-update-remotes-select.model';\nimport { Subject, BehaviorSubject, combineLatest, Observable, of } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';\nimport { AppStatePipe } from './appState.pipe';\n\n@Component({\n templateUrl: './apps-to-update-remotes-select.component.html',\n selector: 'c8y-apps-to-update-remotes-select',\n imports: [\n IconDirective,\n C8yTranslateDirective,\n FilterInputComponent,\n NgIf,\n ListGroupComponent,\n NgFor,\n ListItemComponent,\n NgClass,\n ListItemCheckboxComponent,\n ListItemIconComponent,\n AppIconComponent,\n EmptyStateComponent,\n C8yTranslatePipe,\n AsyncPipe,\n HumanizeAppNamePipe,\n AppStatePipe\n ]\n})\nexport class AppsToUpdateRemotesSelectComponent implements OnInit, OnDestroy {\n @Input() apps: IApplication[];\n @Input() updateType: UpdateType;\n @Input() pluginName: string;\n @Input() appsDisabled: Set<IApplication['id']>;\n private destroy$ = new Subject<void>();\n filterTerm$: BehaviorSubject<string> = new BehaviorSubject('');\n filteredApps$: Observable<IApplication[]> = new BehaviorSubject([]);\n textConfig: {\n header: string;\n applyButton: string;\n };\n appsToUpdateRemotes: IApplication[] = [];\n result: Promise<IApplication[]> = new Promise((resolve, reject) => {\n this._update = resolve;\n this._cancel = reject;\n });\n private _update: (apps: IApplication[]) => void;\n private _cancel: (reason?: any) => void;\n\n constructor(\n private bsModalRef: BsModalRef,\n private wizardModalService: WizardModalService,\n private ecosystemService: EcosystemService\n ) {}\n\n ngOnInit(): void {\n this.filteredApps$ = combineLatest([of(this.apps), this.filterTerm$]).pipe(\n map(([apps, filterTerm]) =>\n filterTerm.trim().length === 0\n ? apps\n : apps.filter((application: IApplication) =>\n this.ecosystemService.filterContainString(application.name, filterTerm)\n )\n )\n );\n this.textConfig =\n this.updateType === 'install'\n ? {\n header: gettext('Select applications to install the plugin to'),\n applyButton: gettext('Install')\n }\n : {\n header: gettext('Select applications to uninstall the plugin from'),\n applyButton: gettext('Uninstall')\n };\n }\n\n cancel() {\n this.bsModalRef.hide();\n this._cancel();\n }\n\n setSelectedApps(selected: boolean, app: IApplication) {\n selected\n ? this.appsToUpdateRemotes.push(app)\n : (this.appsToUpdateRemotes = this.appsToUpdateRemotes.filter(\n application => app.key !== application.key\n ));\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async duplicateApp() {\n const wizardConfig: WizardConfig = {\n headerText: gettext('Duplicate application'),\n headerIcon: 'c8y-copy'\n };\n\n const initialState: Record<string, unknown> = {\n wizardConfig,\n componentInitialState: {\n noBackButton: true\n },\n id: 'duplicateApplication'\n };\n\n const modalOptions: ModalOptions = { initialState };\n\n const modalRef = this.wizardModalService.show(modalOptions);\n modalRef.content.onClose.pipe(takeUntil(this.destroy$)).subscribe(async () => {\n this.apps = await this.getOwnedHostedApps();\n this.ngOnInit();\n });\n }\n\n async apply() {\n this._update(this.appsToUpdateRemotes);\n this.bsModalRef.hide();\n }\n\n private async getOwnedHostedApps(): Promise<IApplication[]> {\n return (await this.ecosystemService.getWebApplications()).filter(\n app => this.ecosystemService.isOwner(app) && app.type !== ApplicationType.EXTERNAL\n );\n }\n}\n","<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-modules'\"></i>\n <div class=\"modal-title h4\" id=\"modal-title\" translate>Custom applications</div>\n </div>\n <div class=\"inner-scroll\" id=\"modal-body\">\n <div class=\"p-16 text-center separator-bottom sticky-top bg-component\">\n <p class=\"text-medium\">\n {{ textConfig.header | translate }}\n </p>\n <c8y-filter (onSearch)=\"filterTerm$.next($event)\"></c8y-filter>\n </div>\n <c8y-list-group *ngIf=\"apps.length; else emptyList\">\n <c8y-li\n [ngClass]=\"{ disabled: updateType === 'install' && appsDisabled.has(app.id) }\"\n *ngFor=\"let app of filteredApps$ | async\"\n data-cy=\"apps-to-update-remotes-select--applications-list\"\n >\n <c8y-li-checkbox (onSelect)=\"setSelectedApps($event, app)\" data-cy=\"apps-to-update-remotes-select--app-checkbox\"></c8y-li-checkbox>\n <c8y-li-icon class=\"p-l-0 icon-32\">\n <c8y-app-icon\n class=\"list-group-icon\"\n [app]=\"app\"\n [contextPath]=\"app.contextPath\"\n [name]=\"app.name\"\n ></c8y-app-icon>\n </c8y-li-icon>\n <div class=\"d-flex\">\n <div class=\"p-r-8\">\n <p class=\"text-medium\" [innerText]=\"app | humanizeAppName | async\"></p>\n <p class=\"small text-muted\">{{ app.description }}</p>\n </div>\n <span class=\"label m-l-auto a-s-start\" [ngClass]=\"app | appState: 'class'\">\n {{ app | appState: 'label' | translate }}\n </span>\n </div>\n </c8y-li>\n </c8y-list-group>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ textConfig.applyButton | translate }}\"\n [disabled]=\"appsToUpdateRemotes.length === 0\"\n (click)=\"apply()\"\n >\n {{ textConfig.applyButton | translate }}\n </button>\n </div>\n</div>\n<ng-template #emptyList>\n <c8y-ui-empty-state\n [icon]=\"'c8y-modules'\"\n [title]=\"'No custom applications available.' | translate\"\n *ngIf=\"updateType !== 'install'\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container *ngIf=\"updateType === 'install'\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-modules'\"\n [title]=\"'No custom applications available.' | translate\"\n [subtitle]=\"'Create a custom application by duplicating an existing one.' | translate\"\n [horizontal]=\"true\"\n >\n <button\n class=\"btn btn-sm btn-default m-t-8\"\n title=\"{{ 'Duplicate' | translate }}\"\n (click)=\"duplicateApp()\"\n >\n {{ 'Duplicate' | translate }}\n </button>\n </c8y-ui-empty-state>\n </ng-container>\n</ng-template>\n","import { inject, Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ApplicationPlugin,\n GainsightService,\n HumanizeAppNamePipe,\n PluginsService\n} from '@c8y/ngx-components';\nimport { UpdateType } from './apps-to-update-remotes-select.model';\nimport { ApplicationType, IApplication } from '@c8y/client';\nimport { AppsToUpdateRemotesSelectComponent } from './apps-to-update-remotes-select.component';\nimport { firstValueFrom } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\nimport { pick } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport {\n EcosystemService,\n PRODUCT_EXPERIENCE_ECOSYSTEM\n} from '@c8y/ngx-components/ecosystem/shared';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PluginListService {\n CURRENT_LOCATION = location.href;\n updatingPluginId: Record<UpdateType, string> = { install: '', uninstall: '' };\n private appsDisabled: Set<IApplication['id']> = new Set<IApplication['id']>();\n\n private gainsightService = inject(GainsightService);\n private pluginsService = inject(PluginsService);\n private alertService = inject(AlertService);\n private ecosystemService = inject(EcosystemService);\n private humanizeAppNamePipe = inject(HumanizeAppNamePipe);\n private translateService = inject(TranslateService);\n private bsModalService = inject(BsModalService);\n\n async updateAppRemotes(\n plugin: ApplicationPlugin,\n updateType: UpdateType,\n pluginPackage: IApplication\n ) {\n this.updatingPluginId[updateType] = plugin?.id;\n let initialState: Pick<\n AppsToUpdateRemotesSelectComponent,\n 'apps' | 'updateType' | 'pluginName' | 'appsDisabled'\n >;\n try {\n const apps = await this.getAppsForUpdate(plugin, updateType);\n\n initialState = {\n apps,\n updateType,\n pluginName: plugin.name,\n appsDisabled: this.appsDisabled\n };\n } catch (e) {\n this.alertService.addServerFailure(e);\n this.updatingPluginId[updateType] = '';\n return;\n }\n\n let selectedApps: IApplication[];\n try {\n selectedApps = await this.selectApps(initialState);\n if (!selectedApps) {\n this.updatingPluginId[updateType] = '';\n return;\n }\n } catch {\n // unreached\n }\n\n if (updateType === 'install') {\n const isArchived = await this.ecosystemService.verifyArchived([plugin]);\n if (!isArchived) {\n this.updatingPluginId[updateType] = '';\n return;\n }\n\n const licensesVerifiedByUser = await this.ecosystemService.verifyLicenses([plugin]);\n if (!licensesVerifiedByUser) {\n this.updatingPluginId[updateType] = '';\n return;\n }\n }\n\n for (const app of selectedApps) {\n try {\n if (updateType === 'install') {\n const versionIsCompatible = await this.ecosystemService.verifyPluginVersionsCompatibility(\n [plugin],\n app\n );\n\n if (!versionIsCompatible) {\n continue;\n }\n }\n\n await this.handleRemotesUpdate(app, plugin, updateType, pluginPackage);\n const humanizedAppName = await firstValueFrom(this.humanizeAppNamePipe.transform(app));\n const successText =\n updateType === 'install'\n ? this.translateService.instant(\n gettext('Plugin installed to application \"{{ appName }}\".'),\n {\n appName: humanizedAppName\n }\n )\n : this.translateService.instant(\n gettext('Plugin uninstalled from application \"{{ appName }}\".'),\n { appName: humanizedAppName }\n );\n this.alertService.success(successText);\n this.onUpdateEventHandleGS(plugin, app, updateType);\n } catch (error) {\n this.onUpdateEventHandleGS(plugin, app, updateType, error);\n }\n }\n this.updatingPluginId[updateType] = '';\n }\n\n async getAppsForUpdate(plugin: ApplicationPlugin, updateType: UpdateType) {\n let apps = (await this.ecosystemService.getWebApplications()).filter(\n app => this.ecosystemService.isOwner(app) && app.type !== ApplicationType.EXTERNAL\n );\n\n if (updateType === 'install') {\n this.appsDisabled.clear();\n for (const app of apps) {\n if (this.isPluginInstalledInApp(plugin, app)) {\n this.appsDisabled.add(app.id);\n }\n }\n }\n\n if (updateType === 'uninstall') {\n const installedApps: IApplication[] = [];\n for (const app of apps) {\n if (this.isPluginInstalledInApp(plugin, app)) {\n installedApps.push(app);\n }\n }\n apps = installedApps;\n }\n return apps;\n }\n\n private onUpdateEventHandleGS(\n plugin: ApplicationPlugin,\n app: IApplication,\n updateType: UpdateType,\n error?: unknown\n ) {\n const pluginCustomEventInfo = pick(plugin, [\n 'name',\n 'contextPath',\n 'module',\n 'version',\n 'type',\n 'id'\n ] satisfies (keyof ApplicationPlugin)[]);\n\n const gsEventResult =\n updateType === 'install'\n ? PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_INSTALLED\n : PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_REMOVED;\n\n const eventData = {\n component: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.COMPONENTS.PLUGIN_LIST,\n result: error || gsEventResult,\n url: this.CURRENT_LOCATION,\n ...pluginCustomEventInfo,\n targetApplicationName: app.name,\n targetApplicationContextPath: app.contextPath,\n ...(error && { error })\n };\n\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.PACKAGE_PLUGINS,\n eventData\n );\n }\n\n private isPluginInstalledInApp(plugin: ApplicationPlugin, app: IApplication): boolean {\n const appRemotes = this.pluginsService.getMFRemotes(app) || {};\n\n for (const [remoteName, modules] of Object.entries(appRemotes)) {\n const pluginFromThisPackageIsInstalled =\n this.getPluginContextPathWithoutVersion(remoteName) === plugin.contextPath;\n const specificPluginModuleIsInstalled = modules.some(module => module === plugin.module);\n if (pluginFromThisPackageIsInstalled && specificPluginModuleIsInstalled) {\n return true;\n }\n }\n return false;\n }\n\n private getPluginContextPathWithoutVersion(remote: string) {\n return remote.split('@')[0];\n }\n\n private async handleRemotesUpdate(\n application: IApplication,\n plugin: ApplicationPlugin,\n updateType: UpdateType,\n pluginPackage: IApplication\n ) {\n try {\n // When remotes object is not set in the configuration object of an application.\n // Fallback to setInitialRemotes is triggered.\n const { remotes, excludedRemotes } = await (updateType === 'install'\n ? this.pluginsService.addRemotes(application, plugin)\n : this.pluginsService.removeRemotes(\n application,\n this.getAllPluginsToRemove(plugin, pluginPackage)\n ));\n if (!application.config) {\n application.config = {};\n }\n application.config.remotes = remotes;\n application.config.excludedRemotes = excludedRemotes;\n const actualRemotes = this.pluginsService.getMFRemotes(application);\n return actualRemotes;\n } catch (er) {\n if (er) {\n this.alertService.addServerFailure(er);\n }\n throw er;\n }\n }\n\n private getAllPluginsToRemove(\n plugin: ApplicationPlugin,\n pluginPackage: IApplication\n ): ApplicationPlugin[] {\n return pluginPackage.applicationVersions.map(av => ({\n id: `${plugin.contextPath}@${av.version}/${plugin.module}`,\n idLatest: `${plugin.contextPath}/${plugin.module}`,\n module: plugin.module,\n path: plugin.path\n }));\n }\n\n private async selectApps(\n initialState: Pick<\n AppsToUpdateRemotesSelectComponent,\n 'apps' | 'updateType' | 'pluginName' | 'appsDisabled'\n >\n ): Promise<IApplication[]> {\n try {\n return await (\n this.bsModalService.show(AppsToUpdateRemotesSelectComponent, {\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState,\n ignoreBackdropClick: true,\n keyboard: false\n }).content as AppsToUpdateRemotesSelectComponent\n ).result;\n } catch (er) {\n return;\n }\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n ApplicationPlugin,\n PackageType,\n PluginsService,\n ListItemCheckboxComponent,\n ListItemIconComponent,\n IconDirective,\n C8yTranslateDirective\n} from '@c8y/ngx-components';\nimport { NgIf, NgClass } from '@angular/common';\nimport { TranslatePackageLabelPipe } from '@c8y/ngx-components/ecosystem/shared';\n\n@Component({\n selector: 'c8y-plugin-list-item',\n templateUrl: './plugin-list-item.component.html',\n imports: [\n NgIf,\n ListItemCheckboxComponent,\n ListItemIconComponent,\n NgClass,\n IconDirective,\n C8yTranslateDirective,\n TranslatePackageLabelPipe\n ]\n})\nexport class PluginListItemComponent implements OnInit {\n @Input() plugin: ApplicationPlugin;\n @Input() selectable: boolean;\n @Input() hideSource = false;\n @Output() isItemSelected: EventEmitter<boolean> = new EventEmitter();\n\n packageType: PackageType = PackageType.UNKNOWN;\n\n readonly PACKAGE_TYPE = PackageType;\n\n constructor(private pluginService: PluginsService) {}\n\n ngOnInit() {\n this.packageType = this.pluginService.getPackageType(this.plugin.originApp);\n }\n\n onChange(event) {\n this.plugin.selected = !this.plugin.selected;\n this.isItemSelected.next(event);\n }\n}\n","<c8y-li-checkbox\n class=\"p-r-16 p-l-0\"\n (change)=\"onChange($event.target.checked)\"\n *ngIf=\"selectable\"\n [disabled]=\"plugin.installed\"\n [selected]=\"plugin.selected\"\n></c8y-li-checkbox>\n<c8y-li-icon class=\"p-l-0 text-center\">\n <i class=\"c8y-plugin-icon\">\n <span>{{ plugin.name?.substr(0, 2) }}</span>\n </i>\n</c8y-li-icon>\n<div class=\"p-relative flex-grow\">\n <div [ngClass]=\"{ 'p-r-8': selectable }\">\n <p>\n <span class=\"text-medium\">{{ plugin.name }}</span>\n <em class=\"text-muted small m-l-8\">{{ plugin.version }}</em>\n <span *ngIf=\"plugin.installed\">\n <i\n class=\"text-success\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <em\n class=\"text-muted small\"\n translate\n >\n Installed`plugins`\n </em>\n </span>\n </p>\n <p class=\"small l-h-tight\">{{ plugin.description }}</p>\n </div>\n\n <span\n class=\"tag tag--info a-s-start m-t-8\"\n *ngIf=\"selectable && !hideSource\"\n >\n {{ plugin.contextPath }}\n </span>\n\n <span\n class=\"tag a-s-start m-t-8 m-l-4\"\n [ngClass]=\"{\n 'tag--default': packageType === PACKAGE_TYPE.COMMUNITY,\n 'tag--primary': packageType === PACKAGE_TYPE.OFFICIAL\n }\"\n >\n {{ plugin.originApp?.label || plugin.originApp?.manifest?.label | translatePackageLabel }}\n </span>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IApplication } from '@c8y/client';\nimport {\n ApplicationPlugin,\n ListGroupComponent,\n ListItemComponent,\n IconDirective,\n C8yTranslateDirective,\n EmptyStateComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\n\nimport { Observable } from 'rxjs';\n\nimport { PluginListService } from './plugin-list.service';\nimport { UpdateType } from './apps-to-update-remotes-select.model';\nimport { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';\nimport { PluginListItemComponent } from './plugin-list-item.component';\n\n@Component({\n selector: 'c8y-plugin-list',\n templateUrl: './plugin-list.component.html',\n imports: [\n ListGroupComponent,\n NgIf,\n NgFor,\n ListItemComponent,\n NgClass,\n PluginListItemComponent,\n IconDirective,\n C8yTranslateDirective,\n EmptyStateComponent,\n C8yTranslatePipe,\n AsyncPipe\n ]\n})\nexport class PluginListComponent {\n CURRENT_LOCATION = location.href;\n\n @Input() plugins$: Observable<ApplicationPlugin[]>;\n @Input() emptyListText = '';\n @Input() selectable: boolean;\n @Input() hideSource = false;\n /**\n * Shows the install button for each plugin separately. Currently used in package-details view.\n */\n @Input() installable = false;\n @Input() package: IApplication;\n @Input() selectedPlugin: ApplicationPlugin;\n @Output() selectedItems: EventEmitter<ApplicationPlugin[]> = new EventEmitter();\n @Output() showOverview = new EventEmitter<ApplicationPlugin>();\n selectedPlugins: { [key: string]: ApplicationPlugin } = {};\n updatingPluginId: Record<UpdateType, string>;\n\n constructor(private pluginListService: PluginListService) {\n this.updatingPluginId = this.pluginListService.updatingPluginId;\n }\n\n updateSelectedItems(selected: boolean, plugin: ApplicationPlugin) {\n this.selectedPlugins[plugin.id] = selected ? plugin : undefined;\n const onlyInstalledPlugins = Object.values(this.selectedPlugins).filter(Boolean);\n this.selectedItems.emit(onlyInstalledPlugins);\n }\n\n showPluginOverview(plugin: ApplicationPlugin): void {\n if (plugin?.id === this.selectedPlugin?.id) {\n return;\n }\n this.showOverview.emit(plugin);\n }\n\n async installPlugin(plugin: ApplicationPlugin) {\n await this.pluginListService.updateAppRemotes(plugin, 'install', this.package);\n }\n\n async uninstallPlugin(plugin: ApplicationPlugin) {\n await this.pluginListService.updateAppRemotes(plugin, 'uninstall', this.package);\n }\n}\n","<c8y-list-group class=\"bg-inherit\">\n <ng-container *ngIf=\"(plugins$ | async)?.length !== 0; else emptyList\">\n <ng-container *ngFor=\"let plugin of plugins$ | async\">\n <c8y-li\n [ngClass]=\"{\n disabled: plugin.installed,\n selected: selectedPlugin?.id === plugin?.id\n }\"\n >\n <div class=\"d-flex fit-w\">\n <ng-container *ngIf=\"plugin.readmePath\">\n <button\n class=\"c8y-list__item__btn d-flex fit-w gap-4\"\n title=\"{{ 'Details' | translate }}\"\n (click)=\"showPluginOverview(plugin)\"\n >\n <c8y-plugin-list-item\n class=\"d-contents\"\n (isItemSelected)=\"updateSelectedItems($event, plugin)\"\n [plugin]=\"plugin\"\n [selectable]=\"selectable\"\n [hideSource]=\"hideSource\"\n ></c8y-plugin-list-item>\n <i\n class=\"icon-24 m-l-auto a-s-center\"\n c8yIcon=\"forward\"\n ></i>\n </button>\n </ng-container>\n <ng-container *ngIf=\"!plugin.readmePath\">\n <c8y-plugin-list-item\n class=\"d-contents\"\n (isItemSelected)=\"updateSelectedItems($event, plugin)\"\n [plugin]=\"plugin\"\n [selectable]=\"selectable\"\n [hideSource]=\"hideSource\"\n ></c8y-plugin-list-item>\n </ng-container>\n </div>\n <div class=\"p-l-40 m-t-4 d-flex flex-wrap gap-8\">\n <button\n class=\"btn btn-danger btn-sm\"\n title=\"{{ 'Uninstall plugin' | translate }}\"\n *ngIf=\"installable\"\n (click)=\"uninstallPlugin(plugin)\"\n [ngClass]=\"{ 'btn-pending': plugin.id === updatingPluginId.uninstall }\"\n [disabled]=\"updatingPluginId.uninstall && plugin.id === updatingPluginId.uninstall\"\n data-cy=\"plugin-list--uninstall-plugin-button\"\n translate\n >\n Uninstall plugin\n </button>\n <button\n class=\"btn btn-default btn-sm m-0\"\n title=\"{{ 'Install plugin' | translate }}\"\n *ngIf=\"installable\"\n (click)=\"installPlugin(plugin)\"\n [ngClass]=\"{ 'btn-pending': plugin.id === updatingPluginId.install }\"\n [disabled]=\"updatingPluginId.install && plugin.id === updatingPluginId.install\"\n data-cy=\"plugin-list--install-plugin-button\"\n translate\n >\n Install plugin\n </button>\n </div>\n </c8y-li>\n </ng-container>\n </ng-container>\n</c8y-list-group>\n<ng-template #emptyList>\n <c8y-ui-empty-state\n [icon]=\"'plugin'\"\n [title]=\"emptyListText | translate\"\n [horizontal]=\"true\"\n *ngIf=\"emptyListText\"\n ></c8y-ui-empty-state>\n</ng-template>\n","import { Component, Input } from '@angular/core';\nimport {\n ApplicationPlugin,\n BottomDrawerRef,\n PluginsService,\n C8yTranslateDirective,\n IconDirective,\n EmptyStateComponent,\n C8yTranslatePipe,\n MarkdownToHtmlPipe\n} from '@c8y/ngx-components';\nimport {\n defaultPackageTypes,\n EcosystemService,\n FilterableAppOrPlugin,\n FilterPipe,\n ListFiltersComponent,\n ArchivedFilterComponent\n} from '@c8y/ngx-components/ecosystem/shared';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\nimport { OnlyLatestFilterComponent } from './only-latest-filter/only-latest-filter.component';\nimport { PluginListComponent } from './plugin-list.component';\nimport { NgIf, AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-install-plugin',\n host: { class: 'd-contents' },\n templateUrl: './install-plugin.component.html',\n imports: [\n C8yTranslateDirective,\n ListFiltersComponent,\n ArchivedFilterComponent,\n OnlyLatestFilterComponent,\n PluginListComponent,\n NgIf,\n IconDirective,\n EmptyStateComponent,\n C8yTranslatePipe,\n AsyncPipe,\n MarkdownToHtmlPipe\n ]\n})\nexport class InstallPluginComponent {\n @Input() plugins$: Observable<FilterableAppOrPlugin[]>;\n filteredPlugins$: Observable<FilterableAppOrPlugin[]> = new BehaviorSubject([]);\n selectedPlugins: ApplicationPlugin[] = [];\n packageTypes = defaultPackageTypes;\n result: Promise<ApplicationPlugin[]> = new Promise((resolve, reject) => {\n this._install = resolve;\n this._cancel = reject;\n });\n onlyLatestPluginVersion = true;\n selectedPlugin: ApplicationPlugin;\n pluginBaseUrl: string;\n pluginMarkdown: string;\n\n private _install;\n private _cancel;\n\n constructor(\n private bottomDrawerRef: BottomDrawerRef<InstallPluginComponent>,\n private ecosystemService: EcosystemService,\n private pluginsService: PluginsService\n ) {}\n\n setFilterPipe(filterPipe: FilterPipe) {\n this.filteredPlugins$ = this.plugins$.pipe(\n map(plugins =>\n plugins.map(plugin => {\n plugin.filterProps = this.ecosystemService.getAppFilterProps(plugin.originApp);\n return plugin;\n })\n ),\n src => filterPipe(src)\n );\n }\n\n cancel() {\n this.bottomDrawerRef.close();\n this._cancel();\n }\n\n install() {\n this._install(this.selectedPlugins);\n this.bottomDrawerRef.close();\n }\n\n async showPluginOverview(plugin: ApplicationPlugin) {\n this.selectedPlugin = plugin;\n const baseUrl = `/apps/${plugin.id}/`;\n this.pluginBaseUrl = baseUrl;\n this.pluginMarkdown = await this.pluginsService.getReadmeFileContent(baseUrl);\n }\n}\n"," <div class=\"card-header gap-8 d-col p-l-24 p-r-24 separator-bottom flex-no-shrink\">\n <div\n class=\"card-title h4 text-center\"\n translate\n >\n Available plugins\n </div>\n <c8y-list-filters\n (filterPipeChange)=\"setFilterPipe($event)\"\n [packageTypes]=\"packageTypes\"\n >\n <c8y-archived-filter></c8y-archived-filter>\n <c8y-only-latest-filter></c8y-only-latest-filter>\n </c8y-list-filters>\n </div>\n <div class=\"d-grid grid__col--5-7--md min-height-0 flex-grow\">\n <c8y-plugin-list\n class=\"inner-scroll bg-level-1\"\n (selectedItems)=\"selectedPlugins = $event\"\n [emptyListText]=\"'No matching plugins' | translate\"\n [plugins$]=\"filteredPlugins$\"\n [selectable]=\"true\"\n [selectedPlugin]=\"selectedPlugin\"\n (showOverview)=\"showPluginOverview($event)\"\n ></c8y-plugin-list>\n <div class=\"inner-scroll bg-component\">\n <div class=\"card-header separator sticky-top bg-inherit\"\n *ngIf=\"pluginMarkdown\">\n <button\n class=\"m-l-auto btn-clean\"\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n (click)=\"selectedPlugin = null; pluginMarkdown = null\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </div>\n <div class=\"card-block p-l-24 p-r-24\">\n <div\n class=\"markdown-content\"\n *ngIf=\"pluginMarkdown\"\n [innerHTML]=\"pluginMarkdown | markdownToHtml: { baseUrl: pluginBaseUrl } | async\"\n ></div>\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No plugin selected' | translate\"\n [subtitle]=\"\n 'Select a plugin from the list to view its documentation.' | translate\"\n *ngIf=\"!pluginMarkdown\"\n [horizontal]=\"true\"\n >\n <p>\n <small >\n {{ 'Documentation availability varies by plugin.' | translate }}\n </small>\n </p>\n </c8y-ui-empty-state>\n </div>\n </div>\n </div>\n <div class=\"text-center card-footer p-24 separator\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n data-cy=\"install-plugin--cancel-button\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Install' | translate }}\"\n type=\"button\"\n (click)=\"install()\"\n [disabled]=\"selectedPlugins.length === 0\"\n data-cy=\"install-plugin--install-button\"\n >\n {{ 'Install' | translate }}\n <span\n class=\"badge\"\n *ngIf=\"selectedPlugins.length as length\"\n >\n {{ length }}\n </span>\n </button>\n </div>\n\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-label-cell-renderer',\n templateUrl: './label-cell-renderer.component.html'\n})\nexport class LabelCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","<span class=\"label label-info\">{{ context.value }}</span>\n","import { Component } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ApplicationPluginStatus,\n CellRendererContext,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { NgIf, NgClass } from '@angular/common';\n\n@Component({\n selector: 'c8y-orphaned-status-cell-renderer',\n templateUrl: './orphaned-status-cell-renderer.component.html',\n imports: [NgIf, NgClass, C8yTranslatePipe]\n})\nexport class OrphanedStatusCellRendererComponent {\n label: { value: string; class: string; text: string } | null;\n constructor(public context: CellRendererContext) {\n this.label = this.getLabel(context.value);\n }\n\n private getLabel(statusValue: ApplicationPluginStatus): {\n value: string;\n class: string;\n text: string;\n } | null {\n switch (statusValue) {\n case ApplicationPluginStatus.OUTDATED:\n return {\n value: statusValue,\n text: gettext('OUTDATED`plugin status`'),\n class: 'label-warning'\n };\n case ApplicationPluginStatus.ORPHANED:\n return {\n value: statusValue,\n text: gettext('ORPHANED`plugin status`'),\n class: 'label-danger'\n };\n case ApplicationPluginStatus.REVOKED:\n return {\n value: statusValue,\n text: gettext('REVOKED`plugin status`'),\n class: 'label-danger'\n };\n case ApplicationPluginStatus.LATEST:\n return {\n value: statusValue,\n text: gettext('LATEST`plugin status`'),\n class: 'label-success'\n };\n case ApplicationPluginStatus.AUTO:\n return {\n value: statusValue,\n text: gettext('AUTO`plugin status`'),\n class: 'label-success'\n };\n default:\n return null;\n }\n }\n}\n","<span\n *ngIf=\"label\"\n class=\"label\"\n [ngClass]=\"label.class\"\n [title]=\"label.text | translate\"\n>\n {{ label.text | translate }}\n</span>\n","import { Component } from '@angular/core';\nimport { ApplicationRemotePlugins, IApplication, IApplicationVersion } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ApplicationPlugin,\n GainsightService,\n PluginsService,\n IconDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { uniq } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport {\n EcosystemService,\n PRODUCT_EXPERIENCE_ECOSYSTEM,\n PackageVersionSelectComponent,\n PackageChangelogComponent\n} from '@c8y/ngx-components/ecosystem/shared';\nimport { NgIf } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'c8y-update-plugin-of-app',\n templateUrl: './update-plugin-of-app.component.html',\n imports: [\n IconDirective,\n NgIf,\n C8yTranslateDirective,\n PackageVersionSelectComponent,\n FormsModule,\n PackageChangelogComponent,\n C8yTranslatePipe\n ]\n})\nexport class UpdatePluginOfAppComponent {\n CURRENT_LOCATION = location.href;\n\n app: IApplication;\n plugin: ApplicationPlugin;\n downgrade: boolean;\n result: Promise<void> = new Promise((resolve, reject) => {\n this._install = resolve;\n this._cancel = reject;\n });\n applicationVersion: IApplicationVersion;\n updateAll = true;\n\n private _install: () => void;\n private _cancel: (reason?: any) => void;\n\n constructor(\n private bsModalRef: BsModalRef,\n private pluginsService: PluginsService,\n private alert: AlertService,\n private ecosystemService: EcosystemService,\n private gainsightService: GainsightService\n ) {}\n\n async update() {\n const remotes = this.pluginsService.getMFRemotes(this.app);\n const oldRemotePath = `${this.plugin.contextPath}@${this.plugin.version}`;\n const newRemotePath = `${this.plugin.contextPath}@${this.applicationVersion.version}`;\n let oldRemoteModules = [...(remotes[oldRemotePath] || [])];\n if (!oldRemoteModules.length) {\n this.alert.warning(gettext('Could not change the version of plugin.'));\n this.cancel();\n return;\n }\n\n const isArchived = await this.ecosystemService.verifyArchived([this.plugin]);\n if (!isArchived) {\n this.alert.warning(gettext('Plugin update aborted by user.'));\n this.cancel();\n return;\n }\n\n const result = await this.ecosystemService.verifyLicenses([this.plugin]);\n if (!result) {\n this.alert.warning(gettext('Plugin update aborted by user.'));\n this.cancel();\n return;\n }\n\n let remoteModulesOfNewVersion = [...(remotes[newRemotePath] || [])];\n let olderVersions: ApplicationRemotePlugins = {};\n if (this.updateAll) {\n olderVersions = Object.keys(remotes)\n .filter(key => key.startsWith(`${this.plugin.contextPath}@`))\n .reduceRight((prev, curr) => {\n prev[curr] = undefined;\n return prev;\n }, {});\n\n oldRemoteModules = Object.keys(olderVersions)\n .map(version => remotes[version])\n .reduceRight((prev, curr) => {\n prev.push(...curr);\n return prev;\n }, []);\n remoteModulesOfNewVersion.push(...oldRemoteModules);\n } else {\n remoteModulesOfNewVersion.push(this.plugin.module);\n olderVersions[oldRemotePath] = oldRemoteModules.filter(\n module => module !== this.plugin.module\n );\n if (!olderVersions[oldRemotePath].length) {\n olderVersions[oldRemotePath] = undefined;\n }\n }\n\n remoteModulesOfNewVersion = uniq(remoteModulesOfNewVersion);\n const newRemotes: ApplicationRemotePlugins = {\n ...remotes,\n ...olderVersions,\n [newRemotePath]: remoteModulesOfNewVersion\n };\n\n try {\n await this.pluginsService.updateRemotesInAppConfig(this.app, newRemotes);\n this.alert.success(gettext(`Switched the version of plugin.`));\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.INSTALLED_PLUGINS,\n {\n component: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.COMPONENTS.UPDATE_PLUGIN_OF_APP,\n action: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.ACTIONS.CHANGE_PLUGIN_VERSION,\n result: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_VERSION_CHANGED,\n url: this.CURRENT_LOCATION\n }\n );\n } catch (e) {\n this.alert.addServerFailure(e);\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.INSTALLED_PLUGINS,\n {\n component: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.COMPONENTS.UPDATE_PLUGIN_OF_APP,\n action: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.ACTIONS.CHANGE_PLUGIN_VERSION,\n result: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.SERVER_FAILURE,\n url: this.CURRENT_LOCATION\n }\n );\n }\n\n this.bsModalRef.hide();\n this._install();\n }\n\n cancel() {\n this.bsModalRef.hide();\n this._cancel();\n }\n}\n","<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'installing-updates'\"></i>\n <h4\n id=\"modal-title\"\n *ngIf=\"!downgrade\"\n translate\n >\n Update plugin\n </h4>\n <h4\n id=\"modal-title\"\n *ngIf=\"downgrade\"\n translate\n >\n Downgrade plugin\n </h4>\n </div>\n <div\n class=\"inner-scroll\"\n id=\"modal-body\"\n >\n <div class=\"card-block p-r-24 p-l-24 sticky-top bg-component separator-bottom\">\n <c8y-package-version-select\n [packageContextPath]=\"plugin?.contextPath\"\n [(ngModel)]=\"applicationVersion\"\n ></c8y-package-version-select>\n <div\n class=\"alert alert-info\"\n role=\"alert\"\n *ngIf=\"plugin?.version && plugin.version === applicationVersion?.version\"\n >\n <span\n translate\n ngNonBindable\n [translateParams]=\"applicationVersion\"\n >\n Select another version, as {{ version }} is currently used.\n </span>\n </div>\n <div class=\"form-group\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"updateAll\"\n />\n <span></span>\n <span\n translate\n ngNonBindable\n [translateParams]=\"plugin\"\n >\n Set version for all plugins using the same context path \"{{ contextPath }}\".\n </span>\n </label>\n </div>\n <p class=\"legend form-block\">\n {{ 'Change log' | translate }}\n </p>\n </div>\n <div class=\"card-block p-l-24 p-r-24\">\n\n <div\n class=\"markdown-content markdown-content--to-h3\"\n >\n <c8y-contents-changelog\n [package]=\"plugin.originApp\"\n [selectedVersion]=\"applicationVersion?.version\"\n [previousVersion]=\"plugin?.version\"\n ></c8y-contents-changelog>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Set version' | translate }}\"\n [disabled]=\"!applicationVersion || plugin?.version === applicationVersion?.version\"\n (click)=\"update()\"\n >\n {{ 'Set version' | translate }}\n </button>\n </div>\n</div>","import { Component, inject, OnInit } from '@angular/core';\nimport {\n ApplicationPlugin,\n BottomDrawerRef,\n PluginsService,\n EmptyStateComponent,\n C8yTranslatePipe,\n MarkdownToHtmlPipe\n} from '@c8y/ngx-components';\nimport { NgIf, AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-application-plugin-readme',\n host: { class: 'd-contents' },\n templateUrl: './application-plugin-readme.component.html',\n imports: [NgIf, EmptyStateComponent, C8yTranslatePipe, AsyncPipe, MarkdownToHtmlPipe]\n})\nexport class ApplicationPluginReadmeComponent implements OnInit {\n pluginMarkdown: string;\n pluginBaseUrl: string;\n plugin: ApplicationPlugin;\n\n private bottomDrawerRef = inject(BottomDrawerRef);\n private pluginsService = inject(PluginsService);\n\n async ngOnInit() {\n const baseUrl = `/apps/${this.plugin.id}/`;\n this.pluginBaseUrl = baseUrl;\n this.pluginMarkdown = await this.pluginsService.getReadmeFileContent(baseUrl);\n }\n\n close() {\n this.bottomDrawerRef.close();\n }\n}\n","<div class=\"card-header gap-8 d-col p-l-24 p-r-24 separator-bottom flex-no-shrink\">\n <span class=\"card-title h4 text-center\">\n {{ plugin.name }}\n </span>\n</div>\n<div class=\"inner-scroll flex-grow\">\n <div\n class=\"markdown-content col-lg-8 p-24 m-l-auto m-r-auto\"\n style=\"float: none\"\n *ngIf=\"pluginMarkdown\"\n [innerHTML]=\"pluginMarkdown | markdownToHtml: { baseUrl: pluginBaseUrl } | async\"\n ></div>\n <div class=\"d-flex\">\n <c8y-ui-empty-state\n class=\"col-lg-3 col-sm-4 m-l-auto m-r-auto\"\n [icon]=\"'user-manual'\"\n [title]=\"'No README.md found for plugin' | translate\"\n [subtitle]=\"\n 'To view the contents of &quot;README&quot;, add the file &quot;README.md&quot; to the plugin.'\n | translate\n \"\n *ngIf=\"!pluginMarkdown\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n</div>\n<div class=\"text-center card-footer p-24 separator\">\n <button\n class=\"btn btn-default\"\n (click)=\"close()\"\n >\n {{ 'Close' | translate }}\n </button>\n</div>\n","import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ApplicationRemotePlugins, IApplication } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ActionControl,\n AlertService,\n ApplicationPlugin,\n ApplicationPluginStatus,\n BulkActionControl,\n Column,\n DataGridComponent,\n DisplayOptions,\n GainsightService,\n HeaderActionControl,\n Pagination,\n PluginsConfig,\n PluginsService,\n PluginsExportScopes,\n BottomDrawerService,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n EmptyStateContextDirective,\n EmptyStateComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n HumanizeAppNamePipe\n} from '@c8y/ngx-components';\nimport {\n EcosystemService,\n PRODUCT_EXPERIENCE_ECOSYSTEM\n} from '@c8y/ngx-components/ecosystem/shared';\nimport { pick } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, combineLatest, firstValueFrom, Observable, Subject } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\nimport { InstallPluginComponent } from './install-plugin.component';\nimport { LabelCellRendererComponent } from './label-cell-renderer.component';\nimport { OrphanedStatusCellRendererComponent } from './orphaned-status-cell-renderer.component';\nimport { UpdatePluginOfAppComponent } from './update-plugin-of-app/update-plugin-of-app.component';\nimport { ApplicationPluginReadmeComponent } from './application-plugin-readme.component';\nimport { NgIf, NgClass, AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-app-plugins',\n templateUrl: './application-plugins.component.html',\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n NgIf,\n ActionBarItemComponent,\n NgClass,\n IconDirective,\n DataGridComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n AsyncPipe,\n HumanizeAppNamePipe\n ]\n})\nexport class ApplicationPluginsComponent implements OnInit, OnDestroy {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_ECOSYSTEM;\n CURRENT_LOCATION = location.href;\n\n @Input() appId: string | number;\n @ViewChild(DataGridComponent, { static: false })\n dataGrid: DataGridComponent;\n\n remotePlugins$: BehaviorSubject<ApplicationRemotePlugins> = new BehaviorSubject({});\n allAvailablePlugins$: BehaviorSubject<ApplicationPlugin[]> = new BehaviorSubject([]);\n selfPlugins$: BehaviorSubject<ApplicationPlugin[]> = new BehaviorSubject([]);\n\n installedPlugins$: Observable<ApplicationPlugin[]> = combineLatest([\n this.remotePlugins$.pipe(map(remotes => PluginsService.convertInstalledRemotesToIds(remotes))),\n this.allAvailablePlugins$\n ]).pipe(\n map(([remotePlugins, allPlugins]) => this.getInstalledPlugins(allPlugins, remotePlugins)),\n shareReplay(1)\n );\n orphanedPlugins$ = this.installedPlugins$.pipe(\n map(plugins => plugins.filter(p => p.status === ApplicationPluginStatus.ORPHANED))\n );\n // only use the installedPlugins$ and selfPlugins$ as triggers\n isStandard$ = combineLatest([this.installedPlugins$, this.selfPlugins$]).pipe(\n map(() => this.isStandard(this.app))\n );\n app: IApplication;\n isLoading: boolean;\n title: string = gettext('Installed plugins');\n loadMoreItemsLabel: string = gettext('Load more packages');\n loadingItemsLabel: string = gettext('Loading packages…');\n actionControls: ActionControl[] = this.getActionControls();\n bulkActionControls: BulkActionControl[] = this.getBulkActionControls();\n headerActionControls: HeaderActionControl[] = [];\n noResultsMessage = gettext('No plugins to display.');\n noDataMessage = gettext('No plugins installed.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n noDataSubtitle = gettext(\"This application doesn't have any plugin. Click below to install.\");\n pagination: Pagination = {\n pageSize: 10,\n currentPage: 1\n };\n displayOptions: DisplayOptions = {\n bordered: false,\n striped: true,\n filter: true,\n gridHeader: true,\n hover: true\n };\n columns: Column[] = [\n {\n name: 'name',\n header: gettext('Plugin name'),\n path: 'name',\n filterable: true\n },\n {\n name: 'Version',\n header: gettext('Version'),\n path: 'version',\n filterable: false\n },\n {\n name: 'Tag',\n header: gettext('Tag`noun`'),\n path: 'installedViaTag',\n filterable: false,\n cellRendererComponent: LabelCellRendererComponent\n },\n {\n name: 'description',\n header: gettext('Description'),\n path: 'description',\n filterable: false,\n cellCSSClassName: 'small'\n },\n {\n name: 'contextPath',\n header: gettext('Source'),\n path: 'contextPath',\n filterable: false,\n cellRendererComponent: LabelCellRendererComponent\n },\n {\n name: 'scope',\n header: gettext('Scope'),\n path: 'scope',\n filterable: false,\n visible: false,\n cellRendererComponent: LabelCellRendererComponent\n },\n {\n name: 'status',\n header: gettext('Status'),\n path: 'status',\n filterable: false,\n cellRendererComponent: OrphanedStatusCellRendererComponent\n }\n ];\n private destroy$: Subject<void> = new Subject();\n\n constructor(\n private activatedRoute: ActivatedRoute,\n private ecosystemService: EcosystemService,\n private bsModalService: BsModalService,\n private pluginsService: PluginsService,\n private alertService: AlertService,\n private gainsightService: GainsightService,\n private bottomDrawerService: BottomDrawerService\n ) {}\n\n ngOnInit() {\n this.addInstallButtonToHeaderActionControls();\n this.loadData();\n }\n\n async loadData() {\n this.isLoading = true;\n await this.getApplicationMO();\n await this.getApplicationMFRemotes(this.app);\n await this.getAllApplicationsMFExports(this.app);\n await this.getAllSelfMFExports(this.app);\n this.isLoading = false;\n }\n\n async resetToDefault() {\n this.isLoading = true;\n await this.pluginsService.resetRemotes(this.app);\n await this.loadData();\n this.alertService.success(gettext('The application was reset to its default plugins.'));\n }\n\n async installPlugins() {\n let currentPlugin: ApplicationPlugin | null = null;\n\n try {\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.INSTALLED_PLUGINS,\n {\n component: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.COMPONENTS.APPLICATION_PLUGINS,\n action: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.ACTIONS.INSTALL_PLUGINS_INITIATED,\n url: this.CURRENT_LOCATION,\n targetApplicationName: this.app.name,\n targetApplicationContextPath: this.app.contextPath\n }\n );\n\n const drawer = this.bottomDrawerService.openDrawer<InstallPluginComponent>(\n InstallPluginComponent,\n {\n initialState: this.getInstallModalInitState(),\n closeOnNavigation: true\n }\n );\n\n const pluginsToAdd: ApplicationPlugin[] = await drawer.instance.result;\n\n const isArchived = await this.ecosystemService.verifyArchived(pluginsToAdd);\n if (!isArchived) {\n return;\n }\n\n const licensesVerifiedByUser = await this.ecosystemService.verifyLicenses(pluginsToAdd);\n if (!licensesVerifiedByUser) {\n return;\n }\n const verifyVersionCompatibility =\n await this.ecosystemService.verifyPluginVersionsCompatibility(pluginsToAdd, this.app);\n\n if (!verifyVersionCompatibility) {\n return;\n }\n\n this.isLoading = true;\n await this.handleRemotesInstallation(pluginsToAdd);\n\n this.alertService.success(gettext('Plugins installed.'));\n pluginsToAdd.forEach(plugin => {\n currentPlugin = plugin;\n\n this.triggerPluginEvent(\n plugin,\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_INSTALLED\n );\n });\n } catch (ex) {\n if (ex) {\n this.alertService.addServerFailure(ex);\n this.triggerPluginEvent(\n currentPlugin,\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.SERVER_FAILURE\n );\n }\n } finally {\n this.isLoading = false;\n }\n }\n\n async removePlugins(plugins: string[]) {\n let currentPlugin: ApplicationPlugin | null = null;\n\n try {\n this.isLoading = true;\n const installedPlugins: ApplicationPlugin[] = await firstValueFrom(this.installedPlugins$);\n const pluginsToRemove: ApplicationPlugin[] = installedPlugins.filter(p =>\n plugins.includes(p.id)\n );\n const updatedRemotes = await this.pluginsService.removeRemotes(\n this.app,\n plugins.map(id => installedPlugins.find(p => p.id === id))\n );\n this.emitRemotes(updatedRemotes);\n\n this.isLoading = false;\n this.dataGrid.cancel();\n this.alertService.success(gettext('Plugins removed.'));\n\n pluginsToRemove.forEach(plugin => {\n currentPlugin = plugin;\n\n this.triggerPluginEvent(\n plugin,\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_REMOVED\n );\n });\n } catch (ex) {\n if (ex) {\n this.alertService.addServerFailure(ex);\n this.triggerPluginEvent(\n currentPlugin,\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.SERVER_FAILURE\n );\n }\n } finally {\n this.isLoading = false;\n }\n }\n\n async cleanupOrphanedPlugins(plugins: ApplicationPlugin[]) {\n const pluginIds = plugins.map(p => p.id);\n await this.removePlugins(pluginIds);\n }\n\n getActionControls(): ActionControl[] {\n return [\n {\n type: 'showReadme',\n text: gettext('Show readme'),\n icon: 'documents',\n showIf: (plugin: ApplicationPlugin) => {\n return !!plugin.readmePath;\n },\n callback: plugin => this.showPluginReadme(plugin as ApplicationPlugin)\n },\n {\n type: 'customUpdate',\n text: gettext('Update'),\n icon: 'installing-updates',\n showIf: plugin => {\n return (\n plugin.status === ApplicationPluginStatus.OUTDATED ||\n plugin.status === ApplicationPluginStatus.REVOKED\n );\n },\n callback: plugin => this.updatePlugin(this.app, plugin as ApplicationPlugin)\n },\n {\n type: 'customDowngrade',\n text: gettext('Downgrade'),\n icon: 'installing-updates',\n showIf: (plugin: ApplicationPlugin) => {\n if (\n plugin.scope === PluginsExportScopes.SELF ||\n plugin.scope === PluginsExportScopes.SELF_OPTIONAL\n ) {\n return false;\n }\n return plugin.status === ApplicationPluginStatus.LATEST;\n },\n callback: plugin => this.updatePlugin(this.app, plugin as ApplicationPlugin, true)\n }\n ];\n }\n\n showPluginReadme(plugin: ApplicationPlugin): void {\n this.bottomDrawerService.openDrawer(ApplicationPluginReadmeComponent, {\n initialState: { plugin },\n closeOnNavigation: true\n });\n }\n\n getBulkActionControls(): BulkActionControl[] {\n return [\n {\n type: 'customDelete',\n text: gettext('Remove'),\n icon: 'trash',\n callback: plugins => this.removePlugins(plugins)\n }\n ];\n }\n\n async updatePlugin(app: IApplication, plugin: ApplicationPlugin, downgrade = false) {\n try {\n await (\n this.bsModalService.show(UpdatePluginOfAppComponent, {\n class: 'modal-md',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState: {\n app,\n plugin,\n downgrade\n },\n ignoreBackdropClick: true\n }).content as UpdatePluginOfAppComponent\n ).result;\n this.refresh();\n } catch (er) {\n return;\n }\n }\n\n refresh() {\n this.loadData();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n isStandard(app: IApplication): boolean {\n return (\n // ensure that every remote from the manifest is in the config\n this.everyRemoteFromManifestIsInConfig(app) &&\n // should not have any excluded remotes\n Object.keys(app?.config?.excludedRemotes || {}).length === 0 &&\n // ensure that every remote from the config is in the manifest\n this.everyRemoteFromConfigIsInManifest(app)\n );\n }\n\n private everyRemoteFromManifestIsInConfig(app?: IApplication): boolean {\n const manifestRemotes = app?.manifest?.remotes;\n const configRemotes = app?.config?.remotes;\n\n if (!manifestRemotes || !configRemotes) {\n return true;\n }\n\n return Object.keys(manifestRemotes).every(contextPath => {\n return (\n Array.isArray(configRemotes[contextPath]) &&\n Array.isArray(manifestRemotes[contextPath]) &&\n manifestRemotes[contextPath].every(module => {\n return configRemotes[contextPath].includes(module);\n })\n );\n });\n }\n\n private everyRemoteFromConfigIsInManifest(app?: IApplication) {\n const manifestRemotes = app?.manifest?.remotes || {};\n const configRemotes = app?.config?.remotes;\n\n if (!configRemotes) {\n return true;\n }\n\n return Object.keys(configRemotes).every(contextPath => {\n return (\n Array.isArray(configRemotes[contextPath]) &&\n Array.isArray(manifestRemotes[contextPath]) &&\n configRemotes[contextPath].every(module => {\n return manifestRemotes[contextPath].includes(module);\n })\n );\n });\n }\n\n private addInstallButtonToHeaderActionControls() {\n if (this.appId) {\n this.headerActionControls = [\n {\n text: gettext('Install plugins'),\n callback: () => {\n this.installPlugins();\n },\n icon: 'plus-circle',\n type: 'custom'\n }\n ];\n }\n }\n\n private async handleRemotesInstallation(plugins: ApplicationPlugin[]) {\n const updatedRemotes = await this.pluginsService.addRemotes(this.app, plugins);\n return this.emitRemotes(updatedRemotes);\n }\n\n private emitRemotes(pluginsConfig: PluginsConfig) {\n const { remotes, excludedRemotes } = pluginsConfig;\n\n // needed for first time adding/removing a plugin\n if (!this.app.config) {\n this.app.config = {};\n }\n\n this.app.config.remotes = remotes;\n this.app.config.excludedRemotes = excludedRemotes;\n const actualRemotes = this.pluginsService.getMFRemotes(this.app);\n this.remotePlugins$.next(actualRemotes);\n return { ...this.remotePlugins$.value };\n }\n\n private async getApplicationMO(): Promise<IApplication> {\n let id = this.appId;\n if (!id) {\n const { id: routeId } = this.activatedRoute.snapshot.parent.data.contextData;\n id = routeId;\n }\n\n try {\n this.app = await this.ecosystemService.getApplication(id);\n } catch (er) {\n if (er) {\n this.alertService.addServerFailure(er);\n }\n }\n return this.app;\n }\n\n private async getApplicationMFExports(app: IApplication) {\n const applicationExports = this.pluginsService.getMFExports(app, [], true);\n return applicationExports;\n }\n\n private async getApplicationMFRemotes(app: IApplication) {\n const appConfigRemotes = this.pluginsService.getMFRemotes(app);\n this.remotePlugins$.next(appConfigRemotes || {});\n }\n\n private async getAllApplicationsMFExports(app: IApplication) {\n const exportedByCurrentApp = await this.getApplicationMFExports(app);\n const allAppsMFExports = await this.pluginsService.getAllMFExports(true);\n this.allAvailablePlugins$.next([...allAppsMFExports, ...exportedByCurrentApp]);\n }\n\n private async getAllSelfMFExports(app: IApplication) {\n const exportedByCurrentApp = await this.getApplicationMFExports(app);\n this.selfPlugins$.next(exportedByCurrentApp.filter(({ scope }) => scope === 'self'));\n }\n\n private getInstallModalInitState(): any {\n return {\n plugins$: combineLatest([this.allAvailablePlugins$, this.installedPlugins$]).pipe(\n map(([allPlugins, installedPlugins]) => {\n // to not mutate the original array and objects contained in it\n const allPluginsAsNewObjects = allPlugins.map(p => ({ ...p }));\n\n for (const plugin of installedPlugins) {\n let installedPlugin = allPluginsAsNewObjects.find(p => p.id === plugin.id);\n\n if (!installedPlugin && plugin.installedViaTag) {\n installedPlugin = allPluginsAsNewObjects.find(\n p =>\n p.contextPath === plugin.contextPath &&\n p.module === plugin.module &&\n p.tags?.includes(plugin.installedViaTag as string)\n );\n }\n\n if (installedPlugin) {\n installedPlugin.installed = true;\n continue;\n }\n }\n\n return allPluginsAsNewObjects.map(p => ({ ...p, installed: !!p.installed }));\n }),\n shareReplay(1)\n )\n };\n }\n\n private getOrphanedPlugins(\n orphanedPluginIds: string[],\n allPlugins: ApplicationPlugin[]\n ): ApplicationPlugin[] {\n const orphanedPlugins: ApplicationPlugin[] = orphanedPluginIds.map(p => this.extractDetails(p));\n const orphanedPluginsUpdated = orphanedPlugins.map(p => {\n const pluginWithMatchingTag = allPlugins.find(\n tmp =>\n tmp.contextPath === p.contextPath &&\n tmp.module === p.module &&\n tmp.tags?.includes(p.version || 'latest')\n );\n if (pluginWithMatchingTag) {\n return {\n ...pluginWithMatchingTag,\n id: p.id,\n status: ApplicationPluginStatus.AUTO,\n installedViaTag: p.version || 'latest'\n };\n }\n const pluginInDifferentVersion = allPlugins.find(\n tmp => tmp.contextPath === p.contextPath && tmp.module === p.module\n );\n if (pluginInDifferentVersion) {\n return {\n ...pluginInDifferentVersion,\n version: p.version,\n id: p.id,\n status: ApplicationPluginStatus.OUTDATED\n };\n }\n return p;\n });\n\n return orphanedPluginsUpdated;\n }\n\n private splitOrphanedPluginsIntoOrphanedAndRevokedPlugins(\n allPlugins: ApplicationPlugin[],\n orphanedPlugins: ApplicationPlugin[]\n ) {\n const revokedPlugins = new Array<ApplicationPlugin>();\n const actuallyOrphanedPlugins = new Array<ApplicationPlugin>();\n\n for (const plugin of orphanedPlugins) {\n const foundFamiliarPlugin = allPlugins.find(\n plugin1 => plugin.contextPath === plugin1.contextPath && plugin.module === plugin1.module\n );\n if (foundFamiliarPlugin) {\n revokedPlugins.push(\n Object.assign({}, foundFamiliarPlugin, plugin, {\n status: ApplicationPluginStatus.REVOKED\n })\n );\n } else {\n actuallyOrphanedPlugins.push(plugin);\n }\n }\n\n return { revokedPlugins, actuallyOrphanedPlugins };\n }\n\n private getInstalledPlugins(\n allPlugins: ApplicationPlugin[],\n remotePlugins: string[]\n ): ApplicationPlugin[] {\n const availablePlugins = allPlugins\n .filter(plugin => remotePlugins.includes(plugin.id))\n .map(plugin =>\n Object.assign(plugin, {\n status: plugin.tags?.includes('latest')\n ? ApplicationPluginStatus.LATEST\n : ApplicationPluginStatus.OUTDATED\n })\n );\n const orphanedPluginIds = remotePlugins.filter(\n r => !availablePlugins.find(plugin => plugin.id === r)\n );\n const orphanedPlugins: ApplicationPlugin[] = this.getOrphanedPlugins(\n orphanedPluginIds,\n allPlugins\n );\n\n const notActuallyOrphanedPlugins = orphanedPlugins.filter(\n p => p.status === ApplicationPluginStatus.AUTO\n );\n\n const orphanedOrRevokedPlugins = orphanedPlugins.filter(\n p => p.status !== ApplicationPluginStatus.AUTO\n );\n\n const { actuallyOrphanedPlugins, revokedPlugins } =\n this.splitOrphanedPluginsIntoOrphanedAndRevokedPlugins(allPlugins, orphanedOrRevokedPlugins);\n\n return [\n ...availablePlugins,\n ...notActuallyOrphanedPlugins,\n ...revokedPlugins,\n ...actuallyOrphanedPlugins\n ];\n }\n\n private extractDetails(pluginId: string): ApplicationPlugin {\n const contextPath = this.getStringMatchingRegex(pluginId, /^[^@]*(@|\\/)/);\n const version = this.getStringMatchingRegex(pluginId, /@.*\\//);\n const module = this.getStringMatchingRegex(pluginId, /\\/.*$/);\n const unavailable = gettext('unavailable`plugin`');\n return {\n id: pluginId,\n idLatest: `${contextPath}/${module}`,\n path: '',\n module,\n name: module,\n status: ApplicationPluginStatus.ORPHANED,\n contextPath: contextPath,\n description: unavailable,\n version: version\n };\n }\n\n private getStringMatchingRegex(\n str: string,\n regex: { [Symbol.match](string: string): RegExpMatchArray | null }\n ): string {\n const matches = str.match(regex);\n const value = matches ? matches[0] : '';\n\n return value.replace(/(@|\\/)/g, '');\n }\n\n private triggerPluginEvent(plugin: ApplicationPlugin, result: string): void {\n const pluginInfo = pick(plugin, [\n 'name',\n 'contextPath',\n 'module',\n 'version',\n 'type',\n 'id'\n ] satisfies (keyof ApplicationPlugin)[]);\n\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.INSTALLED_PLUGINS,\n {\n component: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.COMPONENTS.APPLICATION_PLUGINS,\n result,\n url: this.CURRENT_LOCATION,\n ...pluginInfo,\n targetApplicationName: this.app.name,\n targetApplicationContextPath: this.app.contextPath\n }\n );\n }\n}\n","<c8y-title>{{ app | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-atom'\"\n [label]=\"'Ecosystem' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/application/applications'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"app | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Plugins' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"!(isStandard$ | async)\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset to default plugins' | translate }}\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n (click)=\"resetToDefault()\"\n >\n <i c8yIcon=\"undo\"></i>\n {{ 'Reset to default' | 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=\"{{ 'Install plugins' | translate }}\"\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Install plugins' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<ng-container *ngIf=\"orphanedPlugins$ | async as orphanedPlugins\">\n <c8y-action-bar-item\n *ngIf=\"orphanedPlugins?.length\"\n [placement]=\"'right'\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Clean up orphaned plugins' | translate }}\"\n (click)=\"cleanupOrphanedPlugins(orphanedPlugins)\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n >\n <i c8yIcon=\"erase\"></i>\n {{ 'Clean up orphaned plugins' | translate }}\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n class=\"d-contents\"\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"installedPlugins$ | async\"\n [pagination]=\"pagination\"\n [selectable]=\"true\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n [headerActionControls]=\"headerActionControls\"\n (onReload)=\"refresh()\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'plugin'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <p *ngIf=\"stats?.size === 0\">\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Install plugins' | translate }}\"\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n translate\n >\n Install plugins\n </button>\n </p>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ApplicationType, IApplication } from '@c8y/client';\nimport { EcosystemService } from '@c8y/ngx-components/ecosystem/shared';\n\n@Injectable()\nexport class ApplicationPluginsGuard {\n constructor(private ecosystemService: EcosystemService) {}\n\n canActivate(route: ActivatedRouteSnapshot) {\n const app: IApplication = route.data.contextData || route.parent.data.contextData;\n if (!app) {\n return false;\n }\n const manifest = app.manifest;\n if (!manifest) {\n return false;\n }\n return (\n app.type === ApplicationType.HOSTED &&\n this.ecosystemService.isOwner(app) &&\n !this.ecosystemService.isPackage(app) &&\n // apps like e.g. the public-options should not have the plugins tab\n !manifest.noAppSwitcher\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { SharedEcosystemModule } from '@c8y/ngx-components/ecosystem/shared';\nimport { ApplicationPluginsComponent } from './application-plugins.component';\nimport { UpdatePluginOfAppComponent } from './update-plugin-of-app/update-plugin-of-app.component';\nimport { AppStatePipe } from './appState.pipe';\nimport { AppsToUpdateRemotesSelectComponent } from './apps-to-update-remotes-select.component';\nimport { InstallPluginComponent } from './install-plugin.component';\nimport { OrphanedStatusCellRendererComponent } from './orphaned-status-cell-renderer.component';\nimport { PluginListItemComponent } from './plugin-list-item.component';\nimport { PluginListComponent } from './plugin-list.component';\nimport { LabelCellRendererComponent } from './label-cell-renderer.component';\nimport { ApplicationPluginsGuard } from './application-plugins.guard';\nimport { OnlyLatestFilterComponent } from './only-latest-filter/only-latest-filter.component';\nimport { ApplicationPluginReadmeComponent } from './application-plugin-readme.component';\n\n@NgModule({\n imports: [\n CoreModule,\n SharedEcosystemModule,\n ApplicationPluginsComponent,\n PluginListItemComponent,\n InstallPluginComponent,\n PluginListComponent,\n AppsToUpdateRemotesSelectComponent,\n AppStatePipe,\n LabelCellRendererComponent,\n OrphanedStatusCellRendererComponent,\n UpdatePluginOfAppComponent,\n OnlyLatestFilterComponent,\n ApplicationPluginReadmeComponent\n ],\n exports: [\n ApplicationPluginsComponent,\n PluginListItemComponent,\n InstallPluginComponent,\n PluginListComponent,\n AppsToUpdateRemotesSelectComponent,\n AppStatePipe,\n LabelCellRendererComponent,\n OrphanedStatusCellRendererComponent,\n UpdatePluginOfAppComponent,\n OnlyLatestFilterComponent\n ],\n providers: [\n ApplicationPluginsGuard,\n hookRoute([\n {\n path: 'plugins',\n component: ApplicationPluginsComponent,\n icon: 'plugin',\n label: gettext('Plugins'),\n context: ViewContext.Application,\n priority: 3,\n canActivate: [ApplicationPluginsGuard]\n }\n ])\n ]\n})\nexport class ApplicationPluginsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i1.PluginListService","map","i4"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-ecosystem-application-plugins.mjs","sources":["../../ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.ts","../../ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.html","../../ecosystem/application-plugins/appState.pipe.ts","../../ecosystem/application-plugins/apps-to-update-remotes-select.component.ts","../../ecosystem/application-plugins/apps-to-update-remotes-select.component.html","../../ecosystem/application-plugins/plugin-list.service.ts","../../ecosystem/application-plugins/plugin-list-item.component.ts","../../ecosystem/application-plugins/plugin-list-item.component.html","../../ecosystem/application-plugins/plugin-list.component.ts","../../ecosystem/application-plugins/plugin-list.component.html","../../ecosystem/application-plugins/install-plugin.component.ts","../../ecosystem/application-plugins/install-plugin.component.html","../../ecosystem/application-plugins/label-cell-renderer.component.ts","../../ecosystem/application-plugins/label-cell-renderer.component.html","../../ecosystem/application-plugins/orphaned-status-cell-renderer.component.ts","../../ecosystem/application-plugins/orphaned-status-cell-renderer.component.html","../../ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.ts","../../ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.html","../../ecosystem/application-plugins/application-plugin-readme.component.ts","../../ecosystem/application-plugins/application-plugin-readme.component.html","../../ecosystem/application-plugins/application-plugins.component.ts","../../ecosystem/application-plugins/application-plugins.component.html","../../ecosystem/application-plugins/application-plugins.guard.ts","../../ecosystem/application-plugins/application-plugins.module.ts","../../ecosystem/application-plugins/c8y-ngx-components-ecosystem-application-plugins.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ApplicationPlugin, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { ListFiltersComponent } from '@c8y/ngx-components/ecosystem/shared';\n\n@Component({\n selector: 'c8y-only-latest-filter',\n templateUrl: './only-latest-filter.component.html',\n imports: [FormsModule, ReactiveFormsModule, C8yTranslatePipe]\n})\nexport class OnlyLatestFilterComponent {\n onlyLatestFormControl: FormControl;\n private readonly filterLabel = gettext('Only latest versions');\n\n constructor(public filterComponent: ListFiltersComponent) {\n this.onlyLatestFormControl = new FormControl(true);\n (this.filterComponent.formGroup.controls.custom as FormGroup).addControl(\n this.filterLabel,\n this.onlyLatestFormControl\n );\n filterComponent.customFilters.set(\n this.filterLabel,\n (plugin: ApplicationPlugin, enabled: boolean) => {\n return !enabled || !!plugin.tags?.includes('latest');\n }\n );\n }\n}\n","<label class=\"c8y-switch\">\n <input\n type=\"checkbox\"\n checked=\"checked\"\n [formControl]=\"onlyLatestFormControl\"\n />\n <span></span>\n {{ 'Show only latest version of plugins' | translate }}\n</label>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IApplication } from '@c8y/client';\nimport { ApplicationState, EcosystemService } from '@c8y/ngx-components/ecosystem/shared';\n@Pipe({\n name: 'appState',\n pure: true\n})\nexport class AppStatePipe implements PipeTransform {\n constructor(private ecosystemService: EcosystemService) {}\n\n transform(\n app: IApplication,\n arg: keyof ApplicationState\n ): ApplicationState[keyof ApplicationState] {\n const appState = this.ecosystemService.getAppState(app);\n return appState[arg];\n }\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n WizardConfig,\n WizardModalService,\n IconDirective,\n C8yTranslateDirective,\n FilterInputComponent,\n ListGroupComponent,\n ListItemComponent,\n ListItemCheckboxComponent,\n ListItemIconComponent,\n AppIconComponent,\n EmptyStateComponent,\n C8yTranslatePipe,\n HumanizeAppNamePipe\n} from '@c8y/ngx-components';\nimport { EcosystemService } from '@c8y/ngx-components/ecosystem/shared';\nimport { ApplicationType, IApplication } from '@c8y/client';\nimport { ModalOptions, BsModalRef } from 'ngx-bootstrap/modal';\nimport { UpdateType } from './apps-to-update-remotes-select.model';\nimport { Subject, BehaviorSubject, combineLatest, Observable, of } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';\nimport { AppStatePipe } from './appState.pipe';\n\n@Component({\n templateUrl: './apps-to-update-remotes-select.component.html',\n selector: 'c8y-apps-to-update-remotes-select',\n imports: [\n IconDirective,\n C8yTranslateDirective,\n FilterInputComponent,\n NgIf,\n ListGroupComponent,\n NgFor,\n ListItemComponent,\n NgClass,\n ListItemCheckboxComponent,\n ListItemIconComponent,\n AppIconComponent,\n EmptyStateComponent,\n C8yTranslatePipe,\n AsyncPipe,\n HumanizeAppNamePipe,\n AppStatePipe\n ]\n})\nexport class AppsToUpdateRemotesSelectComponent implements OnInit, OnDestroy {\n @Input() apps: IApplication[];\n @Input() updateType: UpdateType;\n @Input() pluginName: string;\n @Input() appsDisabled: Set<IApplication['id']>;\n private destroy$ = new Subject<void>();\n filterTerm$: BehaviorSubject<string> = new BehaviorSubject('');\n filteredApps$: Observable<IApplication[]> = new BehaviorSubject([]);\n textConfig: {\n header: string;\n applyButton: string;\n };\n appsToUpdateRemotes: IApplication[] = [];\n result: Promise<IApplication[]> = new Promise((resolve, reject) => {\n this._update = resolve;\n this._cancel = reject;\n });\n private _update: (apps: IApplication[]) => void;\n private _cancel: (reason?: any) => void;\n\n constructor(\n private bsModalRef: BsModalRef,\n private wizardModalService: WizardModalService,\n private ecosystemService: EcosystemService\n ) {}\n\n ngOnInit(): void {\n this.filteredApps$ = combineLatest([of(this.apps), this.filterTerm$]).pipe(\n map(([apps, filterTerm]) =>\n filterTerm.trim().length === 0\n ? apps\n : apps.filter((application: IApplication) =>\n this.ecosystemService.filterContainString(application.name, filterTerm)\n )\n )\n );\n this.textConfig =\n this.updateType === 'install'\n ? {\n header: gettext('Select applications to install the plugin to'),\n applyButton: gettext('Install')\n }\n : {\n header: gettext('Select applications to uninstall the plugin from'),\n applyButton: gettext('Uninstall')\n };\n }\n\n cancel() {\n this.bsModalRef.hide();\n this._cancel();\n }\n\n setSelectedApps(selected: boolean, app: IApplication) {\n selected\n ? this.appsToUpdateRemotes.push(app)\n : (this.appsToUpdateRemotes = this.appsToUpdateRemotes.filter(\n application => app.key !== application.key\n ));\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async duplicateApp() {\n const wizardConfig: WizardConfig = {\n headerText: gettext('Duplicate application'),\n headerIcon: 'c8y-copy'\n };\n\n const initialState: Record<string, unknown> = {\n wizardConfig,\n componentInitialState: {\n noBackButton: true\n },\n id: 'duplicateApplication'\n };\n\n const modalOptions: ModalOptions = { initialState };\n\n const modalRef = this.wizardModalService.show(modalOptions);\n modalRef.content.onClose.pipe(takeUntil(this.destroy$)).subscribe(async () => {\n this.apps = await this.getOwnedHostedApps();\n this.ngOnInit();\n });\n }\n\n async apply() {\n this._update(this.appsToUpdateRemotes);\n this.bsModalRef.hide();\n }\n\n private async getOwnedHostedApps(): Promise<IApplication[]> {\n return (await this.ecosystemService.getWebApplications()).filter(\n app => this.ecosystemService.isOwner(app) && app.type !== ApplicationType.EXTERNAL\n );\n }\n}\n","<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-modules'\"></i>\n <div class=\"modal-title h4\" id=\"modal-title\" translate>Custom applications</div>\n </div>\n <div class=\"inner-scroll\" id=\"modal-body\">\n <div class=\"p-16 text-center separator-bottom sticky-top bg-component\">\n <p class=\"text-medium\">\n {{ textConfig.header | translate }}\n </p>\n <c8y-filter (onSearch)=\"filterTerm$.next($event)\"></c8y-filter>\n </div>\n <c8y-list-group *ngIf=\"apps.length; else emptyList\">\n <c8y-li\n [ngClass]=\"{ disabled: updateType === 'install' && appsDisabled.has(app.id) }\"\n *ngFor=\"let app of filteredApps$ | async\"\n data-cy=\"apps-to-update-remotes-select--applications-list\"\n >\n <c8y-li-checkbox (onSelect)=\"setSelectedApps($event, app)\" data-cy=\"apps-to-update-remotes-select--app-checkbox\"></c8y-li-checkbox>\n <c8y-li-icon class=\"p-l-0 icon-32\">\n <c8y-app-icon\n class=\"list-group-icon\"\n [app]=\"app\"\n [contextPath]=\"app.contextPath\"\n [name]=\"app.name\"\n ></c8y-app-icon>\n </c8y-li-icon>\n <div class=\"d-flex\">\n <div class=\"p-r-8\">\n <p class=\"text-medium\" [innerText]=\"app | humanizeAppName | async\"></p>\n <p class=\"small text-muted\">{{ app.description }}</p>\n </div>\n <span class=\"label m-l-auto a-s-start\" [ngClass]=\"app | appState: 'class'\">\n {{ app | appState: 'label' | translate }}\n </span>\n </div>\n </c8y-li>\n </c8y-list-group>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ textConfig.applyButton | translate }}\"\n [disabled]=\"appsToUpdateRemotes.length === 0\"\n (click)=\"apply()\"\n >\n {{ textConfig.applyButton | translate }}\n </button>\n </div>\n</div>\n<ng-template #emptyList>\n <c8y-ui-empty-state\n [icon]=\"'c8y-modules'\"\n [title]=\"'No custom applications available.' | translate\"\n *ngIf=\"updateType !== 'install'\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container *ngIf=\"updateType === 'install'\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-modules'\"\n [title]=\"'No custom applications available.' | translate\"\n [subtitle]=\"'Create a custom application by duplicating an existing one.' | translate\"\n [horizontal]=\"true\"\n >\n <button\n class=\"btn btn-sm btn-default m-t-8\"\n title=\"{{ 'Duplicate' | translate }}\"\n (click)=\"duplicateApp()\"\n >\n {{ 'Duplicate' | translate }}\n </button>\n </c8y-ui-empty-state>\n </ng-container>\n</ng-template>\n","import { inject, Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ApplicationPlugin,\n GainsightService,\n HumanizeAppNamePipe,\n PluginsService\n} from '@c8y/ngx-components';\nimport { UpdateType } from './apps-to-update-remotes-select.model';\nimport { ApplicationType, IApplication } from '@c8y/client';\nimport { AppsToUpdateRemotesSelectComponent } from './apps-to-update-remotes-select.component';\nimport { firstValueFrom } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\nimport { pick } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport {\n EcosystemService,\n PRODUCT_EXPERIENCE_ECOSYSTEM\n} from '@c8y/ngx-components/ecosystem/shared';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PluginListService {\n CURRENT_LOCATION = location.href;\n updatingPluginId: Record<UpdateType, string> = { install: '', uninstall: '' };\n private appsDisabled: Set<IApplication['id']> = new Set<IApplication['id']>();\n\n private gainsightService = inject(GainsightService);\n private pluginsService = inject(PluginsService);\n private alertService = inject(AlertService);\n private ecosystemService = inject(EcosystemService);\n private humanizeAppNamePipe = inject(HumanizeAppNamePipe);\n private translateService = inject(TranslateService);\n private bsModalService = inject(BsModalService);\n\n async updateAppRemotes(\n plugin: ApplicationPlugin,\n updateType: UpdateType,\n pluginPackage: IApplication\n ) {\n this.updatingPluginId[updateType] = plugin?.id;\n let initialState: Pick<\n AppsToUpdateRemotesSelectComponent,\n 'apps' | 'updateType' | 'pluginName' | 'appsDisabled'\n >;\n try {\n const apps = await this.getAppsForUpdate(plugin, updateType);\n\n initialState = {\n apps,\n updateType,\n pluginName: plugin.name,\n appsDisabled: this.appsDisabled\n };\n } catch (e) {\n this.alertService.addServerFailure(e);\n this.updatingPluginId[updateType] = '';\n return;\n }\n\n let selectedApps: IApplication[];\n try {\n selectedApps = await this.selectApps(initialState);\n if (!selectedApps) {\n this.updatingPluginId[updateType] = '';\n return;\n }\n } catch {\n // unreached\n }\n\n if (updateType === 'install') {\n const isArchived = await this.ecosystemService.verifyArchived([plugin]);\n if (!isArchived) {\n this.updatingPluginId[updateType] = '';\n return;\n }\n\n const licensesVerifiedByUser = await this.ecosystemService.verifyLicenses([plugin]);\n if (!licensesVerifiedByUser) {\n this.updatingPluginId[updateType] = '';\n return;\n }\n }\n\n for (const app of selectedApps) {\n try {\n if (updateType === 'install') {\n const versionIsCompatible = await this.ecosystemService.verifyPluginVersionsCompatibility(\n [plugin],\n app\n );\n\n if (!versionIsCompatible) {\n continue;\n }\n }\n\n await this.handleRemotesUpdate(app, plugin, updateType, pluginPackage);\n const humanizedAppName = await firstValueFrom(this.humanizeAppNamePipe.transform(app));\n const successText =\n updateType === 'install'\n ? this.translateService.instant(\n gettext('Plugin installed to application \"{{ appName }}\".'),\n {\n appName: humanizedAppName\n }\n )\n : this.translateService.instant(\n gettext('Plugin uninstalled from application \"{{ appName }}\".'),\n { appName: humanizedAppName }\n );\n this.alertService.success(successText);\n this.onUpdateEventHandleGS(plugin, app, updateType);\n } catch (error) {\n this.onUpdateEventHandleGS(plugin, app, updateType, error);\n }\n }\n this.updatingPluginId[updateType] = '';\n }\n\n async getAppsForUpdate(plugin: ApplicationPlugin, updateType: UpdateType) {\n let apps = (await this.ecosystemService.getWebApplications()).filter(\n app => this.ecosystemService.isOwner(app) && app.type !== ApplicationType.EXTERNAL\n );\n\n if (updateType === 'install') {\n this.appsDisabled.clear();\n for (const app of apps) {\n if (this.isPluginInstalledInApp(plugin, app)) {\n this.appsDisabled.add(app.id);\n }\n }\n }\n\n if (updateType === 'uninstall') {\n const installedApps: IApplication[] = [];\n for (const app of apps) {\n if (this.isPluginInstalledInApp(plugin, app)) {\n installedApps.push(app);\n }\n }\n apps = installedApps;\n }\n return apps;\n }\n\n private onUpdateEventHandleGS(\n plugin: ApplicationPlugin,\n app: IApplication,\n updateType: UpdateType,\n error?: unknown\n ) {\n const pluginCustomEventInfo = pick(plugin, [\n 'name',\n 'contextPath',\n 'module',\n 'version',\n 'type',\n 'id'\n ] satisfies (keyof ApplicationPlugin)[]);\n\n const gsEventResult =\n updateType === 'install'\n ? PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_INSTALLED\n : PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_REMOVED;\n\n const eventData = {\n component: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.COMPONENTS.PLUGIN_LIST,\n result: error || gsEventResult,\n url: this.CURRENT_LOCATION,\n ...pluginCustomEventInfo,\n targetApplicationName: app.name,\n targetApplicationContextPath: app.contextPath,\n ...(error && { error })\n };\n\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.PACKAGE_PLUGINS,\n eventData\n );\n }\n\n private isPluginInstalledInApp(plugin: ApplicationPlugin, app: IApplication): boolean {\n const appRemotes = this.pluginsService.getMFRemotes(app) || {};\n\n for (const [remoteName, modules] of Object.entries(appRemotes)) {\n const pluginFromThisPackageIsInstalled =\n this.getPluginContextPathWithoutVersion(remoteName) === plugin.contextPath;\n const specificPluginModuleIsInstalled = modules.some(module => module === plugin.module);\n if (pluginFromThisPackageIsInstalled && specificPluginModuleIsInstalled) {\n return true;\n }\n }\n return false;\n }\n\n private getPluginContextPathWithoutVersion(remote: string) {\n return remote.split('@')[0];\n }\n\n private async handleRemotesUpdate(\n application: IApplication,\n plugin: ApplicationPlugin,\n updateType: UpdateType,\n pluginPackage: IApplication\n ) {\n try {\n // When remotes object is not set in the configuration object of an application.\n // Fallback to setInitialRemotes is triggered.\n const { remotes, excludedRemotes } = await (updateType === 'install'\n ? this.pluginsService.addRemotes(application, plugin)\n : this.pluginsService.removeRemotes(\n application,\n this.getAllPluginsToRemove(plugin, pluginPackage)\n ));\n if (!application.config) {\n application.config = {};\n }\n application.config.remotes = remotes;\n application.config.excludedRemotes = excludedRemotes;\n const actualRemotes = this.pluginsService.getMFRemotes(application);\n return actualRemotes;\n } catch (er) {\n if (er) {\n this.alertService.addServerFailure(er);\n }\n throw er;\n }\n }\n\n private getAllPluginsToRemove(\n plugin: ApplicationPlugin,\n pluginPackage: IApplication\n ): ApplicationPlugin[] {\n return pluginPackage.applicationVersions.map(av => ({\n id: `${plugin.contextPath}@${av.version}/${plugin.module}`,\n idLatest: `${plugin.contextPath}/${plugin.module}`,\n module: plugin.module,\n path: plugin.path\n }));\n }\n\n private async selectApps(\n initialState: Pick<\n AppsToUpdateRemotesSelectComponent,\n 'apps' | 'updateType' | 'pluginName' | 'appsDisabled'\n >\n ): Promise<IApplication[]> {\n try {\n return await (\n this.bsModalService.show(AppsToUpdateRemotesSelectComponent, {\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState,\n ignoreBackdropClick: true,\n keyboard: false\n }).content as AppsToUpdateRemotesSelectComponent\n ).result;\n } catch (er) {\n return;\n }\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n ApplicationPlugin,\n PackageType,\n PluginsService,\n ListItemCheckboxComponent,\n ListItemIconComponent,\n IconDirective,\n C8yTranslateDirective\n} from '@c8y/ngx-components';\nimport { NgIf, NgClass } from '@angular/common';\nimport { TranslatePackageLabelPipe } from '@c8y/ngx-components/ecosystem/shared';\n\n@Component({\n selector: 'c8y-plugin-list-item',\n templateUrl: './plugin-list-item.component.html',\n imports: [\n NgIf,\n ListItemCheckboxComponent,\n ListItemIconComponent,\n NgClass,\n IconDirective,\n C8yTranslateDirective,\n TranslatePackageLabelPipe\n ]\n})\nexport class PluginListItemComponent implements OnInit {\n @Input() plugin: ApplicationPlugin;\n @Input() selectable: boolean;\n @Input() hideSource = false;\n @Output() isItemSelected: EventEmitter<boolean> = new EventEmitter();\n\n packageType: PackageType = PackageType.UNKNOWN;\n\n readonly PACKAGE_TYPE = PackageType;\n\n constructor(private pluginService: PluginsService) {}\n\n ngOnInit() {\n this.packageType = this.pluginService.getPackageType(this.plugin.originApp);\n }\n\n onChange(event) {\n this.plugin.selected = !this.plugin.selected;\n this.isItemSelected.next(event);\n }\n}\n","<c8y-li-checkbox\n class=\"p-r-16 p-l-0\"\n (change)=\"onChange($event.target.checked)\"\n *ngIf=\"selectable\"\n [disabled]=\"plugin.installed\"\n [selected]=\"plugin.selected\"\n></c8y-li-checkbox>\n<c8y-li-icon class=\"p-l-0 text-center\">\n <i class=\"c8y-plugin-icon\">\n <span>{{ plugin.name?.substr(0, 2) }}</span>\n </i>\n</c8y-li-icon>\n<div class=\"p-relative flex-grow\">\n <div [ngClass]=\"{ 'p-r-8': selectable }\">\n <p>\n <span class=\"text-medium\">{{ plugin.name }}</span>\n <em class=\"text-muted small m-l-8\">{{ plugin.version }}</em>\n <span *ngIf=\"plugin.installed\">\n <i\n class=\"text-success\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <em\n class=\"text-muted small\"\n translate\n >\n Installed`plugins`\n </em>\n </span>\n </p>\n <p class=\"small l-h-tight\">{{ plugin.description }}</p>\n </div>\n\n <span\n class=\"tag tag--info a-s-start m-t-8\"\n *ngIf=\"selectable && !hideSource\"\n >\n {{ plugin.contextPath }}\n </span>\n\n <span\n class=\"tag a-s-start m-t-8 m-l-4\"\n [ngClass]=\"{\n 'tag--default': packageType === PACKAGE_TYPE.COMMUNITY,\n 'tag--primary': packageType === PACKAGE_TYPE.OFFICIAL\n }\"\n >\n {{ plugin.originApp?.label || plugin.originApp?.manifest?.label | translatePackageLabel }}\n </span>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IApplication } from '@c8y/client';\nimport {\n ApplicationPlugin,\n ListGroupComponent,\n ListItemComponent,\n IconDirective,\n C8yTranslateDirective,\n EmptyStateComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\n\nimport { Observable } from 'rxjs';\n\nimport { PluginListService } from './plugin-list.service';\nimport { UpdateType } from './apps-to-update-remotes-select.model';\nimport { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';\nimport { PluginListItemComponent } from './plugin-list-item.component';\n\n@Component({\n selector: 'c8y-plugin-list',\n templateUrl: './plugin-list.component.html',\n imports: [\n ListGroupComponent,\n NgIf,\n NgFor,\n ListItemComponent,\n NgClass,\n PluginListItemComponent,\n IconDirective,\n C8yTranslateDirective,\n EmptyStateComponent,\n C8yTranslatePipe,\n AsyncPipe\n ]\n})\nexport class PluginListComponent {\n CURRENT_LOCATION = location.href;\n\n @Input() plugins$: Observable<ApplicationPlugin[]>;\n @Input() emptyListText = '';\n @Input() selectable: boolean;\n @Input() hideSource = false;\n /**\n * Shows the install button for each plugin separately. Currently used in package-details view.\n */\n @Input() installable = false;\n @Input() package: IApplication;\n @Input() selectedPlugin: ApplicationPlugin;\n @Output() selectedItems: EventEmitter<ApplicationPlugin[]> = new EventEmitter();\n @Output() showOverview = new EventEmitter<ApplicationPlugin>();\n selectedPlugins: { [key: string]: ApplicationPlugin } = {};\n updatingPluginId: Record<UpdateType, string>;\n\n constructor(private pluginListService: PluginListService) {\n this.updatingPluginId = this.pluginListService.updatingPluginId;\n }\n\n updateSelectedItems(selected: boolean, plugin: ApplicationPlugin) {\n this.selectedPlugins[plugin.id] = selected ? plugin : undefined;\n const onlyInstalledPlugins = Object.values(this.selectedPlugins).filter(Boolean);\n this.selectedItems.emit(onlyInstalledPlugins);\n }\n\n showPluginOverview(plugin: ApplicationPlugin): void {\n if (plugin?.id === this.selectedPlugin?.id) {\n return;\n }\n this.showOverview.emit(plugin);\n }\n\n async installPlugin(plugin: ApplicationPlugin) {\n await this.pluginListService.updateAppRemotes(plugin, 'install', this.package);\n }\n\n async uninstallPlugin(plugin: ApplicationPlugin) {\n await this.pluginListService.updateAppRemotes(plugin, 'uninstall', this.package);\n }\n}\n","<c8y-list-group class=\"bg-inherit\">\n <ng-container *ngIf=\"(plugins$ | async)?.length !== 0; else emptyList\">\n <ng-container *ngFor=\"let plugin of plugins$ | async\">\n <c8y-li\n [ngClass]=\"{\n disabled: plugin.installed,\n selected: selectedPlugin?.id === plugin?.id\n }\"\n >\n <div class=\"d-flex fit-w\">\n <ng-container *ngIf=\"plugin.readmePath\">\n <button\n class=\"c8y-list__item__btn d-flex fit-w gap-4\"\n title=\"{{ 'Details' | translate }}\"\n (click)=\"showPluginOverview(plugin)\"\n >\n <c8y-plugin-list-item\n class=\"d-contents\"\n (isItemSelected)=\"updateSelectedItems($event, plugin)\"\n [plugin]=\"plugin\"\n [selectable]=\"selectable\"\n [hideSource]=\"hideSource\"\n ></c8y-plugin-list-item>\n <i\n class=\"icon-24 m-l-auto a-s-center\"\n c8yIcon=\"forward\"\n ></i>\n </button>\n </ng-container>\n <ng-container *ngIf=\"!plugin.readmePath\">\n <c8y-plugin-list-item\n class=\"d-contents\"\n (isItemSelected)=\"updateSelectedItems($event, plugin)\"\n [plugin]=\"plugin\"\n [selectable]=\"selectable\"\n [hideSource]=\"hideSource\"\n ></c8y-plugin-list-item>\n </ng-container>\n </div>\n <div class=\"p-l-40 m-t-4 d-flex flex-wrap gap-8\">\n <button\n class=\"btn btn-danger btn-sm\"\n title=\"{{ 'Uninstall plugin' | translate }}\"\n *ngIf=\"installable\"\n (click)=\"uninstallPlugin(plugin)\"\n [ngClass]=\"{ 'btn-pending': plugin.id === updatingPluginId.uninstall }\"\n [disabled]=\"updatingPluginId.uninstall && plugin.id === updatingPluginId.uninstall\"\n data-cy=\"plugin-list--uninstall-plugin-button\"\n translate\n >\n Uninstall plugin\n </button>\n <button\n class=\"btn btn-default btn-sm m-0\"\n title=\"{{ 'Install plugin' | translate }}\"\n *ngIf=\"installable\"\n (click)=\"installPlugin(plugin)\"\n [ngClass]=\"{ 'btn-pending': plugin.id === updatingPluginId.install }\"\n [disabled]=\"updatingPluginId.install && plugin.id === updatingPluginId.install\"\n data-cy=\"plugin-list--install-plugin-button\"\n translate\n >\n Install plugin\n </button>\n </div>\n </c8y-li>\n </ng-container>\n </ng-container>\n</c8y-list-group>\n<ng-template #emptyList>\n <c8y-ui-empty-state\n [icon]=\"'plugin'\"\n [title]=\"emptyListText | translate\"\n [horizontal]=\"true\"\n *ngIf=\"emptyListText\"\n ></c8y-ui-empty-state>\n</ng-template>\n","import { Component, Input } from '@angular/core';\nimport {\n ApplicationPlugin,\n BottomDrawerRef,\n PluginsService,\n C8yTranslateDirective,\n IconDirective,\n EmptyStateComponent,\n C8yTranslatePipe,\n MarkdownToHtmlPipe\n} from '@c8y/ngx-components';\nimport {\n defaultPackageTypes,\n EcosystemService,\n FilterableAppOrPlugin,\n FilterPipe,\n ListFiltersComponent,\n ArchivedFilterComponent\n} from '@c8y/ngx-components/ecosystem/shared';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\nimport { OnlyLatestFilterComponent } from './only-latest-filter/only-latest-filter.component';\nimport { PluginListComponent } from './plugin-list.component';\nimport { NgIf, AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-install-plugin',\n host: { class: 'd-contents' },\n templateUrl: './install-plugin.component.html',\n imports: [\n C8yTranslateDirective,\n ListFiltersComponent,\n ArchivedFilterComponent,\n OnlyLatestFilterComponent,\n PluginListComponent,\n NgIf,\n IconDirective,\n EmptyStateComponent,\n C8yTranslatePipe,\n AsyncPipe,\n MarkdownToHtmlPipe\n ]\n})\nexport class InstallPluginComponent {\n @Input() plugins$: Observable<FilterableAppOrPlugin[]>;\n filteredPlugins$: Observable<FilterableAppOrPlugin[]> = new BehaviorSubject([]);\n selectedPlugins: ApplicationPlugin[] = [];\n packageTypes = defaultPackageTypes;\n result: Promise<ApplicationPlugin[]> = new Promise((resolve, reject) => {\n this._install = resolve;\n this._cancel = reject;\n });\n onlyLatestPluginVersion = true;\n selectedPlugin: ApplicationPlugin;\n pluginBaseUrl: string;\n pluginMarkdown: string;\n\n private _install;\n private _cancel;\n\n constructor(\n private bottomDrawerRef: BottomDrawerRef<InstallPluginComponent>,\n private ecosystemService: EcosystemService,\n private pluginsService: PluginsService\n ) {}\n\n setFilterPipe(filterPipe: FilterPipe) {\n this.filteredPlugins$ = this.plugins$.pipe(\n map(plugins =>\n plugins.map(plugin => {\n plugin.filterProps = this.ecosystemService.getAppFilterProps(plugin.originApp);\n return plugin;\n })\n ),\n src => filterPipe(src)\n );\n }\n\n cancel() {\n this.bottomDrawerRef.close();\n this._cancel();\n }\n\n install() {\n this._install(this.selectedPlugins);\n this.bottomDrawerRef.close();\n }\n\n async showPluginOverview(plugin: ApplicationPlugin) {\n this.selectedPlugin = plugin;\n const baseUrl = `/apps/${plugin.id}/`;\n this.pluginBaseUrl = baseUrl;\n this.pluginMarkdown = await this.pluginsService.getReadmeFileContent(baseUrl);\n }\n}\n"," <div class=\"card-header gap-8 d-col p-l-24 p-r-24 separator-bottom flex-no-shrink\">\n <div\n class=\"card-title h4 text-center\"\n translate\n >\n Available plugins\n </div>\n <c8y-list-filters\n (filterPipeChange)=\"setFilterPipe($event)\"\n [packageTypes]=\"packageTypes\"\n >\n <c8y-archived-filter></c8y-archived-filter>\n <c8y-only-latest-filter></c8y-only-latest-filter>\n </c8y-list-filters>\n </div>\n <div class=\"d-grid grid__col--5-7--md min-height-0 flex-grow\">\n <c8y-plugin-list\n class=\"inner-scroll bg-level-1\"\n (selectedItems)=\"selectedPlugins = $event\"\n [emptyListText]=\"'No matching plugins' | translate\"\n [plugins$]=\"filteredPlugins$\"\n [selectable]=\"true\"\n [selectedPlugin]=\"selectedPlugin\"\n (showOverview)=\"showPluginOverview($event)\"\n ></c8y-plugin-list>\n <div class=\"inner-scroll bg-component\">\n <div class=\"card-header separator sticky-top bg-inherit\"\n *ngIf=\"pluginMarkdown\">\n <button\n class=\"m-l-auto btn-clean\"\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n (click)=\"selectedPlugin = null; pluginMarkdown = null\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </div>\n <div class=\"card-block p-l-24 p-r-24\">\n <div\n class=\"markdown-content\"\n *ngIf=\"pluginMarkdown\"\n [innerHTML]=\"pluginMarkdown | markdownToHtml: { baseUrl: pluginBaseUrl } | async\"\n ></div>\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No plugin selected' | translate\"\n [subtitle]=\"\n 'Select a plugin from the list to view its documentation.' | translate\"\n *ngIf=\"!pluginMarkdown\"\n [horizontal]=\"true\"\n >\n <p>\n <small >\n {{ 'Documentation availability varies by plugin.' | translate }}\n </small>\n </p>\n </c8y-ui-empty-state>\n </div>\n </div>\n </div>\n <div class=\"text-center card-footer p-24 separator\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n data-cy=\"install-plugin--cancel-button\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Install' | translate }}\"\n type=\"button\"\n (click)=\"install()\"\n [disabled]=\"selectedPlugins.length === 0\"\n data-cy=\"install-plugin--install-button\"\n >\n {{ 'Install' | translate }}\n <span\n class=\"badge\"\n *ngIf=\"selectedPlugins.length as length\"\n >\n {{ length }}\n </span>\n </button>\n </div>\n\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-label-cell-renderer',\n templateUrl: './label-cell-renderer.component.html'\n})\nexport class LabelCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","<span class=\"label label-info\">{{ context.value }}</span>\n","import { Component } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ApplicationPluginStatus,\n CellRendererContext,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { NgIf, NgClass } from '@angular/common';\n\n@Component({\n selector: 'c8y-orphaned-status-cell-renderer',\n templateUrl: './orphaned-status-cell-renderer.component.html',\n imports: [NgIf, NgClass, C8yTranslatePipe]\n})\nexport class OrphanedStatusCellRendererComponent {\n label: { value: string; class: string; text: string } | null;\n constructor(public context: CellRendererContext) {\n this.label = this.getLabel(context.value);\n }\n\n private getLabel(statusValue: ApplicationPluginStatus): {\n value: string;\n class: string;\n text: string;\n } | null {\n switch (statusValue) {\n case ApplicationPluginStatus.OUTDATED:\n return {\n value: statusValue,\n text: gettext('OUTDATED`plugin status`'),\n class: 'label-warning'\n };\n case ApplicationPluginStatus.ORPHANED:\n return {\n value: statusValue,\n text: gettext('ORPHANED`plugin status`'),\n class: 'label-danger'\n };\n case ApplicationPluginStatus.REVOKED:\n return {\n value: statusValue,\n text: gettext('REVOKED`plugin status`'),\n class: 'label-danger'\n };\n case ApplicationPluginStatus.LATEST:\n return {\n value: statusValue,\n text: gettext('LATEST`plugin status`'),\n class: 'label-success'\n };\n case ApplicationPluginStatus.AUTO:\n return {\n value: statusValue,\n text: gettext('AUTO`plugin status`'),\n class: 'label-success'\n };\n default:\n return null;\n }\n }\n}\n","<span\n *ngIf=\"label\"\n class=\"label\"\n [ngClass]=\"label.class\"\n [title]=\"label.text | translate\"\n>\n {{ label.text | translate }}\n</span>\n","import { Component } from '@angular/core';\nimport { ApplicationRemotePlugins, IApplication, IApplicationVersion } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ApplicationPlugin,\n GainsightService,\n PluginsService,\n IconDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { uniq } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport {\n EcosystemService,\n PRODUCT_EXPERIENCE_ECOSYSTEM,\n PackageVersionSelectComponent,\n PackageChangelogComponent\n} from '@c8y/ngx-components/ecosystem/shared';\nimport { NgIf } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'c8y-update-plugin-of-app',\n templateUrl: './update-plugin-of-app.component.html',\n imports: [\n IconDirective,\n NgIf,\n C8yTranslateDirective,\n PackageVersionSelectComponent,\n FormsModule,\n PackageChangelogComponent,\n C8yTranslatePipe\n ]\n})\nexport class UpdatePluginOfAppComponent {\n CURRENT_LOCATION = location.href;\n\n app: IApplication;\n plugin: ApplicationPlugin;\n downgrade: boolean;\n result: Promise<void> = new Promise((resolve, reject) => {\n this._install = resolve;\n this._cancel = reject;\n });\n applicationVersion: IApplicationVersion;\n updateAll = true;\n\n private _install: () => void;\n private _cancel: (reason?: any) => void;\n\n constructor(\n private bsModalRef: BsModalRef,\n private pluginsService: PluginsService,\n private alert: AlertService,\n private ecosystemService: EcosystemService,\n private gainsightService: GainsightService\n ) {}\n\n async update() {\n const remotes = this.pluginsService.getMFRemotes(this.app);\n const oldRemotePath = `${this.plugin.contextPath}@${this.plugin.version}`;\n const newRemotePath = `${this.plugin.contextPath}@${this.applicationVersion.version}`;\n let oldRemoteModules = [...(remotes[oldRemotePath] || [])];\n if (!oldRemoteModules.length) {\n this.alert.warning(gettext('Could not change the version of plugin.'));\n this.cancel();\n return;\n }\n\n const isArchived = await this.ecosystemService.verifyArchived([this.plugin]);\n if (!isArchived) {\n this.alert.warning(gettext('Plugin update aborted by user.'));\n this.cancel();\n return;\n }\n\n const result = await this.ecosystemService.verifyLicenses([this.plugin]);\n if (!result) {\n this.alert.warning(gettext('Plugin update aborted by user.'));\n this.cancel();\n return;\n }\n\n let remoteModulesOfNewVersion = [...(remotes[newRemotePath] || [])];\n let olderVersions: ApplicationRemotePlugins = {};\n if (this.updateAll) {\n olderVersions = Object.keys(remotes)\n .filter(key => key.startsWith(`${this.plugin.contextPath}@`))\n .reduceRight((prev, curr) => {\n prev[curr] = undefined;\n return prev;\n }, {});\n\n oldRemoteModules = Object.keys(olderVersions)\n .map(version => remotes[version])\n .reduceRight((prev, curr) => {\n prev.push(...curr);\n return prev;\n }, []);\n remoteModulesOfNewVersion.push(...oldRemoteModules);\n } else {\n remoteModulesOfNewVersion.push(this.plugin.module);\n olderVersions[oldRemotePath] = oldRemoteModules.filter(\n module => module !== this.plugin.module\n );\n if (!olderVersions[oldRemotePath].length) {\n olderVersions[oldRemotePath] = undefined;\n }\n }\n\n remoteModulesOfNewVersion = uniq(remoteModulesOfNewVersion);\n const newRemotes: ApplicationRemotePlugins = {\n ...remotes,\n ...olderVersions,\n [newRemotePath]: remoteModulesOfNewVersion\n };\n\n try {\n await this.pluginsService.updateRemotesInAppConfig(this.app, newRemotes);\n this.alert.success(gettext(`Switched the version of plugin.`));\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.INSTALLED_PLUGINS,\n {\n component: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.COMPONENTS.UPDATE_PLUGIN_OF_APP,\n action: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.ACTIONS.CHANGE_PLUGIN_VERSION,\n result: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_VERSION_CHANGED,\n url: this.CURRENT_LOCATION\n }\n );\n } catch (e) {\n this.alert.addServerFailure(e);\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.INSTALLED_PLUGINS,\n {\n component: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.COMPONENTS.UPDATE_PLUGIN_OF_APP,\n action: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.ACTIONS.CHANGE_PLUGIN_VERSION,\n result: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.SERVER_FAILURE,\n url: this.CURRENT_LOCATION\n }\n );\n }\n\n this.bsModalRef.hide();\n this._install();\n }\n\n cancel() {\n this.bsModalRef.hide();\n this._cancel();\n }\n}\n","<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'installing-updates'\"></i>\n <h4\n id=\"modal-title\"\n *ngIf=\"!downgrade\"\n translate\n >\n Update plugin\n </h4>\n <h4\n id=\"modal-title\"\n *ngIf=\"downgrade\"\n translate\n >\n Downgrade plugin\n </h4>\n </div>\n <div\n class=\"inner-scroll\"\n id=\"modal-body\"\n >\n <div class=\"card-block p-r-24 p-l-24 sticky-top bg-component separator-bottom\">\n <c8y-package-version-select\n [packageContextPath]=\"plugin?.contextPath\"\n [(ngModel)]=\"applicationVersion\"\n ></c8y-package-version-select>\n <div\n class=\"alert alert-info\"\n role=\"alert\"\n *ngIf=\"plugin?.version && plugin.version === applicationVersion?.version\"\n >\n <span\n translate\n ngNonBindable\n [translateParams]=\"applicationVersion\"\n >\n Select another version, as {{ version }} is currently used.\n </span>\n </div>\n <div class=\"form-group\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"updateAll\"\n />\n <span></span>\n <span\n translate\n ngNonBindable\n [translateParams]=\"plugin\"\n >\n Set version for all plugins using the same context path \"{{ contextPath }}\".\n </span>\n </label>\n </div>\n <p class=\"legend form-block\">\n {{ 'Change log' | translate }}\n </p>\n </div>\n <div class=\"card-block p-l-24 p-r-24\">\n\n <div\n class=\"markdown-content markdown-content--to-h3\"\n >\n <c8y-contents-changelog\n [package]=\"plugin.originApp\"\n [selectedVersion]=\"applicationVersion?.version\"\n [previousVersion]=\"plugin?.version\"\n ></c8y-contents-changelog>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Set version' | translate }}\"\n [disabled]=\"!applicationVersion || plugin?.version === applicationVersion?.version\"\n (click)=\"update()\"\n >\n {{ 'Set version' | translate }}\n </button>\n </div>\n</div>","import { Component, inject, OnInit } from '@angular/core';\nimport {\n ApplicationPlugin,\n BottomDrawerRef,\n PluginsService,\n EmptyStateComponent,\n C8yTranslatePipe,\n MarkdownToHtmlPipe\n} from '@c8y/ngx-components';\nimport { NgIf, AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-application-plugin-readme',\n host: { class: 'd-contents' },\n templateUrl: './application-plugin-readme.component.html',\n imports: [NgIf, EmptyStateComponent, C8yTranslatePipe, AsyncPipe, MarkdownToHtmlPipe]\n})\nexport class ApplicationPluginReadmeComponent implements OnInit {\n pluginMarkdown: string;\n pluginBaseUrl: string;\n plugin: ApplicationPlugin;\n\n private bottomDrawerRef = inject(BottomDrawerRef);\n private pluginsService = inject(PluginsService);\n\n async ngOnInit() {\n const baseUrl = `/apps/${this.plugin.id}/`;\n this.pluginBaseUrl = baseUrl;\n this.pluginMarkdown = await this.pluginsService.getReadmeFileContent(baseUrl);\n }\n\n close() {\n this.bottomDrawerRef.close();\n }\n}\n","<div class=\"card-header gap-8 d-col p-l-24 p-r-24 separator-bottom flex-no-shrink\">\n <span class=\"card-title h4 text-center\">\n {{ plugin.name }}\n </span>\n</div>\n<div class=\"inner-scroll flex-grow\">\n <div\n class=\"markdown-content col-lg-8 p-24 m-l-auto m-r-auto\"\n style=\"float: none\"\n *ngIf=\"pluginMarkdown\"\n [innerHTML]=\"pluginMarkdown | markdownToHtml: { baseUrl: pluginBaseUrl } | async\"\n ></div>\n <div class=\"d-flex\">\n <c8y-ui-empty-state\n class=\"col-lg-3 col-sm-4 m-l-auto m-r-auto\"\n [icon]=\"'user-manual'\"\n [title]=\"'No README.md found for plugin' | translate\"\n [subtitle]=\"\n 'To view the contents of &quot;README&quot;, add the file &quot;README.md&quot; to the plugin.'\n | translate\n \"\n *ngIf=\"!pluginMarkdown\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n</div>\n<div class=\"text-center card-footer p-24 separator\">\n <button\n class=\"btn btn-default\"\n (click)=\"close()\"\n >\n {{ 'Close' | translate }}\n </button>\n</div>\n","import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ApplicationRemotePlugins, IApplication } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ActionControl,\n AlertService,\n ApplicationPlugin,\n ApplicationPluginStatus,\n BulkActionControl,\n Column,\n DataGridComponent,\n DisplayOptions,\n GainsightService,\n HeaderActionControl,\n Pagination,\n PluginsConfig,\n PluginsService,\n PluginsExportScopes,\n BottomDrawerService,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n EmptyStateContextDirective,\n EmptyStateComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n HumanizeAppNamePipe\n} from '@c8y/ngx-components';\nimport {\n EcosystemService,\n PRODUCT_EXPERIENCE_ECOSYSTEM\n} from '@c8y/ngx-components/ecosystem/shared';\nimport { pick } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, combineLatest, firstValueFrom, Observable, Subject } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\nimport { InstallPluginComponent } from './install-plugin.component';\nimport { LabelCellRendererComponent } from './label-cell-renderer.component';\nimport { OrphanedStatusCellRendererComponent } from './orphaned-status-cell-renderer.component';\nimport { UpdatePluginOfAppComponent } from './update-plugin-of-app/update-plugin-of-app.component';\nimport { ApplicationPluginReadmeComponent } from './application-plugin-readme.component';\nimport { NgIf, NgClass, AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-app-plugins',\n templateUrl: './application-plugins.component.html',\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n NgIf,\n ActionBarItemComponent,\n NgClass,\n IconDirective,\n DataGridComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n AsyncPipe,\n HumanizeAppNamePipe\n ]\n})\nexport class ApplicationPluginsComponent implements OnInit, OnDestroy {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_ECOSYSTEM;\n CURRENT_LOCATION = location.href;\n\n @Input() appId: string | number;\n @ViewChild(DataGridComponent, { static: false })\n dataGrid: DataGridComponent;\n\n remotePlugins$: BehaviorSubject<ApplicationRemotePlugins> = new BehaviorSubject({});\n allAvailablePlugins$: BehaviorSubject<ApplicationPlugin[]> = new BehaviorSubject([]);\n selfPlugins$: BehaviorSubject<ApplicationPlugin[]> = new BehaviorSubject([]);\n\n installedPlugins$: Observable<ApplicationPlugin[]> = combineLatest([\n this.remotePlugins$.pipe(map(remotes => PluginsService.convertInstalledRemotesToIds(remotes))),\n this.allAvailablePlugins$\n ]).pipe(\n map(([remotePlugins, allPlugins]) => this.getInstalledPlugins(allPlugins, remotePlugins)),\n shareReplay(1)\n );\n orphanedPlugins$ = this.installedPlugins$.pipe(\n map(plugins => plugins.filter(p => p.status === ApplicationPluginStatus.ORPHANED))\n );\n // only use the installedPlugins$ and selfPlugins$ as triggers\n isStandard$ = combineLatest([this.installedPlugins$, this.selfPlugins$]).pipe(\n map(() => this.isStandard(this.app))\n );\n app: IApplication;\n isLoading: boolean;\n title: string = gettext('Installed plugins');\n loadMoreItemsLabel: string = gettext('Load more packages');\n loadingItemsLabel: string = gettext('Loading packages…');\n actionControls: ActionControl[] = this.getActionControls();\n bulkActionControls: BulkActionControl[] = this.getBulkActionControls();\n headerActionControls: HeaderActionControl[] = [];\n noResultsMessage = gettext('No plugins to display.');\n noDataMessage = gettext('No plugins installed.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n noDataSubtitle = gettext(\"This application doesn't have any plugin. Click below to install.\");\n pagination: Pagination = {\n pageSize: 10,\n currentPage: 1\n };\n displayOptions: DisplayOptions = {\n bordered: false,\n striped: true,\n filter: true,\n gridHeader: true,\n hover: true\n };\n columns: Column[] = [\n {\n name: 'name',\n header: gettext('Plugin name'),\n path: 'name',\n filterable: true\n },\n {\n name: 'Version',\n header: gettext('Version'),\n path: 'version',\n filterable: false\n },\n {\n name: 'Tag',\n header: gettext('Tag`noun`'),\n path: 'installedViaTag',\n filterable: false,\n cellRendererComponent: LabelCellRendererComponent\n },\n {\n name: 'description',\n header: gettext('Description'),\n path: 'description',\n filterable: false,\n cellCSSClassName: 'small'\n },\n {\n name: 'contextPath',\n header: gettext('Source'),\n path: 'contextPath',\n filterable: false,\n cellRendererComponent: LabelCellRendererComponent\n },\n {\n name: 'scope',\n header: gettext('Scope'),\n path: 'scope',\n filterable: false,\n visible: false,\n cellRendererComponent: LabelCellRendererComponent\n },\n {\n name: 'status',\n header: gettext('Status'),\n path: 'status',\n filterable: false,\n cellRendererComponent: OrphanedStatusCellRendererComponent\n }\n ];\n private destroy$: Subject<void> = new Subject();\n\n constructor(\n private activatedRoute: ActivatedRoute,\n private ecosystemService: EcosystemService,\n private bsModalService: BsModalService,\n private pluginsService: PluginsService,\n private alertService: AlertService,\n private gainsightService: GainsightService,\n private bottomDrawerService: BottomDrawerService\n ) {}\n\n ngOnInit() {\n this.addInstallButtonToHeaderActionControls();\n this.loadData();\n }\n\n async loadData() {\n this.isLoading = true;\n await this.getApplicationMO();\n await this.getApplicationMFRemotes(this.app);\n await this.getAllApplicationsMFExports(this.app);\n await this.getAllSelfMFExports(this.app);\n this.isLoading = false;\n }\n\n async resetToDefault() {\n this.isLoading = true;\n await this.pluginsService.resetRemotes(this.app);\n await this.loadData();\n this.alertService.success(gettext('The application was reset to its default plugins.'));\n }\n\n async installPlugins() {\n let currentPlugin: ApplicationPlugin | null = null;\n\n try {\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.INSTALLED_PLUGINS,\n {\n component: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.COMPONENTS.APPLICATION_PLUGINS,\n action: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.ACTIONS.INSTALL_PLUGINS_INITIATED,\n url: this.CURRENT_LOCATION,\n targetApplicationName: this.app.name,\n targetApplicationContextPath: this.app.contextPath\n }\n );\n\n const drawer = this.bottomDrawerService.openDrawer<InstallPluginComponent>(\n InstallPluginComponent,\n {\n initialState: this.getInstallModalInitState(),\n closeOnNavigation: true\n }\n );\n\n const pluginsToAdd: ApplicationPlugin[] = await drawer.instance.result;\n\n const isArchived = await this.ecosystemService.verifyArchived(pluginsToAdd);\n if (!isArchived) {\n return;\n }\n\n const licensesVerifiedByUser = await this.ecosystemService.verifyLicenses(pluginsToAdd);\n if (!licensesVerifiedByUser) {\n return;\n }\n const verifyVersionCompatibility =\n await this.ecosystemService.verifyPluginVersionsCompatibility(pluginsToAdd, this.app);\n\n if (!verifyVersionCompatibility) {\n return;\n }\n\n this.isLoading = true;\n await this.handleRemotesInstallation(pluginsToAdd);\n\n this.alertService.success(gettext('Plugins installed.'));\n pluginsToAdd.forEach(plugin => {\n currentPlugin = plugin;\n\n this.triggerPluginEvent(\n plugin,\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_INSTALLED\n );\n });\n } catch (ex) {\n if (ex) {\n this.alertService.addServerFailure(ex);\n this.triggerPluginEvent(\n currentPlugin,\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.SERVER_FAILURE\n );\n }\n } finally {\n this.isLoading = false;\n }\n }\n\n async removePlugins(plugins: string[]) {\n let currentPlugin: ApplicationPlugin | null = null;\n\n try {\n this.isLoading = true;\n const installedPlugins: ApplicationPlugin[] = await firstValueFrom(this.installedPlugins$);\n const pluginsToRemove: ApplicationPlugin[] = installedPlugins.filter(p =>\n plugins.includes(p.id)\n );\n const updatedRemotes = await this.pluginsService.removeRemotes(\n this.app,\n plugins.map(id => installedPlugins.find(p => p.id === id))\n );\n this.emitRemotes(updatedRemotes);\n\n this.isLoading = false;\n this.dataGrid.cancel();\n this.alertService.success(gettext('Plugins removed.'));\n\n pluginsToRemove.forEach(plugin => {\n currentPlugin = plugin;\n\n this.triggerPluginEvent(\n plugin,\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_REMOVED\n );\n });\n } catch (ex) {\n if (ex) {\n this.alertService.addServerFailure(ex);\n this.triggerPluginEvent(\n currentPlugin,\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.SERVER_FAILURE\n );\n }\n } finally {\n this.isLoading = false;\n }\n }\n\n async cleanupOrphanedPlugins(plugins: ApplicationPlugin[]) {\n const pluginIds = plugins.map(p => p.id);\n await this.removePlugins(pluginIds);\n }\n\n getActionControls(): ActionControl[] {\n return [\n {\n type: 'showReadme',\n text: gettext('Show readme'),\n icon: 'documents',\n showIf: (plugin: ApplicationPlugin) => {\n return !!plugin.readmePath;\n },\n callback: plugin => this.showPluginReadme(plugin as ApplicationPlugin)\n },\n {\n type: 'customUpdate',\n text: gettext('Update'),\n icon: 'installing-updates',\n showIf: plugin => {\n return (\n plugin.status === ApplicationPluginStatus.OUTDATED ||\n plugin.status === ApplicationPluginStatus.REVOKED\n );\n },\n callback: plugin => this.updatePlugin(this.app, plugin as ApplicationPlugin)\n },\n {\n type: 'customDowngrade',\n text: gettext('Downgrade'),\n icon: 'installing-updates',\n showIf: (plugin: ApplicationPlugin) => {\n if (\n plugin.scope === PluginsExportScopes.SELF ||\n plugin.scope === PluginsExportScopes.SELF_OPTIONAL\n ) {\n return false;\n }\n return plugin.status === ApplicationPluginStatus.LATEST;\n },\n callback: plugin => this.updatePlugin(this.app, plugin as ApplicationPlugin, true)\n }\n ];\n }\n\n showPluginReadme(plugin: ApplicationPlugin): void {\n this.bottomDrawerService.openDrawer(ApplicationPluginReadmeComponent, {\n initialState: { plugin },\n closeOnNavigation: true\n });\n }\n\n getBulkActionControls(): BulkActionControl[] {\n return [\n {\n type: 'customDelete',\n text: gettext('Remove'),\n icon: 'trash',\n callback: plugins => this.removePlugins(plugins)\n }\n ];\n }\n\n async updatePlugin(app: IApplication, plugin: ApplicationPlugin, downgrade = false) {\n try {\n await (\n this.bsModalService.show(UpdatePluginOfAppComponent, {\n class: 'modal-md',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState: {\n app,\n plugin,\n downgrade\n },\n ignoreBackdropClick: true\n }).content as UpdatePluginOfAppComponent\n ).result;\n this.refresh();\n } catch (er) {\n return;\n }\n }\n\n refresh() {\n this.loadData();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n isStandard(app: IApplication): boolean {\n return (\n // ensure that every remote from the manifest is in the config\n this.everyRemoteFromManifestIsInConfig(app) &&\n // should not have any excluded remotes\n Object.keys(app?.config?.excludedRemotes || {}).length === 0 &&\n // ensure that every remote from the config is in the manifest\n this.everyRemoteFromConfigIsInManifest(app)\n );\n }\n\n private everyRemoteFromManifestIsInConfig(app?: IApplication): boolean {\n const manifestRemotes = app?.manifest?.remotes;\n const configRemotes = app?.config?.remotes;\n\n if (!manifestRemotes || !configRemotes) {\n return true;\n }\n\n return Object.keys(manifestRemotes).every(contextPath => {\n return (\n Array.isArray(configRemotes[contextPath]) &&\n Array.isArray(manifestRemotes[contextPath]) &&\n manifestRemotes[contextPath].every(module => {\n return configRemotes[contextPath].includes(module);\n })\n );\n });\n }\n\n private everyRemoteFromConfigIsInManifest(app?: IApplication) {\n const manifestRemotes = app?.manifest?.remotes || {};\n const configRemotes = app?.config?.remotes;\n\n if (!configRemotes) {\n return true;\n }\n\n return Object.keys(configRemotes).every(contextPath => {\n return (\n Array.isArray(configRemotes[contextPath]) &&\n Array.isArray(manifestRemotes[contextPath]) &&\n configRemotes[contextPath].every(module => {\n return manifestRemotes[contextPath].includes(module);\n })\n );\n });\n }\n\n private addInstallButtonToHeaderActionControls() {\n if (this.appId) {\n this.headerActionControls = [\n {\n text: gettext('Install plugins'),\n callback: () => {\n this.installPlugins();\n },\n icon: 'plus-circle',\n type: 'custom'\n }\n ];\n }\n }\n\n private async handleRemotesInstallation(plugins: ApplicationPlugin[]) {\n const updatedRemotes = await this.pluginsService.addRemotes(this.app, plugins);\n return this.emitRemotes(updatedRemotes);\n }\n\n private emitRemotes(pluginsConfig: PluginsConfig) {\n const { remotes, excludedRemotes } = pluginsConfig;\n\n // needed for first time adding/removing a plugin\n if (!this.app.config) {\n this.app.config = {};\n }\n\n this.app.config.remotes = remotes;\n this.app.config.excludedRemotes = excludedRemotes;\n const actualRemotes = this.pluginsService.getMFRemotes(this.app);\n this.remotePlugins$.next(actualRemotes);\n return { ...this.remotePlugins$.value };\n }\n\n private async getApplicationMO(): Promise<IApplication> {\n let id = this.appId;\n if (!id) {\n const { id: routeId } = this.activatedRoute.snapshot.parent.data.contextData;\n id = routeId;\n }\n\n try {\n this.app = await this.ecosystemService.getApplication(id);\n } catch (er) {\n if (er) {\n this.alertService.addServerFailure(er);\n }\n }\n return this.app;\n }\n\n private async getApplicationMFExports(app: IApplication) {\n const applicationExports = this.pluginsService.getMFExports(app, [], true);\n return applicationExports;\n }\n\n private async getApplicationMFRemotes(app: IApplication) {\n const appConfigRemotes = this.pluginsService.getMFRemotes(app);\n this.remotePlugins$.next(appConfigRemotes || {});\n }\n\n private async getAllApplicationsMFExports(app: IApplication) {\n const exportedByCurrentApp = await this.getApplicationMFExports(app);\n const allAppsMFExports = await this.pluginsService.getAllMFExports(true);\n this.allAvailablePlugins$.next([...allAppsMFExports, ...exportedByCurrentApp]);\n }\n\n private async getAllSelfMFExports(app: IApplication) {\n const exportedByCurrentApp = await this.getApplicationMFExports(app);\n this.selfPlugins$.next(exportedByCurrentApp.filter(({ scope }) => scope === 'self'));\n }\n\n private getInstallModalInitState(): any {\n return {\n plugins$: combineLatest([this.allAvailablePlugins$, this.installedPlugins$]).pipe(\n map(([allPlugins, installedPlugins]) => {\n // to not mutate the original array and objects contained in it\n const allPluginsAsNewObjects = allPlugins.map(p => ({ ...p }));\n\n for (const plugin of installedPlugins) {\n let installedPlugin = allPluginsAsNewObjects.find(p => p.id === plugin.id);\n\n if (!installedPlugin && plugin.installedViaTag) {\n installedPlugin = allPluginsAsNewObjects.find(\n p =>\n p.contextPath === plugin.contextPath &&\n p.module === plugin.module &&\n p.tags?.includes(plugin.installedViaTag as string)\n );\n }\n\n if (installedPlugin) {\n installedPlugin.installed = true;\n continue;\n }\n }\n\n return allPluginsAsNewObjects.map(p => ({ ...p, installed: !!p.installed }));\n }),\n shareReplay(1)\n )\n };\n }\n\n private getOrphanedPlugins(\n orphanedPluginIds: string[],\n allPlugins: ApplicationPlugin[]\n ): ApplicationPlugin[] {\n const orphanedPlugins: ApplicationPlugin[] = orphanedPluginIds.map(p => this.extractDetails(p));\n const orphanedPluginsUpdated = orphanedPlugins.map(p => {\n const pluginWithMatchingTag = allPlugins.find(\n tmp =>\n tmp.contextPath === p.contextPath &&\n tmp.module === p.module &&\n tmp.tags?.includes(p.version || 'latest')\n );\n if (pluginWithMatchingTag) {\n return {\n ...pluginWithMatchingTag,\n id: p.id,\n status: ApplicationPluginStatus.AUTO,\n installedViaTag: p.version || 'latest'\n };\n }\n const pluginInDifferentVersion = allPlugins.find(\n tmp => tmp.contextPath === p.contextPath && tmp.module === p.module\n );\n if (pluginInDifferentVersion) {\n return {\n ...pluginInDifferentVersion,\n version: p.version,\n id: p.id,\n status: ApplicationPluginStatus.OUTDATED\n };\n }\n return p;\n });\n\n return orphanedPluginsUpdated;\n }\n\n private splitOrphanedPluginsIntoOrphanedAndRevokedPlugins(\n allPlugins: ApplicationPlugin[],\n orphanedPlugins: ApplicationPlugin[]\n ) {\n const revokedPlugins = new Array<ApplicationPlugin>();\n const actuallyOrphanedPlugins = new Array<ApplicationPlugin>();\n\n for (const plugin of orphanedPlugins) {\n const foundFamiliarPlugin = allPlugins.find(\n plugin1 => plugin.contextPath === plugin1.contextPath && plugin.module === plugin1.module\n );\n if (foundFamiliarPlugin) {\n revokedPlugins.push(\n Object.assign({}, foundFamiliarPlugin, plugin, {\n status: ApplicationPluginStatus.REVOKED\n })\n );\n } else {\n actuallyOrphanedPlugins.push(plugin);\n }\n }\n\n return { revokedPlugins, actuallyOrphanedPlugins };\n }\n\n private getInstalledPlugins(\n allPlugins: ApplicationPlugin[],\n remotePlugins: string[]\n ): ApplicationPlugin[] {\n const availablePlugins = allPlugins\n .filter(plugin => remotePlugins.includes(plugin.id))\n .map(plugin =>\n Object.assign(plugin, {\n status: plugin.tags?.includes('latest')\n ? ApplicationPluginStatus.LATEST\n : ApplicationPluginStatus.OUTDATED\n })\n );\n const orphanedPluginIds = remotePlugins.filter(\n r => !availablePlugins.find(plugin => plugin.id === r)\n );\n const orphanedPlugins: ApplicationPlugin[] = this.getOrphanedPlugins(\n orphanedPluginIds,\n allPlugins\n );\n\n const notActuallyOrphanedPlugins = orphanedPlugins.filter(\n p => p.status === ApplicationPluginStatus.AUTO\n );\n\n const orphanedOrRevokedPlugins = orphanedPlugins.filter(\n p => p.status !== ApplicationPluginStatus.AUTO\n );\n\n const { actuallyOrphanedPlugins, revokedPlugins } =\n this.splitOrphanedPluginsIntoOrphanedAndRevokedPlugins(allPlugins, orphanedOrRevokedPlugins);\n\n return [\n ...availablePlugins,\n ...notActuallyOrphanedPlugins,\n ...revokedPlugins,\n ...actuallyOrphanedPlugins\n ];\n }\n\n private extractDetails(pluginId: string): ApplicationPlugin {\n const contextPath = this.getStringMatchingRegex(pluginId, /^[^@]*(@|\\/)/);\n const version = this.getStringMatchingRegex(pluginId, /@.*\\//);\n const module = this.getStringMatchingRegex(pluginId, /\\/.*$/);\n const unavailable = gettext('unavailable`plugin`');\n return {\n id: pluginId,\n idLatest: `${contextPath}/${module}`,\n path: '',\n module,\n name: module,\n status: ApplicationPluginStatus.ORPHANED,\n contextPath: contextPath,\n description: unavailable,\n version: version\n };\n }\n\n private getStringMatchingRegex(\n str: string,\n regex: { [Symbol.match](string: string): RegExpMatchArray | null }\n ): string {\n const matches = str.match(regex);\n const value = matches ? matches[0] : '';\n\n return value.replace(/(@|\\/)/g, '');\n }\n\n private triggerPluginEvent(plugin: ApplicationPlugin, result: string): void {\n const pluginInfo = pick(plugin, [\n 'name',\n 'contextPath',\n 'module',\n 'version',\n 'type',\n 'id'\n ] satisfies (keyof ApplicationPlugin)[]);\n\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.INSTALLED_PLUGINS,\n {\n component: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.COMPONENTS.APPLICATION_PLUGINS,\n result,\n url: this.CURRENT_LOCATION,\n ...pluginInfo,\n targetApplicationName: this.app.name,\n targetApplicationContextPath: this.app.contextPath\n }\n );\n }\n}\n","<c8y-title>{{ app | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-atom'\"\n [label]=\"'Ecosystem' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/application/applications'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"app | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Plugins' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"!(isStandard$ | async)\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset to default plugins' | translate }}\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n (click)=\"resetToDefault()\"\n >\n <i c8yIcon=\"undo\"></i>\n {{ 'Reset to default' | 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=\"{{ 'Install plugins' | translate }}\"\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Install plugins' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<ng-container *ngIf=\"orphanedPlugins$ | async as orphanedPlugins\">\n <c8y-action-bar-item\n *ngIf=\"orphanedPlugins?.length\"\n [placement]=\"'right'\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Clean up orphaned plugins' | translate }}\"\n (click)=\"cleanupOrphanedPlugins(orphanedPlugins)\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n >\n <i c8yIcon=\"erase\"></i>\n {{ 'Clean up orphaned plugins' | translate }}\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n class=\"d-contents\"\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"installedPlugins$ | async\"\n [pagination]=\"pagination\"\n [selectable]=\"true\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n [headerActionControls]=\"headerActionControls\"\n (onReload)=\"refresh()\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'plugin'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <p *ngIf=\"stats?.size === 0\">\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Install plugins' | translate }}\"\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n translate\n >\n Install plugins\n </button>\n </p>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ApplicationType, IApplication } from '@c8y/client';\nimport { EcosystemService } from '@c8y/ngx-components/ecosystem/shared';\n\n@Injectable()\nexport class ApplicationPluginsGuard {\n constructor(private ecosystemService: EcosystemService) {}\n\n canActivate(route: ActivatedRouteSnapshot) {\n const app: IApplication = route.data.contextData || route.parent.data.contextData;\n if (!app) {\n return false;\n }\n const manifest = app.manifest;\n if (!manifest) {\n return false;\n }\n return (\n app.type === ApplicationType.HOSTED &&\n this.ecosystemService.isOwner(app) &&\n !this.ecosystemService.isPackage(app) &&\n // apps like e.g. the public-options should not have the plugins tab\n !manifest.noAppSwitcher\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { SharedEcosystemModule } from '@c8y/ngx-components/ecosystem/shared';\nimport { ApplicationPluginsComponent } from './application-plugins.component';\nimport { UpdatePluginOfAppComponent } from './update-plugin-of-app/update-plugin-of-app.component';\nimport { AppStatePipe } from './appState.pipe';\nimport { AppsToUpdateRemotesSelectComponent } from './apps-to-update-remotes-select.component';\nimport { InstallPluginComponent } from './install-plugin.component';\nimport { OrphanedStatusCellRendererComponent } from './orphaned-status-cell-renderer.component';\nimport { PluginListItemComponent } from './plugin-list-item.component';\nimport { PluginListComponent } from './plugin-list.component';\nimport { LabelCellRendererComponent } from './label-cell-renderer.component';\nimport { ApplicationPluginsGuard } from './application-plugins.guard';\nimport { OnlyLatestFilterComponent } from './only-latest-filter/only-latest-filter.component';\nimport { ApplicationPluginReadmeComponent } from './application-plugin-readme.component';\n\n@NgModule({\n imports: [\n CoreModule,\n SharedEcosystemModule,\n ApplicationPluginsComponent,\n PluginListItemComponent,\n InstallPluginComponent,\n PluginListComponent,\n AppsToUpdateRemotesSelectComponent,\n AppStatePipe,\n LabelCellRendererComponent,\n OrphanedStatusCellRendererComponent,\n UpdatePluginOfAppComponent,\n OnlyLatestFilterComponent,\n ApplicationPluginReadmeComponent\n ],\n exports: [\n ApplicationPluginsComponent,\n PluginListItemComponent,\n InstallPluginComponent,\n PluginListComponent,\n AppsToUpdateRemotesSelectComponent,\n AppStatePipe,\n LabelCellRendererComponent,\n OrphanedStatusCellRendererComponent,\n UpdatePluginOfAppComponent,\n OnlyLatestFilterComponent\n ],\n providers: [\n ApplicationPluginsGuard,\n hookRoute([\n {\n path: 'plugins',\n component: ApplicationPluginsComponent,\n icon: 'plugin',\n label: gettext('Plugins'),\n context: ViewContext.Application,\n priority: 3,\n canActivate: [ApplicationPluginsGuard]\n }\n ])\n ]\n})\nexport class ApplicationPluginsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i1.PluginListService","map","i4"],"mappings":"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"}