@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
82 lines • 13.8 kB
JavaScript
import { AsyncPipe, NgIf } from '@angular/common';
import { Component, inject, Input } from '@angular/core';
import { C8yTranslatePipe, EmptyStateComponent, LoadingComponent, MarkdownToHtmlPipe, PluginsService } from '@c8y/ngx-components';
import { lt } from 'semver';
import * as i0 from "@angular/core";
/**
* Component to display the change log of a package.
* It fetches the change log file from the package's repository and displays it.
* It can fetch the change log for the latest version or a specific version if provided.
* It can also compare the change log with the previous version if provided and display the difference between the two versions.
*/
export class PackageChangelogComponent {
constructor() {
this.selectedVersion = 'latest';
this.previousVersion = null;
this.isLoading = true;
this.pluginsService = inject(PluginsService);
}
async ngOnChanges() {
if (!this.package) {
this.changelog = '';
this.isLoading = false;
return;
}
this.isLoading = true;
this.changelog = await this.getChangeLog();
this.isLoading = false;
}
async getChangeLog() {
if (this.selectedVersion === this.previousVersion || !this.selectedVersion) {
return '';
}
const selectedVersionChangelogUrl = this.baseUrlForVersion(this.selectedVersion);
this.baseUrl = selectedVersionChangelogUrl;
if (!this.previousVersion) {
return await this.pluginsService.getChangelogFileContent(selectedVersionChangelogUrl);
}
const previousVersionChangelogUrl = this.baseUrlForVersion(this.previousVersion);
const changelogsPromises = [
this.pluginsService.getChangelogFileContent(previousVersionChangelogUrl),
this.pluginsService.getChangelogFileContent(selectedVersionChangelogUrl)
];
const [previousVersionChangelog, selectedVersionChangelog] = await Promise.all(changelogsPromises);
// Determine if this is a downgrade using semver comparison
let isDowngrade;
try {
isDowngrade = lt(this.selectedVersion, this.previousVersion);
}
catch {
isDowngrade = false;
}
if (isDowngrade) {
return previousVersionChangelog.replace(selectedVersionChangelog, '');
}
else {
return selectedVersionChangelog.replace(previousVersionChangelog, '');
}
}
baseUrlForVersion(version) {
return `/apps/${this.package.contextPath}@${version}/`;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageChangelogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PackageChangelogComponent, isStandalone: true, selector: "c8y-contents-changelog", inputs: { package: "package", selectedVersion: "selectedVersion", previousVersion: "previousVersion" }, usesOnChanges: true, ngImport: i0, template: "<c8y-loading *ngIf=\"isLoading\"></c8y-loading>\n\n<ng-container *ngIf=\"!isLoading\">\n <div\n *ngIf=\"changelog\"\n class=\"markdown-content markdown-content--to-h3\"\n [innerHTML]=\"changelog | markdownToHtml: { baseUrl } | async\"\n ></div>\n\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No CHANGELOG.md found for package version' | translate\"\n [subtitle]=\"\n 'To view the contents of "CHANGELOG", add the file "CHANGELOG.md" to the package.'\n | translate\n \"\n *ngIf=\"!changelog\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n</ng-container>\n", dependencies: [{ kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "pipe", type: MarkdownToHtmlPipe, name: "markdownToHtml" }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageChangelogComponent, decorators: [{
type: Component,
args: [{ selector: 'c8y-contents-changelog', standalone: true, imports: [
LoadingComponent,
MarkdownToHtmlPipe,
EmptyStateComponent,
AsyncPipe,
C8yTranslatePipe,
NgIf
], template: "<c8y-loading *ngIf=\"isLoading\"></c8y-loading>\n\n<ng-container *ngIf=\"!isLoading\">\n <div\n *ngIf=\"changelog\"\n class=\"markdown-content markdown-content--to-h3\"\n [innerHTML]=\"changelog | markdownToHtml: { baseUrl } | async\"\n ></div>\n\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No CHANGELOG.md found for package version' | translate\"\n [subtitle]=\"\n 'To view the contents of "CHANGELOG", add the file "CHANGELOG.md" to the package.'\n | translate\n \"\n *ngIf=\"!changelog\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n</ng-container>\n" }]
}], propDecorators: { package: [{
type: Input
}], selectedVersion: [{
type: Input
}], previousVersion: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1jaGFuZ2Vsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3NoYXJlZC9wYWNrYWdlLWNoYW5nZWxvZy9wYWNrYWdlLWNoYW5nZWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL3BhY2thZ2UtY2hhbmdlbG9nL3BhY2thZ2UtY2hhbmdlbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRXBFLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7QUFFNUI7Ozs7O0dBS0c7QUFjSCxNQUFNLE9BQU8seUJBQXlCO0lBYnRDO1FBZVcsb0JBQWUsR0FBRyxRQUFRLENBQUM7UUFDM0Isb0JBQWUsR0FBa0IsSUFBSSxDQUFDO1FBRy9DLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFFVCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztLQXFEakQ7SUFuREMsS0FBSyxDQUFDLFdBQVc7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVk7UUFDeEIsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0UsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxPQUFPLEdBQUcsMkJBQTJCLENBQUM7UUFFM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQixPQUFPLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCxNQUFNLDJCQUEyQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFakYsTUFBTSxrQkFBa0IsR0FBRztZQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLDJCQUEyQixDQUFDO1lBQ3hFLElBQUksQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsMkJBQTJCLENBQUM7U0FDekUsQ0FBQztRQUVGLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSx3QkFBd0IsQ0FBQyxHQUN4RCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV4QywyREFBMkQ7UUFDM0QsSUFBSSxXQUFvQixDQUFDO1FBQ3pCLElBQUksQ0FBQztZQUNILFdBQVcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsT0FBTyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE9BQWU7UUFDdkMsT0FBTyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sR0FBRyxDQUFDO0lBQ3pELENBQUM7K0dBNURVLHlCQUF5QjttR0FBekIseUJBQXlCLCtNQy9CdEMsaW9CQW9CQSw0Q0RHSSxnQkFBZ0IsOEZBQ2hCLGtCQUFrQix1REFDbEIsbUJBQW1CLCtHQUNuQixTQUFTLHlDQUNULGdCQUFnQixrREFDaEIsSUFBSTs7NEZBR0sseUJBQXlCO2tCQWJyQyxTQUFTOytCQUNFLHdCQUF3QixjQUV0QixJQUFJLFdBQ1A7d0JBQ1AsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLElBQUk7cUJBQ0w7OEJBR1EsT0FBTztzQkFBZixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUFwcGxpY2F0aW9uIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQzh5VHJhbnNsYXRlUGlwZSxcbiAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgTG9hZGluZ0NvbXBvbmVudCxcbiAgTWFya2Rvd25Ub0h0bWxQaXBlLFxuICBQbHVnaW5zU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGx0IH0gZnJvbSAnc2VtdmVyJztcblxuLyoqXG4gKiBDb21wb25lbnQgdG8gZGlzcGxheSB0aGUgY2hhbmdlIGxvZyBvZiBhIHBhY2thZ2UuXG4gKiBJdCBmZXRjaGVzIHRoZSBjaGFuZ2UgbG9nIGZpbGUgZnJvbSB0aGUgcGFja2FnZSdzIHJlcG9zaXRvcnkgYW5kIGRpc3BsYXlzIGl0LlxuICogSXQgY2FuIGZldGNoIHRoZSBjaGFuZ2UgbG9nIGZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb3IgYSBzcGVjaWZpYyB2ZXJzaW9uIGlmIHByb3ZpZGVkLlxuICogSXQgY2FuIGFsc28gY29tcGFyZSB0aGUgY2hhbmdlIGxvZyB3aXRoIHRoZSBwcmV2aW91cyB2ZXJzaW9uIGlmIHByb3ZpZGVkIGFuZCBkaXNwbGF5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byB2ZXJzaW9ucy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbnRlbnRzLWNoYW5nZWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWNrYWdlLWNoYW5nZWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBMb2FkaW5nQ29tcG9uZW50LFxuICAgIE1hcmtkb3duVG9IdG1sUGlwZSxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBDOHlUcmFuc2xhdGVQaXBlLFxuICAgIE5nSWZcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQYWNrYWdlQ2hhbmdlbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcGFja2FnZTogSUFwcGxpY2F0aW9uO1xuICBASW5wdXQoKSBzZWxlY3RlZFZlcnNpb24gPSAnbGF0ZXN0JztcbiAgQElucHV0KCkgcHJldmlvdXNWZXJzaW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgY2hhbmdlbG9nOiBzdHJpbmc7XG4gIGJhc2VVcmw6IHN0cmluZztcbiAgaXNMb2FkaW5nID0gdHJ1ZTtcblxuICBwcml2YXRlIHBsdWdpbnNTZXJ2aWNlID0gaW5qZWN0KFBsdWdpbnNTZXJ2aWNlKTtcblxuICBhc3luYyBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAoIXRoaXMucGFja2FnZSkge1xuICAgICAgdGhpcy5jaGFuZ2Vsb2cgPSAnJztcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmNoYW5nZWxvZyA9IGF3YWl0IHRoaXMuZ2V0Q2hhbmdlTG9nKCk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2hhbmdlTG9nKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRWZXJzaW9uID09PSB0aGlzLnByZXZpb3VzVmVyc2lvbiB8fCAhdGhpcy5zZWxlY3RlZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZFZlcnNpb25DaGFuZ2Vsb2dVcmwgPSB0aGlzLmJhc2VVcmxGb3JWZXJzaW9uKHRoaXMuc2VsZWN0ZWRWZXJzaW9uKTtcbiAgICB0aGlzLmJhc2VVcmwgPSBzZWxlY3RlZFZlcnNpb25DaGFuZ2Vsb2dVcmw7XG5cbiAgICBpZiAoIXRoaXMucHJldmlvdXNWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wbHVnaW5zU2VydmljZS5nZXRDaGFuZ2Vsb2dGaWxlQ29udGVudChzZWxlY3RlZFZlcnNpb25DaGFuZ2Vsb2dVcmwpO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzVmVyc2lvbkNoYW5nZWxvZ1VybCA9IHRoaXMuYmFzZVVybEZvclZlcnNpb24odGhpcy5wcmV2aW91c1ZlcnNpb24pO1xuXG4gICAgY29uc3QgY2hhbmdlbG9nc1Byb21pc2VzID0gW1xuICAgICAgdGhpcy5wbHVnaW5zU2VydmljZS5nZXRDaGFuZ2Vsb2dGaWxlQ29udGVudChwcmV2aW91c1ZlcnNpb25DaGFuZ2Vsb2dVcmwpLFxuICAgICAgdGhpcy5wbHVnaW5zU2VydmljZS5nZXRDaGFuZ2Vsb2dGaWxlQ29udGVudChzZWxlY3RlZFZlcnNpb25DaGFuZ2Vsb2dVcmwpXG4gICAgXTtcblxuICAgIGNvbnN0IFtwcmV2aW91c1ZlcnNpb25DaGFuZ2Vsb2csIHNlbGVjdGVkVmVyc2lvbkNoYW5nZWxvZ10gPVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2hhbmdlbG9nc1Byb21pc2VzKTtcblxuICAgIC8vIERldGVybWluZSBpZiB0aGlzIGlzIGEgZG93bmdyYWRlIHVzaW5nIHNlbXZlciBjb21wYXJpc29uXG4gICAgbGV0IGlzRG93bmdyYWRlOiBib29sZWFuO1xuICAgIHRyeSB7XG4gICAgICBpc0Rvd25ncmFkZSA9IGx0KHRoaXMuc2VsZWN0ZWRWZXJzaW9uLCB0aGlzLnByZXZpb3VzVmVyc2lvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICBpc0Rvd25ncmFkZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc0Rvd25ncmFkZSkge1xuICAgICAgcmV0dXJuIHByZXZpb3VzVmVyc2lvbkNoYW5nZWxvZy5yZXBsYWNlKHNlbGVjdGVkVmVyc2lvbkNoYW5nZWxvZywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRWZXJzaW9uQ2hhbmdlbG9nLnJlcGxhY2UocHJldmlvdXNWZXJzaW9uQ2hhbmdlbG9nLCAnJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBiYXNlVXJsRm9yVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgL2FwcHMvJHt0aGlzLnBhY2thZ2UuY29udGV4dFBhdGh9QCR7dmVyc2lvbn0vYDtcbiAgfVxufVxuIiwiPGM4eS1sb2FkaW5nICpuZ0lmPVwiaXNMb2FkaW5nXCI+PC9jOHktbG9hZGluZz5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiY2hhbmdlbG9nXCJcbiAgICBjbGFzcz1cIm1hcmtkb3duLWNvbnRlbnQgbWFya2Rvd24tY29udGVudC0tdG8taDNcIlxuICAgIFtpbm5lckhUTUxdPVwiY2hhbmdlbG9nIHwgbWFya2Rvd25Ub0h0bWw6IHsgYmFzZVVybCB9IHwgYXN5bmNcIlxuICA+PC9kaXY+XG5cbiAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgIFtpY29uXT1cIid1c2VyLW1hbnVhbCdcIlxuICAgIFt0aXRsZV09XCInTm8gQ0hBTkdFTE9HLm1kIGZvdW5kIGZvciBwYWNrYWdlIHZlcnNpb24nIHwgdHJhbnNsYXRlXCJcbiAgICBbc3VidGl0bGVdPVwiXG4gICAgICAnVG8gdmlldyB0aGUgY29udGVudHMgb2YgJnF1b3Q7Q0hBTkdFTE9HJnF1b3Q7LCBhZGQgdGhlIGZpbGUgJnF1b3Q7Q0hBTkdFTE9HLm1kJnF1b3Q7IHRvIHRoZSBwYWNrYWdlLidcbiAgICAgICAgfCB0cmFuc2xhdGVcbiAgICBcIlxuICAgICpuZ0lmPVwiIWNoYW5nZWxvZ1wiXG4gICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19