@c8y/ngx-components 1021.21.0 → 1021.22.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/alarms/alarm-details.component.d.ts +1 -3
- package/alarms/alarm-details.component.d.ts.map +1 -1
- package/alarms/alarm-info.component.d.ts +9 -14
- package/alarms/alarm-info.component.d.ts.map +1 -1
- package/alarms/alarms-date-filter.component.d.ts +23 -10
- package/alarms/alarms-date-filter.component.d.ts.map +1 -1
- package/alarms/alarms-type-filter.component.d.ts +21 -14
- package/alarms/alarms-type-filter.component.d.ts.map +1 -1
- package/alarms/alarms-view.service.d.ts +7 -0
- package/alarms/alarms-view.service.d.ts.map +1 -1
- package/alarms/alarms.component.d.ts.map +1 -1
- package/alarms/alarms.helper.d.ts +5 -0
- package/alarms/alarms.helper.d.ts.map +1 -0
- package/alarms/alarms.model.d.ts +1 -6
- package/alarms/alarms.model.d.ts.map +1 -1
- package/alarms/alarms.module.d.ts +1 -1
- package/alarms/alarms.module.d.ts.map +1 -1
- package/alarms/cockpit/index.d.ts.map +1 -1
- package/alarms/devicemanagement/index.d.ts.map +1 -1
- package/alarms/index.d.ts +6 -4
- package/alarms/index.d.ts.map +1 -1
- package/branding/shared/data/branding-tracking.service.d.ts +20 -0
- package/branding/shared/data/branding-tracking.service.d.ts.map +1 -0
- package/branding/shared/data/branding-version.service.d.ts.map +1 -1
- package/branding/shared/data/index.d.ts +1 -0
- package/branding/shared/data/index.d.ts.map +1 -1
- package/branding/shared/data/store-branding.service.d.ts +8 -1
- package/branding/shared/data/store-branding.service.d.ts.map +1 -1
- package/branding/shared/lazy/branding/branding.component.d.ts +3 -2
- package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
- package/branding/shared/lazy/branding-theme-form/branding-theme-form.component.d.ts.map +1 -1
- package/branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.d.ts.map +1 -1
- package/cockpit-config/cockpit-config.module.d.ts +1 -1
- package/cockpit-config/cockpit-config.module.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.service.d.ts +1 -1
- package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
- package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
- package/core/common/service-registry.model.d.ts +2 -1
- package/core/common/service-registry.model.d.ts.map +1 -1
- package/core/common/ui-state.service.d.ts +0 -1
- package/core/common/ui-state.service.d.ts.map +1 -1
- package/core/i18n/missing-translation-custom.handler.d.ts +1 -0
- package/core/i18n/missing-translation-custom.handler.d.ts.map +1 -1
- package/core/plugins/index.d.ts +1 -0
- package/core/plugins/index.d.ts.map +1 -1
- package/core/plugins/plugin-loaded.pipe.d.ts +12 -0
- package/core/plugins/plugin-loaded.pipe.d.ts.map +1 -0
- package/core/plugins/plugins-resolve.service.d.ts +4 -2
- package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
- package/core/plugins/plugins.model.d.ts +3 -1
- package/core/plugins/plugins.model.d.ts.map +1 -1
- package/core/plugins/plugins.service.d.ts +3 -0
- package/core/plugins/plugins.service.d.ts.map +1 -1
- package/core/router/context-route.component.d.ts +8 -3
- package/core/router/context-route.component.d.ts.map +1 -1
- package/core/router/context-route.service.d.ts +29 -3
- package/core/router/context-route.service.d.ts.map +1 -1
- package/core/router/router-tabs.resolver.d.ts +6 -3
- package/core/router/router-tabs.resolver.d.ts.map +1 -1
- package/core/router/router.model.d.ts +40 -3
- package/core/router/router.model.d.ts.map +1 -1
- package/core/router/router.module.d.ts +2 -1
- package/core/router/router.module.d.ts.map +1 -1
- package/core/router/router.service.d.ts +5 -4
- package/core/router/router.service.d.ts.map +1 -1
- package/core/router/scoped-context-route.service.d.ts +57 -0
- package/core/router/scoped-context-route.service.d.ts.map +1 -0
- package/core/router/view-context.service.d.ts +8 -18
- package/core/router/view-context.service.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.guard.d.ts.map +1 -1
- package/ecosystem/application-plugins/orphaned-status-cell-renderer.component.d.ts.map +1 -1
- package/esm2022/alarms/alarm-details.component.mjs +7 -9
- package/esm2022/alarms/alarm-info.component.mjs +23 -33
- package/esm2022/alarms/alarm-severity-to-label.pipe.mjs +2 -2
- package/esm2022/alarms/alarms-date-filter.component.mjs +94 -42
- package/esm2022/alarms/alarms-type-filter.component.mjs +102 -72
- package/esm2022/alarms/alarms-view.service.mjs +17 -3
- package/esm2022/alarms/alarms.component.mjs +12 -5
- package/esm2022/alarms/alarms.helper.mjs +32 -0
- package/esm2022/alarms/alarms.model.mjs +1 -1
- package/esm2022/alarms/alarms.module.mjs +7 -7
- package/esm2022/alarms/cockpit/index.mjs +13 -17
- package/esm2022/alarms/devicemanagement/index.mjs +15 -18
- package/esm2022/alarms/index.mjs +7 -5
- package/esm2022/branding/shared/data/branding-tracking.service.mjs +58 -0
- package/esm2022/branding/shared/data/branding-version.service.mjs +9 -5
- package/esm2022/branding/shared/data/index.mjs +2 -1
- package/esm2022/branding/shared/data/store-branding.service.mjs +15 -4
- package/esm2022/branding/shared/lazy/branding/branding.component.mjs +16 -12
- package/esm2022/branding/shared/lazy/branding-theme-form/branding-theme-form.component.mjs +5 -2
- package/esm2022/branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.mjs +2 -2
- package/esm2022/cockpit-config/cockpit-config.module.mjs +6 -3
- package/esm2022/cockpit-config/feature-config.component.mjs +5 -4
- package/esm2022/context-dashboard/context-dashboard.service.mjs +47 -13
- package/esm2022/core/bootstrap/bootstrap.component.mjs +4 -3
- package/esm2022/core/common/service-registry.model.mjs +1 -1
- package/esm2022/core/common/ui-state.service.mjs +1 -19
- package/esm2022/core/i18n/missing-translation-custom.handler.mjs +5 -1
- package/esm2022/core/i18n/translation-loader.service.mjs +2 -2
- package/esm2022/core/plugins/index.mjs +2 -1
- package/esm2022/core/plugins/plugin-loaded.pipe.mjs +26 -0
- package/esm2022/core/plugins/plugins-resolve.service.mjs +5 -1
- package/esm2022/core/plugins/plugins.model.mjs +2 -1
- package/esm2022/core/plugins/plugins.service.mjs +13 -5
- package/esm2022/core/router/context-route.component.mjs +23 -13
- package/esm2022/core/router/context-route.service.mjs +37 -5
- package/esm2022/core/router/router-tabs.resolver.mjs +66 -21
- package/esm2022/core/router/router.model.mjs +6 -1
- package/esm2022/core/router/router.module.mjs +20 -13
- package/esm2022/core/router/router.service.mjs +24 -10
- package/esm2022/core/router/scoped-context-route.service.mjs +157 -0
- package/esm2022/core/router/view-context.service.mjs +59 -16
- package/esm2022/core/tabs/tabs-outlet.component.mjs +3 -3
- package/esm2022/core/version/websdk-plugin-version.factory.mjs +2 -2
- package/esm2022/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.mjs +3 -3
- package/esm2022/ecosystem/activity-log/activity-log.component.mjs +3 -3
- package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +67 -23
- package/esm2022/ecosystem/application-plugins/application-plugins.guard.mjs +8 -2
- package/esm2022/ecosystem/application-plugins/orphaned-status-cell-renderer.component.mjs +7 -1
- package/esm2022/interval-picker/interval-picker.component.mjs +1 -1
- package/esm2022/interval-picker/interval-picker.model.mjs +1 -1
- package/esm2022/protocol-lwm2m/ng1/plugin-checker.service.mjs +5 -1
- package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +2 -1
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +73 -4
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +29 -5
- package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +7 -1
- package/esm2022/widgets/implementations/alarms/alarm-widget.service.mjs +12 -2
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +12 -16
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +14 -17
- package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +389 -268
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +76 -9
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +19 -12
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs +7 -5
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +46 -12
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -2
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +79 -23
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +81 -25
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs +4 -0
- package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +124 -15
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +489 -176
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/interval-picker/interval-picker.component.d.ts +2 -2
- package/interval-picker/interval-picker.component.d.ts.map +1 -1
- package/interval-picker/interval-picker.model.d.ts +5 -0
- package/interval-picker/interval-picker.model.d.ts.map +1 -1
- package/locales/de.po +431 -538
- package/locales/en.po +2 -889
- package/locales/en_US.po +2 -880
- package/locales/es.po +462 -540
- package/locales/fr.po +470 -549
- package/locales/ja_JP.po +405 -598
- package/locales/ko.po +649 -502
- package/locales/locales.pot +27 -12
- package/locales/nl.po +463 -541
- package/locales/pl.po +504 -554
- package/locales/pt_BR.po +466 -543
- package/locales/zh_CN.po +650 -498
- package/locales/zh_TW.po +650 -498
- package/package.json +1 -1
- package/protocol-lwm2m/ng1/plugin-checker.service.d.ts +4 -0
- package/protocol-lwm2m/ng1/plugin-checker.service.d.ts.map +1 -1
- package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +12 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +12 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +11 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-widget.service.d.ts.map +1 -1
|
@@ -95,11 +95,11 @@ class ActivityLogComponent {
|
|
|
95
95
|
this.isLoading = false;
|
|
96
96
|
}
|
|
97
97
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ActivityLogComponent, deps: [{ token: i1.EcosystemService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
98
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ActivityLogComponent, selector: "c8y-activity-log", inputs: { application: "application", hasAdminPermissions: "hasAdminPermissions" }, ngImport: i0, template: "<div class=\"inner-scroll bg-level-1 flex-grow\">\n <div class=\"card-block overflow-visible\">\n <c8y-list-group>\n <c8y-li-timeline *ngFor=\"let archive of archives\" [ngClass]=\"{ active: isActive(archive) }\">\n {{ archive.created | date: 'd MMM YYYY' }}\n {{ archive.created | date: 'shortTime' }}\n <c8y-li>\n <c8y-li-icon\n [icon]=\"checkIfLast(archive) ? 'flag-checkered' : 'file-zip-o'\"\n ></c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex a-i-start\">\n <div style=\"min-width: 0; flex: 1\">\n <span class=\"text-truncate-wrap\" title=\" {{ archive.description || archive.name }}\">\n {{ archive.description || archive.name }}\n </span>\n <small *ngIf=\"archive.description\" class=\"text-muted\">{{\n archive.description\n }}</small>\n </div>\n <i\n *ngIf=\"isLoading && toActivate(archive)\"\n [c8yIcon]=\"'circle-o-notch'\"\n class=\"icon-spin\"\n title=\"{{ 'Activating' | translate }}\"\n ></i>\n\n <span *ngIf=\"isActive(archive)\" class=\"label label-primary m-l-auto m-t-4\">{{\n 'Active' | translate\n }}</span>\n </div>\n </c8y-li-body>\n <c8y-li-action\n (click)=\"setActive(archive)\"\n *ngIf=\"hasAdminPermissions && !isLoading && !isActive(archive)\"\n icon=\"check-square-o\"\n >\n {{ 'Set as active`archive`' | translate }}\n </c8y-li-action>\n <c8y-li-action (click)=\"downloadArchive(archive)\" icon=\"download\">\n {{ 'Download`archive`' | translate }}\n </c8y-li-action>\n <c8y-li-action\n (click)=\"deleteArchive(archive)\"\n *ngIf=\"\n hasAdminPermissions &&\n archives.length > 1 &&\n !checkIfLast(archive) &&\n !isActive(archive)\n \"\n icon=\"delete\"\n >\n {{ 'Delete`archive`' | translate }}\n </c8y-li-action>\n <c8y-li-action\n (click)=\"reactivateArchive()\"\n *ngIf=\"hasAdminPermissions && canReactivate && isActive(archive)\"\n icon=\"undo\"\n >\n {{ 'Reactivate archive' | translate }}\n </c8y-li-action>\n </c8y-li>\n </c8y-li-timeline>\n </c8y-list-group>\n </div>\n</div>\n<div class=\"card-footer\" *ngIf=\"!isLoading && hasAdminPermissions\">\n <c8y-form-group class=\"m-auto\">\n <c8y-upload-archive [(application)]=\"application\" (refresh)=\"onRefresh()\"></c8y-upload-archive>\n </c8y-form-group>\n</div>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i2.ListItemTimelineComponent, selector: "c8y-list-item-timeline, c8y-li-timeline" }, { kind: "component", type: i1.UploadArchiveComponent, selector: "c8y-upload-archive", inputs: ["application", "uploadNewVersion", "preUploadCallback"], outputs: ["applicationChange", "refresh"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.DatePipe, name: "date" }] }); }
|
|
98
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ActivityLogComponent, selector: "c8y-activity-log", inputs: { application: "application", hasAdminPermissions: "hasAdminPermissions" }, ngImport: i0, template: "<div class=\"inner-scroll bg-level-1 flex-grow inner-scroll--md overflow-visible-sm overflow-visible-xs\">\n <div class=\"card-block overflow-visible\">\n <c8y-list-group>\n <c8y-li-timeline *ngFor=\"let archive of archives\" [ngClass]=\"{ active: isActive(archive) }\">\n {{ archive.created | date: 'd MMM YYYY' }}\n {{ archive.created | date: 'shortTime' }}\n <c8y-li>\n <c8y-li-icon\n [icon]=\"checkIfLast(archive) ? 'flag-checkered' : 'file-zip-o'\"\n ></c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex a-i-start\">\n <div style=\"min-width: 0; flex: 1\">\n <span class=\"text-truncate-wrap\" title=\" {{ archive.description || archive.name }}\">\n {{ archive.description || archive.name }}\n </span>\n <small *ngIf=\"archive.description\" class=\"text-muted\">{{\n archive.description\n }}</small>\n </div>\n <i\n *ngIf=\"isLoading && toActivate(archive)\"\n [c8yIcon]=\"'circle-o-notch'\"\n class=\"icon-spin\"\n title=\"{{ 'Activating' | translate }}\"\n ></i>\n\n <span *ngIf=\"isActive(archive)\" class=\"label label-primary m-l-auto m-t-4\">{{\n 'Active' | translate\n }}</span>\n </div>\n </c8y-li-body>\n <c8y-li-action\n (click)=\"setActive(archive)\"\n *ngIf=\"hasAdminPermissions && !isLoading && !isActive(archive)\"\n icon=\"check-square-o\"\n >\n {{ 'Set as active`archive`' | translate }}\n </c8y-li-action>\n <c8y-li-action (click)=\"downloadArchive(archive)\" icon=\"download\">\n {{ 'Download`archive`' | translate }}\n </c8y-li-action>\n <c8y-li-action\n (click)=\"deleteArchive(archive)\"\n *ngIf=\"\n hasAdminPermissions &&\n archives.length > 1 &&\n !checkIfLast(archive) &&\n !isActive(archive)\n \"\n icon=\"delete\"\n >\n {{ 'Delete`archive`' | translate }}\n </c8y-li-action>\n <c8y-li-action\n (click)=\"reactivateArchive()\"\n *ngIf=\"hasAdminPermissions && canReactivate && isActive(archive)\"\n icon=\"undo\"\n >\n {{ 'Reactivate archive' | translate }}\n </c8y-li-action>\n </c8y-li>\n </c8y-li-timeline>\n </c8y-list-group>\n </div>\n</div>\n<div class=\"card-footer\" *ngIf=\"!isLoading && hasAdminPermissions\">\n <c8y-form-group class=\"m-auto\">\n <c8y-upload-archive [(application)]=\"application\" (refresh)=\"onRefresh()\"></c8y-upload-archive>\n </c8y-form-group>\n</div>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i2.ListItemTimelineComponent, selector: "c8y-list-item-timeline, c8y-li-timeline" }, { kind: "component", type: i1.UploadArchiveComponent, selector: "c8y-upload-archive", inputs: ["application", "uploadNewVersion", "preUploadCallback"], outputs: ["applicationChange", "refresh"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.DatePipe, name: "date" }] }); }
|
|
99
99
|
}
|
|
100
100
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ActivityLogComponent, decorators: [{
|
|
101
101
|
type: Component,
|
|
102
|
-
args: [{ selector: 'c8y-activity-log', template: "<div class=\"inner-scroll bg-level-1 flex-grow\">\n <div class=\"card-block overflow-visible\">\n <c8y-list-group>\n <c8y-li-timeline *ngFor=\"let archive of archives\" [ngClass]=\"{ active: isActive(archive) }\">\n {{ archive.created | date: 'd MMM YYYY' }}\n {{ archive.created | date: 'shortTime' }}\n <c8y-li>\n <c8y-li-icon\n [icon]=\"checkIfLast(archive) ? 'flag-checkered' : 'file-zip-o'\"\n ></c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex a-i-start\">\n <div style=\"min-width: 0; flex: 1\">\n <span class=\"text-truncate-wrap\" title=\" {{ archive.description || archive.name }}\">\n {{ archive.description || archive.name }}\n </span>\n <small *ngIf=\"archive.description\" class=\"text-muted\">{{\n archive.description\n }}</small>\n </div>\n <i\n *ngIf=\"isLoading && toActivate(archive)\"\n [c8yIcon]=\"'circle-o-notch'\"\n class=\"icon-spin\"\n title=\"{{ 'Activating' | translate }}\"\n ></i>\n\n <span *ngIf=\"isActive(archive)\" class=\"label label-primary m-l-auto m-t-4\">{{\n 'Active' | translate\n }}</span>\n </div>\n </c8y-li-body>\n <c8y-li-action\n (click)=\"setActive(archive)\"\n *ngIf=\"hasAdminPermissions && !isLoading && !isActive(archive)\"\n icon=\"check-square-o\"\n >\n {{ 'Set as active`archive`' | translate }}\n </c8y-li-action>\n <c8y-li-action (click)=\"downloadArchive(archive)\" icon=\"download\">\n {{ 'Download`archive`' | translate }}\n </c8y-li-action>\n <c8y-li-action\n (click)=\"deleteArchive(archive)\"\n *ngIf=\"\n hasAdminPermissions &&\n archives.length > 1 &&\n !checkIfLast(archive) &&\n !isActive(archive)\n \"\n icon=\"delete\"\n >\n {{ 'Delete`archive`' | translate }}\n </c8y-li-action>\n <c8y-li-action\n (click)=\"reactivateArchive()\"\n *ngIf=\"hasAdminPermissions && canReactivate && isActive(archive)\"\n icon=\"undo\"\n >\n {{ 'Reactivate archive' | translate }}\n </c8y-li-action>\n </c8y-li>\n </c8y-li-timeline>\n </c8y-list-group>\n </div>\n</div>\n<div class=\"card-footer\" *ngIf=\"!isLoading && hasAdminPermissions\">\n <c8y-form-group class=\"m-auto\">\n <c8y-upload-archive [(application)]=\"application\" (refresh)=\"onRefresh()\"></c8y-upload-archive>\n </c8y-form-group>\n</div>\n" }]
|
|
102
|
+
args: [{ selector: 'c8y-activity-log', template: "<div class=\"inner-scroll bg-level-1 flex-grow inner-scroll--md overflow-visible-sm overflow-visible-xs\">\n <div class=\"card-block overflow-visible\">\n <c8y-list-group>\n <c8y-li-timeline *ngFor=\"let archive of archives\" [ngClass]=\"{ active: isActive(archive) }\">\n {{ archive.created | date: 'd MMM YYYY' }}\n {{ archive.created | date: 'shortTime' }}\n <c8y-li>\n <c8y-li-icon\n [icon]=\"checkIfLast(archive) ? 'flag-checkered' : 'file-zip-o'\"\n ></c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex a-i-start\">\n <div style=\"min-width: 0; flex: 1\">\n <span class=\"text-truncate-wrap\" title=\" {{ archive.description || archive.name }}\">\n {{ archive.description || archive.name }}\n </span>\n <small *ngIf=\"archive.description\" class=\"text-muted\">{{\n archive.description\n }}</small>\n </div>\n <i\n *ngIf=\"isLoading && toActivate(archive)\"\n [c8yIcon]=\"'circle-o-notch'\"\n class=\"icon-spin\"\n title=\"{{ 'Activating' | translate }}\"\n ></i>\n\n <span *ngIf=\"isActive(archive)\" class=\"label label-primary m-l-auto m-t-4\">{{\n 'Active' | translate\n }}</span>\n </div>\n </c8y-li-body>\n <c8y-li-action\n (click)=\"setActive(archive)\"\n *ngIf=\"hasAdminPermissions && !isLoading && !isActive(archive)\"\n icon=\"check-square-o\"\n >\n {{ 'Set as active`archive`' | translate }}\n </c8y-li-action>\n <c8y-li-action (click)=\"downloadArchive(archive)\" icon=\"download\">\n {{ 'Download`archive`' | translate }}\n </c8y-li-action>\n <c8y-li-action\n (click)=\"deleteArchive(archive)\"\n *ngIf=\"\n hasAdminPermissions &&\n archives.length > 1 &&\n !checkIfLast(archive) &&\n !isActive(archive)\n \"\n icon=\"delete\"\n >\n {{ 'Delete`archive`' | translate }}\n </c8y-li-action>\n <c8y-li-action\n (click)=\"reactivateArchive()\"\n *ngIf=\"hasAdminPermissions && canReactivate && isActive(archive)\"\n icon=\"undo\"\n >\n {{ 'Reactivate archive' | translate }}\n </c8y-li-action>\n </c8y-li>\n </c8y-li-timeline>\n </c8y-list-group>\n </div>\n</div>\n<div class=\"card-footer\" *ngIf=\"!isLoading && hasAdminPermissions\">\n <c8y-form-group class=\"m-auto\">\n <c8y-upload-archive [(application)]=\"application\" (refresh)=\"onRefresh()\"></c8y-upload-archive>\n </c8y-form-group>\n</div>\n" }]
|
|
103
103
|
}], ctorParameters: () => [{ type: i1.EcosystemService }, { type: i2.AlertService }], propDecorators: { application: [{
|
|
104
104
|
type: Input
|
|
105
105
|
}], hasAdminPermissions: [{
|
|
@@ -2230,6 +2230,12 @@ class OrphanedStatusCellRendererComponent {
|
|
|
2230
2230
|
text: gettext('LATEST`plugin status`'),
|
|
2231
2231
|
class: 'label-success'
|
|
2232
2232
|
};
|
|
2233
|
+
case ApplicationPluginStatus.AUTO:
|
|
2234
|
+
return {
|
|
2235
|
+
value: statusValue,
|
|
2236
|
+
text: gettext('AUTO`plugin status`'),
|
|
2237
|
+
class: 'label-success'
|
|
2238
|
+
};
|
|
2233
2239
|
default:
|
|
2234
2240
|
return null;
|
|
2235
2241
|
}
|
|
@@ -2354,8 +2360,25 @@ class ApplicationPluginsComponent {
|
|
|
2354
2360
|
this.allAvailablePlugins$
|
|
2355
2361
|
]).pipe(map(([remotePlugins, allPlugins]) => this.getInstalledPlugins(allPlugins, remotePlugins)), shareReplay(1));
|
|
2356
2362
|
this.orphanedPlugins$ = this.installedPlugins$.pipe(map(plugins => plugins.filter(p => p.status === ApplicationPluginStatus.ORPHANED)));
|
|
2357
|
-
this.isStandard$ = combineLatest([this.installedPlugins$, this.selfPlugins$]).pipe(map(([installedPlugins, selfPlugins]) =>
|
|
2358
|
-
|
|
2363
|
+
this.isStandard$ = combineLatest([this.installedPlugins$, this.selfPlugins$]).pipe(map(([installedPlugins, selfPlugins]) => {
|
|
2364
|
+
const manifestRemotes = this.app?.manifest?.remotes || {};
|
|
2365
|
+
// ensure that every installed plugin is a self plugin or a plugin from the manifest
|
|
2366
|
+
const allInstalledPluginsAreSelf = installedPlugins.every(p => selfPlugins.some(selfPlugin => selfPlugin.id === p.id) ||
|
|
2367
|
+
(Array.isArray(manifestRemotes[p.contextPath]) &&
|
|
2368
|
+
manifestRemotes[p.contextPath].includes(p.module)));
|
|
2369
|
+
// ensure that every self plugin is installed
|
|
2370
|
+
const allSelfPluginsAreInstalled = selfPlugins.every(selfPlugin => installedPlugins.some(p => p.id === selfPlugin.id));
|
|
2371
|
+
const configRemotes = this.app?.config?.remotes || {};
|
|
2372
|
+
// ensure that every remote from the manifest is in the config
|
|
2373
|
+
// if no config exists we are also all good
|
|
2374
|
+
const everyRemoteFromManifestIsInConfig = !this.app?.config?.remotes ||
|
|
2375
|
+
Object.keys(manifestRemotes).every(contextPath => Array.isArray(configRemotes[contextPath]) &&
|
|
2376
|
+
Array.isArray(manifestRemotes[contextPath]) &&
|
|
2377
|
+
manifestRemotes[contextPath].every(module => configRemotes[contextPath].includes(module)));
|
|
2378
|
+
return (allInstalledPluginsAreSelf &&
|
|
2379
|
+
allSelfPluginsAreInstalled &&
|
|
2380
|
+
everyRemoteFromManifestIsInConfig);
|
|
2381
|
+
}));
|
|
2359
2382
|
this.title = gettext('Installed plugins');
|
|
2360
2383
|
this.loadMoreItemsLabel = gettext('Load more packages');
|
|
2361
2384
|
this.loadingItemsLabel = gettext('Loading packages…');
|
|
@@ -2387,9 +2410,16 @@ class ApplicationPluginsComponent {
|
|
|
2387
2410
|
{
|
|
2388
2411
|
name: 'Version',
|
|
2389
2412
|
header: gettext('Version'),
|
|
2390
|
-
path: '
|
|
2413
|
+
path: 'version',
|
|
2391
2414
|
filterable: false
|
|
2392
2415
|
},
|
|
2416
|
+
{
|
|
2417
|
+
name: 'Tag',
|
|
2418
|
+
header: gettext('Tag`noun`'),
|
|
2419
|
+
path: 'installedViaTag',
|
|
2420
|
+
filterable: false,
|
|
2421
|
+
cellRendererComponent: LabelCellRendererComponent
|
|
2422
|
+
},
|
|
2393
2423
|
{
|
|
2394
2424
|
name: 'description',
|
|
2395
2425
|
header: gettext('Description'),
|
|
@@ -2436,7 +2466,7 @@ class ApplicationPluginsComponent {
|
|
|
2436
2466
|
}
|
|
2437
2467
|
async resetToDefault() {
|
|
2438
2468
|
this.isLoading = true;
|
|
2439
|
-
await this.pluginsService.
|
|
2469
|
+
await this.pluginsService.resetRemotes(this.app);
|
|
2440
2470
|
await this.loadData();
|
|
2441
2471
|
this.alertService.success(gettext('The application was reset to its default plugins.'));
|
|
2442
2472
|
}
|
|
@@ -2661,29 +2691,46 @@ class ApplicationPluginsComponent {
|
|
|
2661
2691
|
}
|
|
2662
2692
|
getInstallModalInitState() {
|
|
2663
2693
|
return {
|
|
2664
|
-
plugins$: combineLatest([
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2694
|
+
plugins$: combineLatest([this.allAvailablePlugins$, this.installedPlugins$]).pipe(map(([allPlugins, installedPlugins]) => {
|
|
2695
|
+
// to not mutate the original array and objects contained in it
|
|
2696
|
+
const allPluginsAsNewObjects = allPlugins.map(p => ({ ...p }));
|
|
2697
|
+
for (const plugin of installedPlugins) {
|
|
2698
|
+
let installedPlugin = allPluginsAsNewObjects.find(p => p.id === plugin.id);
|
|
2699
|
+
if (!installedPlugin && plugin.installedViaTag) {
|
|
2700
|
+
installedPlugin = allPluginsAsNewObjects.find(p => p.contextPath === plugin.contextPath &&
|
|
2701
|
+
p.module === plugin.module &&
|
|
2702
|
+
p.tags?.includes(plugin.installedViaTag));
|
|
2703
|
+
}
|
|
2704
|
+
if (installedPlugin) {
|
|
2705
|
+
installedPlugin.installed = true;
|
|
2706
|
+
continue;
|
|
2707
|
+
}
|
|
2708
|
+
}
|
|
2709
|
+
return allPluginsAsNewObjects.map(p => ({ ...p, installed: !!p.installed }));
|
|
2674
2710
|
}), shareReplay(1))
|
|
2675
2711
|
};
|
|
2676
2712
|
}
|
|
2677
2713
|
getOrphanedPlugins(orphanedPluginIds, allPlugins) {
|
|
2678
2714
|
const orphanedPlugins = orphanedPluginIds.map(p => this.extractDetails(p));
|
|
2679
2715
|
const orphanedPluginsUpdated = orphanedPlugins.map(p => {
|
|
2716
|
+
const pluginWithMatchingTag = allPlugins.find(tmp => tmp.contextPath === p.contextPath &&
|
|
2717
|
+
tmp.module === p.module &&
|
|
2718
|
+
tmp.tags?.includes(p.version || 'latest'));
|
|
2719
|
+
if (pluginWithMatchingTag) {
|
|
2720
|
+
return {
|
|
2721
|
+
...pluginWithMatchingTag,
|
|
2722
|
+
id: p.id,
|
|
2723
|
+
status: ApplicationPluginStatus.AUTO,
|
|
2724
|
+
installedViaTag: p.version || 'latest'
|
|
2725
|
+
};
|
|
2726
|
+
}
|
|
2680
2727
|
const pluginInDifferentVersion = allPlugins.find(tmp => tmp.contextPath === p.contextPath && tmp.module === p.module);
|
|
2681
2728
|
if (pluginInDifferentVersion) {
|
|
2682
2729
|
return {
|
|
2683
2730
|
...pluginInDifferentVersion,
|
|
2684
|
-
version: p.version
|
|
2731
|
+
version: p.version,
|
|
2685
2732
|
id: p.id,
|
|
2686
|
-
status:
|
|
2733
|
+
status: ApplicationPluginStatus.OUTDATED
|
|
2687
2734
|
};
|
|
2688
2735
|
}
|
|
2689
2736
|
return p;
|
|
@@ -2716,12 +2763,15 @@ class ApplicationPluginsComponent {
|
|
|
2716
2763
|
}));
|
|
2717
2764
|
const orphanedPluginIds = remotePlugins.filter(r => !availablePlugins.find(plugin => plugin.id === r));
|
|
2718
2765
|
const orphanedPlugins = this.getOrphanedPlugins(orphanedPluginIds, allPlugins);
|
|
2719
|
-
const
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2766
|
+
const notActuallyOrphanedPlugins = orphanedPlugins.filter(p => p.status === ApplicationPluginStatus.AUTO);
|
|
2767
|
+
const orphanedOrRevokedPlugins = orphanedPlugins.filter(p => p.status !== ApplicationPluginStatus.AUTO);
|
|
2768
|
+
const { actuallyOrphanedPlugins, revokedPlugins } = this.splitOrphanedPluginsIntoOrphanedAndRevokedPlugins(allPlugins, orphanedOrRevokedPlugins);
|
|
2769
|
+
return [
|
|
2770
|
+
...availablePlugins,
|
|
2771
|
+
...notActuallyOrphanedPlugins,
|
|
2772
|
+
...revokedPlugins,
|
|
2773
|
+
...actuallyOrphanedPlugins
|
|
2774
|
+
];
|
|
2725
2775
|
}
|
|
2726
2776
|
extractDetails(pluginId) {
|
|
2727
2777
|
const contextPath = this.getStringMatchingRegex(pluginId, /^[^@]*(@|\/)/);
|
|
@@ -2767,9 +2817,15 @@ class ApplicationPluginsGuard {
|
|
|
2767
2817
|
if (!app) {
|
|
2768
2818
|
return false;
|
|
2769
2819
|
}
|
|
2820
|
+
const manifest = app.manifest;
|
|
2821
|
+
if (!manifest) {
|
|
2822
|
+
return false;
|
|
2823
|
+
}
|
|
2770
2824
|
return (app.type === ApplicationType.HOSTED &&
|
|
2771
2825
|
this.ecosystemService.isOwner(app) &&
|
|
2772
|
-
!this.ecosystemService.isPackage(app)
|
|
2826
|
+
!this.ecosystemService.isPackage(app) &&
|
|
2827
|
+
// apps like e.g. the public-options should not have the plugins tab
|
|
2828
|
+
!manifest.noAppSwitcher);
|
|
2773
2829
|
}
|
|
2774
2830
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ApplicationPluginsGuard, deps: [{ token: i1.EcosystemService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2775
2831
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ApplicationPluginsGuard }); }
|