@alauda-fe/common
Version:
Alauda frontend team common codes.
75 lines • 14.7 kB
JavaScript
import { HttpClient } from '@angular/common/http';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, } from '@angular/core';
import { of, Subject, catchError, startWith, switchMap, takeUntil, map, } from 'rxjs';
import { API_GATEWAY, K8sUtilService, publishRef, } from '../../../../core/public-api';
import { ResourceListBase } from '../../base-list';
import { ResourceSelectContextService } from '../../context.service';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common/http";
import * as i2 from "../../context.service";
import * as i3 from "../../../../core/public-api";
export class ClusterListComponent extends ResourceListBase {
constructor(http, contextService, cdr, k8sUtil) {
super(cdr, k8sUtil, contextService);
this.http = http;
this.type = 'cluster';
this.clusters = [];
this.clusters$ = this.reload$$.pipe(startWith(null), switchMap(() => this.http.get(`${API_GATEWAY}/auth/v1/clusters`)), map(list => list.items), catchError(() => of([])), takeUntil(this.destroy$$), publishRef());
this.loadClusterInfo$$ = new Subject();
}
ngOnInit() {
this.clusters = this.contextService.cachedClusters;
this.setSelected();
this.clusters$.subscribe(clusters => {
this.clusters = this.mapResource(clusters);
this.setSelected();
this.loading = false;
this.forceLoading = false;
this.loadClusterInfo$$.next(clusters);
this.cdr.markForCheck();
});
}
setSelected() {
this.selectedCluster = this.clusters.find(c => c.name === this.value);
}
ngOnDestroy() {
this.destroy$$.next();
this.destroy$$.complete();
}
mapResource(list) {
return list.map(item => ({
name: this.k8sUtil.getName(item),
displayName: this.k8sUtil.getDisplayName(item),
status: this.getClusterStatus(item),
timestamp: item.metadata.creationTimestamp,
__origin: item,
}));
}
getClusterStatus(cluster) {
if (cluster?.status) {
const clusterStatus = cluster.status.conditions.find(condition => condition.type === 'ComponentNotHealthy');
if (clusterStatus) {
return clusterStatus.status.toLowerCase() === 'true'
? 'abnormal'
: 'normal';
}
}
return 'abnormal';
}
static { this.ɵfac = function ClusterListComponent_Factory(t) { return new (t || ClusterListComponent)(i0.ɵɵdirectiveInject(i1.HttpClient), i0.ɵɵdirectiveInject(i2.ResourceSelectContextService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.K8sUtilService)); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ClusterListComponent, selectors: [["acl-cluster-list"]], inputs: { value: "value" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 7, consts: [[3, "selectItem", "reload", "data", "fields", "context", "popupLite", "selectedUid", "type", "loading"]], template: function ClusterListComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "acl-resource-data-grid", 0);
i0.ɵɵlistener("selectItem", function ClusterListComponent_Template_acl_resource_data_grid_selectItem_0_listener($event) { return ctx.onSelect($event); })("reload", function ClusterListComponent_Template_acl_resource_data_grid_reload_0_listener() { return ctx.reload(); });
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵproperty("data", ctx.clusters)("fields", ctx.fields)("context", ctx.context)("popupLite", ctx.popupLite)("selectedUid", ctx.selectedCluster == null ? null : ctx.selectedCluster.__origin.metadata.uid)("type", ctx.type)("loading", ctx.forceLoading || !(ctx.clusters == null ? null : ctx.clusters.length) && ctx.loading);
} }, styles: ["[_nghost-%COMP%]{height:100%;display:flex;flex-direction:column;padding-top:20px}.filter[_ngcontent-%COMP%]{display:flex;border-bottom:1px solid rgb(var(--aui-color-n-8));padding-bottom:8px}.filter[_ngcontent-%COMP%] aui-form-item[_ngcontent-%COMP%] .aui-form-item{margin-bottom:0}.filter__project[_ngcontent-%COMP%]{margin-right:50px;padding-bottom:8px}.filter__project[_ngcontent-%COMP%] aui-select[_ngcontent-%COMP%]{width:240px}.filter__cluster[_ngcontent-%COMP%]{flex:1}.cluster-tags[_ngcontent-%COMP%] aui-check-tag[_ngcontent-%COMP%]{margin-bottom:8px;display:inline-flex}.cluster-tags[_ngcontent-%COMP%] aui-check-tag[_ngcontent-%COMP%] .aui-tag{border:none}.cluster-tags[_ngcontent-%COMP%] aui-check-tag[_ngcontent-%COMP%] .aui-tag--info{background-color:rgb(var(--aui-color-n-8))}"], changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClusterListComponent, [{
type: Component,
args: [{ selector: 'acl-cluster-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<acl-resource-data-grid\n [data]=\"clusters\"\n [fields]=\"fields\"\n [context]=\"context\"\n [popupLite]=\"popupLite\"\n (selectItem)=\"onSelect($event)\"\n [selectedUid]=\"selectedCluster?.__origin.metadata.uid\"\n [type]=\"type\"\n [loading]=\"forceLoading || (!clusters?.length && loading)\"\n (reload)=\"reload()\"\n></acl-resource-data-grid>\n", styles: [":host{height:100%;display:flex;flex-direction:column;padding-top:20px}.filter{display:flex;border-bottom:1px solid rgb(var(--aui-color-n-8));padding-bottom:8px}.filter aui-form-item ::ng-deep .aui-form-item{margin-bottom:0}.filter__project{margin-right:50px;padding-bottom:8px}.filter__project aui-select{width:240px}.filter__cluster{flex:1}.cluster-tags aui-check-tag{margin-bottom:8px;display:inline-flex}.cluster-tags aui-check-tag::ng-deep .aui-tag{border:none}.cluster-tags aui-check-tag::ng-deep .aui-tag--info{background-color:rgb(var(--aui-color-n-8))}\n"] }]
}], () => [{ type: i1.HttpClient }, { type: i2.ResourceSelectContextService }, { type: i0.ChangeDetectorRef }, { type: i3.K8sUtilService }], { value: [{
type: Input
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ClusterListComponent, { className: "ClusterListComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2J1c2luZXNzL3Jlc291cmNlLXNlbGVjdC9leHBvcnRzL2NsdXN0ZXItbGlzdC9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvYnVzaW5lc3MvcmVzb3VyY2Utc2VsZWN0L2V4cG9ydHMvY2x1c3Rlci1saXN0L3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLEVBQUUsRUFDRixPQUFPLEVBQ1AsVUFBVSxFQUNWLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFHTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7OztBQVNyRSxNQUFNLE9BQU8sb0JBQ1gsU0FBUSxnQkFBZ0I7SUEyQnhCLFlBQ21CLElBQWdCLEVBQ2pDLGNBQTRDLEVBQzVDLEdBQXNCLEVBQ3RCLE9BQXVCO1FBRXZCLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBTG5CLFNBQUksR0FBSixJQUFJLENBQVk7UUF0Qm5DLFNBQUksR0FBRyxTQUFrQixDQUFDO1FBSTFCLGFBQVEsR0FBc0IsRUFBRSxDQUFDO1FBRWpDLGNBQVMsR0FB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QUlyQixZQUFRLElBQUM7WUFDcEIsaUJBQXlCOztZQUZ4QixBQURBLEFBREEsQUFGQSxBQURBLEFBREEsQUFEQSxtQ0FBaUIsc0JBQ0Esd0JBQ0UsNEJBQ0ksK0ZBRStCLGtCQUN6QyxvR0FDNkM7OztpRkQ0Qi9DLG9CQUFvQjtjQU5oQyxTQUFTOzJCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNO21KQU8vQyxLQUFLO2tCQURKLEtBQUs7O2tGQUpLLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIG9mLFxuICBTdWJqZWN0LFxuICBjYXRjaEVycm9yLFxuICBzdGFydFdpdGgsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICBtYXAsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBDbHVzdGVyLFxuICBLdWJlcm5ldGVzUmVzb3VyY2VMaXN0LFxuICBBUElfR0FURVdBWSxcbiAgSzhzVXRpbFNlcnZpY2UsXG4gIHB1Ymxpc2hSZWYsXG59IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBSZXNvdXJjZUxpc3RCYXNlIH0gZnJvbSAnLi4vLi4vYmFzZS1saXN0JztcbmltcG9ydCB7IFJlc291cmNlU2VsZWN0Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2x1c3RlckRhdGFJdGVtIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtY2x1c3Rlci1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdHlsZS5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDbHVzdGVyTGlzdENvbXBvbmVudFxuICBleHRlbmRzIFJlc291cmNlTGlzdEJhc2VcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKVxuICB2YWx1ZTogc3RyaW5nO1xuXG4gIHR5cGUgPSAnY2x1c3RlcicgYXMgY29uc3Q7XG5cbiAgc2VsZWN0ZWRDbHVzdGVyOiBDbHVzdGVyRGF0YUl0ZW07XG5cbiAgY2x1c3RlcnM6IENsdXN0ZXJEYXRhSXRlbVtdID0gW107XG5cbiAgY2x1c3RlcnMkID0gdGhpcy5yZWxvYWQkJC5waXBlKFxuICAgIHN0YXJ0V2l0aChudWxsIGFzIHZvaWQpLFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5odHRwLmdldDxLdWJlcm5ldGVzUmVzb3VyY2VMaXN0PENsdXN0ZXI+PihcbiAgICAgICAgYCR7QVBJX0dBVEVXQVl9L2F1dGgvdjEvY2x1c3RlcnNgLFxuICAgICAgKSxcbiAgICApLFxuICAgIG1hcChsaXN0ID0+IGxpc3QuaXRlbXMpLFxuICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoW10gYXMgQ2x1c3RlcltdKSksXG4gICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQkKSxcbiAgICBwdWJsaXNoUmVmKCksXG4gICk7XG5cbiAgbG9hZENsdXN0ZXJJbmZvJCQgPSBuZXcgU3ViamVjdDxDbHVzdGVyW10+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIGNvbnRleHRTZXJ2aWNlOiBSZXNvdXJjZVNlbGVjdENvbnRleHRTZXJ2aWNlLFxuICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgazhzVXRpbDogSzhzVXRpbFNlcnZpY2UsXG4gICkge1xuICAgIHN1cGVyKGNkciwgazhzVXRpbCwgY29udGV4dFNlcnZpY2UpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jbHVzdGVycyA9IHRoaXMuY29udGV4dFNlcnZpY2UuY2FjaGVkQ2x1c3RlcnM7XG4gICAgdGhpcy5zZXRTZWxlY3RlZCgpO1xuICAgIHRoaXMuY2x1c3RlcnMkLnN1YnNjcmliZShjbHVzdGVycyA9PiB7XG4gICAgICB0aGlzLmNsdXN0ZXJzID0gdGhpcy5tYXBSZXNvdXJjZShjbHVzdGVycyk7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkKCk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9yY2VMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmxvYWRDbHVzdGVySW5mbyQkLm5leHQoY2x1c3RlcnMpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFNlbGVjdGVkKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRDbHVzdGVyID0gdGhpcy5jbHVzdGVycy5maW5kKGMgPT4gYy5uYW1lID09PSB0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgbWFwUmVzb3VyY2UobGlzdDogQ2x1c3RlcltdKTogQ2x1c3RlckRhdGFJdGVtW10ge1xuICAgIHJldHVybiBsaXN0Lm1hcChpdGVtID0+ICh7XG4gICAgICBuYW1lOiB0aGlzLms4c1V0aWwuZ2V0TmFtZShpdGVtKSxcbiAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLms4c1V0aWwuZ2V0RGlzcGxheU5hbWUoaXRlbSksXG4gICAgICBzdGF0dXM6IHRoaXMuZ2V0Q2x1c3RlclN0YXR1cyhpdGVtKSxcbiAgICAgIHRpbWVzdGFtcDogaXRlbS5tZXRhZGF0YS5jcmVhdGlvblRpbWVzdGFtcCxcbiAgICAgIF9fb3JpZ2luOiBpdGVtLFxuICAgIH0pKTtcbiAgfVxuXG4gIGdldENsdXN0ZXJTdGF0dXMoY2x1c3Rlcj86IENsdXN0ZXIpIHtcbiAgICBpZiAoY2x1c3Rlcj8uc3RhdHVzKSB7XG4gICAgICBjb25zdCBjbHVzdGVyU3RhdHVzID0gY2x1c3Rlci5zdGF0dXMuY29uZGl0aW9ucy5maW5kKFxuICAgICAgICBjb25kaXRpb24gPT4gY29uZGl0aW9uLnR5cGUgPT09ICdDb21wb25lbnROb3RIZWFsdGh5JyxcbiAgICAgICk7XG4gICAgICBpZiAoY2x1c3RlclN0YXR1cykge1xuICAgICAgICByZXR1cm4gY2x1c3RlclN0YXR1cy5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXG4gICAgICAgICAgPyAnYWJub3JtYWwnXG4gICAgICAgICAgOiAnbm9ybWFsJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICdhYm5vcm1hbCc7XG4gIH1cbn1cbiIsIjxhY2wtcmVzb3VyY2UtZGF0YS1ncmlkXG4gIFtkYXRhXT1cImNsdXN0ZXJzXCJcbiAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgW3BvcHVwTGl0ZV09XCJwb3B1cExpdGVcIlxuICAoc2VsZWN0SXRlbSk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgW3NlbGVjdGVkVWlkXT1cInNlbGVjdGVkQ2x1c3Rlcj8uX19vcmlnaW4ubWV0YWRhdGEudWlkXCJcbiAgW3R5cGVdPVwidHlwZVwiXG4gIFtsb2FkaW5nXT1cImZvcmNlTG9hZGluZyB8fCAoIWNsdXN0ZXJzPy5sZW5ndGggJiYgbG9hZGluZylcIlxuICAocmVsb2FkKT1cInJlbG9hZCgpXCJcbj48L2FjbC1yZXNvdXJjZS1kYXRhLWdyaWQ+XG4iXX0=